背景
承接 repo-evolver 提示词改进循环。此前的 SCAN 仅以消费向 CLAUDE-FABLE-5.md(claude.ai 聊天系统提示)为透镜,其编码纪律内容较薄,已挖掘项(skills、渐进式探索、外部知识、web_fetch)均已落地(#357 /#360 /#363 /#364 )。维护者指出更丰富的来源——Claude Code 的 agentic coding 系统提示 (Claude-Code-source/src/constants/prompts.ts)。本 issue 来自以该来源为新透镜的首轮深扫(iteration 21 SCAN)。
问题(已核实,非误报)
FrontAgent 的代码生成提示词层完全没有安全编码纪律 :
grep -cniE 'XSS|injection|vulnerab|owasp|sanitiz|安全|secure' \
packages/core/src/llm/code-generation.ts \
packages/core/src/llm/plan-generation.ts \
packages/core/src/llm/prompts.ts
# → 0 / 0 / 0
generateCodeForFile(code-generation.ts:59)与 generateModifiedCode(:149)两条 system prompt 的「代码质量」段只有泛化要求「遵循最佳实践 / 代码清晰可维护 / 使用 TypeScript 类型」(:102-106、:167-171),没有任何关于避免引入安全漏洞的纪律 。
注意区分:仓库已有的安全代码(security.ts 密钥扫描、fix/mcp-web-ssrf、fix/filesense-path-traversal、sanitizeToken)全部是 runtime 沙箱 ——保护 agent 自身执行环境的安全。它们与「agent 生成出来的前端代码本身是否安全」是正交 的两件事。后者目前零覆盖。
这对一个前端工程 agent 尤其要紧:AI 生成的前端代码最常见的漏洞类正是 dangerouslySetInnerHTML / innerHTML 注入未净化数据(XSS)、不安全的 URL/重定向/eval、把 API key/密钥硬编码进客户端打包产物、以及任何后端胶水层的注入。codegen 提示词对此毫无提示。
学习自 Claude-Code-source 的具体模式
Claude-Code-source/src/constants/prompts.ts:234(# Doing tasks 段):
Be careful not to introduce security vulnerabilities such as command injection, XSS, SQL injection, and other OWASP top 10 vulnerabilities. If you notice that you wrote insecure code, immediately fix it. Prioritize writing safe, secure, and correct code.
这是 Claude Code 写代码时的底层安全纪律,FrontAgent 的 codegen 层缺失。
提议(最小增量,prompt-only)
新增常量 SECURITY_DISCIPLINE(平行于 prompts.ts 已稳定的 PROGRESSIVE_EXPLORATION_PROTOCOL / EXTERNAL_KNOWLEDGE_PROTOCOL),注入 generateCodeForFile 与 generateModifiedCode 两条 system prompt。内容针对前端工程裁剪:
生成/修改代码时避免引入常见 web 漏洞:XSS(向 dangerouslySetInnerHTML/innerHTML 注入未净化数据)、不安全的 URL/重定向/eval/动态代码执行、把密钥/令牌写入客户端代码、以及任何注入类问题(命令/SQL 注入等)。
优先采用安全、正确的写法;若发现自己写出了不安全的代码,立即修正。
反向约束(防过度工程) :安全措施应与应用面相称——对纯静态/演示型 UI 不要堆砌无谓的安全样板,避免 churn。
为何用新常量而非复用现有两个:语义不同(安全纪律 vs 文件系统探索 / 外部知识核实),但结构与注入点完全一致 ——延续「verify/discipline 常量 + 在 system prompt 末尾注入」的既定模式,措辞收敛后由测试锁定。
范围
只改 packages/core/src/llm/prompts.ts(新增常量)+ packages/core/src/llm/code-generation.ts(两条 system prompt 追加注入)+ code-generation.test.ts(针对性断言)。
不改 :executor、schemas、工具路由、planner、温度/maxTokens、runtime 安全沙箱。
planner 侧注入与运行时安全 lint 明确列为后续候选 ,不在本 PR。
耦合度判定
高耦合(与 codegen 内部 system prompt 深度绑定)→ 直接在 FrontAgent 内集成,不另开仓库 (同 #360 /#363 判断)。
验收标准
prompts.ts 导出 SECURITY_DISCIPLINE 常量,含关键语义(XSS/注入/密钥/不安全 URL/eval → 避免;发现不安全代码 → 立即修;反向约束 = 与应用面相称)。
generateCodeForFile 的 system prompt 包含 SECURITY_DISCIPLINE 全文(import 复用,非复制粘贴)。
generateModifiedCode 的 system prompt 同样包含。
新增针对性测试断言两条 system prompt 均注入该常量且含关键安全语义 + 反向约束短语(沿用 feat(prompts): inject external knowledge into codegen #364 的 prompt-capture 测试模式)。
pnpm quality:precommit 全绿。
GitNexus Impact Summary
Risk level : LOW(prompt 文本增量,无签名/schema/call-edge 变更)
Critical skeleton changes : 无
GitNexus impact : 改动符号 generateCodeForFile/generateModifiedCode(code-generation.ts);upstream = llm-service.ts 两处薄封装 → executor create/modify codegen 路径;无跨包契约面变化。实现时补 detect_changes 实测结果。
Verification : typecheck + biome + 受控 diff + 针对性单测(prompt 注入断言)。
背景
承接 repo-evolver 提示词改进循环。此前的 SCAN 仅以消费向
CLAUDE-FABLE-5.md(claude.ai 聊天系统提示)为透镜,其编码纪律内容较薄,已挖掘项(skills、渐进式探索、外部知识、web_fetch)均已落地(#357/#360/#363/#364)。维护者指出更丰富的来源——Claude Code 的 agentic coding 系统提示(Claude-Code-source/src/constants/prompts.ts)。本 issue 来自以该来源为新透镜的首轮深扫(iteration 21 SCAN)。问题(已核实,非误报)
FrontAgent 的代码生成提示词层完全没有安全编码纪律:
generateCodeForFile(code-generation.ts:59)与generateModifiedCode(:149)两条 system prompt 的「代码质量」段只有泛化要求「遵循最佳实践 / 代码清晰可维护 / 使用 TypeScript 类型」(:102-106、:167-171),没有任何关于避免引入安全漏洞的纪律。这对一个前端工程 agent 尤其要紧:AI 生成的前端代码最常见的漏洞类正是
dangerouslySetInnerHTML/innerHTML注入未净化数据(XSS)、不安全的 URL/重定向/eval、把 API key/密钥硬编码进客户端打包产物、以及任何后端胶水层的注入。codegen 提示词对此毫无提示。学习自 Claude-Code-source 的具体模式
Claude-Code-source/src/constants/prompts.ts:234(# Doing tasks段):这是 Claude Code 写代码时的底层安全纪律,FrontAgent 的 codegen 层缺失。
提议(最小增量,prompt-only)
新增常量
SECURITY_DISCIPLINE(平行于prompts.ts已稳定的PROGRESSIVE_EXPLORATION_PROTOCOL/EXTERNAL_KNOWLEDGE_PROTOCOL),注入generateCodeForFile与generateModifiedCode两条 system prompt。内容针对前端工程裁剪:dangerouslySetInnerHTML/innerHTML注入未净化数据)、不安全的 URL/重定向/eval/动态代码执行、把密钥/令牌写入客户端代码、以及任何注入类问题(命令/SQL 注入等)。为何用新常量而非复用现有两个:语义不同(安全纪律 vs 文件系统探索 / 外部知识核实),但结构与注入点完全一致——延续「verify/discipline 常量 + 在 system prompt 末尾注入」的既定模式,措辞收敛后由测试锁定。
范围
只改
packages/core/src/llm/prompts.ts(新增常量)+packages/core/src/llm/code-generation.ts(两条 system prompt 追加注入)+code-generation.test.ts(针对性断言)。不改:executor、schemas、工具路由、planner、温度/maxTokens、runtime 安全沙箱。
planner 侧注入与运行时安全 lint 明确列为后续候选,不在本 PR。
耦合度判定
高耦合(与 codegen 内部 system prompt 深度绑定)→ 直接在 FrontAgent 内集成,不另开仓库(同 #360/#363 判断)。
验收标准
prompts.ts导出SECURITY_DISCIPLINE常量,含关键语义(XSS/注入/密钥/不安全 URL/eval → 避免;发现不安全代码 → 立即修;反向约束 = 与应用面相称)。generateCodeForFile的 system prompt 包含SECURITY_DISCIPLINE全文(import 复用,非复制粘贴)。generateModifiedCode的 system prompt 同样包含。pnpm quality:precommit全绿。GitNexus Impact Summary
generateCodeForFile/generateModifiedCode(code-generation.ts);upstream =llm-service.ts两处薄封装 → executor create/modify codegen 路径;无跨包契约面变化。实现时补detect_changes实测结果。