pdd-skills 3.0.1 → 3.0.3
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 +186 -25
- package/bin/pdd.js +3 -1
- package/lib/vm/dashboard/api-routes.js +66 -9
- package/lib/vm/dashboard/server.js +1 -1
- package/lib/vm/dashboard/static/index.html +6 -6
- package/lib/vm/dashboard/static/js/app.js +7 -2
- package/lib/vm/dashboard/static/js/charts.js +1 -1
- package/lib/vm/data-provider.js +3 -2
- package/lib/vm/event-bus.js +1 -1
- package/package.json +2 -1
- package/scaffolds/README.md +26 -0
- package/scaffolds/python-fullstack/.github/workflows/ci.yml +43 -0
- package/scaffolds/python-fullstack/Dockerfile +12 -0
- package/scaffolds/python-fullstack/README.md +95 -0
- package/scaffolds/python-fullstack/backend/app/__init__.py +4 -0
- package/scaffolds/python-fullstack/backend/app/api/v1/__init__.py +6 -0
- package/scaffolds/python-fullstack/backend/app/api/v1/auth.py +179 -0
- package/scaffolds/python-fullstack/backend/app/api/v1/deps.py +14 -0
- package/scaffolds/python-fullstack/backend/app/api/v1/router.py +11 -0
- package/scaffolds/python-fullstack/backend/app/api/v1/users.py +143 -0
- package/scaffolds/python-fullstack/backend/app/config.py +69 -0
- package/scaffolds/python-fullstack/backend/app/core/auth/__init__.py +13 -0
- package/scaffolds/python-fullstack/backend/app/core/auth/dependencies.py +91 -0
- package/scaffolds/python-fullstack/backend/app/core/auth/jwt.py +84 -0
- package/scaffolds/python-fullstack/backend/app/core/auth/security.py +17 -0
- package/scaffolds/python-fullstack/backend/app/core/data_permission/__init__.py +27 -0
- package/scaffolds/python-fullstack/backend/app/core/data_permission/config.py +21 -0
- package/scaffolds/python-fullstack/backend/app/core/data_permission/context.py +67 -0
- package/scaffolds/python-fullstack/backend/app/core/data_permission/decorator.py +60 -0
- package/scaffolds/python-fullstack/backend/app/core/data_permission/engine.py +121 -0
- package/scaffolds/python-fullstack/backend/app/core/data_permission/enums.py +30 -0
- package/scaffolds/python-fullstack/backend/app/core/data_permission/events.py +71 -0
- package/scaffolds/python-fullstack/backend/app/core/data_permission/scope_resolver.py +139 -0
- package/scaffolds/python-fullstack/backend/app/core/oauth/__init__.py +31 -0
- package/scaffolds/python-fullstack/backend/app/core/oauth/base.py +118 -0
- package/scaffolds/python-fullstack/backend/app/core/oauth/exceptions.py +33 -0
- package/scaffolds/python-fullstack/backend/app/core/oauth/providers/__init__.py +18 -0
- package/scaffolds/python-fullstack/backend/app/core/oauth/providers/dingtalk.py +68 -0
- package/scaffolds/python-fullstack/backend/app/core/oauth/providers/feishu.py +71 -0
- package/scaffolds/python-fullstack/backend/app/core/oauth/providers/oidc.py +164 -0
- package/scaffolds/python-fullstack/backend/app/core/oauth/providers/wechat_mini.py +55 -0
- package/scaffolds/python-fullstack/backend/app/core/oauth/providers/wechat_open.py +86 -0
- package/scaffolds/python-fullstack/backend/app/core/oauth/providers/wecom.py +105 -0
- package/scaffolds/python-fullstack/backend/app/core/oauth/registry.py +43 -0
- package/scaffolds/python-fullstack/backend/app/core/oauth/services/user_binding_service.py +111 -0
- package/scaffolds/python-fullstack/backend/app/core/workflow/__init__.py +40 -0
- package/scaffolds/python-fullstack/backend/app/core/workflow/conditions.py +38 -0
- package/scaffolds/python-fullstack/backend/app/core/workflow/engine.py +448 -0
- package/scaffolds/python-fullstack/backend/app/core/workflow/enums.py +62 -0
- package/scaffolds/python-fullstack/backend/app/core/workflow/exceptions.py +54 -0
- package/scaffolds/python-fullstack/backend/app/core/workflow/models.py +134 -0
- package/scaffolds/python-fullstack/backend/app/core/workflow/transition_rule.py +27 -0
- package/scaffolds/python-fullstack/backend/app/database/database.py +53 -0
- package/scaffolds/python-fullstack/backend/app/exceptions.py +76 -0
- package/scaffolds/python-fullstack/backend/app/main.py +77 -0
- package/scaffolds/python-fullstack/backend/app/models/__init__.py +6 -0
- package/scaffolds/python-fullstack/backend/app/models/delegation.py +87 -0
- package/scaffolds/python-fullstack/backend/app/models/oauth_binding.py +35 -0
- package/scaffolds/python-fullstack/backend/app/models/org.py +41 -0
- package/scaffolds/python-fullstack/backend/app/models/role.py +65 -0
- package/scaffolds/python-fullstack/backend/app/models/user.py +48 -0
- package/scaffolds/python-fullstack/backend/app/schemas/__init__.py +11 -0
- package/scaffolds/python-fullstack/backend/app/schemas/auth.py +54 -0
- package/scaffolds/python-fullstack/backend/app/schemas/common.py +44 -0
- package/scaffolds/python-fullstack/backend/app/schemas/user.py +78 -0
- package/scaffolds/python-fullstack/backend/pyproject.toml +17 -0
- package/scaffolds/python-fullstack/backend/requirements-dev.txt +5 -0
- package/scaffolds/python-fullstack/backend/requirements.txt +11 -0
- package/scaffolds/python-fullstack/docker-compose.yml +52 -0
- package/scaffolds/python-fullstack/docs/01-architecture.md +1280 -0
- package/scaffolds/python-fullstack/docs/02-data-permission.md +1538 -0
- package/scaffolds/python-fullstack/docs/03-workflow-engine.md +1079 -0
- package/scaffolds/python-fullstack/docs/04-mobile-oauth.md +1182 -0
- package/scaffolds/python-fullstack/frontend/Dockerfile +12 -0
- package/scaffolds/python-fullstack/frontend/index.html +14 -0
- package/scaffolds/python-fullstack/frontend/nginx.conf +19 -0
- package/scaffolds/python-fullstack/frontend/package.json +1 -0
- package/scaffolds/python-fullstack/frontend/postcss.config.js +15 -0
- package/scaffolds/python-fullstack/frontend/src/App.vue +14 -0
- package/scaffolds/python-fullstack/frontend/src/api/client.ts +27 -0
- package/scaffolds/python-fullstack/frontend/src/composables/useResponsive.ts +53 -0
- package/scaffolds/python-fullstack/frontend/src/main.ts +10 -0
- package/scaffolds/python-fullstack/frontend/src/router/index.ts +36 -0
- package/scaffolds/python-fullstack/frontend/src/stores/user.ts +42 -0
- package/scaffolds/python-fullstack/frontend/src/styles/responsive.css +59 -0
- package/scaffolds/python-fullstack/frontend/src/styles/variables.css +31 -0
- package/scaffolds/python-fullstack/frontend/src/views/DashboardView.vue +66 -0
- package/scaffolds/python-fullstack/frontend/src/views/HomeView.vue +19 -0
- package/scaffolds/python-fullstack/frontend/src/views/LoginView.vue +71 -0
- package/scaffolds/python-fullstack/frontend/tailwind.config.js +17 -0
- package/scaffolds/python-fullstack/frontend/tsconfig.json +1 -0
- package/scaffolds/python-fullstack/frontend/tsconfig.node.json +1 -0
- package/scaffolds/python-fullstack/frontend/vite.config.ts +25 -0
- package/scaffolds/python-fullstack/template_config.yaml +138 -0
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# PDD-Skills v3.0
|
|
2
2
|
|
|
3
|
-
[
|
|
4
|
-
[
|
|
5
|
-
[
|
|
6
|
-
[
|
|
7
|
-
[
|
|
3
|
+
[](https://github.com/pdd-skills/pdd-skills)
|
|
4
|
+
[](https://nodejs.org/)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](docs/tasks.md)
|
|
7
|
+
[](docs/tasks.md)
|
|
8
8
|
|
|
9
9
|
> **PRD 驱动的 AI 原生软件开发工作流框架**
|
|
10
10
|
>
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
│ │ • npx安装 │ │ • 11核心 │ │ • 安全 │ │ • CLI │ │
|
|
89
89
|
│ │ • Linter │ │ 技能 │ │ • 性能 │ │ • API │ │
|
|
90
90
|
│ │ • Hook │ │ • i18n │ │ 专家 │ │ • MCP │ │
|
|
91
|
-
│ │ • Evals
|
|
91
|
+
│ │ • Evals │ │ • CSO │ │ │ │ • JS SDK │ │
|
|
92
92
|
│ │ │ │ • Token │ │ │ │ • Python│ │
|
|
93
93
|
│ └──────────┘ │ • Evals │ └──────────┘ │ • gRPC │ │
|
|
94
94
|
│ └──────────┘ └──────────┘ │
|
|
@@ -107,11 +107,129 @@
|
|
|
107
107
|
└─────────────────────────────────────────────────────────────────────────────────┘
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
+
### 🏗️ 脚手架系统
|
|
111
|
+
|
|
112
|
+
> **PDD-Skills v3.0.1+ 新增内置脚手架系统**,提供生产级全栈项目模板,支持从零到一的快速项目初始化。
|
|
113
|
+
|
|
114
|
+
#### 可用模板
|
|
115
|
+
|
|
116
|
+
| 模板名称 | 技术栈 | 适用场景 | 状态 |
|
|
117
|
+
| --------------- | --------------------------------------- | ------------- | ----- |
|
|
118
|
+
| **python-fullstack** | FastAPI + Vue3 + TypeScript + TailwindCSS | 企业级全栈 Web 应用 | ✅ 稳定版 |
|
|
119
|
+
|
|
120
|
+
#### 核心能力矩阵
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
124
|
+
│ python-fullstack 模板能力矩阵 │
|
|
125
|
+
├─────────────────────────────────────────────────────────────────────────────┤
|
|
126
|
+
│ │
|
|
127
|
+
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
|
128
|
+
│ │ data_permission │ │ oauth_sso │ │ workflow_engine │ │
|
|
129
|
+
│ │ 数据权限引擎 │ │ OAuth2 六平台认证 │ │ 工作流状态机引擎 │ │
|
|
130
|
+
│ │ │ │ │ │ │ │
|
|
131
|
+
│ │ • 组织级数据隔离 │ │ • 企业微信 │ │ • 15种状态定义 │ │
|
|
132
|
+
│ │ • 借调合并机制 │ │ • 钉钉 │ │ • 会签/或签 │ │
|
|
133
|
+
│ │ • 行级权限控制 │ │ • 飞书 │ │ • 条件分支路由 │ │
|
|
134
|
+
│ │ │ │ • 微信公众号 │ │ • 回退/撤回 │ │
|
|
135
|
+
│ │ │ │ • OIDC 通用 │ │ • 定时任务触发 │ │
|
|
136
|
+
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
|
|
137
|
+
│ │
|
|
138
|
+
│ ┌─────────────────────────────────────────────────────────┐ │
|
|
139
|
+
│ │ responsive_ui │ │
|
|
140
|
+
│ │ 响应式前端系统 │ │
|
|
141
|
+
│ │ │ │
|
|
142
|
+
│ │ PC端 (≥1280px) → 平板 (768-1279px) → 大屏手机 (≤767px) │ │
|
|
143
|
+
│ │ 6档断点自适应 · 组件级响应式 · 暗色模式支持 │ │
|
|
144
|
+
│ └─────────────────────────────────────────────────────────┘ │
|
|
145
|
+
│ │
|
|
146
|
+
└─────────────────────────────────────────────────────────────────────────────┘
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
#### 技术栈详情
|
|
150
|
+
|
|
151
|
+
| 层面 | 技术选型 | 版本要求 |
|
|
152
|
+
| ---------- | ---------------------------------------- | --------- |
|
|
153
|
+
| **后端框架** | Python FastAPI | 3.11+ |
|
|
154
|
+
| **ORM** | SQLAlchemy [asyncio] | 2.x+ |
|
|
155
|
+
| **数据库** | MySQL | 8.0+ |
|
|
156
|
+
| **前端框架** | Vue3 + Vite + TypeScript | 3.x+ |
|
|
157
|
+
| **UI 框架** | TailwindCSS | 3.x+ |
|
|
158
|
+
| **容器化** | Docker + docker-compose | 最新稳定版 |
|
|
159
|
+
| **CI/CD** | GitHub Actions / GitLab CI | - |
|
|
160
|
+
|
|
161
|
+
#### 快速使用
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# 1️⃣ 使用脚手架创建全栈项目
|
|
165
|
+
pdd scaffold init my-fullstack-app --template python-fullstack
|
|
166
|
+
|
|
167
|
+
# 2️⃣ 进入项目目录
|
|
168
|
+
cd my-fullstack-app
|
|
169
|
+
|
|
170
|
+
# 3️⃣ 查看模板配置
|
|
171
|
+
cat scaffolds/python-fullstack/template_config.yaml
|
|
172
|
+
|
|
173
|
+
# 4️⃣ 一键启动开发环境(含数据库)
|
|
174
|
+
docker-compose up -d
|
|
175
|
+
|
|
176
|
+
# 5️⃣ 启动后端服务
|
|
177
|
+
cd backend && uvicorn main:app --reload --port 8000
|
|
178
|
+
|
|
179
|
+
# 6️⃣ 启动前端服务
|
|
180
|
+
cd frontend && npm run dev
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
#### 模板目录结构预览
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
scaffolds/python-fullstack/
|
|
187
|
+
├── template_config.yaml # 模板元数据 & Hooks 配置
|
|
188
|
+
├── README.md # 模板使用指南
|
|
189
|
+
├── docs/
|
|
190
|
+
│ ├── architecture-design.md # 架构设计文档
|
|
191
|
+
│ ├── database-design.md # 数据库设计文档
|
|
192
|
+
│ ├── api-design.md # API 设计文档
|
|
193
|
+
│ └── deployment-guide.md # 部署指南
|
|
194
|
+
├── backend/
|
|
195
|
+
│ ├── app/
|
|
196
|
+
│ │ ├── core/ # 核心模块 (data_permission/oauth_sso/workflow_engine)
|
|
197
|
+
│ │ ├── api/ # API 路由层
|
|
198
|
+
│ │ ├── models/ # SQLAlchemy 数据模型
|
|
199
|
+
│ │ ├── schemas/ # Pydantic 请求/响应模型
|
|
200
|
+
│ │ └── services/ # 业务逻辑层
|
|
201
|
+
│ ├── alembic/ # 数据库迁移
|
|
202
|
+
│ ├── tests/ # 单元测试 & 集成测试
|
|
203
|
+
│ └── requirements.txt
|
|
204
|
+
├── frontend/
|
|
205
|
+
│ ├── src/
|
|
206
|
+
│ │ ├── views/ # 页面组件 (响应式布局)
|
|
207
|
+
│ │ ├── components/ # UI 组件库
|
|
208
|
+
│ │ ├── stores/ # Pinia 状态管理
|
|
209
|
+
│ │ ├── api/ # API 请求封装
|
|
210
|
+
│ │ └── utils/ # 工具函数
|
|
211
|
+
│ ├── tailwind.config.js # 6档断点配置
|
|
212
|
+
│ └── vite.config.ts
|
|
213
|
+
├── docker-compose.yml # 一键部署编排
|
|
214
|
+
├── .github/workflows/ # CI 流水线
|
|
215
|
+
└── config/ # 环境配置文件
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
#### 质量保证
|
|
219
|
+
|
|
220
|
+
✅ 已通过 **4 项代码质量修复验证**:
|
|
221
|
+
- 数据库连接池配置优化
|
|
222
|
+
- 安全异常处理完善
|
|
223
|
+
- datetime 弃用 API 替换
|
|
224
|
+
- SQLAlchemy 异步 API 正确性校验
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
110
228
|
### 📊 关键数据
|
|
111
229
|
|
|
112
230
|
| 指标 | 数值 |
|
|
113
231
|
| ----------- | --------------------------------------------- |
|
|
114
|
-
| **版本** | v3.0.
|
|
232
|
+
| **版本** | v3.0.2 |
|
|
115
233
|
| **总任务数** | 153 (**100% 完成**) |
|
|
116
234
|
| **里程碑数** | 29 (**100% 达成**) |
|
|
117
235
|
| **核心技能** | 11 个(全双语 🇨🇳🇺🇸) |
|
|
@@ -122,6 +240,7 @@
|
|
|
122
240
|
| **示例插件** | 3 个(hello-world / code-stats / custom-linter) |
|
|
123
241
|
| **社区文档** | 5 套(\~10,700 行) |
|
|
124
242
|
| **VM 新增代码** | \~6000 行(Phase 7) |
|
|
243
|
+
| **脚手架模板** | 1 个(python-fullstack 全栈模板) |
|
|
125
244
|
|
|
126
245
|
***
|
|
127
246
|
|
|
@@ -229,6 +348,19 @@ pdd vm features # 功能点列表
|
|
|
229
348
|
pdd vm export --format csv # 导出数据
|
|
230
349
|
```
|
|
231
350
|
|
|
351
|
+
### 🏗️ 脚手架命令(v3.0.1+)
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
# 初始化脚手架项目
|
|
355
|
+
pdd scaffold init <project-name> --template <template-name>
|
|
356
|
+
|
|
357
|
+
# 查看可用模板列表
|
|
358
|
+
pdd scaffold list
|
|
359
|
+
|
|
360
|
+
# 查看模板详情
|
|
361
|
+
pdd scaffold info <template-name>
|
|
362
|
+
```
|
|
363
|
+
|
|
232
364
|
### 服务端
|
|
233
365
|
|
|
234
366
|
```bash
|
|
@@ -480,11 +612,11 @@ PluginBase (抽象基类)
|
|
|
480
612
|
|
|
481
613
|
| 文档 | 内容 | 行数 |
|
|
482
614
|
| ---------------------------------------------------------- | ----------------- | ------ |
|
|
483
|
-
| [user-guide](docs/user-guide/user-guide.md) | 快速开始 / 工作流 / FAQ |
|
|
484
|
-
| [developer-guide](docs/developer-guide/developer-guide.md) | 架构 / 规范 / 贡献流程 |
|
|
485
|
-
| [api-reference](docs/api-reference/api-reference.md) | 全模块 API / 错误码大全 |
|
|
486
|
-
| [operations](docs/operations/operations-guide.md) | 部署 / 调优 / 监控 / 安全 |
|
|
487
|
-
| [plugin-market](docs/plugin-market/README.md) | 发布流程 / 评分标准 / 审核 |
|
|
615
|
+
| [user-guide](docs/user-guide/user-guide.md) | 快速开始 / 工作流 / FAQ | ~1480 |
|
|
616
|
+
| [developer-guide](docs/developer-guide/developer-guide.md) | 架构 / 规范 / 贡献流程 | ~2960 |
|
|
617
|
+
| [api-reference](docs/api-reference/api-reference.md) | 全模块 API / 错误码大全 | ~3948 |
|
|
618
|
+
| [operations](docs/operations/operations-guide.md) | 部署 / 调优 / 监控 / 安全 | ~2018 |
|
|
619
|
+
| [plugin-market](docs/plugin-market/README.md) | 发布流程 / 评分标准 / 审核 | ~400 |
|
|
488
620
|
|
|
489
621
|
***
|
|
490
622
|
|
|
@@ -540,18 +672,18 @@ PDD Visual Manager (PDD-VM) 是 Phase 7 的核心交付物,提供 **双形态
|
|
|
540
672
|
│ │ │ ├─────────────────┤ │ │ │ │ ├───────────────────────┤ │ │ │
|
|
541
673
|
│ │ │ │ app.js (SPA框架)│ │ │ │ │ │ input.js (键盘输入) │ │ │ │
|
|
542
674
|
│ │ │ └─────────────────┘ │ │ │ │ └───────────────────────┘ │ │ │
|
|
543
|
-
│ │ │ │ │ │ │
|
|
544
|
-
│ │ │ 4 视图面板: │ │ │ │
|
|
545
|
-
│ │ │ • Pipeline (流水线) │ │ │ │
|
|
546
|
-
│ │ │ • Kanban (看板) │ │ │ │ /
|
|
547
|
-
│ │ │ • Quality (质量) │ │ │ │
|
|
548
|
-
│ │ │ • System (系统) │ │ │ │
|
|
549
|
-
│ │ │ │ │ │ │
|
|
550
|
-
│ │ │ Canvas 图表引擎: │ │ │ │
|
|
551
|
-
│ │ │ radar/histogram/ │ │ │ │
|
|
552
|
-
│ │ │ gauge/lineChart/ │ │ │
|
|
553
|
-
│ │ │ horizontalBar │ │ │
|
|
554
|
-
│ │ └───────────────────────┘ │
|
|
675
|
+
│ │ │ │ │ │ │ │ │ │
|
|
676
|
+
│ │ │ 4 视图面板: │ │ │ │ 5 组件: │ │ │
|
|
677
|
+
│ │ │ • Pipeline (流水线) │ │ │ │ progress-bar / table / │ │ │
|
|
678
|
+
│ │ │ • Kanban (看板) │ │ │ │ sparkline / status-light │ │ │
|
|
679
|
+
│ │ │ • Quality (质量) │ │ │ │ / card │ │ │
|
|
680
|
+
│ │ │ • System (系统) │ │ │ │ │ │ │
|
|
681
|
+
│ │ │ │ │ │ │ 4 屏幕 + 详情overlay: │ │ │
|
|
682
|
+
│ │ │ Canvas 图表引擎: │ │ │ │ overview / kanban / │ │ │
|
|
683
|
+
│ │ │ radar/histogram/ │ │ │ │ quality / system │ │ │
|
|
684
|
+
│ │ │ gauge/lineChart/ │ │ │ │ │ │ │
|
|
685
|
+
│ │ │ horizontalBar │ │ │ └─────────────────────────────┘ │ │
|
|
686
|
+
│ │ └───────────────────────┘ │ │ │ │
|
|
555
687
|
│ └─────────────────────────────┘ │
|
|
556
688
|
│ │
|
|
557
689
|
└─────────────────────────────────────────────────────────────────────────────────┘
|
|
@@ -1347,6 +1479,32 @@ pdd-skills-v3/
|
|
|
1347
1479
|
│ ├── on-phase-change.js
|
|
1348
1480
|
│ └── on-quality-alert.js
|
|
1349
1481
|
│
|
|
1482
|
+
├── scaffolds/ # ★ 脚手架模板系统 (v3.0.1+ 新增)
|
|
1483
|
+
│ └── python-fullstack/ # Python 全栈模板 (FastAPI + Vue3)
|
|
1484
|
+
│ ├── template_config.yaml # 模板元数据 & Hooks & 变量配置
|
|
1485
|
+
│ ├── README.md # 模板使用指南
|
|
1486
|
+
│ ├── docs/ # 4份架构设计文档
|
|
1487
|
+
│ │ ├── architecture-design.md
|
|
1488
|
+
│ │ ├── database-design.md
|
|
1489
|
+
│ │ ├── api-design.md
|
|
1490
|
+
│ │ └── deployment-guide.md
|
|
1491
|
+
│ ├── backend/ # 后端代码 (FastAPI + SQLAlchemy)
|
|
1492
|
+
│ │ ├── app/core/ # 核心模块 (权限/OAuth/工作流)
|
|
1493
|
+
│ │ ├── app/api/ # API 路由层
|
|
1494
|
+
│ │ ├── app/models/ # 数据模型
|
|
1495
|
+
│ │ ├── app/schemas/ # 请求/响应模型
|
|
1496
|
+
│ │ ├── app/services/ # 业务逻辑层
|
|
1497
|
+
│ │ ├── alembic/ # 数据库迁移
|
|
1498
|
+
│ │ └── tests/ # 单元 & 集成测试
|
|
1499
|
+
│ ├── frontend/ # 前端代码 (Vue3 + Vite + TS)
|
|
1500
|
+
│ │ ├── src/views/ # 页面组件 (响应式布局)
|
|
1501
|
+
│ │ ├── src/components/ # UI 组件库
|
|
1502
|
+
│ │ ├── src/stores/ # Pinia 状态管理
|
|
1503
|
+
│ │ ├── src/api/ # API 请求封装
|
|
1504
|
+
│ │ └── tailwind.config.js # 6档断点配置
|
|
1505
|
+
│ ├── docker-compose.yml # 一键部署编排
|
|
1506
|
+
│ └── .github/workflows/ # CI 流水线
|
|
1507
|
+
│
|
|
1350
1508
|
├── skills/ # 技能文件
|
|
1351
1509
|
│ ├── core/ # 11 个核心技能
|
|
1352
1510
|
│ ├── expert/ # 2 个专家技能
|
|
@@ -1370,7 +1528,7 @@ pdd-skills-v3/
|
|
|
1370
1528
|
├── templates/ # 项目模板
|
|
1371
1529
|
├── config/ # 配置文件
|
|
1372
1530
|
├── hooks/ # Hook 配置
|
|
1373
|
-
└── package.json # v3.0.
|
|
1531
|
+
└── package.json # v3.0.1
|
|
1374
1532
|
```
|
|
1375
1533
|
|
|
1376
1534
|
***
|
|
@@ -1421,6 +1579,8 @@ CLI 参数 > 环境变量 > .pddrc.local > .pddrc > defaults
|
|
|
1421
1579
|
| <br /> | vm.autoOpen | true | 自动打开浏览器 |
|
|
1422
1580
|
| <br /> | vm.maxSSEConnections | 100 | 最大SSE连接数 |
|
|
1423
1581
|
| <br /> | vm.tuiRefreshInterval | 5 | TUI 刷新间隔(秒) |
|
|
1582
|
+
| **★ 脚手架** | scaffold.defaultTemplate | python-fullstack | 默认模板名称 |
|
|
1583
|
+
| <br /> | scaffold.outputDir | ./output | 输出目录 |
|
|
1424
1584
|
|
|
1425
1585
|
***
|
|
1426
1586
|
|
|
@@ -1453,6 +1613,7 @@ CLI 参数 > 环境变量 > .pddrc.local > .pddrc > defaults
|
|
|
1453
1613
|
|
|
1454
1614
|
| 版本 | 日期 | 重要变更 |
|
|
1455
1615
|
| ---------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1616
|
+
| **v3.0.2** | 2026-04-12 | **脚手架系统发布**: python-fullstack 全栈模板(FastAPI+Vue3), 数据权限引擎, OAuth2六平台认证, 工作流状态机引擎, 响应式前端, 4份架构设计文档, Docker一键部署, CI流水线 |
|
|
1456
1617
|
| **v3.0.1** | 2026-04-07 | **PDD Visual Manager 发布**: Web Dashboard + Terminal TUI 双形态可视化监控, 11个REST API端点, SSE实时推送, Canvas图表引擎, ANSI TUI组件库 (59/59 任务 100%, 4/4 里程碑 100%) |
|
|
1457
1618
|
| **v3.0.0** | 2026-04-05 | **正式发布版**: 6大Phase全部完成 + 插件系统 + OpenClaw + gRPC + Python SDK + 暂缓清零 (94/94 任务 100%) |
|
|
1458
1619
|
| v2.x | 2026-03 | 内部迭代版本: MCP/SDK/缓存/Token/质量/迭代 |
|
package/bin/pdd.js
CHANGED
|
@@ -252,7 +252,9 @@ program
|
|
|
252
252
|
.option('-r, --refresh <sec>', '自动刷新间隔(秒)', '30')
|
|
253
253
|
.action(async (options) => {
|
|
254
254
|
const { DashboardServer } = await import('../lib/vm/dashboard/server.js');
|
|
255
|
-
const
|
|
255
|
+
const { PDDDataProvider } = await import('../lib/vm/data-provider.js');
|
|
256
|
+
const dataProvider = new PDDDataProvider(process.cwd());
|
|
257
|
+
const server = new DashboardServer(dataProvider);
|
|
256
258
|
await server.start(parseInt(options.port, 10), {
|
|
257
259
|
open: !options.noBrowser && !options.noOpen,
|
|
258
260
|
refreshInterval: parseInt(options.refresh, 10) * 1000
|
|
@@ -122,7 +122,15 @@ async function getProject(req, dataProvider) {
|
|
|
122
122
|
}
|
|
123
123
|
};
|
|
124
124
|
} catch (err) {
|
|
125
|
-
|
|
125
|
+
return {
|
|
126
|
+
success: true,
|
|
127
|
+
data: {
|
|
128
|
+
summary: {},
|
|
129
|
+
schemaVersion: '1.0.0',
|
|
130
|
+
timestamp: new Date().toISOString(),
|
|
131
|
+
notice: '项目尚未初始化'
|
|
132
|
+
}
|
|
133
|
+
};
|
|
126
134
|
}
|
|
127
135
|
}
|
|
128
136
|
|
|
@@ -152,7 +160,15 @@ async function getFeatures(req, dataProvider) {
|
|
|
152
160
|
}
|
|
153
161
|
};
|
|
154
162
|
} catch (err) {
|
|
155
|
-
|
|
163
|
+
return {
|
|
164
|
+
success: true,
|
|
165
|
+
data: {
|
|
166
|
+
features: [],
|
|
167
|
+
total: 0,
|
|
168
|
+
timestamp: new Date().toISOString(),
|
|
169
|
+
notice: '项目尚未初始化'
|
|
170
|
+
}
|
|
171
|
+
};
|
|
156
172
|
}
|
|
157
173
|
}
|
|
158
174
|
|
|
@@ -213,7 +229,14 @@ async function getSummary(req, dataProvider) {
|
|
|
213
229
|
}
|
|
214
230
|
};
|
|
215
231
|
} catch (err) {
|
|
216
|
-
|
|
232
|
+
return {
|
|
233
|
+
success: true,
|
|
234
|
+
data: {
|
|
235
|
+
summary: { totalFeatures: 0, doneCount: 0, avgScore: 0, tokensUsed: 0, tokensTotal: 0 },
|
|
236
|
+
timestamp: new Date().toISOString(),
|
|
237
|
+
notice: '项目尚未初始化'
|
|
238
|
+
}
|
|
239
|
+
};
|
|
217
240
|
}
|
|
218
241
|
}
|
|
219
242
|
|
|
@@ -234,7 +257,14 @@ async function getQualityMatrix(req, dataProvider) {
|
|
|
234
257
|
}
|
|
235
258
|
};
|
|
236
259
|
} catch (err) {
|
|
237
|
-
|
|
260
|
+
return {
|
|
261
|
+
success: true,
|
|
262
|
+
data: {
|
|
263
|
+
matrix: {},
|
|
264
|
+
timestamp: new Date().toISOString(),
|
|
265
|
+
notice: '项目尚未初始化'
|
|
266
|
+
}
|
|
267
|
+
};
|
|
238
268
|
}
|
|
239
269
|
}
|
|
240
270
|
|
|
@@ -288,12 +318,11 @@ async function getCacheStats(req, dataProvider) {
|
|
|
288
318
|
*/
|
|
289
319
|
async function getIterationList(req, dataProvider) {
|
|
290
320
|
try {
|
|
291
|
-
// 如果 dataProvider 支持迭代查询
|
|
292
321
|
let iterations = [];
|
|
293
322
|
|
|
294
323
|
if (typeof dataProvider.getIterations === 'function') {
|
|
295
324
|
iterations = dataProvider.getIterations() || [];
|
|
296
|
-
} else if (dataProvider.summary &&
|
|
325
|
+
} else if (dataProvider.summary && dataProvider.summary.iterations) {
|
|
297
326
|
iterations = dataProvider.summary.iterations || [];
|
|
298
327
|
}
|
|
299
328
|
|
|
@@ -306,7 +335,14 @@ async function getIterationList(req, dataProvider) {
|
|
|
306
335
|
}
|
|
307
336
|
};
|
|
308
337
|
} catch (err) {
|
|
309
|
-
|
|
338
|
+
return {
|
|
339
|
+
success: true,
|
|
340
|
+
data: {
|
|
341
|
+
iterations: [],
|
|
342
|
+
total: 0,
|
|
343
|
+
timestamp: new Date().toISOString()
|
|
344
|
+
}
|
|
345
|
+
};
|
|
310
346
|
}
|
|
311
347
|
}
|
|
312
348
|
|
|
@@ -335,7 +371,19 @@ async function getSystemHealth(req, dataProvider) {
|
|
|
335
371
|
}
|
|
336
372
|
};
|
|
337
373
|
} catch (err) {
|
|
338
|
-
|
|
374
|
+
return {
|
|
375
|
+
success: true,
|
|
376
|
+
data: {
|
|
377
|
+
health: {
|
|
378
|
+
status: 'ok',
|
|
379
|
+
uptime: process.uptime(),
|
|
380
|
+
memory: process.memoryUsage(),
|
|
381
|
+
platform: process.platform,
|
|
382
|
+
nodeVersion: process.version
|
|
383
|
+
},
|
|
384
|
+
timestamp: new Date().toISOString()
|
|
385
|
+
}
|
|
386
|
+
};
|
|
339
387
|
}
|
|
340
388
|
}
|
|
341
389
|
|
|
@@ -496,6 +544,15 @@ function _generateMarkdownExport(dataProvider) {
|
|
|
496
544
|
return md;
|
|
497
545
|
}
|
|
498
546
|
|
|
547
|
+
function _escapeCSVField(str) {
|
|
548
|
+
if (!str) return '""';
|
|
549
|
+
if (str.includes(',') || str.includes('"') || str.includes('\n')) {
|
|
550
|
+
const escaped = str.replace(/"/g, '""');
|
|
551
|
+
return `"${escaped}"`;
|
|
552
|
+
}
|
|
553
|
+
return str;
|
|
554
|
+
}
|
|
555
|
+
|
|
499
556
|
/**
|
|
500
557
|
* 生成 CSV 格式导出数据
|
|
501
558
|
* @param {Object} dataProvider
|
|
@@ -511,7 +568,7 @@ function _generateCSVExport(dataProvider) {
|
|
|
511
568
|
for (const f of features) {
|
|
512
569
|
csv += [
|
|
513
570
|
f.id,
|
|
514
|
-
|
|
571
|
+
_escapeCSVField(f.name),
|
|
515
572
|
f.stage || '',
|
|
516
573
|
f.status || '',
|
|
517
574
|
f.priority || '',
|
|
@@ -87,16 +87,16 @@
|
|
|
87
87
|
============================================================ -->
|
|
88
88
|
|
|
89
89
|
<!-- 核心应用控制器 -->
|
|
90
|
-
<script src="/js/app.js"></script>
|
|
90
|
+
<script src="/js/app.js?v=3.0.2"></script>
|
|
91
91
|
|
|
92
92
|
<!-- 图表绘制工具 -->
|
|
93
|
-
<script src="/js/charts.js"></script>
|
|
93
|
+
<script src="/js/charts.js?v=3.0.2"></script>
|
|
94
94
|
|
|
95
95
|
<!-- 各视图模块 -->
|
|
96
|
-
<script src="/js/pipeline-view.js"></script>
|
|
97
|
-
<script src="/js/kanban-view.js"></script>
|
|
98
|
-
<script src="/js/quality-view.js"></script>
|
|
99
|
-
<script src="/js/system-view.js"></script>
|
|
96
|
+
<script src="/js/pipeline-view.js?v=3.0.2"></script>
|
|
97
|
+
<script src="/js/kanban-view.js?v=3.0.2"></script>
|
|
98
|
+
<script src="/js/quality-view.js?v=3.0.2"></script>
|
|
99
|
+
<script src="/js/system-view.js?v=3.0.2"></script>
|
|
100
100
|
|
|
101
101
|
<!-- 无 JavaScript 时的降级提示 -->
|
|
102
102
|
<noscript>
|
|
@@ -563,7 +563,12 @@ const App = {
|
|
|
563
563
|
const viewInstance = this.state.viewInstances[tab];
|
|
564
564
|
|
|
565
565
|
if (viewInstance?.render) {
|
|
566
|
-
|
|
566
|
+
const sharedData = this.getSharedData();
|
|
567
|
+
if (tab === 'pipeline' || tab === 'kanban') {
|
|
568
|
+
viewInstance.render(sharedData.features, sharedData.summary);
|
|
569
|
+
} else {
|
|
570
|
+
viewInstance.render(sharedData);
|
|
571
|
+
}
|
|
567
572
|
}
|
|
568
573
|
},
|
|
569
574
|
|
|
@@ -637,7 +642,7 @@ const App = {
|
|
|
637
642
|
|
|
638
643
|
try {
|
|
639
644
|
const res = await fetch('/api/refresh', { method: 'POST' });
|
|
640
|
-
const data = await res.json()
|
|
645
|
+
const data = await res.json();
|
|
641
646
|
|
|
642
647
|
if (data.success) {
|
|
643
648
|
// 刷新本地数据
|
package/lib/vm/data-provider.js
CHANGED
|
@@ -900,7 +900,7 @@ class PDDDataProvider {
|
|
|
900
900
|
md += '## Token 使用统计\n\n';
|
|
901
901
|
md += `- **总配额**: ${tokenStats.total.toLocaleString()}\n`;
|
|
902
902
|
md += `- **已使用**: ${tokenStats.used.toLocaleString()} (${tokenStats.percent}%)\n`;
|
|
903
|
-
md += `- **剩余**: ${tokenStats.remaining.toLocaleString()}\n\n
|
|
903
|
+
md += `- **剩余**: ${tokenStats.remaining.toLocaleString()}\n\n`;
|
|
904
904
|
|
|
905
905
|
return md;
|
|
906
906
|
}
|
|
@@ -929,7 +929,8 @@ class PDDDataProvider {
|
|
|
929
929
|
const str = String(value);
|
|
930
930
|
// 如果包含逗号、引号或换行,需要用引号包裹并转义内部引号
|
|
931
931
|
if (str.includes(',') || str.includes('"') || str.includes('\n')) {
|
|
932
|
-
|
|
932
|
+
const escaped = str.replace(/"/g, '""');
|
|
933
|
+
return `"${escaped}"`;
|
|
933
934
|
}
|
|
934
935
|
return str;
|
|
935
936
|
};
|
package/lib/vm/event-bus.js
CHANGED
|
@@ -26,7 +26,7 @@ export const VMEvents = Object.freeze({
|
|
|
26
26
|
QUALITY_UPDATED: 'quality_updated',
|
|
27
27
|
/** Token 使用阈值告警 */
|
|
28
28
|
TOKEN_THRESHOLD: 'token_threshold',
|
|
29
|
-
|
|
29
|
+
/** 缓存命中统计 */
|
|
30
30
|
CACHE_HIT: 'cache_hit',
|
|
31
31
|
/** 迭代轮次完成 */
|
|
32
32
|
ITERATION_ROUND_COMPLETE: 'iteration_round_complete',
|
package/package.json
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
{"name": "pdd-skills",
|
|
1
|
+
{"name": "pdd-skills",
|
|
2
|
+
"version": "3.0.3", "description": "PRD Driven Development Skills - AI原生软件开发工作流", "type": "module", "main": "index.js", "bin": {"pdd": "./bin/pdd.js", "pdd-skills": "./bin/pdd.js"}, "files": ["bin/", "lib/", "skills/", "templates/", "scaffolds/", "scripts/", "config/", "hooks/", "index.js"], "scripts": {"start": "node bin/pdd.js", "list": "node bin/pdd.js list", "lint": "node bin/pdd.js linter --type code prd sql activiti", "generate": "node bin/pdd.js generate", "verify": "node bin/pdd.js verify", "report": "node bin/pdd.js report", "config": "node bin/pdd.js config --list", "api": "node bin/pdd.js api", "api:dev": "node bin/pdd.js api -p 3000 --cors", "init": "node bin/pdd.js init", "update": "node bin/pdd.js update", "cso": "node bin/pdd.js cso", "eval": "node bin/pdd.js eval", "token": "node bin/pdd.js token", "i18n": "node bin/pdd.js i18n"}, "keywords": ["pdd", "prd-driven-development", "ai", "claude", "skills", "tdd", "code-generation", "linter", "api-server", "cli"], "author": "PDD Team", "license": "MIT", "engines": {"node": ">=18.0.0"}, "dependencies": {"commander": "^12.0.0", "chalk": "^5.3.0", "fs-extra": "^11.2.0", "yaml": "^2.3.0"}}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# PDD Scaffold Templates Registry
|
|
2
|
+
|
|
3
|
+
本目录存放所有 PDD 驱动的脚手架模板。
|
|
4
|
+
|
|
5
|
+
## 可用模板
|
|
6
|
+
|
|
7
|
+
| 模板 | 路径 | 技术栈 | 说明 |
|
|
8
|
+
|------|------|--------|------|
|
|
9
|
+
| python-fullstack | ./python-fullstack/ | FastAPI + Vue3 + MySQL | 全栈脚手架(含数据权限/OAuth/工作流) |
|
|
10
|
+
|
|
11
|
+
## 使用方式
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# 通过 PDD CLI 初始化项目并选择模板
|
|
15
|
+
pdd init my-project --template python-fullstack
|
|
16
|
+
|
|
17
|
+
# 或在 .pdd/config.yaml 中指定默认模板
|
|
18
|
+
template: scaffolds/python-fullstack
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 添加新模板
|
|
22
|
+
|
|
23
|
+
1. 在此目录下创建新文件夹:`scaffolds/<template-name>/`
|
|
24
|
+
2. 添加 `template_config.yaml` 元数据文件
|
|
25
|
+
3. 添加代码模板文件
|
|
26
|
+
4. 更新此 README
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: CI Pipeline
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, develop]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test-backend:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
services:
|
|
13
|
+
mysql:
|
|
14
|
+
image: mysql:8.0
|
|
15
|
+
env:
|
|
16
|
+
MYSQL_ROOT_PASSWORD: test_root
|
|
17
|
+
MYSQL_DATABASE: pdd_test
|
|
18
|
+
MYSQL_USER: test_user
|
|
19
|
+
MYSQL_PASSWORD: test_pass
|
|
20
|
+
ports: ['3306:3306']
|
|
21
|
+
options: >-
|
|
22
|
+
--health-cmd='mysqladmin ping'
|
|
23
|
+
--health-interval=10s
|
|
24
|
+
--health-timeout=5s
|
|
25
|
+
--health-retries=5
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v4
|
|
28
|
+
- uses: actions/setup-python@v5
|
|
29
|
+
with:
|
|
30
|
+
python-version: '3.11'
|
|
31
|
+
- run: pip install -r backend/requirements-dev.txt
|
|
32
|
+
- run: cd backend && pytest tests/ -v --cov=app
|
|
33
|
+
|
|
34
|
+
test-frontend:
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@v4
|
|
38
|
+
- uses: actions/setup-node@v4
|
|
39
|
+
with:
|
|
40
|
+
node-version: '20'
|
|
41
|
+
cache: 'npm'
|
|
42
|
+
cache-dependency-path: frontend/package-lock.json
|
|
43
|
+
- run: cd frontend && npm ci && npm run lint
|