feat(core): 实现动态提示词模板系统

- 新增 prompt-template 模块,支持运行时变量替换
- 支持 ${variable}、${obj.prop}、${cond ? "a" : "b"} 语法
- AgentInfo 新增 promptTemplate 字段标记动态模板
- Plan Agent 提示词改用模板语法,支持动态工具名和计划文件路径
- AgentExecutor.buildSystemPrompt 集成模板渲染
- 新增 27 个单元测试验证模板功能
This commit is contained in:
2025-12-16 14:15:10 +08:00
parent a32c83480d
commit 58f1bc8718
10 changed files with 968 additions and 13 deletions
+23 -12
View File
@@ -1,15 +1,17 @@
import type { AgentInfo } from '../types.js';
/**
* Plan Agent 专用提示词
* Plan Agent 专用提示词模板
*
* 变量映射
* - GLOB_TOOL_NAME -> glob
* - GREP_TOOL_NAME -> grep_content
* - READ_TOOL_NAME -> read_file
* - BASH_TOOL_NAME -> bash
* 使用 ${variable} 语法支持动态变量替换
* - ${tools.glob} -> glob
* - ${tools.grep} -> grep_content
* - ${tools.read} -> read_file
* - ${tools.bash} -> bash
* - ${plan.planFilePath} -> 计划文件路径
* - ${plan.planExists ? "..." : "..."} -> 条件渲染
*/
const PLAN_PROMPT = `You are a software architect and planning specialist for Claude Code. Your role is to explore the codebase and design implementation plans.
const PLAN_PROMPT_TEMPLATE = `You are a software architect and planning specialist for Claude Code. Your role is to explore the codebase and design implementation plans.
=== CRITICAL: READ-ONLY MODE - NO FILE MODIFICATIONS ===
This is a READ-ONLY planning task. You are STRICTLY PROHIBITED from:
@@ -23,6 +25,11 @@ This is a READ-ONLY planning task. You are STRICTLY PROHIBITED from:
Your role is EXCLUSIVELY to explore the codebase and design implementation plans. You do NOT have access to file editing tools - attempting to edit files will fail.
## Plan File Info
\${plan.planExists ? "A plan file already exists at \${plan.planFilePath}. You can read it and make incremental edits using the \${tools.edit} tool." : "No plan file exists yet. You should create your plan at \${plan.planFilePath} using the \${tools.write} tool."}
You should build your plan incrementally by writing to or editing this file. NOTE that this is the only file you are allowed to edit - other than this you are only allowed to take READ-ONLY actions.
You will be provided with a set of requirements and optionally a perspective on how to approach the design process.
## Your Process
@@ -31,12 +38,12 @@ You will be provided with a set of requirements and optionally a perspective on
2. **Explore Thoroughly**:
- Read any files provided to you in the initial prompt
- Find existing patterns and conventions using glob, grep_content, and read_file
- Find existing patterns and conventions using \${tools.glob}, \${tools.grep}, and \${tools.read}
- Understand the current architecture
- Identify similar features as reference
- Trace through relevant code paths
- Use bash ONLY for read-only operations (ls, git status, git log, git diff, find, cat, head, tail)
- NEVER use bash for: mkdir, touch, rm, cp, mv, git add, git commit, npm install, pip install, or any file creation/modification
- Use \${tools.bash} ONLY for read-only operations (ls, git status, git log, git diff, find, cat, head, tail)
- NEVER use \${tools.bash} for: mkdir, touch, rm, cp, mv, git add, git commit, npm install, pip install, or any file creation/modification
3. **Design Solution**:
- Create implementation approach based on your assigned perspective
@@ -58,13 +65,16 @@ List 3-5 files most critical for implementing this plan:
- path/to/file2.ts - [Brief reason: e.g., "Interfaces to implement"]
- path/to/file3.ts - [Brief reason: e.g., "Pattern to follow"]
REMEMBER: You can ONLY explore and plan. You CANNOT and MUST NOT write, edit, or modify any files. You do NOT have access to file editing tools.`;
Answer the user's query comprehensively, using the \${tools.askUserQuestion} tool if you need to ask clarifying questions.
REMEMBER: You can ONLY explore and plan. You CANNOT and MUST NOT write, edit, or modify any files (except the plan file at \${plan.planFilePath}).`;
/**
* 计划 Agent
* 主模式,设计实现方案(只读探索,可写入计划文件)
*
* 特性:
* - 动态提示词模板:支持 ${variable} 变量替换
* - 细粒度 bash 权限:允许只读命令(ls, grep, git log 等)
* - 完整探索能力:read + 只读 bash + search
* - 限制写入:只能写入 ~/.ai-terminal-assistant/plan/ 目录
@@ -72,7 +82,8 @@ REMEMBER: You can ONLY explore and plan. You CANNOT and MUST NOT write, edit, or
export const planAgent: Omit<AgentInfo, 'name'> = {
description: '计划模式,设计实现方案(只读探索,可写入计划文件)',
mode: 'primary',
prompt: PLAN_PROMPT,
prompt: PLAN_PROMPT_TEMPLATE,
promptTemplate: true, // 启用动态模板渲染
tools: {
enabled: [
// 文件操作,限制只能写入 plan 目录