draftgo-cli 3.0.33 → 3.0.38
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 +220 -269
- package/package.json +6 -2
- package/resources/skill/SKILL.md +114 -55
- package/resources/skill/init/SKILL.md +29 -15
- package/resources/skill/manifest.json +13 -5
- package/resources/skill/push/SKILL.md +41 -29
- package/resources/skill/references/aihub.md +8 -5
- package/resources/skill/references/api-endpoints.md +5 -3
- package/resources/skill/references/architecture.md +1 -1
- package/resources/skill/references/checkout.md +116 -0
- package/resources/skill/references/custom-services.md +9 -10
- package/resources/skill/references/data.md +4 -2
- package/resources/skill/references/frontend.md +99 -23
- package/resources/skill/references/mcp.md +101 -0
- package/resources/skill/references/modules.md +8 -8
- package/resources/skill/references/parallel.md +6 -3
- package/resources/skill/references/runtime.md +7 -10
- package/resources/skill/scripts/README.md +8 -0
- package/resources/skill/story/SKILL.md +8 -8
- package/src/cli.js +5 -0
- package/src/commandRegistry.js +7 -1
- package/src/commands/api.js +24 -187
- package/src/commands/autoPush.js +48 -17
- package/src/commands/check.js +17 -47
- package/src/commands/checkout.js +18 -0
- package/src/commands/commit.js +21 -0
- package/src/commands/conflict.js +30 -0
- package/src/commands/conflicts.js +16 -0
- package/src/commands/connect.js +60 -48
- package/src/commands/delete.js +79 -64
- package/src/commands/deploy.js +18 -10
- package/src/commands/diff.js +23 -0
- package/src/commands/help.js +99 -75
- package/src/commands/init.js +4 -10
- package/src/commands/local.js +23 -6
- package/src/commands/map.js +89 -89
- package/src/commands/mcp.js +126 -0
- package/src/commands/sync.js +28 -43
- package/src/commands/verifyUi.js +3 -2
- package/src/localdev/index.js +37 -7
- package/src/localdev/mysqlClient.js +1 -1
- package/src/mcp/client.js +275 -0
- package/src/mcp/hosts.js +520 -0
- package/src/mcp/protocol.js +173 -0
- package/src/mcp/stdio.js +300 -0
- package/src/mcp/tools.js +37 -0
- package/src/platforms.js +3 -4
- package/src/projectConfig.js +91 -49
- package/src/projectMap.js +123 -460
- package/src/skill.js +6 -28
- package/src/worktree/backend.js +250 -0
- package/src/worktree/errors.js +28 -0
- package/src/worktree/index.js +461 -0
- package/src/worktree/manifest.js +75 -0
- package/src/worktree/streams.js +200 -0
- package/src/worktree/types.js +103 -0
- package/src/worktree/validate.js +37 -0
- package/resources/skill/pull/SKILL.md +0 -33
- package/resources/skill/references/api.json +0 -20248
- package/resources/skill/scripts/draftgo_delete.py +0 -149
- package/resources/skill/scripts/draftgo_init.py +0 -80
- package/resources/skill/scripts/draftgo_pull.py +0 -427
- package/resources/skill/scripts/draftgo_push.py +0 -1022
- package/src/python.js +0 -27
|
@@ -267,9 +267,11 @@ await App.patch(`db/order/batch`, [
|
|
|
267
267
|
|
|
268
268
|
---
|
|
269
269
|
|
|
270
|
-
## db_meta
|
|
270
|
+
## db_meta 实时契约
|
|
271
271
|
|
|
272
|
-
|
|
272
|
+
db_meta 是结构化远端资源,不 checkout,也不生成本地 `index.json`。开发前先通过 MCP
|
|
273
|
+
`draftgo_api_search` / `draftgo_api_describe` 确认接口,再用 `draftgo_api_call` 查询目标 type 和 schema。
|
|
274
|
+
典型返回条目如下:
|
|
273
275
|
|
|
274
276
|
```json
|
|
275
277
|
[
|
|
@@ -30,7 +30,6 @@ version: 2.0.0
|
|
|
30
30
|
### 操作型页面布局(强制)
|
|
31
31
|
|
|
32
32
|
后台管理、表格、列表等操作型页面用**工作台布局**,不用文档流堆叠:
|
|
33
|
-
强烈建议直接使用antd的组件
|
|
34
33
|
```css
|
|
35
34
|
.workbench-page { min-height:100vh; display:flex; flex-direction:column; overflow:hidden; }
|
|
36
35
|
.workbench-toolbar { flex-shrink:0; }
|
|
@@ -42,11 +41,51 @@ version: 2.0.0
|
|
|
42
41
|
- 分页/操作栏/保存栏固定在工作区底部,不随数据量上浮
|
|
43
42
|
- 滚动发生在数据区,不是整页
|
|
44
43
|
|
|
44
|
+
### 表格工作区布局
|
|
45
|
+
|
|
46
|
+
所有数据表格页面,无论使用原生表格、AntD 或其他组件库,都遵守同一布局契约:
|
|
47
|
+
|
|
48
|
+
- 页面根容器占满可用视口或 iframe 内容区,使用 `height: 100%`、`height: 100vh` 或已知导航高度的 `calc(...)`;不能由表格内容决定页面高度。
|
|
49
|
+
- 表格内容区占据工具栏和底部控制区以外的所有剩余空间:`flex: 1; min-height: 0`。
|
|
50
|
+
- 纵向和横向滚动只能发生在表格内容区。横向滚动条必须紧贴在分页或批量操作栏上方,不能落在长列表的末尾。
|
|
51
|
+
- 分页、批量操作栏、保存栏等底部控制区使用 `flex-shrink: 0`,始终停在工作区底部;数据只有一行或没有数据时也不向上漂移。
|
|
52
|
+
- 禁止使用 `min-height` 加自然文档流模拟该布局,也不要让 `body`、页面根和表格内容区同时滚动。
|
|
53
|
+
|
|
54
|
+
通用骨架:
|
|
55
|
+
|
|
56
|
+
```html
|
|
57
|
+
<main class="table-workspace">
|
|
58
|
+
<header class="table-toolbar">...</header>
|
|
59
|
+
<section class="table-viewport">
|
|
60
|
+
<table>...</table>
|
|
61
|
+
</section>
|
|
62
|
+
<footer class="table-footer">...</footer>
|
|
63
|
+
</main>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```css
|
|
67
|
+
.table-workspace {
|
|
68
|
+
height: 100%;
|
|
69
|
+
min-height: 0;
|
|
70
|
+
display: flex;
|
|
71
|
+
flex-direction: column;
|
|
72
|
+
overflow: hidden;
|
|
73
|
+
}
|
|
74
|
+
.table-toolbar,
|
|
75
|
+
.table-footer { flex-shrink: 0; }
|
|
76
|
+
.table-viewport {
|
|
77
|
+
flex: 1;
|
|
78
|
+
min-height: 0;
|
|
79
|
+
overflow: auto; /* X scrollbar remains immediately above .table-footer */
|
|
80
|
+
}
|
|
81
|
+
.table-viewport > table { min-width: max-content; }
|
|
82
|
+
```
|
|
83
|
+
|
|
45
84
|
### 表格数据区与分页钉底
|
|
46
85
|
|
|
47
86
|
当页面主体是表格、日志列表、后台数据管理页时,必须先做固定高度的 flex column 容器,再放表格。不要让分页跟随表格内容高度往下跑,也不要让整页滚动。
|
|
48
87
|
|
|
49
|
-
|
|
88
|
+
参考骨架:
|
|
50
89
|
|
|
51
90
|
```css
|
|
52
91
|
/* 整页表格页 */
|
|
@@ -87,7 +126,7 @@ version: 2.0.0
|
|
|
87
126
|
}
|
|
88
127
|
```
|
|
89
128
|
|
|
90
|
-
|
|
129
|
+
AntD Table 示例结构:
|
|
91
130
|
|
|
92
131
|
```javascript
|
|
93
132
|
h('div', { className: 'table-page' },
|
|
@@ -160,17 +199,6 @@ h(antd.Table, {
|
|
|
160
199
|
})
|
|
161
200
|
```
|
|
162
201
|
|
|
163
|
-
硬性验收:
|
|
164
|
-
|
|
165
|
-
- 最外层容器高度明确:整页用 `height:100vh`;有顶部导航时用 `calc(100vh - 顶部导航高度)`;嵌在已固定高度的工作区时用 `height:100%; min-height:0`。
|
|
166
|
-
- 布局必须是 `display:flex; flex-direction:column`。
|
|
167
|
-
- 顶部筛选区 / toolbar 若存在,使用自适应高度并 `flex-shrink:0`。
|
|
168
|
-
- 中间表格区域必须是 `flex:1; min-height:0; overflow:auto`。
|
|
169
|
-
- 分页区域必须在容器最底部,使用 `flex-shrink:0; margin-top:auto`。
|
|
170
|
-
- 禁止分页随数据内容高度下移;数据很多时只滚动 `.table-data`。
|
|
171
|
-
- 表格列多时使用 antd `scroll.x` 或内部横滚,禁止撑出整页横向滚动条;需要随时可横向滑动时,横向滚动条必须固定在分页上方。
|
|
172
|
-
- 不要同时让 `body`、页面容器、表格容器三层都滚动;最多保留表格数据区滚动。
|
|
173
|
-
|
|
174
202
|
### 文本与图标换行控制(强制)
|
|
175
203
|
|
|
176
204
|
按钮、标签、导航项、状态徽章等**小范围整体区域**内的文本和图标,**禁止自动换行**:
|
|
@@ -315,7 +343,7 @@ antd Modal:`width="min(90vw, 520px)"`;抽屉窄屏优先 `placement="bottom"
|
|
|
315
343
|
|
|
316
344
|
### 导航与系统页边界(强制)
|
|
317
345
|
|
|
318
|
-
-
|
|
346
|
+
- 顶部导航已有内置资源时,先通过 MCP 查询导航元数据;需要分析或编辑完整 HTML 时执行 `draftgo checkout nav <id>`,读取 worktree 文件。需要新导航时优先基于现有结构创建或复刻,而不是直接改坏内置导航。
|
|
319
347
|
- 导航栏通常要同时考虑未登录 / 已登录 / 管理员三种状态,以及收起 / 展开状态;普通用户不显示管理后台入口,管理员额外显示管理后台入口。
|
|
320
348
|
- 管理端侧边栏通常基于现有内置侧边栏修改,新增业务管理路由优先追加或局部调整;删除系统内置页面入口前先确认影响。
|
|
321
349
|
- 业务页面内可以做局部二级导航或侧边栏,但必须考虑外部导航已存在且可单独配置,避免重复渲染全局导航。
|
|
@@ -360,6 +388,51 @@ antd Modal:`width="min(90vw, 520px)"`;抽屉窄屏优先 `placement="bottom"
|
|
|
360
388
|
|
|
361
389
|
---
|
|
362
390
|
|
|
391
|
+
## 前端底座与组件库清单
|
|
392
|
+
|
|
393
|
+
### 运行形态
|
|
394
|
+
|
|
395
|
+
- **壳层前端**位于 DraftGo 基座的 `frontend/`,技术栈为 React 19 + Vite 8 + Tailwind CSS 4;这是维护壳层代码时使用的构建链路。
|
|
396
|
+
- **业务页面和导航 HTML**存储在数据库资源中,由壳层以 iframe 运行。它们必须是完整的原生 HTML 文档,不能写入 TSX、ESM import、npm 依赖或 Vite 构建产物。
|
|
397
|
+
- 数据库页面需要 React 时,只能使用下方内置的 React 18 UMD 资源和 `window.React` / `window.ReactDOM`。不要把壳层的 React 19 npm 依赖、外部 CDN 或其他 React 版本混入页面。
|
|
398
|
+
- 新建页面先确认是“壳层源码修改”还是“数据库 HTML 页面”。二者的组件、构建和资源加载方式不同,不能混用。
|
|
399
|
+
|
|
400
|
+
### 内置组件库清单
|
|
401
|
+
|
|
402
|
+
| 名称 | 版本 | 运行形态 | 本地资源 |
|
|
403
|
+
|---|---:|---|---|
|
|
404
|
+
| Ant Design | 5.29.3 | React 18 UMD,导出 `window.antd` | `/assets/antd/reset.css`、`/assets/react/react.min.js`、`/assets/react-dom/react-dom.min.js`、`/assets/dayjs/dayjs.min.js`、`/assets/antd/antd.min.js` |
|
|
405
|
+
| Basecoat UI | 1.0.2 | HTML + CSS/JS,导出 `window.basecoat` | `/assets/vendor/basecoat/basecoat.min.css`、`/assets/vendor/basecoat/basecoat.min.js` |
|
|
406
|
+
| Oat UI | 0.7.0 | Web Components,导出 `window.ot` | `/assets/vendor/oat/oat.min.css`、`/assets/vendor/oat/oat.min.js` |
|
|
407
|
+
|
|
408
|
+
此清单不规定组件库选择或场景对应关系;根据页面需求自行决定是否使用其中任一库。
|
|
409
|
+
|
|
410
|
+
### 主题适配与标准加载方式
|
|
411
|
+
|
|
412
|
+
基座提供两个适配资源:`/assets/adapters/draftgo-ui.js` 和 `/assets/adapters/draftgo-theme.css`。
|
|
413
|
+
|
|
414
|
+
- `draftgo-ui.js` 暴露 `window.DraftGoUI`,其中 `DraftGoUI.load(name)` 接受 `antd`、`basecoat`、`oat`,按资源清单加载对应库;加载 AntD 后会为 React 根节点接入 DraftGo 的主题 token。
|
|
415
|
+
- `draftgo-theme.css` 用于 Basecoat 和 Oat,将其语义变量映射到 DraftGo 的 `--dg-*` token。它必须在对应组件库 CSS **之后**加载。
|
|
416
|
+
- 页面手工引入 AntD 时,必须严格遵守下方的依赖顺序;不要附加第三方 AntD CSS,也不要使用 ESM/CDN 版本。
|
|
417
|
+
|
|
418
|
+
```html
|
|
419
|
+
<!-- Basecoat:组件 CSS 在前,DraftGo 主题适配层在后 -->
|
|
420
|
+
<link href="/assets/vendor/basecoat/basecoat.min.css" rel="stylesheet">
|
|
421
|
+
<link href="/assets/adapters/draftgo-theme.css" rel="stylesheet">
|
|
422
|
+
<script src="/assets/adapters/draftgo-ui.js"></script>
|
|
423
|
+
<script src="/assets/vendor/basecoat/basecoat.min.js" defer></script>
|
|
424
|
+
|
|
425
|
+
<!-- 或由适配器按清单加载:await DraftGoUI.load('basecoat') -->
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
```html
|
|
429
|
+
<!-- Oat:同样让主题适配层位于组件 CSS 之后 -->
|
|
430
|
+
<link href="/assets/vendor/oat/oat.min.css" rel="stylesheet">
|
|
431
|
+
<link href="/assets/adapters/draftgo-theme.css" rel="stylesheet">
|
|
432
|
+
<script src="/assets/adapters/draftgo-ui.js"></script>
|
|
433
|
+
<script src="/assets/vendor/oat/oat.min.js" defer></script>
|
|
434
|
+
```
|
|
435
|
+
|
|
363
436
|
## 本地静态资源清单
|
|
364
437
|
|
|
365
438
|
| 路径 | 说明 |
|
|
@@ -370,6 +443,10 @@ antd Modal:`width="min(90vw, 520px)"`;抽屉窄屏优先 `placement="bottom"
|
|
|
370
443
|
| `/assets/react-dom/react-dom.min.js` | ReactDOM 18 UMD → `window.ReactDOM` |
|
|
371
444
|
| `/assets/dayjs/dayjs.min.js` | dayjs → antd DatePicker 依赖 |
|
|
372
445
|
| `/assets/antd/antd.min.js` | Ant Design 5.29.3 UMD → `window.antd` |
|
|
446
|
+
| `/assets/adapters/draftgo-ui.js` | DraftGo UI 适配器;提供 `window.DraftGoUI`、组件库按需加载和 AntD 主题接入 |
|
|
447
|
+
| `/assets/adapters/draftgo-theme.css` | Basecoat / Oat 到 DraftGo `--dg-*` 主题 token 的 CSS 映射;应后于对应组件 CSS 加载 |
|
|
448
|
+
| `/assets/vendor/basecoat/basecoat.min.css` + `basecoat.min.js` | Basecoat UI 1.0.2,原生 HTML 组件库 |
|
|
449
|
+
| `/assets/vendor/oat/oat.min.css` + `oat.min.js` | Oat UI 0.7.0,Web Components 组件库 |
|
|
373
450
|
| `/assets/fontawesome/css/all.min.css` | FontAwesome 6 |
|
|
374
451
|
| `/assets/icons/{name}.svg` | 内置精选 SVG 图标库(kebab-case 命名) |
|
|
375
452
|
| `/assets/icons/manifest.json` | 图标库映射清单 |
|
|
@@ -416,11 +493,10 @@ AI 模型 / Provider 品牌图标可以使用 LobeHub 静态图标的 npmmirror
|
|
|
416
493
|
|
|
417
494
|
---
|
|
418
495
|
|
|
419
|
-
## Ant Design
|
|
496
|
+
## Ant Design 运行契约
|
|
420
497
|
|
|
421
|
-
Ant Design 5.29.3 已内置为 UMD 包(`window.antd
|
|
498
|
+
Ant Design 5.29.3 已内置为 UMD 包(`window.antd`)。
|
|
422
499
|
|
|
423
|
-
> `Segmented` 的默认样式视觉厚重、组件库感过强,禁止原样用于成品界面;优先根据语义改用 `Tabs`、`Radio.Group` 等更合适的控件,确需使用时必须通过 `ConfigProvider`、design token 或组件公开 API 调整为与页面一致的轻量样式。
|
|
424
500
|
|
|
425
501
|
### ① 依赖加载顺序(缺一不可,顺序不可乱)
|
|
426
502
|
|
|
@@ -434,7 +510,7 @@ Ant Design 5.29.3 已内置为 UMD 包(`window.antd`),可优先选择使
|
|
|
434
510
|
|
|
435
511
|
> 资源版本固定为 5.29.3。只加载 `/assets/antd/reset.css` 和 UMD JS;组件样式由 UMD 运行时注入,禁止额外加载或引用 `/assets/antd/antd.min.css`,也禁止混用其他版本的 Ant Design CSS。
|
|
436
512
|
|
|
437
|
-
### ②
|
|
513
|
+
### ② DraftGo 主题接入
|
|
438
514
|
|
|
439
515
|
用 `antd.ConfigProvider` 包裹根组件,读取 `App.theme` 和 CSS 变量 `--dg-accent`,实现 dark/light 自动切换和主题色联动:
|
|
440
516
|
|
|
@@ -475,9 +551,9 @@ ReactDOM.createRoot(document.getElementById('root')).render(React.createElement(
|
|
|
475
551
|
- 自建组件时,业务页才是状态样式的所有者;状态规则必须收敛到该组件的专有类或页面根容器内,不能影响其他组件或页面。
|
|
476
552
|
- 改动前先确认所有权;同一状态属性不得同时由 token/API 和 CSS 覆盖定义。若必须接管第三方组件样式,先移除或禁用原有对应效果,再用有作用域的规则完整接管。
|
|
477
553
|
|
|
478
|
-
### ④
|
|
554
|
+
### ④ DraftGo 平台反馈 API 对照
|
|
479
555
|
|
|
480
|
-
| antd 原生 |
|
|
556
|
+
| antd 原生 | 对应平台 API |
|
|
481
557
|
|-----------|------|
|
|
482
558
|
| `Modal.confirm(...)` | `await App.confirm(msg, title)` |
|
|
483
559
|
| `Modal.info / warning(...)` | `App.showModal(msg, title)` |
|
|
@@ -512,7 +588,7 @@ h('div', { style: { textAlign: 'center' } },
|
|
|
512
588
|
)
|
|
513
589
|
```
|
|
514
590
|
|
|
515
|
-
###
|
|
591
|
+
### antd 页面:`antd.Empty` 示例
|
|
516
592
|
|
|
517
593
|
```javascript
|
|
518
594
|
const { Empty } = antd;
|
|
@@ -565,7 +641,7 @@ h('div', { style: { display:'flex', flexDirection:'column', alignItems:'center',
|
|
|
565
641
|
|
|
566
642
|
## GSAP 动效规范
|
|
567
643
|
|
|
568
|
-
|
|
644
|
+
GSAP 是 DraftGo 内置动效库。使用时遵守以下加载和清理约束。
|
|
569
645
|
|
|
570
646
|
加载规则:
|
|
571
647
|
- 核心 `gsap.min.js` 必须首先加载,其余插件按需选加
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
read_when: 配置或诊断 DraftGo MCP 时 · 查询实时资源或 API 契约时 · 判断宿主支持范围时
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# DraftGo MCP
|
|
6
|
+
|
|
7
|
+
> 根 `SKILL.md` 在 Skill 触发时会自动加载。使用本文件前,先完成根 Skill 的“强制预读:Reference 优先于 MCP”任务路由。本文件只说明实时 MCP 的边界和调用顺序,不能替代页面、前端、运行时、安全或模块资料。
|
|
8
|
+
|
|
9
|
+
## 边界
|
|
10
|
+
|
|
11
|
+
DraftGo MCP 用于实时发现、结构化查询和普通 API 操作。完整 pages、navigations、docs/articles 正文不通过
|
|
12
|
+
MCP tool result 或参数传输;需要全文时使用 `draftgo checkout`,提交时使用 `draftgo commit`。MCP 返回
|
|
13
|
+
`artifact` / `omitted` 时保留该语义,不要尝试重新展开长内容。
|
|
14
|
+
|
|
15
|
+
标准发现顺序:
|
|
16
|
+
|
|
17
|
+
1. `draftgo_project_overview`
|
|
18
|
+
2. `draftgo_resource_search` 或 `draftgo_resource_list`
|
|
19
|
+
3. 按需调用 `draftgo_resource_get_metadata` 或 `draftgo_resource_read_fragment`
|
|
20
|
+
4. 需要实时 API 契约时调用 `draftgo_api_search`、`draftgo_api_describe`
|
|
21
|
+
5. 结构化资源读写使用 `draftgo_api_call`
|
|
22
|
+
|
|
23
|
+
结构化资源包括 db_meta、AIHub、system_config、roles、users、doc_categories 和自定义服务元数据。
|
|
24
|
+
这些资源不 checkout,也不生成 `.draftgo/*/index.json` 镜像。
|
|
25
|
+
|
|
26
|
+
## CLI
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
draftgo mcp setup [target...]
|
|
30
|
+
draftgo mcp status [target...]
|
|
31
|
+
draftgo mcp test
|
|
32
|
+
draftgo mcp serve
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
- `setup` 写入项目级宿主配置,只替换 `draftgo` MCP 条目并保留其他配置。
|
|
36
|
+
- `status` 检查配置是否存在、格式是否有效,以及是否误写了凭据或远端 URL。
|
|
37
|
+
- `test` 从 `.draftgo/config.json` 读取连接,验证 initialize、tools/list 和关键 tools/call。
|
|
38
|
+
- `serve` 启动 stdio bridge,把宿主请求代理到当前项目配置的远端 Streamable HTTP `/mcp`。
|
|
39
|
+
|
|
40
|
+
`draftgo connect` 保存并验证 server/SAT、探测 `/mcp` 和关键工具,并可提示宿主 setup;它不下载业务资源,
|
|
41
|
+
也不创建 pages、navigation、docs、db_meta 等本地镜像。底座仍在开发或暂不可达时,报告诊断结果即可,
|
|
42
|
+
不得回退到 `pull --all`。
|
|
43
|
+
|
|
44
|
+
## 宿主配置
|
|
45
|
+
|
|
46
|
+
| 宿主 | 项目配置 | MCP setup |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| Codex | `.codex/config.toml` | 支持 |
|
|
49
|
+
| Claude Code | `.mcp.json` | 支持 |
|
|
50
|
+
| Cursor | `.cursor/mcp.json` | 支持 |
|
|
51
|
+
| Gemini CLI | `.gemini/settings.json` | 支持 |
|
|
52
|
+
| Kiro | `.kiro/settings/mcp.json` | 支持 |
|
|
53
|
+
| GitHub Copilot | `.vscode/mcp.json` | 支持 |
|
|
54
|
+
| Windsurf | 无可靠的项目级适配 | 不支持,CLI 必须明确提示 |
|
|
55
|
+
| Antigravity | 无可靠的项目级适配 | 不支持,CLI 必须明确提示 |
|
|
56
|
+
|
|
57
|
+
Codex 配置:
|
|
58
|
+
|
|
59
|
+
```toml
|
|
60
|
+
[mcp_servers.draftgo]
|
|
61
|
+
command = "draftgo"
|
|
62
|
+
args = ["mcp", "serve"]
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Claude Code、Cursor、Gemini CLI 和 Kiro 使用各自文件中的 `mcpServers`:
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"mcpServers": {
|
|
70
|
+
"draftgo": {
|
|
71
|
+
"command": "draftgo",
|
|
72
|
+
"args": ["mcp", "serve"]
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
GitHub Copilot 使用 `servers`,并声明 stdio:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"servers": {
|
|
83
|
+
"draftgo": {
|
|
84
|
+
"type": "stdio",
|
|
85
|
+
"command": "draftgo",
|
|
86
|
+
"args": ["mcp", "serve"]
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
配置中不得出现 SAT、token、Authorization、headers、远端 `/mcp` URL、`env` 或带凭据的命令行。
|
|
93
|
+
bridge 必须从当前工作目录的 `.draftgo/config.json` 读取 server/SAT。
|
|
94
|
+
|
|
95
|
+
## 协议与安全
|
|
96
|
+
|
|
97
|
+
- stdio 只输出 MCP JSON-RPC 帧;普通日志写入 stderr,且不得包含 SAT。
|
|
98
|
+
- 代理 initialize、tools/list、tools/call、通知、取消、错误和流式响应,不改写底座 schema 或结构化错误。
|
|
99
|
+
- HTTP 401/403、协议错误和工具缺失必须清晰失败;输出前对 SAT 和 Authorization 值做脱敏。
|
|
100
|
+
- `.draftgo/config.json`、`.draftgo/worktree/` 和 `.draftgo/conflicts/` 必须加入 `.gitignore`。
|
|
101
|
+
- MCP 不可用时运行 `draftgo mcp test` 收集证据;不要读取旧索引作为替代事实来源。
|
|
@@ -8,13 +8,13 @@ read_when: 评估功能可行性时 · 选择开发路径时 · 进入新项目
|
|
|
8
8
|
|
|
9
9
|
| 模块 | 开发方式 | 入口 |
|
|
10
10
|
|---|---|---|
|
|
11
|
-
| 页面 | 数据库 HTML(`page.value.html`) |
|
|
12
|
-
| 导航栏 | 数据库 HTML(`navigation.html`) |
|
|
13
|
-
| 动态 DB | db_meta 定义 schema + `/api/db/{type}` 操作数据 |
|
|
14
|
-
| 自定义服务 | Go `Register` 服务,支持 route/event/scheduled 混合注册 |
|
|
15
|
-
| AIHub | 配置 AI Agent(模型/编排/能力/子智能体/记忆);页面对话使用 `<dg-chat>`,图片模式使用 `DraftGoAI.images`;见 `references/chat-sdk.md` 与 `references/aihub.md` |
|
|
16
|
-
| 文档中心 | Markdown 文章 + 分类树 |
|
|
17
|
-
| 系统配置 | KV 存储,含全局前端层槽位 |
|
|
11
|
+
| 页面 | 数据库 HTML(`page.value.html`) | MCP 定位,`checkout pages` / `commit pages` 编辑正文 |
|
|
12
|
+
| 导航栏 | 数据库 HTML(`navigation.html`) | MCP 定位,`checkout nav` / `commit nav` 编辑正文 |
|
|
13
|
+
| 动态 DB | db_meta 定义 schema + `/api/db/{type}` 操作数据 | MCP `api_search` / `api_describe` / `api_call` |
|
|
14
|
+
| 自定义服务 | Go `Register` 服务,支持 route/event/scheduled 混合注册 | MCP 实时 API;不创建本地镜像 |
|
|
15
|
+
| AIHub | 配置 AI Agent(模型/编排/能力/子智能体/记忆);页面对话使用 `<dg-chat>`,图片模式使用 `DraftGoAI.images`;见 `references/chat-sdk.md` 与 `references/aihub.md` | MCP 实时 API;不创建本地镜像 |
|
|
16
|
+
| 文档中心 | Markdown/HTML 文章 + 分类树 | 正文用 `checkout docs` / `commit docs`;分类用 MCP |
|
|
17
|
+
| 系统配置 | KV 存储,含全局前端层槽位 | MCP 实时 API;不创建本地镜像 |
|
|
18
18
|
|
|
19
19
|
## 平台内置模块(开箱即用,不需实现)
|
|
20
20
|
|
|
@@ -56,7 +56,7 @@ read_when: 评估功能可行性时 · 选择开发路径时 · 进入新项目
|
|
|
56
56
|
## 自定义服务边界
|
|
57
57
|
|
|
58
58
|
- 新服务使用 Go `Register(app *sdk.App)` 自动注册路由、事件和定时任务;完整语言、`draftgo` 和 SDK 契约见 `references/custom-services.md`。
|
|
59
|
-
- `route`:对外暴露 HTTP 端点,运行时路径为 `/api/x/{slug}/{path}`;同一 Go 服务可用多个 `app.Route(method, path, handler)`
|
|
59
|
+
- `route`:对外暴露 HTTP 端点,运行时路径为 `/api/x/{slug}/{path}`;同一 Go 服务可用多个 `app.Route(method, path, handler)` 注册多个端点,保存或发布后要真实请求验证。
|
|
60
60
|
- `event`:响应平台事件,如 `db.created` / `db.updated` / `user.registered`;用 `app.On(event, handler)` 注册,可为同一事件注册多个 handler。
|
|
61
61
|
- `scheduled`:用 `app.Schedule("分 时 日 月 周", handler)` 注册 cron;同一服务可声明多个定时 handler。
|
|
62
62
|
- 新 Go 服务的 `Register` 是唯一触发器事实来源;旧 `triggers` 字段不参与注册。
|
|
@@ -37,12 +37,15 @@ delivery_owner: main
|
|
|
37
37
|
2. 将 `depends` 已满足且 `resource_lock` 不冲突的工作单元放入同一 wave。
|
|
38
38
|
3. 并行执行当前 wave,汇总后回读所有变更资源。
|
|
39
39
|
4. 处理接口接线和入口绑定,再启动依赖已满足的下一 wave。
|
|
40
|
-
5. 统一运行 `draftgo check`、必要的 API/UI
|
|
40
|
+
5. 统一运行 `draftgo check`、必要的 API/UI 验证;只对已 checkout 的 pages/nav/docs 执行 commit,结构化资源通过 MCP 实时 API 交付。
|
|
41
41
|
|
|
42
42
|
某个工作单元失败时,其依赖项等待处理;其余独立分支继续汇总。发现资源锁冲突时,将冲突单元合并或移到后续 wave。
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
已 checkout 长正文的批量交付示例:
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
|
-
draftgo
|
|
47
|
+
draftgo commit pages 1 2 3
|
|
48
|
+
draftgo commit nav 4
|
|
48
49
|
```
|
|
50
|
+
|
|
51
|
+
不同类型分开提交。发生 409/412 时当前 wave 必须停止并保留冲突材料,不得继续自动提交后续依赖项。
|
|
@@ -113,16 +113,13 @@ const orderId = query.orderId; // "42"
|
|
|
113
113
|
|
|
114
114
|
规则:**不能在业务页面内重复实现全局层能力;不允许新增槽位,只能编辑内置槽位。**
|
|
115
115
|
|
|
116
|
-
###
|
|
116
|
+
### 修改方法
|
|
117
117
|
|
|
118
|
-
|
|
118
|
+
system_config 是结构化远端资源。修改前通过 MCP `draftgo_api_search` / `draftgo_api_describe` 获取实时契约,
|
|
119
|
+
再用 `draftgo_api_call` 读取并更新目标键;不要 checkout、pull 或维护本地索引。
|
|
119
120
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
也可以通过 skill 命令使用 `/draftgo push system_config frontend_global_toast_opacity`。
|
|
125
|
-
|
|
126
|
-
前端全局层是系统默认配置。通过 API 或脚本更新现有全局配置时,只发送 `config_value`;不要带 `description`、`category`、`value_type`、`status` 等元信息,否则旧基座或旧索引容易触发“系统默认字段不允许修改字段描述/分类/状态”。`draftgo_push.py system_config` 已对 `frontend_global_*` 自动只推值。
|
|
121
|
+
前端全局层是系统默认配置。更新现有全局配置时只发送 `config_value`;不要带 `description`、`category`、
|
|
122
|
+
`value_type`、`status` 等元信息,避免触发“系统默认字段不允许修改字段描述/分类/状态”。
|
|
127
123
|
|
|
128
|
-
页面管理中 Toast 时长以秒输入,`sys_config` 中仍以毫秒存储。例如 UI 中
|
|
124
|
+
页面管理中 Toast 时长以秒输入,`sys_config` 中仍以毫秒存储。例如 UI 中
|
|
125
|
+
`错误 Toast 时长(s) = 4.5` 对应 `frontend_global_toast_duration_error.config_value = 4500`。
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Skill scripts
|
|
2
|
+
|
|
3
|
+
DraftGo execution is provided by the installed `draftgo` CLI. Legacy Python pull, push, init, and delete helpers were
|
|
4
|
+
removed because they depended on full local mirrors and bypassed the MCP plus checkout/commit safety model.
|
|
5
|
+
|
|
6
|
+
Do not add a script that downloads `.draftgo/*/index.json`, embeds SAT credentials, sends full pages/nav/docs content
|
|
7
|
+
through MCP, or retries version conflicts with force. Reusable helpers added here must preserve the workflows in
|
|
8
|
+
`references/mcp.md` and `references/checkout.md`.
|
|
@@ -93,9 +93,9 @@ now:
|
|
|
93
93
|
### 路径选择(先判断再走)
|
|
94
94
|
|
|
95
95
|
```
|
|
96
|
-
|
|
96
|
+
通过 MCP 实时摘要和项目内可保留的决策记录判断走哪条路径:
|
|
97
97
|
|
|
98
|
-
├─
|
|
98
|
+
├─ MCP 显示存在用户自建内容(非 tag="系统" 的页面、db_meta、custom_scripts)→ 路径 A
|
|
99
99
|
├─ 用户提供了设计文档(PRD、原型图描述、需求文档等)→ 路径 A(以文档为分析素材)
|
|
100
100
|
└─ 只有内置系统页面,无用户自建内容,无设计文档 → 路径 B(对话采集)
|
|
101
101
|
```
|
|
@@ -105,11 +105,11 @@ now:
|
|
|
105
105
|
```
|
|
106
106
|
输出:[ Story 文件生成中...正在分析项目 ]
|
|
107
107
|
|
|
108
|
-
1.
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
108
|
+
1. 查询项目结构(以及读取用户提供的设计文档,如有):
|
|
109
|
+
- MCP project_overview/resource_list → 资源总览
|
|
110
|
+
- MCP resource_search/get_metadata → 页面与导航元数据(跳过 tag="系统" 的内置页)
|
|
111
|
+
- MCP api_search/api_describe/api_call → db_meta 与自定义服务结构
|
|
112
|
+
- 只有必须分析完整 pages/nav/docs 正文时才 checkout;不要要求 MCP 返回全文
|
|
113
113
|
- .draftgo/changelog.md → 更新日志
|
|
114
114
|
- .draftgo/lessons/ → 开发经验记录
|
|
115
115
|
- .draftgo/Task/ → 历史任务文档
|
|
@@ -248,7 +248,7 @@ AI 在开发过程中检测到"方向性决策"时,主动提议沉淀:
|
|
|
248
248
|
### 构建 Story
|
|
249
249
|
|
|
250
250
|
1. 检查 `.draftgo/story.yaml` 是否存在
|
|
251
|
-
2. 不存在 →
|
|
251
|
+
2. 不存在 → 根据 MCP project_overview/resource_list 和用户提供的设计材料判断路径 A 还是 B
|
|
252
252
|
3. 走对应构建流程
|
|
253
253
|
4. 落盘 → 回到用户原始请求
|
|
254
254
|
|
package/src/cli.js
CHANGED
package/src/commandRegistry.js
CHANGED
|
@@ -10,7 +10,13 @@ const commands = [
|
|
|
10
10
|
{ name: 'map', run: (dir, _args, flags) => require('./commands/map')(dir, flags) },
|
|
11
11
|
{ name: 'check', run: (dir, _args, flags) => require('./commands/check')(dir, flags) },
|
|
12
12
|
{ name: 'verify-ui', aliases: ['verifyui'], run: (dir, args, flags) => require('./commands/verifyUi')(dir, args, flags) },
|
|
13
|
-
{ name: '
|
|
13
|
+
{ name: 'mcp', run: (dir, args, flags) => require('./commands/mcp')(dir, args, flags) },
|
|
14
|
+
{ name: 'checkout', run: (dir, args, flags) => require('./commands/checkout')(dir, args, flags) },
|
|
15
|
+
{ name: 'commit', run: (dir, args, flags) => require('./commands/commit')(dir, args, flags) },
|
|
16
|
+
{ name: 'diff', run: (dir, args, flags) => require('./commands/diff')(dir, args, flags) },
|
|
17
|
+
{ name: 'conflicts', run: (dir, args, flags) => require('./commands/conflicts')(dir, args, flags) },
|
|
18
|
+
{ name: 'conflict', run: (dir, args, flags) => require('./commands/conflict')(dir, args, flags) },
|
|
19
|
+
{ name: 'api', run: (dir, args, flags) => require('./commands/api')(dir, args, flags) },
|
|
14
20
|
{ name: 'delete', aliases: ['del', 'rm'], run: (dir, args, flags) => require('./commands/delete')(dir, args, flags) },
|
|
15
21
|
{ name: 'deploy', run: (dir, args, flags) => require('./commands/deploy')(dir, args, flags) },
|
|
16
22
|
{ name: 'auto-push', aliases: ['autopush'], run: (dir, args, flags) => require('./commands/autoPush')(dir, args, flags) },
|