@jdzhang225gmail/fontend-prompt 0.1.0 → 0.1.1

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/README.md CHANGED
@@ -1,223 +1,104 @@
1
- # 前端提示词流程 MCP Server
1
+ # 前端提示词 Skills & MCP Server
2
2
 
3
- 这是一个 Model Context Protocol(MCP)服务,用于**标准化前端开发的提示词与工作流**。
3
+ 这是一个**前端开发辅助工具库**,它既可以作为 **Skills (CLI 工具)** 使用(零 Token 消耗,适合 Agent 直接调用),也可以作为标准的 **MCP Server** 使用。
4
4
 
5
- 它可以把质量参差不齐的用户问题,转换为更适合 AI 安全执行的**结构化、带审批关口(gate)的方案**:
5
+ 它致力于把模糊的需求转化为**专业、结构化、带审批流的前端开发方案**。
6
6
 
7
- - **先理解项目**(扫描目录树)
8
- - **按任务类型套模板**(新功能 / 优化 / 重构 / 等)
9
- - **审批关口**(宿主在每个 gate 处拦截并让用户确认)
10
- - **TypeScript 校验 + 验收流程**
11
- - **条件触发的文档更新**(仅当存在 `claude.md/CLAUDE.md` 时)
7
+ ## 🌟 核心理念:Skills vs MCP
12
8
 
13
- 本服务使用 **stdio**(最主流、最容易配置的 MCP 部署方式),应由 MCP 宿主(例如 Claude Desktop)启动。
9
+ - **Skills (CLI 模式)**: 🚀 **推荐!** Agent 通过命令行直接运行工具。 **优点**:无需在 Prompt 中挂载巨量的工具定义,极大节省 Token;运行速度快;无常驻进程。
10
+ - **MCP Server 模式**: 经典模式,适合 Claude Desktop 等标准 MCP 客户端。
14
11
 
15
12
  ---
16
13
 
17
- ## 环境要求
14
+ ## 🚀 快速开始 (CLI / Skills)
18
15
 
19
- - 建议 Node.js 18+
16
+ 无需安装,直接使用 `npx` 运行:
20
17
 
21
- ---
22
-
23
- ## 安装与构建
18
+ ### 1. 扫描项目 (Scan)
19
+ 快速了解项目架构、技术栈与关键文件。
24
20
 
25
21
  ```bash
26
- npm install
27
- npm run build
22
+ npx @jdzhang225gmail/fontend-prompt scan
23
+ # 或指定目录
24
+ npx @jdzhang225gmail/fontend-prompt scan --depth 2
28
25
  ```
29
26
 
30
- 运行(仅用于调试):
27
+ ### 2. 优化需求 (Optimize)
28
+ 将你的“一句话需求”转化为详细的开发方案(包含文件变更、审批关口等)。
31
29
 
32
30
  ```bash
33
- npm start
31
+ npx @jdzhang225gmail/fontend-prompt optimize "给后台增加一个用户管理页面"
34
32
  ```
35
33
 
36
- > 注意:直接运行该服务不会出现交互界面。MCP Server 通常会等待宿主通过 stdio 发送 JSON-RPC 消息。
37
-
38
- ---
34
+ ### 3. 评分 (Score)
35
+ 看看你的 Prompt 写得好不好,缺什么信息。
39
36
 
40
- ## 在 MCP 宿主中配置(stdio)
37
+ ```bash
38
+ npx @jdzhang225gmail/fontend-prompt score "帮我写个页面"
39
+ ```
41
40
 
42
- ### 推荐(最方便):使用 npx 启动(无需下载源码)
41
+ ---
43
42
 
44
- - **command**:`npx`(Windows 某些宿主需要写 `npx.cmd`)
45
- - **args**:`["-y", "<你的npm包名>@<版本>"]`
43
+ ## 🤖 Agent 中使用 (Antigravity / Claude Code)
46
44
 
47
- ```json
48
- {
49
- "mcpServers": {
50
- "frontend-prompt-workflow": {
51
- "command": "npx",
52
- "args": ["-y", "frontend-prompt-workflow-mcp@0.1.0"]
53
- }
54
- }
55
- }
56
- ```
45
+ ### 方式一:作为 CLI 工具(最省 Token)
57
46
 
58
- ### 推荐(稳定):运行构建后的产物
47
+ 告诉你的 Agent(或者写在 `.cursorrules` / `.agent/workflows` 中):
59
48
 
60
- 使用 **Node** 运行 `dist/index.js`。
49
+ > "当需要理解项目结构时,请运行命令 `npx @jdzhang225gmail/fontend-prompt scan`。"
50
+ > "当需要规划新功能时,请运行命令 `npx @jdzhang225gmail/fontend-prompt optimize '<需求>'`,并根据输出结果执行。"
61
51
 
62
- - **command**:`node`
63
- - **args**:`["d:/web/mcp/dist/index.js"]`
52
+ ### 方式二:作为库集成
64
53
 
65
- ### Claude Desktop 示例(Windows)
54
+ 如果你在编写 TS 脚本或 Agent 插件:
66
55
 
67
- 在 Claude Desktop 的 MCP 配置中添加类似内容:
56
+ ```typescript
57
+ import { scanProject, optimizeFrontendPrompt } from "@jdzhang225gmail/fontend-prompt";
68
58
 
69
- ```json
70
- {
71
- "mcpServers": {
72
- "frontend-prompt-workflow": {
73
- "command": "node",
74
- "args": ["d:/web/mcp/dist/index.js"]
75
- }
76
- }
77
- }
59
+ const tree = await scanProject({ rootDir: "." });
60
+ const plan = optimizeFrontendPrompt({ userPrompt: "..." });
78
61
  ```
79
62
 
80
- > Claude Desktop 配置文件的具体位置/名称可能随版本变化。关键是:**宿主通过 `node dist/index.js` 启动这个服务**。
81
-
82
63
  ---
83
64
 
84
- ## 工具
85
-
86
- ### 1) `scan_project`
65
+ ## 📦 安装与构建
87
66
 
88
- 扫描项目目录(只读),输出目录树,并检测是否存在 `claude.md/CLAUDE.md`。
67
+ 如果你想本地部署或二次开发:
89
68
 
90
- **入参**
69
+ ```bash
70
+ npm install
71
+ npm run build
91
72
 
92
- ```json
93
- {
94
- "rootDir": ".",
95
- "maxDepth": 4,
96
- "maxEntries": 1200
97
- }
73
+ # 本地运行 CLI
74
+ npm run skill -- --help
98
75
  ```
99
76
 
100
- **出参(JSON 文本)**
101
-
102
- - `tree`:目录树
103
- - `hasClaudeMd`:是否存在 `claude.md/CLAUDE.md`
104
- - `claudeMdPaths`:命中的路径
105
- - `suggestedFiles`:检测到的关键配置文件
106
-
107
- ### 2) `optimize_frontend_prompt`
108
-
109
- 将原始用户问题转换为一个**提示词包**,包含:
110
-
111
- - `messages`:可直接喂给 AI 的 `system` + `user` 消息
112
- - `workflow`:机器可解析的步骤与 gate
113
- - `guardrails`:约束与限制条件
114
- - `clarifyingQuestions`:继续执行前需要追问的澄清问题
115
-
116
- **关键入参**
77
+ ---
117
78
 
118
- - `userPrompt`(必填)
119
- - `taskType`:
120
- - `new_feature`
121
- - `optimize_existing`
122
- - `refactor`
123
- - `bugfix`
124
- - `performance`
125
- - `ui_polish`
126
- - `dependency_upgrade`
127
- - `test_addition`
128
- - `requireApprovalGates`(默认 `true`):强制在 gate 处停下等待用户确认
129
- - 可选的技术栈提示:`framework`、`language`、`styling`、`router` 等
79
+ ## 🛠️ MCP Server 配置
130
80
 
131
- **示例入参**
81
+ 如果你仍希望在 Claude Desktop 中作为常驻服务使用:
132
82
 
133
83
  ```json
134
84
  {
135
- "userPrompt": "给后台新增一个用户列表页面,支持搜索、分页、编辑弹窗",
136
- "taskType": "new_feature",
137
- "language": "ts",
138
- "framework": "React",
139
- "styling": "TailwindCSS",
140
- "requireApprovalGates": true
85
+ "mcpServers": {
86
+ "frontend-helper": {
87
+ "command": "npx",
88
+ "args": ["-y", "@jdzhang225gmail/fontend-prompt"]
89
+ }
90
+ }
141
91
  }
142
92
  ```
143
93
 
144
- **重要出参字段(重要字段)**
145
-
146
- - `workflow.gates[]`:审批关口列表
147
- - `messages[]`:标准化后的提示词
148
-
149
- ### 3) `score_frontend_prompt`
150
-
151
- 对提示词质量评分,并识别缺失信息。
152
-
153
- **入参**
154
-
155
- ```json
156
- { "prompt": "..." }
157
- ```
158
-
159
- **出参**
160
-
161
- - `score`(0-100)
162
- - `missing[]`
163
- - `suggestions[]`
164
-
165
- ---
166
-
167
- ## 宿主编排(最佳实践)
168
-
169
- 为了让 gate 更可靠、做到“像主流 MCP 一样好用”,建议采用:**由宿主拦截**。
170
-
171
- ### Gate 标记(拦截信号)
172
-
173
- 强制模板中包含机器可解析标记:
174
-
175
- - Gate 开始:
176
-
177
- ```text
178
- <<<MCP:GATE id="new_feature_design" action="WAIT_FOR_USER_APPROVAL">>>
179
- ```
180
-
181
- - Gate 停止(推荐把它作为宿主拦截触发信号):
182
-
183
- ```text
184
- <<<MCP:WAIT gate_id="new_feature_design" action="WAIT_FOR_USER_APPROVAL">>>
185
- ```
186
-
187
- ### 推荐的宿主行为
188
-
189
- 1. 调用 `scan_project`(获取目录树 + `hasClaudeMd`)
190
- 2. 调用 `optimize_frontend_prompt`
191
- 3. 将返回的 `messages` 喂给你的 AI
192
- 4. 当 AI 输出包含 `<<<MCP:WAIT ...>>>`:
193
- - 宿主停止继续
194
- - 询问用户:**同意 / 调整 / 取消**
195
- 5. 用户同意后 -> 宿主开启下一轮 AI,对应 gate 之后的步骤继续执行
196
-
197
94
  ---
198
95
 
199
- ## 说明 / 常见问题(FAQ)
200
-
201
- ### 1) `scan_project` 的 rootDir
202
-
203
- 出于安全考虑,`scan_project.rootDir` 必须位于**服务进程的工作目录(cwd)**之内。
204
-
205
- 因此,通常建议宿主用**目标前端项目根目录作为工作目录(cwd)**来启动这个 MCP 服务。
96
+ ## 功能特性
206
97
 
207
- ### 2) 为什么使用 stdio?
208
-
209
- stdio MCP 宿主里支持最广、也最容易配置的传输方式。
210
-
211
- ---
212
-
213
- ## 开发
214
-
215
- ```bash
216
- npm run dev
217
- ```
218
-
219
- ---
98
+ - **中文优先**: 所有输出、文档、注释默认均为中文。
99
+ - **Gate 机制**: 在关键节点(设计/计划/验收)生成审批关口,防止 AI 一条路走到黑。
100
+ - **安全扫描**: 自动识别项目目录,但严格限制在 CWD 下访问。
220
101
 
221
102
  ## 许可
222
103
 
223
- 默认:私有 / 内部使用。
104
+ MIT
package/dist/cli.js CHANGED
@@ -1,2 +1,77 @@
1
1
  #!/usr/bin/env node
2
- import "./index.js";
2
+ import { cac } from "cac";
3
+ import { scanProject } from "./skills/scan.js";
4
+ import { buildOptimizedPromptPackage } from "./skills/optimize.js";
5
+ import { scoreFrontendPrompt } from "./skills/score.js";
6
+ import * as fs from "fs/promises";
7
+ // 读取 package.json 获取版本号
8
+ // const pkg = JSON.parse(await fs.readFile(new URL("../package.json", import.meta.url), "utf-8"));
9
+ // 为了避免 ESM 路径问题,暂时硬编码,或者用 simple import
10
+ const version = "0.1.0";
11
+ const cli = cac("fontend-skill");
12
+ cli
13
+ .command("scan [root]", "扫描项目目录结构与关键文件")
14
+ .option("--depth <number>", "最大目录深度", { default: 4 })
15
+ .option("--entries <number>", "最大文件条目数", { default: 1200 })
16
+ .action(async (root, options) => {
17
+ try {
18
+ const result = await scanProject({
19
+ rootDir: root,
20
+ maxDepth: options.depth,
21
+ maxEntries: options.entries,
22
+ });
23
+ console.log(JSON.stringify(result, null, 2));
24
+ }
25
+ catch (e) {
26
+ console.error("扫描失败:", e.message);
27
+ process.exit(1);
28
+ }
29
+ });
30
+ cli
31
+ .command("optimize <prompt>", "将原始需求转化为结构化 Prompt")
32
+ .option("--context <string>", "项目上下文")
33
+ .option("--stack <string>", "技术栈")
34
+ .option("--framework <string>", "框架")
35
+ .option("--lang <string>", "语言 (ts/js)", { default: "ts" })
36
+ .option("--type <string>", "任务类型 (new_feature 等)")
37
+ .option("--save <path>", "将结果保存到文件")
38
+ .action(async (prompt, options) => {
39
+ try {
40
+ const args = {
41
+ userPrompt: prompt,
42
+ projectContext: options.context,
43
+ techStack: options.stack,
44
+ framework: options.framework,
45
+ language: options.lang,
46
+ taskType: options.type,
47
+ outputLanguage: "zh", // 强制默认中文
48
+ };
49
+ const result = buildOptimizedPromptPackage(args);
50
+ if (options.save) {
51
+ await fs.writeFile(options.save, JSON.stringify(result, null, 2), "utf-8");
52
+ console.log(`结果已保存至: ${options.save}`);
53
+ }
54
+ else {
55
+ console.log(JSON.stringify(result, null, 2));
56
+ }
57
+ }
58
+ catch (e) {
59
+ console.error("优化失败:", e.message);
60
+ process.exit(1);
61
+ }
62
+ });
63
+ cli
64
+ .command("score <prompt>", "对 Prompt 质量进行评分")
65
+ .action((prompt) => {
66
+ try {
67
+ const result = scoreFrontendPrompt({ prompt });
68
+ console.log(JSON.stringify(result, null, 2));
69
+ }
70
+ catch (e) {
71
+ console.error("评分失败:", e.message);
72
+ process.exit(1);
73
+ }
74
+ });
75
+ cli.help();
76
+ cli.version(version);
77
+ cli.parse();