draftgo-cli 3.0.1 → 3.0.33
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/LICENSE +21 -0
- package/README.md +73 -124
- package/package.json +21 -8
- package/resources/skill/SKILL.md +62 -89
- package/resources/skill/init/SKILL.md +18 -67
- package/resources/skill/manifest.json +27 -0
- package/resources/skill/pull/SKILL.md +18 -44
- package/resources/skill/push/SKILL.md +30 -247
- package/resources/skill/references/aihub.md +86 -0
- package/resources/skill/references/api-endpoints.md +178 -0
- package/resources/skill/references/api.json +20248 -0
- package/resources/skill/{quickref → references}/app-api.md +44 -14
- package/resources/skill/{core → references}/architecture.md +6 -26
- package/resources/skill/references/chat-sdk.md +201 -0
- package/resources/skill/references/custom-services.md +308 -0
- package/resources/skill/references/data.md +298 -0
- package/resources/skill/references/db-relations.md +227 -0
- package/resources/skill/references/frontend.md +788 -0
- package/resources/skill/references/modules.md +66 -0
- package/resources/skill/references/parallel.md +48 -0
- package/resources/skill/{specs → references}/runtime.md +31 -1
- package/resources/skill/{specs → references}/security.md +3 -3
- package/resources/skill/references/ui-protocol.md +99 -0
- package/resources/skill/scripts/draftgo_delete.py +0 -2
- package/resources/skill/scripts/draftgo_init.py +15 -3
- package/resources/skill/scripts/draftgo_pull.py +154 -87
- package/resources/skill/scripts/draftgo_push.py +440 -183
- package/resources/skill/story/SKILL.md +13 -23
- package/src/cli.js +22 -7
- package/src/commandRegistry.js +34 -0
- package/src/commands/api.js +204 -0
- package/src/commands/autoPush.js +41 -0
- package/src/commands/check.js +27 -17
- package/src/commands/delete.js +6 -4
- package/src/commands/deploy.js +31 -0
- package/src/commands/help.js +41 -28
- package/src/commands/init.js +34 -20
- package/src/commands/local.js +9 -3
- package/src/commands/map.js +18 -7
- package/src/commands/sync.js +11 -4
- package/src/commands/update.js +39 -52
- package/src/commands/verifyUi.js +199 -0
- package/src/index.js +13 -46
- package/src/localdev/compose.js +48 -197
- package/src/localdev/index.js +116 -216
- package/src/localdev/mysqlClient.js +12 -9
- package/src/localdev/services.js +163 -0
- package/src/platforms.js +3 -3
- package/src/projectConfig.js +12 -2
- package/src/projectMap.js +240 -68
- package/src/skill.js +113 -29
- package/src/updateCheck.js +37 -15
- package/resources/skill/core/modules.md +0 -54
- package/resources/skill/practices/anti-patterns.md +0 -70
- package/resources/skill/practices/best-practices.md +0 -41
- package/resources/skill/practices/dev-declaration.md +0 -94
- package/resources/skill/quickref/api-endpoints.md +0 -130
- package/resources/skill/quickref/api.json +0 -17675
- package/resources/skill/quickref/dg-components.md +0 -198
- package/resources/skill/rules/dev-workflow.md +0 -652
- package/resources/skill/rules/frontend.md +0 -210
- package/resources/skill/rules/parallel.md +0 -263
- package/resources/skill/specs/data.md +0 -108
- package/resources/skill/specs/ui-protocol.md +0 -68
- package/src/commands/doctor.js +0 -54
- package/src/commands/new.js +0 -183
- package/src/commands/projectScript.js +0 -37
- /package/resources/skill/{rules → references}/debugging-syntax.md +0 -0
package/src/updateCheck.js
CHANGED
|
@@ -1,15 +1,42 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
// Fetch the latest draftgo-cli version from the npm registry.
|
|
4
|
-
//
|
|
5
|
-
// callers can gracefully fall back.
|
|
4
|
+
// Results are cached for 24 hours so update stays fast and deterministic.
|
|
6
5
|
|
|
7
6
|
const https = require('https');
|
|
8
|
-
const
|
|
7
|
+
const fs = require('fs');
|
|
8
|
+
const os = require('os');
|
|
9
|
+
const path = require('path');
|
|
9
10
|
|
|
10
11
|
const REGISTRY_URL = 'https://registry.npmjs.org/draftgo-cli/latest';
|
|
12
|
+
const CACHE_TTL_MS = 24 * 60 * 60 * 1000;
|
|
13
|
+
const CACHE_FILE = path.join(os.homedir(), '.draftgo-cli', 'update-check.json');
|
|
11
14
|
|
|
12
|
-
function
|
|
15
|
+
function readCache() {
|
|
16
|
+
try {
|
|
17
|
+
const cached = JSON.parse(fs.readFileSync(CACHE_FILE, 'utf8'));
|
|
18
|
+
if (!cached.version || !cached.checkedAt) return null;
|
|
19
|
+
if (Date.now() - Number(cached.checkedAt) > CACHE_TTL_MS) return null;
|
|
20
|
+
return String(cached.version);
|
|
21
|
+
} catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function writeCache(version) {
|
|
27
|
+
try {
|
|
28
|
+
fs.mkdirSync(path.dirname(CACHE_FILE), { recursive: true });
|
|
29
|
+
fs.writeFileSync(CACHE_FILE, JSON.stringify({ version, checkedAt: Date.now() }) + '\n', 'utf8');
|
|
30
|
+
} catch {
|
|
31
|
+
// Cache failures must never block CLI work.
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function fetchLatestVersion(timeoutMs = 3000, opts = {}) {
|
|
36
|
+
if (!opts.force) {
|
|
37
|
+
const cached = readCache();
|
|
38
|
+
if (cached) return Promise.resolve(cached);
|
|
39
|
+
}
|
|
13
40
|
return new Promise((resolve) => {
|
|
14
41
|
let req;
|
|
15
42
|
try {
|
|
@@ -22,7 +49,11 @@ function fetchLatestVersion(timeoutMs = 3000) {
|
|
|
22
49
|
res.setEncoding('utf8');
|
|
23
50
|
res.on('data', (c) => { body += c; });
|
|
24
51
|
res.on('end', () => {
|
|
25
|
-
|
|
52
|
+
try {
|
|
53
|
+
const version = JSON.parse(body).version || null;
|
|
54
|
+
if (version) writeCache(version);
|
|
55
|
+
resolve(version);
|
|
56
|
+
}
|
|
26
57
|
catch { resolve(null); }
|
|
27
58
|
});
|
|
28
59
|
}
|
|
@@ -46,13 +77,4 @@ function cmpSemver(a, b) {
|
|
|
46
77
|
return 0;
|
|
47
78
|
}
|
|
48
79
|
|
|
49
|
-
|
|
50
|
-
async function getFreshness() {
|
|
51
|
-
if (process.env.DRAFTGO_NO_UPDATE_CHECK === '1') return null;
|
|
52
|
-
const current = getPackageVersion();
|
|
53
|
-
const latest = await fetchLatestVersion();
|
|
54
|
-
if (!latest) return null;
|
|
55
|
-
return { current, latest, outdated: cmpSemver(latest, current) > 0 };
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
module.exports = { fetchLatestVersion, cmpSemver, getFreshness };
|
|
80
|
+
module.exports = { fetchLatestVersion, cmpSemver, readCache, CACHE_TTL_MS };
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
read_when: 评估功能可行性时 · 选择开发路径时 · 进入新项目做全局了解时
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# DraftGo 模块地图
|
|
6
|
-
|
|
7
|
-
## 可开发模块(开发者负责实现)
|
|
8
|
-
|
|
9
|
-
| 模块 | 开发方式 | 入口 |
|
|
10
|
-
|---|---|---|
|
|
11
|
-
| 页面 | 数据库 HTML(`page.value.html`) | `.draftgo/pages/` |
|
|
12
|
-
| 导航栏 | 数据库 HTML(`navigation.html`) | `.draftgo/navigations/` |
|
|
13
|
-
| 动态 DB | db_meta 定义 schema + `/api/db/{type}` 操作数据 | `.draftgo/db_meta/` |
|
|
14
|
-
| 自定义服务 | Python/JS/TS/Shell/Go 脚本,支持 route/event/scheduled 三种模式 | `.draftgo/custom_scripts/` |
|
|
15
|
-
| 外部 API | 管理端注册 + 页面调用 `App.callApi(code, ...)` | `.draftgo/external_apis/` |
|
|
16
|
-
| AIHub | 配置 AI Agent,页面调用 `DraftGoAI.chat/images` | `.draftgo/aihub/` |
|
|
17
|
-
| 文档中心 | Markdown 文章 + 分类树 | `.draftgo/docs/articles/` |
|
|
18
|
-
| 系统配置 | KV 存储,含全局前端层槽位 | `.draftgo/system_config/` |
|
|
19
|
-
|
|
20
|
-
## 平台内置模块(开箱即用,不需实现)
|
|
21
|
-
|
|
22
|
-
| 模块 | 能力 | 调用方式 |
|
|
23
|
-
|---|---|---|
|
|
24
|
-
| 认证 | 注册/登录/刷新/找回密码/微信登录/手机邮箱验证 | `POST /api/auth/*` |
|
|
25
|
-
| 角色权限 | 多角色 RBAC,页面/DB/API 均支持角色级权限 | `App.isAdmin` / `App.currentUser.role_code` |
|
|
26
|
-
| 通知公告 | 发布公告,支持类型/状态/分页 | `GET/POST /api/notices` |
|
|
27
|
-
| 工单反馈 | 用户提交问题,支持类型/状态跟踪 | `GET/POST /api/feedback` |
|
|
28
|
-
| 备份恢复 | 完整/选择性备份,JSON/.dgbak 格式,支持 dry-run | `POST /api/system/backup` |
|
|
29
|
-
| 系统管理 | 系统配置 KV、存储健康、全局前端层、通知测试 | `GET/PUT /api/system/*` |
|
|
30
|
-
|
|
31
|
-
## 模块选型决策
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
要存储业务数据?
|
|
35
|
-
→ 有固定结构 → 动态 DB(db_meta 定义 schema)
|
|
36
|
-
→ 仅需 KV → sys_config(category 自定义)
|
|
37
|
-
|
|
38
|
-
要调用 AI?
|
|
39
|
-
→ 聊天/问答 → AIHub + DraftGoAI.chat()
|
|
40
|
-
→ 图片生成 → AIHub + DraftGoAI.images()
|
|
41
|
-
|
|
42
|
-
要调用第三方服务?
|
|
43
|
-
→ 纯 HTTP 调用 → 外部 API(管理端注册,App.callApi 调用)
|
|
44
|
-
→ 需要服务端逻辑(定时/事件/加工) → 自定义服务
|
|
45
|
-
|
|
46
|
-
要展示内容文档?
|
|
47
|
-
→ 文档中心(Markdown + 分类树)
|
|
48
|
-
|
|
49
|
-
要做定时任务或事件响应?
|
|
50
|
-
→ 自定义服务(mode: scheduled / event)
|
|
51
|
-
|
|
52
|
-
要做后台管理页?
|
|
53
|
-
→ 业务页面 + 动态 DB + 角色权限
|
|
54
|
-
```
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
read_when: 开发前检查思路 · Code Review 时
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# 反模式清单
|
|
6
|
-
|
|
7
|
-
## 功能完成度反模式
|
|
8
|
-
|
|
9
|
-
| 反模式 | 问题 | 正确做法 |
|
|
10
|
-
|---|---|---|
|
|
11
|
-
| 静态卡片充当功能 | 按钮点击无效,数据硬编码 | 默认按真实落地闭环实现;用户说"先看效果"才允许 mock |
|
|
12
|
-
| 只建页面不绑入口 | 页面存在但无法访问 | 创建页面后必须绑定至少一个入口 |
|
|
13
|
-
| 只做前台不做后台 | 展示数据没有维护入口 | 展示可维护内容时主动判断是否需要管理侧页面 |
|
|
14
|
-
| 伪功能写入 lessons 前不说明 | 用户不知道功能不完整 | 无法实现真实闭环时停止开发,向用户说明阻塞点 |
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## 架构理解反模式
|
|
19
|
-
|
|
20
|
-
| 反模式 | 问题 |
|
|
21
|
-
|---|---|
|
|
22
|
-
| 在数据库页面写 TSX / React 组件 | 数据库页面不进入 Vite 编译链 |
|
|
23
|
-
| 把 `dg-*` 当 daisyUI / Bootstrap | `dg-*` 是 shadcn 协议,不是别的库 |
|
|
24
|
-
| 在业务页面渲染系统 Header / 导航 | Header 属于壳层,页面渲染会重复 |
|
|
25
|
-
| 修改壳层 `.tsx` 文件来改页面内容 | 页面内容在数据库里,改壳层源码不对 |
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## API 调用反模式
|
|
30
|
-
|
|
31
|
-
| 反模式 | 问题 | 正确做法 |
|
|
32
|
-
|---|---|---|
|
|
33
|
-
| 不检查 `res.code` 直接用 `res.data` | 报错时会访问 null | 先 `if (res.code !== 200)` 处理错误 |
|
|
34
|
-
| GET 列表不传分页参数 | 数据超 10000 条后端返回 400 | 始终传 `page` + `page_size` |
|
|
35
|
-
| `GET /db-meta/{id}` 用 id 查 type | 返回"元数据不存在" | 用 type 查:`GET /db-meta/{type}` |
|
|
36
|
-
| 动态 DB POST 时字段平铺到 body 顶层 | 字段被忽略 | 业务字段必须放在 `data: {}` 里 |
|
|
37
|
-
| 在页面里写死 API Key / Bearer | 密钥暴露在前端 | 管理端注册外部 API,用 `App.callApi` 调用 |
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## 路由 & DOM 反模式
|
|
42
|
-
|
|
43
|
-
| 反模式 | 问题 | 正确做法 |
|
|
44
|
-
|---|---|---|
|
|
45
|
-
| `window.location.search` 读参数 | iframe 里取不到壳层 URL | `window.__DG_ROUTE_CONTEXT__.query` |
|
|
46
|
-
| `window.location.href = '/path'` 跳转 | 只跳 iframe 自身,壳层不感知 | `window.parent.location.href = '/path'` |
|
|
47
|
-
| `window.alert/confirm/prompt` | 阻塞主线程,iframe 行为不可预期 | `App.showModal` / `App.confirm` |
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## 开发流程反模式
|
|
52
|
-
|
|
53
|
-
| 反模式 | 问题 |
|
|
54
|
-
|---|---|
|
|
55
|
-
| 高风险任务没有 Story 就动手 | 方向错了才发现,返工代价大 |
|
|
56
|
-
| 小修也走完整 Story 门 | 拖慢速度,过度流程化 |
|
|
57
|
-
| 发现与 Story 冲突时静默执行 | 覆盖已确认的需求 |
|
|
58
|
-
| 页面改了但没更新导航入口 | 用户找不到新功能 |
|
|
59
|
-
| 每次开发都从头读全部规则 | 按任务规模渐进读取,小修只读最小必要规则 |
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
## 性能 & 体验反模式
|
|
64
|
-
|
|
65
|
-
| 反模式 | 问题 |
|
|
66
|
-
|---|---|
|
|
67
|
-
| 请求完成前页面空白 | 先渲染骨架屏,再异步填数据 |
|
|
68
|
-
| 操作型页面用文档流堆叠 | 分页/操作栏随少量数据上浮 |
|
|
69
|
-
| 硬编码颜色 | 亮暗切换后颜色异常 |
|
|
70
|
-
| 引入境外 CDN | 国内访问慢/超时 |
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
read_when: 开发过程中做决策时 · Code Review 时
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# 最佳实践
|
|
6
|
-
|
|
7
|
-
## 服务设计
|
|
8
|
-
|
|
9
|
-
- **优先用平台能力**:动态 DB → 自定义服务 → 外部 API,按复杂度递进,不要绕过平台直接硬编码
|
|
10
|
-
- **db_meta 先于代码**:操作动态 DB 前先读 `.draftgo/db_meta/index.json`,不要硬编码 type 值
|
|
11
|
-
- **权限跟数据一起设计**:创建 db_meta 时同时设计 `permission` 字段,不要事后补
|
|
12
|
-
- **schema_validation 开启**:动态 DB 数据写入时建议开启 `schema_validation: 1`,及早发现数据问题
|
|
13
|
-
|
|
14
|
-
## 页面开发
|
|
15
|
-
|
|
16
|
-
- **先分配空间,再放组件**:操作型页面用工作台布局(flex column + 主体 flex:1 min-height:0),不用文档流堆叠
|
|
17
|
-
- **四态必须都有**:加载态(dg-skeleton)/ 空态(明确文案 + 操作入口)/ 错误态(Toast + 重试)/ 成功态
|
|
18
|
-
- **初始渲染不能空白**:先展示骨架屏,再异步填数据;不能因为网络延迟导致整页白屏
|
|
19
|
-
- **新页面必须绑定入口**:导航栏 / 首页模块 / 后台菜单 / 相关页面按钮至少一个;只建文件不绑入口不算完成
|
|
20
|
-
|
|
21
|
-
## API 调用
|
|
22
|
-
|
|
23
|
-
- **统一信封消费**:始终检查 `res.code !== 200`,再从 `res.data` 取载荷;不要假设 200
|
|
24
|
-
- **分页参数显式传**:列表请求必须传 `page` + `page_size`,超 10000 条后端拒绝
|
|
25
|
-
- **外部 API 用 App.callApi**:不要在页面里写 API Key / Bearer,认证由管理端注册、后端注入
|
|
26
|
-
|
|
27
|
-
## 资源路径
|
|
28
|
-
|
|
29
|
-
- **静态资源用本地路径**:`/assets/tailwindcss.js`、`/assets/fontawesome/css/all.min.css`、`/assets/icons/{name}.svg`
|
|
30
|
-
- **图标用内置库**:先查 `/assets/icons/manifest.json`,已有的直接用,不要引外部图标
|
|
31
|
-
|
|
32
|
-
## 主题适配
|
|
33
|
-
|
|
34
|
-
- **颜色全用语义 token**:`var(--dg-accent)`、`var(--dg-bg-surface)` 等,避免亮暗切换时颜色失效
|
|
35
|
-
- **品牌色 / 图表色例外**:需要同时提供 `[data-theme="dark"]` 选择器覆盖,且确保对比度达 WCAG AA
|
|
36
|
-
|
|
37
|
-
## 推送收尾
|
|
38
|
-
|
|
39
|
-
- **修改页面同时推导航**:如果页面新增了导航入口,导航 HTML 也要一起 push
|
|
40
|
-
- **changelog 按影响写**:影响可见功能、跨资源、已发布时写 `.draftgo/changelog.md`,纯小修可跳过
|
|
41
|
-
- **用 draftgo check 验收**:涉及路由、入口绑定的改动,用 `draftgo check` 确认没有悬空入口
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
read_when: 开始任何标准功能/高风险开发任务之前 · 用户意图模糊需要澄清时
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# 开发声明协议
|
|
6
|
-
|
|
7
|
-
开发声明是在正式动代码前,AI 向用户同步「我理解的任务边界」,确保方向对齐、避免返工。
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## 触发条件
|
|
12
|
-
|
|
13
|
-
满足以下任一条件时,输出开发声明:
|
|
14
|
-
|
|
15
|
-
- 标准功能或高风险任务(按 `dev-workflow.md` 分级)
|
|
16
|
-
- 涉及 2 个以上资源(页面 + 导航、多页面联动、DB + 页面等)
|
|
17
|
-
- 用户描述包含模糊词(「做一个...」「帮我整一个...」「类似...的功能」)
|
|
18
|
-
- 实现路径有分叉点(多种技术方案可选)
|
|
19
|
-
- 用户意图与现有 Story 存在潜在冲突
|
|
20
|
-
|
|
21
|
-
**不触发**:小修、单文件纯改、用户已提供完整规格的任务。
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## 信息充分性判断
|
|
26
|
-
|
|
27
|
-
输出声明前,检查是否掌握以下信息:
|
|
28
|
-
|
|
29
|
-
| 必须已知 | 可推断 | 需要追问 |
|
|
30
|
-
|---|---|---|
|
|
31
|
-
| 功能目标(做什么) | 技术实现路径 | 数据来源(DB类型/字段) |
|
|
32
|
-
| 目标页面/路由 | 权限配置 | 是否需要管理侧页面 |
|
|
33
|
-
| 核心交互流程 | UI 风格偏好 | 与已有功能的关系 |
|
|
34
|
-
|
|
35
|
-
信息充分 → 直接输出声明
|
|
36
|
-
关键信息缺失 → 先追问(最多 3 个问题),再输出声明
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## 追问格式(适配选择式交互)
|
|
41
|
-
|
|
42
|
-
追问必须带 AI 的推测和选项,不能空问:
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
我准备这样理解这个任务,请确认或调整:
|
|
46
|
-
|
|
47
|
-
1. **数据来源**(我的推测:用动态 DB 新建 `order` 类型)
|
|
48
|
-
A. 用动态 DB 新建(推荐)
|
|
49
|
-
B. 复用已有 DB 类型:___
|
|
50
|
-
C. 用系统配置 KV 存储
|
|
51
|
-
|
|
52
|
-
2. **管理侧**(我的推测:需要一个后台管理页)
|
|
53
|
-
A. 需要,用户提交 + 管理员审核
|
|
54
|
-
B. 不需要,纯用户自助
|
|
55
|
-
C. 后续再做
|
|
56
|
-
|
|
57
|
-
3. **入口位置**(我的推测:加到顶部导航)
|
|
58
|
-
A. 顶部导航
|
|
59
|
-
B. 首页模块入口
|
|
60
|
-
C. 仅通过链接/按钮访问,不加导航
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
## 开发声明输出格式
|
|
66
|
-
|
|
67
|
-
```markdown
|
|
68
|
-
## 开发声明
|
|
69
|
-
|
|
70
|
-
**任务**:[一句话描述目标]
|
|
71
|
-
|
|
72
|
-
**我将要做的事**:
|
|
73
|
-
- [ ] [资源 1]:[具体内容]
|
|
74
|
-
- [ ] [资源 2]:[具体内容]
|
|
75
|
-
- [ ] [入口绑定]:[绑定位置]
|
|
76
|
-
|
|
77
|
-
**数据方案**:[DB类型 / 字段设计 / 权限配置]
|
|
78
|
-
|
|
79
|
-
**不做的事**:[明确排除的内容,避免范围蔓延]
|
|
80
|
-
|
|
81
|
-
**风险点**:[如有,说明;无则省略]
|
|
82
|
-
|
|
83
|
-
确认后开始。
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## 关键原则
|
|
89
|
-
|
|
90
|
-
1. **声明是同步,不是审批**——输出后等用户一句确认(「可以」「没问题」「开始」均算确认),不必等用户逐条review。
|
|
91
|
-
2. **推测要带自信**——「我推测」不是「我不确定」,是「我基于上下文的最优判断」;若用户不纠正则视为接受。
|
|
92
|
-
3. **一次声明,不反复确认**——声明输出后开始执行,中途不再停下来二次确认细节,除非遇到破坏性操作。
|
|
93
|
-
4. **小修不触发**——小修直接定位改,拖慢节奏的声明反而是反模式。
|
|
94
|
-
5. **声明后发现冲突**——若执行中发现与 Story 或现有资源冲突,停止并显式提示,不静默执行。
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
read_when: 需要查具体 API 端点时 · 构造请求时
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# 后端 API 速查
|
|
6
|
-
|
|
7
|
-
> 完整 OpenAPI 规范见 [api.json](./api.json)
|
|
8
|
-
> 统一响应信封:`{ code: 200, data: <载荷>, message: "success" }`
|
|
9
|
-
|
|
10
|
-
## 认证
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
POST /api/auth/login, /register, /logout, /refresh
|
|
14
|
-
POST /api/auth/forgot-password, /reset-password
|
|
15
|
-
POST /api/auth/wechat/mp/oauth, /wechat/mini/login
|
|
16
|
-
POST /api/auth/wechat/mp/qr/create GET /wechat/mp/qr/poll
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## 用户 & 角色
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
GET/PUT /api/users/me PUT /users/me/password
|
|
23
|
-
GET/POST /api/users GET/PUT/DELETE /users/{id}
|
|
24
|
-
POST /users/{id}/ban, /unban
|
|
25
|
-
|
|
26
|
-
GET/POST /api/roles GET/PUT/DELETE /roles/{id}
|
|
27
|
-
POST /roles/{id}/assign/{uid} DELETE /roles/{id}/revoke/{uid}
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## 页面
|
|
31
|
-
|
|
32
|
-
```
|
|
33
|
-
GET/POST /api/pages/
|
|
34
|
-
GET/PUT/DELETE /pages/{id}
|
|
35
|
-
POST /pages/{id}/reset-system
|
|
36
|
-
GET /pages/by-route?route=/xxx
|
|
37
|
-
GET /pages/{id}/versions
|
|
38
|
-
POST /versions/{vid}/restore, /star
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## 导航栏
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
GET/POST /api/navigations
|
|
45
|
-
GET /navigations/{code}
|
|
46
|
-
PUT/DELETE /navigations/{id}
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## 动态 DB
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
GET /api/db/{type} 支持 filters/order_by/order
|
|
53
|
-
POST /db/{type} body: { data: {...} } 或数组
|
|
54
|
-
PATCH /db/{type}/batch
|
|
55
|
-
GET/PUT/DELETE /db/{type}/{id}
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## DB Meta ⚠️
|
|
59
|
-
|
|
60
|
-
```
|
|
61
|
-
GET/POST /api/db-meta
|
|
62
|
-
GET /db-meta/{type} ← 必须用 type,不是 id!
|
|
63
|
-
PUT/DELETE /db-meta/{id}
|
|
64
|
-
POST /db-meta/{type}/reconcile-fields
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## 自定义服务
|
|
68
|
-
|
|
69
|
-
```
|
|
70
|
-
GET/POST /api/scripts
|
|
71
|
-
GET/PUT/DELETE /scripts/{id}
|
|
72
|
-
POST /scripts/{id}/enable, /disable, /execute
|
|
73
|
-
ANY /api/x/{slug}/{path} ← 脚本运行时端点
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## 外部 API
|
|
77
|
-
|
|
78
|
-
```
|
|
79
|
-
GET /api/external-apis/available ← 页面可调用列表(优先用 App.callApi)
|
|
80
|
-
GET/POST /api/external-apis ← 管理端
|
|
81
|
-
PATCH /external-apis/{id}/status
|
|
82
|
-
POST /external-apis/{id}/test
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## AIHub & AI推理
|
|
86
|
-
|
|
87
|
-
```
|
|
88
|
-
GET/POST /api/aihub
|
|
89
|
-
POST /aihub/{id}/sync
|
|
90
|
-
GET /api/v1/models
|
|
91
|
-
POST /v1/chat/completions ← OpenAI 兼容格式
|
|
92
|
-
POST /api/agents/{id}/chat, /images
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
## 文档中心
|
|
96
|
-
|
|
97
|
-
```
|
|
98
|
-
GET/POST /api/docs/categories
|
|
99
|
-
GET /docs/articles, /docs/articles/{key}, /docs/search
|
|
100
|
-
POST /docs/articles PUT/DELETE /docs/articles/{id}
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## 系统 & 备份
|
|
104
|
-
|
|
105
|
-
```
|
|
106
|
-
GET /api/system/config
|
|
107
|
-
GET/PUT/DELETE /system/{key}
|
|
108
|
-
GET/POST /api/system/backup
|
|
109
|
-
POST /system/restore, /reset
|
|
110
|
-
POST /system/restore/selective?mode=replace|merge|append
|
|
111
|
-
POST /api/upload
|
|
112
|
-
GET /api/logs
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
## 二次认证(高危操作前必须)
|
|
116
|
-
|
|
117
|
-
restore / reset / undo / cleanup-orphans 需要:
|
|
118
|
-
```
|
|
119
|
-
POST /api/auth/reauth { password, scope } → 返回 confirm_token
|
|
120
|
-
请求头加:X-Confirm-Token: <token>
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
## 不使用信封的端点
|
|
124
|
-
|
|
125
|
-
| 端点 | 格式 |
|
|
126
|
-
|---|---|
|
|
127
|
-
| `POST /v1/chat/completions` | OpenAI SSE / JSON |
|
|
128
|
-
| `GET /v1/models` | `{ object:"list", data:[...] }` |
|
|
129
|
-
| `POST /external-apis/call/{code}` | 上游原始响应 |
|
|
130
|
-
| `ANY /api/x/{slug}/{path}` | 脚本自定义 |
|