draftgo-cli 4.0.24 → 4.0.26

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.
Files changed (88) hide show
  1. package/README.md +23 -37
  2. package/package.json +3 -5
  3. package/resources/skill/SKILL.md +9 -5
  4. package/resources/skill/manifest.json +2 -5
  5. package/resources/skill/references/ai.md +41 -0
  6. package/resources/skill/references/app-api.md +2 -50
  7. package/resources/skill/references/architecture.md +1 -1
  8. package/resources/skill/references/chat-sdk.md +29 -37
  9. package/resources/skill/references/checkout.md +4 -4
  10. package/resources/skill/references/data.md +0 -46
  11. package/resources/skill/references/delivery.md +3 -3
  12. package/resources/skill/references/diagnostics.md +10 -11
  13. package/resources/skill/references/frontend.md +23 -20
  14. package/resources/skill/references/mcp.md +4 -14
  15. package/resources/skill/references/methods.md +15 -68
  16. package/resources/skill/references/modules.md +23 -44
  17. package/resources/skill/references/runtime.md +3 -20
  18. package/resources/skill/story/SKILL.md +2 -2
  19. package/src/apiContractCache.js +14 -6
  20. package/src/cli.js +0 -7
  21. package/src/commandRegistry.js +0 -6
  22. package/src/commands/api.js +87 -17
  23. package/src/commands/apiKey.js +2 -6
  24. package/src/commands/autoPush.js +15 -51
  25. package/src/commands/capabilities.js +22 -15
  26. package/src/commands/check.js +19 -53
  27. package/src/commands/checkout.js +1 -4
  28. package/src/commands/clean.js +1 -1
  29. package/src/commands/commit.js +1 -4
  30. package/src/commands/components.js +12 -8
  31. package/src/commands/conflict.js +4 -6
  32. package/src/commands/conflicts.js +1 -2
  33. package/src/commands/connect.js +0 -8
  34. package/src/commands/delete.js +15 -11
  35. package/src/commands/deploy.js +64 -26
  36. package/src/commands/diff.js +1 -4
  37. package/src/commands/group.js +2 -3
  38. package/src/commands/help.js +22 -43
  39. package/src/commands/init.js +13 -6
  40. package/src/commands/local.js +4 -1
  41. package/src/commands/map.js +138 -23
  42. package/src/commands/reconcile.js +1 -15
  43. package/src/commands/role.js +1 -2
  44. package/src/commands/status.js +12 -40
  45. package/src/commands/update.js +18 -24
  46. package/src/commands/verify.js +8 -7
  47. package/src/commands/worklog.js +11 -5
  48. package/src/contractCompatibility.js +10 -2
  49. package/src/localRuntime/compose.js +41 -27
  50. package/src/localRuntime/detect.js +6 -6
  51. package/src/localRuntime/index.js +47 -47
  52. package/src/localRuntime/services.js +2 -39
  53. package/src/mcp/client.js +99 -134
  54. package/src/mcp/parallel.js +25 -2
  55. package/src/mcp/protocol.js +38 -9
  56. package/src/mcp/tools.js +10 -19
  57. package/src/projectConfig.js +1 -4
  58. package/src/{workspaceHealth.js → projectHealth.js} +5 -5
  59. package/src/projectMap.js +1 -1
  60. package/src/runtimeFiles.js +2 -1
  61. package/src/worklog.js +3 -2
  62. package/src/worktree/backend.js +127 -15
  63. package/src/worktree/index.js +64 -22
  64. package/src/worktree/locks.js +52 -0
  65. package/src/worktree/manifest.js +18 -4
  66. package/src/worktree/status.js +4 -2
  67. package/resources/custom-service-sdk/ai.go +0 -520
  68. package/resources/custom-service-sdk/ai_test.go +0 -156
  69. package/resources/custom-service-sdk/auth_test.go +0 -56
  70. package/resources/custom-service-sdk/billing.go +0 -596
  71. package/resources/custom-service-sdk/billing_test.go +0 -150
  72. package/resources/custom-service-sdk/go.mod +0 -3
  73. package/resources/custom-service-sdk/manifest.json +0 -77
  74. package/resources/custom-service-sdk/platform.go +0 -352
  75. package/resources/custom-service-sdk/platform_logger_test.go +0 -24
  76. package/resources/custom-service-sdk/registration_test.go +0 -39
  77. package/resources/custom-service-sdk/resources.go +0 -247
  78. package/resources/custom-service-sdk/resources_billing_test.go +0 -115
  79. package/resources/custom-service-sdk/resources_files_test.go +0 -57
  80. package/resources/custom-service-sdk/resources_scope_test.go +0 -92
  81. package/resources/custom-service-sdk/sdk.go +0 -209
  82. package/resources/skill/references/aihub.md +0 -116
  83. package/resources/skill/references/custom-services.md +0 -201
  84. package/src/commands/customService.js +0 -95
  85. package/src/commands/dataRange.js +0 -33
  86. package/src/commands/grant.js +0 -29
  87. package/src/commands/space.js +0 -41
  88. package/src/customServices.js +0 -484
package/README.md CHANGED
@@ -1,18 +1,18 @@
1
1
  # DraftGo CLI 4
2
2
 
3
- 面向 AI 编码工具的 DraftGo 工作台 CLI。它负责 Skill 安装、项目连接、MCP 发现、长正文 checkout/commit、自定义服务草稿、统一本地验收和 worklog 记录。
3
+ 面向 AI 编码工具的 DraftGo CLI。它负责 Skill 安装、项目连接、System MCP 发现、长正文 checkout/commit、组件开发、统一本地验收和 worklog 记录。
4
4
 
5
5
  ## 核心规则
6
6
 
7
7
  - 根 Skill 自动加载;Agent 只读取当前任务需要的 Reference。
8
- - pages、navigationsdocs/articles 和 custom services 的完整正文使用 `checkout`、worktree、`diff`、`commit`;结构化资源使用 MCP/API。
8
+ - pages、navigationsdocs/articles 的完整正文使用 `checkout`、worktree、`diff`、`commit`;结构化资源使用 MCP/API。
9
9
  - MCP schema 是服务端实时契约。已知 operation 优先使用项目私有缓存;首次使用或 `registry_revision` 变化时 describe。schema 不写入 Skill 或聊天上下文。
10
10
  - 不同资源、operation 和 owner 的工作全部并发;同一资源的依赖步骤保持串行。
11
11
  - 每个任务开始记录到 `.draftgo/worklog.md`,验证和交付成功后再标记完成。
12
12
  - 已知页面使用 `draftgo map --type pages --route <path>` 或 `--title <title>` 精确定位;只需范围和状态时使用 `--summary`,浏览列表时使用 `--limit`(默认 20)/`--cursor`,不默认全量 map。
13
13
  - `--output json` 的 stdout 只包含 UTF-8 JSON;诊断和进度写入 stderr。大变更先用 `draftgo diff --stat` 或 `--summary`。
14
14
 
15
- 跨板块任务先看[极简方法指南](resources/skill/references/methods.md):它按 AIHub、知识库/记忆、页面/内容、动态数据、自定义服务、MCP、运行诊断和交付验收给出“适用场景 + 最短正确命令链 + 失败定位 + 完成条件”。动态 operation 不写死;未知契约统一用 `draftgo api search`、`draftgo api describe`、`draftgo api call` 实时发现。
15
+ 跨板块任务先看[极简方法指南](resources/skill/references/methods.md):它按 AI 能力、知识库/记忆、页面/内容、动态数据、MCP、运行诊断和交付验收给出“适用场景 + 最短正确命令链 + 失败定位 + 完成条件”。动态 operation 不写死;未知契约统一用 `draftgo api search`、`draftgo api describe`、`draftgo api call` 实时发现。
16
16
 
17
17
  ## 验收策略
18
18
 
@@ -48,7 +48,7 @@ draftgo mcp setup
48
48
  draftgo mcp test
49
49
  ```
50
50
 
51
- `connect` 会验证当前用户的 DraftGo API Key、MCP initialize、tools/list 和关键工具调用,然后把连接写入项目私有的 `.draftgo/config.json`。宿主 MCP 配置只包含 `draftgo mcp serve`,不会保存 API Key。需要开发 space 资源时增加 `--scope-type space --space-id <id>`;平台组件和系统配置仍按 operation 契约使用 platform 上下文。
51
+ `connect` 会验证当前用户的 DraftGo API Key、MCP initialize、tools/list、Registry search/describe,并通过 `api_call` 读取脱敏的当前 API Key 状态,然后才把连接写入项目私有的 `.draftgo/config.json`。该探测固定为无参数、低风险、非破坏的 GET,不创建或修改业务数据。宿主 MCP 配置只包含 `draftgo mcp serve`,不会保存 API Key。API Key 只代表真实用户,CLI 不附加契约之外的授权字段。
52
52
 
53
53
  本地底座:
54
54
 
@@ -73,14 +73,16 @@ draftgo list-targets
73
73
  draftgo connect [target...]
74
74
  ```
75
75
 
76
- `draftgo status` 会通过只读 MCP/API 诊断显示服务连接健康状态、服务版本和当前用户 API Key 的 `platform`/`space` 上下文;`--output json` 适合读取 `connection.health`、`workspace_id` 与 `space_id`。
76
+ `draftgo status` 会通过只读 MCP 诊断显示服务连接健康状态、服务版本和 Registry revision;`--output json` 适合读取 `connection.health` 与 `connection.registry_revision`。
77
+
78
+ `draftgo update` 和 `draftgo update all` 只刷新项目中已经安装的 DraftGo Skill,不会因为检测到 `.cursor`、`AGENTS.md` 等工具痕迹而新增配置。显式指定 target 时(例如 `draftgo update cursor`),如果该 Skill 尚未安装,会按你的明确请求直接安装并更新它;首次接入也可以使用 `draftgo init <target>`。
77
79
 
78
80
  ### 发现与正文
79
81
 
80
82
  ```text
81
- draftgo map [--type pages|nav|docs|custom-services] [--route <path>] [--title <title>] [--summary] [--limit <1-100>] [--cursor <opaque>] [--output json]
82
- draftgo checkout <pages|nav|docs|custom-services> <id...> [--force]
83
- draftgo check [custom-services <id...>] [--remote]
83
+ draftgo map [--type pages|nav|docs] [--route <path>] [--title <title>] [--summary] [--limit <1-100>] [--cursor <opaque>] [--output json]
84
+ draftgo checkout <pages|nav|docs> <id...> [--force]
85
+ draftgo check [--remote]
84
86
  draftgo verify [<type> <id...>] [visual flags]
85
87
  draftgo diff <type> <id> [--stat|--summary] [--output json]
86
88
  draftgo commit <type> <id...>
@@ -118,26 +120,14 @@ draftgo components export <library> --file <archive.zip>
118
120
 
119
121
  `search` 和 `show` 始终读取当前 DraftGo 实例的组件目录,AI 不得按名称猜写 props/slots。Page 以真实根标签和 `data-dg-use="library/component"` 保存活引用,发布新 revision 后刷新自动升级。高度个性化时先 checkout Page,再用 `expand` 固化当前 props、slots、组件/库 CSS、公共资产和 mount 初始化;展开实例变成普通 HTML/CSS/JavaScript,不再随组件升级,仍需经过 `diff -> verify -> commit`。
120
122
 
121
- ### Custom service
122
-
123
- 最短开发闭环:
124
-
125
- ```bash
126
- # 先用 MCP 定位或创建服务并取得 ID
127
- draftgo checkout custom-services <id...>
128
- draftgo diff custom-services <id> --stat
129
- draftgo commit custom-services <id...>
130
- draftgo test custom-services <id> --source draft --handler route:POST:/path --input request.json
131
- ```
123
+ 最终版服务端内置 `DraftGo` 组件库(slug 为 `draftgo`),当前包含 47 个组件,目录以实例实时返回为准。常用组件包括 `button`、`input`、`select`、`multi-select`、`switch`、`dialog`、`drawer`、`data-filter-bar`、`data-table`、`data-list`、`pagination`、`date-picker`、`number-input`、`file-upload`、`tabs`、`menu`、`popover`、`tooltip`、`empty-state`、`chat` 等。官方页面中的可见选择器必须使用 `draftgo/select` 或 `draftgo/multi-select`,不要写原生 `<select>`。
132
124
 
133
- 每个 worktree 只有 `service.go` 与 `service.json` 是用户内容;Route/Event/Scheduled handler 仅由 `Register` 自动发现。CLI 另生成带 `DO NOT EDIT` 标记的 `go.mod/go.sum`、本地编译入口和 SDK 副本,供 gopls、`go build` 使用;它们会在 checkout commit 时重建,且永不进入 diff、hash、归档、冲突材料或云端。第三方依赖只在源码顶部用 `//draftgo:require module@version` 固定。旧四文件 worktree 不受支持,请删除后用当前 CLI 重新 checkout。
134
-
135
- `commit custom-services` 会自动完成提交、验证和发布,并输出明确的 published 提示;`validate`、`test`、`publish` 仍可作为单独的兼容入口。`test` 只运行 cloud draft,不调用线上版本;发布后如需再试运行,先修改并提交形成新草稿。默认拒绝外部副作用;外部调用用 `--side-effect-policy mock` 模拟,只有明确需要真实副作用时才组合 `--side-effect-policy live --test-write`。数据库等写操作也必须显式加 `--test-write`。
136
-
137
- `--source` 支持 `draft`(默认)、`auto`、`published`。Selector 支持 `route:METHOD:/path`、`event:name`、`scheduled:name` 或 handler 名;`--input`、`--headers`、`--user` 都读取 UTF-8 JSON object。普通 SDK 调用继承已验证的 `platform` 或 `space` 上下文;自定义服务可对单次操作显式使用 `ctx.Admin.*`,该次调用按系统内置 `*:*:all` 全权限执行、进入审计且不会泄漏到后续调用。余额扣款、权益、支付和订阅使用 `ctx.Billing` / `ctx.Admin.Billing`,精确签名查看 checkout 后只读的 `.draftgo-sdk/billing.go`。完整字段与规则见[自定义服务方法指南](resources/skill/references/custom-services.md)。
125
+ Page Runtime 的共享资源由最终版 `draftgo` 本地提供:`/assets/adapters/draftgo-components.js`、`/assets/adapters/draftgo-theme.css`、`/assets/tailwindcss.js`、`/assets/icons/`、`/assets/fontawesome/`、`/assets/vendor/{dompurify,marked,highlightjs}/`、`/assets/vendor/gsap/{gsap.min.js,Draggable.min.js}`。`draftgo/chat` 的完整实现直接存放在组件 `Definition.JS`,与其他组件走同一发布和按需解析流程,不存在独立 Chat SDK 静态文件。模型供应商品牌图标位于 `/assets/providers/`,通过 `DraftGoProviderIcons.get(kind)` 查找,未知供应商回退通用图标;不要引用 CDN。历史第三方组件资源不属于最终版契约。
138
126
 
139
127
  ### MCP/API
140
128
 
129
+ `api search` 和 `capabilities list/search` 默认 20 条,支持 `--module`、`--method`、`--limit`、`--cursor`。保留 `next_cursor`,需要更多时继续读取;只有显式 `capabilities audit` 才遍历全部能力。describe 保留完整契约,分页不裁剪接口能力。
130
+
141
131
  ```text
142
132
  draftgo mcp setup [target...]
143
133
  draftgo mcp status [target...]
@@ -148,31 +138,26 @@ draftgo api search <query>
148
138
  draftgo api describe <operation_id>
149
139
  draftgo api call <operation_id> --input <json-file>
150
140
  draftgo delete <operation_id> [id] [--params JSON]
151
- draftgo capabilities list [--module <name>] [--type <resource>] [--method <method>]
141
+ draftgo capabilities list [--module <name>] [--type <module>] [--method <method>]
152
142
  draftgo capabilities search <query> [--risk <level>] [--permission <permission>]
153
143
  draftgo capabilities show <operation_id>
154
144
  draftgo capabilities audit --output json
155
145
  ```
156
146
 
157
- `api call` 对已缓存 operation 直接调用并携带 `registry_revision`。服务端返回 `CONTRACT_CHANGED` 时重新 describe;只读或 operation 契约未变化时最多重试一次,危险 operation 自身契约变化时阻断调用并提示升级 CLI 后重新确认。调用输入必须是 UTF-8 JSON object;输出包含 HTTP status、服务端 code 和 request ID。
147
+ `capabilities --type` `--module` 的简写,用于 Registry module 筛选;它不表示 organization、space、scope `resource_type`。
148
+
149
+ `api call` 对已缓存 operation 直接调用并携带 `registry_revision`。服务端返回 `CONTRACT_CHANGED` 时重新 describe;只读或 operation 契约未变化时最多重试一次,危险 operation 自身契约变化时阻断调用并提示升级 CLI 后重新确认。调用输入必须是 UTF-8 JSON object;输出包含 HTTP status、服务端 code 和 request ID。System MCP 是动态 API 的唯一契约来源,CLI 不固化业务 URL 或请求结构。
158
150
 
159
- 权限快捷命令:
151
+ RBAC 与 API Key 快捷命令:
160
152
 
161
153
  ```bash
162
154
  draftgo role list
163
- draftgo space list
164
- draftgo space members list --input request.json
165
155
  draftgo group members add --input request.json
166
- draftgo grant create --input request.json
167
156
  draftgo api-key status
168
157
  draftgo api-key rotate
169
- draftgo data-range list
170
158
  ```
171
159
 
172
- `role` 管理无作用域的 Role 模板;授权使用 `grant` 创建带 `platform` `space` 范围的 AccessGrant。工作区成员关系不直接授予权限。资源归属由服务端持久化 ResourceOwnership 决定,DB DataRange
173
- 只在该范围内应用 `none`、`owner` 或 `all` 记录策略。交互式 CLI、MCP 和普通 HTTP API 均使用当前用户的
174
- API Key,并始终按该用户的 AccessGrant 授权;API Key 不能创建或伪造服务身份。CI、定时任务和共享服务等
175
- 无人值守自动化由运行时使用 system 身份;定时和事件处理器没有调用者,必须在代码中显式使用 `ctx.Admin.*`,不创建服务主体 AccessGrant,也不复用个人 API Key。
160
+ `role` 管理 Role 权限模板,`group` 管理用户组及其角色。交互式 CLI、MCP 和普通 HTTP API 均使用当前用户的 API Key,并按同一基础 RBAC 与业务守卫授权;API Key 不能创建或伪造服务身份。未知能力始终通过 `api search/describe/call` 使用实时 Registry,不依赖固化权限表。
176
161
 
177
162
  ### 交付与记录
178
163
 
@@ -182,6 +167,7 @@ draftgo auto-push [<type> <id...>]
182
167
  draftgo work start <item>
183
168
  draftgo work add <item>
184
169
  draftgo work start-item <number|date#number>
170
+ draftgo work wait <number|date#number> [--note <reason>]
185
171
  draftgo work complete <number|date#number> [--note <evidence>]
186
172
  draftgo work show|list
187
173
  draftgo clean [--dry-run|--yes]
@@ -204,7 +190,7 @@ draftgo clean [--dry-run|--yes]
204
190
  // draftgo verify、commit 已通过
205
191
  ```
206
192
 
207
- 空状态表示待开发,`●` 表示开发中,`√` 表示开发完成。任务开始就写入记录;验证、冲突或交付失败时不能标记为完成。
193
+ `●` 表示进行中,`?` 表示待确认,`√` 表示已完成。旧空标记仍可读取,对外显示待确认;不自动重写历史。`work add` 新增待确认事项,`work wait` 暂停事项,`work start-item` 恢复。任务相关的验证、冲突或交付失败不能标记完成。
208
194
 
209
195
  ## 运行时目录
210
196
 
@@ -223,7 +209,7 @@ draftgo clean [--dry-run|--yes]
223
209
 
224
210
  ## Skill 与 Reference
225
211
 
226
- Skill 只放稳定的领域知识、项目边界和操作规则;动态 operation schema 由 MCP 提供并缓存在项目运行时。Reference 不拆成更小文件,保留按任务路由、前端运行时、安全、自定义服务、checkout 和 MCP 契约所需的完整上下文,避免过度拆分损失效果。
212
+ Skill 只放稳定的领域知识、项目边界和操作规则;动态 operation schema 由 MCP 提供并缓存在项目运行时。Reference 不拆成更小文件,保留按任务路由、前端运行时、安全、checkout 和 MCP 契约所需的完整上下文,避免过度拆分损失效果。
227
213
 
228
214
  支持的 Skill target 包括 Claude Code、Cursor、Windsurf、Antigravity、Kiro、GitHub Copilot、Codex CLI、Gemini CLI 和 Pi。Pi 的项目级 Skill 安装到 `.agents/skills/draftgo/`,可被 Pi 按 Agent Skills 标准自动发现。
229
215
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "draftgo-cli",
3
- "version": "4.0.24",
3
+ "version": "4.0.26",
4
4
  "description": "Install and manage the DraftGo skill across AI coding agents (Claude Code, Codex, Cursor, Windsurf, Antigravity, Copilot, Gemini, Kiro, Pi).",
5
5
  "bin": {
6
6
  "draftgo": "bin/draftgo.js"
@@ -45,16 +45,14 @@
45
45
  "scripts": {
46
46
  "lint": "node scripts/check-syntax.js",
47
47
  "validate:skill": "node scripts/validate-skill.js",
48
- "sync:custom-service-sdk": "node scripts/sync-custom-service-sdk.js",
49
48
  "build:release": "node scripts/build-release.js",
50
49
  "verify:package": "node scripts/verify-package.js",
51
- "test": "npm run lint && npm run validate:skill && npm run verify:package && npm run test:unit && npm run test:components && npm run test:capabilities && npm run test:workflow && npm run test:worklog && npm run test:mcp && npm run test:worktree && npm run test:integration && npm run test:local && npm run test:e2e",
50
+ "test": "npm run lint && npm run validate:skill && npm run verify:package && npm run test:unit && npm run test:components && npm run test:capabilities && npm run test:worklog && npm run test:mcp && npm run test:worktree && npm run test:integration && npm run test:local && npm run test:e2e",
52
51
  "test:unit": "node tests/unit.js",
53
52
  "test:components": "node --test tests/components.test.js",
54
53
  "test:capabilities": "node --test tests/capabilities.test.js",
55
- "test:workflow": "node tests/workflow.test.js",
56
54
  "test:worklog": "node tests/worklog.test.js",
57
- "test:mcp": "node tests/mcp.test.js",
55
+ "test:mcp": "node --test tests/mcp.test.js",
58
56
  "test:worktree": "node tests/worktree.test.js",
59
57
  "test:integration": "node tests/integration.test.js",
60
58
  "test:local": "node tests/local-runtime.js",
@@ -9,7 +9,7 @@ description: Use this skill to inspect, develop, debug, or deliver a DraftGo app
9
9
 
10
10
  - 任务开始即运行 `draftgo work start "<事项>"`;记录 CLI 返回的工作项引用。独立事项用 `draftgo work add`,仅在验证和交付成功后运行 `draftgo work complete <ref> --note "<证据>"`。
11
11
  - 根 Skill 会在触发时自动加载;先读取下表中最少必要的 Reference,再用 MCP 查询当前项目。不要预先读取所有 Reference,也不要把动态 operation schema 写入 Skill 或聊天上下文。
12
- - pages、navigationsdocs/articles 与 custom services 的完整正文只能通过 `draftgo checkout`、worktree、`draftgo diff`、`draftgo verify` 和 `draftgo commit` 处理;MCP 只用于定位、元数据和结构化资源。不要把完整正文、响应快照、临时 Go 模块、SDK 副本或构建目录写入聊天上下文或手工归档。
12
+ - pages、navigationsdocs/articles 的完整正文只能通过 `draftgo checkout`、worktree、`draftgo diff`、`draftgo verify` 和 `draftgo commit` 处理;MCP 只用于定位、元数据和结构化资源。不要把完整正文或响应快照写入聊天上下文或手工归档。
13
13
  - 已知页面 route 或标题时,用 `draftgo map --type pages --route <path>` 或 `--title <title>` 精确定位;两个筛选条件取交集。只需范围或状态时加 `--summary`;需要浏览时使用 `--limit`(默认 20)和后续 `--cursor`,绝不默认全量枚举。
14
14
  - `--output json` 的 stdout 是单一 UTF-8 JSON;诊断和进度走 stderr。不要依赖终端截断来控制上下文。
15
15
  - 正常交付只运行 `draftgo verify`。默认跳过 UI;只有用户明确要求视觉验收时才使用截图,要求交互或 DOM 验证时才使用 `--ui always`。
@@ -18,13 +18,17 @@ description: Use this skill to inspect, develop, debug, or deliver a DraftGo app
18
18
 
19
19
  ## 任务路由
20
20
 
21
+ 需求理解和编排由宿主 Agent 完成,CLI 不提供 build/run/deliver Agent。简单修改直接处理;跨页面与数据任务先确定字段、关系和接口,再实现页面,只读取涉及资源。需要用户决定时执行 `draftgo work wait <ref> --note "<原因>"`,继续时用 `work start-item`。
22
+
23
+ 能力搜索默认 20 条,保留 `next_cursor`,结果不足时继续 `--cursor`;`api search` 支持 `--module`、`--method`。摘要仅用于定位,精确 operation 的完整 schema 和完整正文按需读取。不把全量 audit 作为每次任务的起点。
24
+
21
25
  | 任务 | 先读 |
22
26
  |---|---|
23
27
  | 页面、导航、交互或 UI | `references/frontend.md`;涉及 iframe、路由、认证或全局层加读 `runtime.md` / `app-api.md` |
24
28
  | pages/nav/docs 正文、版本或冲突 | `references/checkout.md` |
25
29
  | 动态 DB、筛选或关系 | `references/data.md`;复杂关系再读 `db-relations.md` |
26
- | AIHub、知识库、记忆、聊天或图片 | `references/aihub.md`;页面调用再读 `chat-sdk.md` |
27
- | 自定义服务、权限、外部调用、余额扣款或订阅 | `references/custom-services.md` |
30
+ | 模型、提示词、插件、知识库、记忆、智能体或 AI 页面调用 | `references/ai.md`;页面调用再读 `chat-sdk.md` |
31
+ | 角色、用户组、API Key 或其他结构化管理能力 | `references/mcp.md`;业务细节以实时 operation 为准 |
28
32
  | MCP 配置、API 契约或故障 | `references/mcp.md`;连接或调用失败时运行 `draftgo mcp test` |
29
33
  | 运行失败、日志或请求链路 | `references/diagnostics.md` |
30
34
  | 验证、发布或交付验收 | `references/delivery.md` |
@@ -47,9 +51,9 @@ description: Use this skill to inspect, develop, debug, or deliver a DraftGo app
47
51
  - 同一文件或 DraftGo 资源全程只能由一个 Agent 修改;不同资源、operation 和 owner 不冲突的单元可以并发,不设置客户端并发上限;同一资源的依赖步骤保持串行。主 Agent 负责 owner 分配、汇总、验证、交付和 worklog 状态。
48
52
  - 用户 API Key 只保存在 `.draftgo/config.json`,不得进入宿主配置、命令参数、Skill、日志、manifest 或错误消息。宿主 MCP 配置只运行 `draftgo mcp serve`。
49
53
  - 页面优先使用可信本地资源;禁止境外 CDN。净化不可信 HTML,关键状态不能只靠颜色或动效表达。页面通过 `window.parent.App` 使用认证、权限、反馈和主题;详细规则见前端与运行时 Reference。
50
- - Route 普通自定义服务 SDK 调用继承真实调用者和服务归属;Event/Scheduled 没有调用者,普通 `ctx.xxx` 返回 403,必须显式使用 `ctx.Admin.*`。Admin RPC 使用 system actor_id=0,按 `*:*:all` 单次执行并进入审计,不创建服务主体 AccessGrant,也不会泄漏到后续调用。
54
+ - API Key 始终代表真实用户;CLI 不创建服务身份,不注入额外授权上下文,也不把 session token 用于 System MCP。未知权限和业务守卫以实时 describe 与服务端响应为准。
51
55
  - `.draftgo/tmp/` 可清理;先运行 `draftgo clean --dry-run`,再在需要时使用 `--yes`。用户可查验的证据放入已注册的 `.draftgo/artifacts/`。
52
56
 
53
57
  ## 完成条件
54
58
 
55
- 每个目标均有与其类型相符的证据:正文有 checkout、验证、commit 返回的版本/哈希及必要远端回读;结构化资源有 describe、写入结果和回读;自定义服务的 `commit` 会完成 validate/publish,按需补充 test。任何验证失败、409/412 或交付失败都不得标记为完成;任何 verify、写入、回读或要求的视觉验收失败时,工作项保持 active。
59
+ 每个目标均有与其类型相符的证据:正文有 checkout、验证、commit 返回的版本/哈希及必要远端回读;结构化资源有 describe、写入结果和回读。任何验证失败、409/412 或交付失败都不得标记为完成;任何 verify、写入、回读或要求的视觉验收失败时,工作项保持 active。
@@ -2,7 +2,7 @@
2
2
  "schema_version": "1.0",
3
3
  "id": "draftgo",
4
4
  "name": "DraftGo 开发助手",
5
- "version": "4.0.24",
5
+ "version": "4.0.26",
6
6
  "entry": "SKILL.md",
7
7
  "description": "以 Skill/reference 任务路由、MCP 实时发现、长正文 checkout/commit、统一验证和完成日志为边界的 DraftGo 工作流。",
8
8
  "license": "MIT",
@@ -10,9 +10,8 @@
10
10
  "draftgo-development",
11
11
  "reference-routing",
12
12
  "worklog-tracking",
13
- "custom-service-ai-sdk",
14
13
  "minimal-method-guides",
15
- "aihub-knowledge-memory",
14
+ "ai-knowledge-memory",
16
15
  "mcp-bridge",
17
16
  "content-checkout-commit",
18
17
  "runtime-diagnostics",
@@ -22,8 +21,6 @@
22
21
  "skill-installation"
23
22
  ],
24
23
  "permissions": [
25
- "workspace:read",
26
- "workspace:write",
27
24
  "process:run",
28
25
  "network:explicit"
29
26
  ],
@@ -0,0 +1,41 @@
1
+ ---
2
+ read_when: 管理模型、提示词、插件、知识库、记忆或智能体时 · 调试 AI 调用与运行记录时
3
+ ---
4
+
5
+ # DraftGo AI 能力
6
+
7
+ ## 模块边界
8
+
9
+ 最终版 AI 板块由模型、提示词、插件、知识库、长期记忆和智能体组成。它们都是结构化远端资源,使用实时 Registry Operation 管理,不 checkout、不生成本地镜像,也不通过动态 DB 重建。
10
+
11
+ - 模型负责 Provider、逻辑模型、路由和统一调用网关。
12
+ - 提示词负责版本化内容和发布状态。
13
+ - 插件负责 Skill 与外部 MCP 扩展。
14
+ - 知识库负责资料导入、切分、索引、检索和重建。
15
+ - 长期记忆负责智能体运行过程中提炼和召回的记忆。
16
+ - 智能体组合模型、提示词、插件、知识库与记忆。
17
+
18
+ 模块之间通过明确 ID 和服务端规则组合。不要在客户端复制模型路由、插件执行、知识检索、记忆写入或智能体编排逻辑。
19
+
20
+ ## 最短流程
21
+
22
+ ```bash
23
+ draftgo api search "<model|prompt|plugin|knowledge|memory|agent>"
24
+ draftgo api describe <operation_id>
25
+ draftgo api call <operation_id> --input request.json --output json
26
+ ```
27
+
28
+ 已有精确 `operation_id` 时跳过 search。首次使用或 Registry revision 变化时 describe;输入只包含 `input_schema` 声明的 `path`、`query` 和 `body`。写入后使用对应 get/list Operation 回读目标 ID;任务涉及运行行为时,再调用运行 Operation 并按 run ID 或 request ID 查询日志。
29
+
30
+ ## 开发规则
31
+
32
+ - Provider 密钥、上游 Authorization、API Key 和原始敏感响应不得进入 Skill、请求示例、日志或项目文件。
33
+ - 权限、风险、幂等性、能力名和状态枚举全部以实时 describe 为准,不使用历史权限前缀或字段表。
34
+ - 模型是否支持 Chat、Responses、Embedding、Rerank、TTS、ASR、图片或视频,必须由当前模型声明、Provider readiness 和有效路由共同证明。
35
+ - 知识库和长期记忆用途不同,不能互相替代;索引完成不等于检索质量达标。
36
+ - 智能体调用失败时分层检查模型路由、提示词版本、插件可用性、知识检索、记忆配置和运行日志,不在客户端自动重放非幂等调用。
37
+ - DraftGo Page 的 AI 对话使用组件目录中的 `draftgo/chat`;完整 Chat 实现由组件 `Definition.JS` 随同一 revision 发布并按需解析,不存在第二套静态 SDK。其他模型能力(包括图片、Embedding、Rerank、TTS、ASR 和 Video)通过服务端 AI Registry 调用。浏览器端不得持有 Provider 密钥,也不要复制一套客户端 Provider SDK。
38
+
39
+ ## 完成条件
40
+
41
+ 结构化配置任务必须有 describe、写入结果和回读证据。调用任务还必须证明运行成功,并能通过 run ID 或 request ID 关联日志;知识任务需要最小检索验证;任何输出均不得泄露凭据。
@@ -67,57 +67,12 @@ const { patientId, visitId } = routeContext.query;
67
67
  |---|---|---|
68
68
  | `App.currentUser` | object \| null | 当前用户,未登录为 null |
69
69
  | `App.isAdmin` | boolean | 是否管理员 |
70
- | `App.permissions` | string[] | 当前用户有效 permission grant 的展示投影;仅用于页面显隐,不替代服务端授权 |
70
+ | `App.permissions` | string[] | 当前用户有效权限的展示投影;仅用于页面显隐,不替代服务端授权 |
71
71
  | `App.isAuthenticated` | boolean | 是否已认证 |
72
72
  | `App.hasToken` | boolean | 是否有 token(含未验证) |
73
73
  | `App.config` | object | 系统配置 KV |
74
74
  | `App.theme` | `'light'` \| `'dark'` | 当前显示模式 |
75
75
  | `App.colorScheme` | string | 当前配色方案 |
76
- | `App.scopeContext` | object | null | 当前候选范围;`scope_type` 为 `platform` / `space` |
77
- | `App.availableSpaces` | object[] | 当前用户可选择的工作区与递归空间 |
78
-
79
- ### 空间上下文
80
-
81
- 空间业务请求使用运行时当前上下文。页面先显示加载状态,再等待有效空间;返回 `null` 时呈现紧凑的工作空间状态和重试入口,本轮不发送业务请求。
82
-
83
- ```javascript
84
- function currentSpace() {
85
- const scope = App.getScopeContext?.() || App.scopeContext;
86
- return scope?.scope_type === 'space' && scope.space_id ? scope : null;
87
- }
88
-
89
- async function waitForSpace(timeout = 4000) {
90
- if (currentSpace()) return currentSpace();
91
- return new Promise(resolve => {
92
- const host = window.parent;
93
- const done = value => {
94
- clearTimeout(timer);
95
- host?.removeEventListener('dg:scope-changed', check);
96
- host?.removeEventListener('dg:scope-spaces-changed', check);
97
- resolve(value);
98
- };
99
- const check = () => { if (currentSpace()) done(currentSpace()); };
100
- const timer = setTimeout(() => done(null), timeout);
101
- host?.addEventListener('dg:scope-changed', check);
102
- host?.addEventListener('dg:scope-spaces-changed', check);
103
- check();
104
- });
105
- }
106
-
107
- const scope = await waitForSpace();
108
- if (!scope) {
109
- renderWorkspaceState();
110
- return;
111
- }
112
- await App.get('business-items', { page: 1 });
113
- ```
114
-
115
- 平台管理接口按接口契约显式传入平台范围:
116
-
117
- ```javascript
118
- const platformHeaders = { 'X-DraftGo-Scope-Type': 'platform' };
119
- await App.get('roles', {}, platformHeaders);
120
- ```
121
76
 
122
77
  ## 主题
123
78
 
@@ -135,11 +90,8 @@ await App.logout(); // 服务端登出、清理状态并跳转
135
90
  App.setAuthTokens({ access_token, refresh_token }); // 登录后写入 token
136
91
  App.reloadGlobalLayer(); // 重载全局层
137
92
  App.openGlobalWidget(name); // 触发全局挂件打开
138
- App.getScopeContext(); // 读取当前作用域
139
- App.setScopeContext({ scope_type: 'space', space_id: '120' });
140
- App.clearScopeContext(); // 清除手工选择,恢复服务端默认
141
93
  App.t(key, fallback?, values?); // 页面级国际化文本,values 保留 ICU 占位符
142
94
  App.formatDateTime(value, options?); // 按 system_timezone 格式化 API 返回的 UTC 时间
143
95
  ```
144
96
 
145
- Token、刷新、路由上下文和认证事件见 `references/runtime.md`。AI 对话、图片和兼容门面的完整契约见 `references/chat-sdk.md`,Agent 能力见 `references/aihub.md`。
97
+ Token、刷新、路由上下文和认证事件见 `references/runtime.md`。AI 对话组件契约见 `references/chat-sdk.md`,其他 AI 能力见 `references/ai.md`。Chat 与其他 DraftGo 组件使用同一组件库交付,不存在独立 SDK 静态文件。
@@ -40,7 +40,7 @@ DraftGo **不是传统 SPA**,是「数据库驱动的页面资产运行时」
40
40
  |---|---|
41
41
  | 后端 | Go 1.26 · 标准库 `net/http` · `database/sql`(go-sql-driver/mysql)· MySQL · Redis |
42
42
  | 壳层前端 | React · Vite |
43
- | 数据库页面 | HTML 文档运行时 · Tailwind CSS 4 · Basecoat UI(默认)· Oat UI(可选)· Font Awesome · GSAP · 内置 SVG 图标库 |
43
+ | 数据库页面 | HTML 文档运行时 · Tailwind CSS 4 · DraftGo 内置组件库 · Font Awesome · GSAP · 内置 SVG Provider 图标 |
44
44
  | CLI | Node.js(draftgo-cli) |
45
45
 
46
46
  数据库页面以完整 HTML 文档运行,直接加载平台提供的本地资源;壳层源码按 React + Vite 工程构建。开发时按目标所属层使用上表对应技术栈。
@@ -1,10 +1,10 @@
1
1
  ---
2
- read_when: 页面需要 AI 对话 UI · 使用 dg-chat 或 DraftGoChat · 接入 Agent/OpenAI/Anthropic/custom transport 时
2
+ read_when: DraftGo Page 需要 AI 对话组件时 · 开发或扩展 draftgo/chat 时
3
3
  ---
4
4
 
5
- # DraftGo Chat SDK
5
+ # DraftGo Chat 组件
6
6
 
7
- DraftGo 页面使用完整版 `/assets/draftgo-chat.js` 原生 Web Component。SDK 统一提供消息状态机、流解析、停止、重试和历史逻辑。
7
+ DraftGo Page 统一使用组件目录中的 `draftgo/chat`。完整实现保存在组件 `Definition.JS`,负责原生 `<dg-chat>`、消息状态机、流解析、停止、重试和历史逻辑,并与 HTML、CSS、Props 和事件使用同一草稿与发布版本。Page 不复制实现,也不手写流式请求。
8
8
 
9
9
  ## 目录
10
10
 
@@ -16,40 +16,32 @@ DraftGo 页面使用完整版 `/assets/draftgo-chat.js` 原生 Web Component。S
16
16
  - [扩展](#扩展)
17
17
  - [鉴权与安全](#鉴权与安全)
18
18
 
19
- ## 最小接入
19
+ ## DraftGo Page 最小接入
20
20
 
21
- 脚本不是壳层默认全局注入。使用 `<dg-chat>` 或兼容门面 `DraftGoAI` 前必须先加载:
21
+ 先从当前实例读取组件契约,不按本文猜测 Props:
22
22
 
23
- ```html
24
- <script src="/assets/draftgo-chat.js"></script>
25
- <dg-chat protocol="draftgo-agent" agent-id="AGENT_ID"></dg-chat>
23
+ ```text
24
+ draftgo components show draftgo/chat --output json
26
25
  ```
27
26
 
28
- `draftgo-agent` 默认请求 `/api/agents/{id}/chat`,并复用同源 DraftGo App Bearer token 与刷新机制。
29
-
30
- 需要 JavaScript 配置时:
27
+ Page 中保存组件活引用;运行时仅在实际引用时返回完整组件,同页相同 revision hash 只编译一次:
31
28
 
32
29
  ```html
33
- <div id="chat-host"></div>
34
- <script src="/assets/draftgo-chat.js"></script>
35
- <script>
36
- const chat = DraftGoChat.create('#chat-host', {
37
- protocol: 'draftgo-agent',
38
- agentId: 'AGENT_ID',
39
- surface: 'inline',
40
- view: 'conversation',
41
- stream: true,
42
- features: {
43
- attachments: true,
44
- reasoning: true,
45
- history: true,
46
- artifacts: true
47
- }
48
- });
49
- </script>
30
+ <dg-chat
31
+ data-dg-use="draftgo/chat"
32
+ data-dg-instance="page-assistant"
33
+ data-dg-prop-agent-id="AGENT_ID"
34
+ data-dg-prop-view="conversation"
35
+ data-dg-prop-surface="inline"
36
+ data-dg-prop-enable-attachments="true">
37
+ </dg-chat>
50
38
  ```
51
39
 
52
- 新页面优先使用 `<dg-chat>` `DraftGoChat.create()`。`DraftGoAI.chat()` 是同一脚本提供的旧代码兼容门面,内部创建隐藏 `<dg-chat>`,仅适合不需要对话 UI 的轻量文本调用。图片模式继续使用 `DraftGoAI.images()`。
40
+ `draftgo-agent` 默认请求 `/api/agents/{id}/chat`,并复用同源 DraftGo App Bearer token 与刷新机制。
41
+
42
+ `draftgo/chat` 公开 Agent、视图、surface、主题、语言、附件、历史、流式开关、打开状态和超时等稳定 Props,并透传已声明的 `dg-chat:*` 事件。函数、DOM Node、自定义 transport、renderer 和 plugin 不进入 `data-dg-prop-*`。
43
+
44
+ DraftGo 不维护独立 Chat SDK 静态文件或外部应用直连交付路径。无 UI 的文本、图片或其他模型能力调用统一使用服务端 AI Registry operation;这样可保持 Provider 密钥、路由和用量控制在服务端。
53
45
 
54
46
  ## 协议
55
47
 
@@ -71,11 +63,11 @@ DraftGo 页面使用完整版 `/assets/draftgo-chat.js` 原生 Web Component。S
71
63
 
72
64
  这些 `/api/ai-proxy/*` 是接入方实现的占位路由,不是 DraftGo 自动提供的默认代理。不要将供应商密钥或长期 token 写入页面。
73
65
 
74
- 内置 transport 支持 SSE、NDJSON 和普通 JSON,并把上游响应归一化为 `text.delta`、`reasoning.delta`、`tool.start`、`tool.delta`、`tool.finish`、`step.finish`、`artifact.complete`、`source`、`usage`、`message.finish`、`error` 等事件。配置 JSON DraftGo 当前 `contracts/chat-sdk.schema.json` 为准;不要猜测字段或把函数、DOM、renderer、plugin、transport 写入 JSON
66
+ 内置 transport 支持 SSE、NDJSON 和普通 JSON,并把上游响应归一化为 `text.delta`、`reasoning.delta`、`tool.start`、`tool.delta`、`tool.finish`、`step.finish`、`artifact.complete`、`source`、`usage`、`message.finish`、`error` 等事件。DraftGo Page 只使用实时 `draftgo/chat` 组件契约,不要猜测字段或把函数、DOM、renderer、plugin、transport 写入 Props
75
67
 
76
- ## 配置与布局
68
+ ## 组件配置与布局
77
69
 
78
- 简单配置使用属性:
70
+ 以下直接属性与 JSON 配置用于组件库高级扩展;普通 DraftGo Page 以实时 `draftgo/chat` Props 为准。
79
71
 
80
72
  ```html
81
73
  <dg-chat
@@ -97,7 +89,7 @@ DraftGo 页面使用完整版 `/assets/draftgo-chat.js` 原生 Web Component。S
97
89
  | 配置 | 可选值 |
98
90
  |---|---|
99
91
  | `surface` | `inline`、`floating`、`drawer`、`fullscreen` |
100
- | `view` | `conversation`、`threads`、`compact`、`workspace` |
92
+ | `view` | `conversation`、`threads`、`compact`、`canvas` |
101
93
  | `position` | `left`、`right` |
102
94
  | `theme` | `light`、`dark`;省略时跟随系统 |
103
95
 
@@ -109,7 +101,7 @@ DraftGo 页面使用完整版 `/assets/draftgo-chat.js` 原生 Web Component。S
109
101
  "protocol": "draftgo-agent",
110
102
  "agentId": "AGENT_ID",
111
103
  "surface": "inline",
112
- "view": "workspace",
104
+ "view": "canvas",
113
105
  "storageKey": "dg-chat:PAGE_KEY:INSTANCE_KEY",
114
106
  "features": {
115
107
  "reasoning": true,
@@ -148,7 +140,7 @@ chat.close();
148
140
  chat.toggle();
149
141
  ```
150
142
 
151
- 全局 API:`DraftGoChat.create()`、`registerTransport()`、`registerRenderer()`、`registerComponent()`、`definePreset()`、`use()`。
143
+ 组件内部运行时保留 `DraftGoChat.create()`、`registerTransport()`、`registerRenderer()`、`registerComponent()`、`definePreset()`、`use()` 等扩展接口,但它们不是独立静态 SDK 契约。
152
144
 
153
145
  常用事件:`dg-chat:ready`、`dg-chat:before-send`、`dg-chat:message`、`dg-chat:run-start`、`dg-chat:stream-event`、`dg-chat:run-finish`、`dg-chat:run-abort`、`dg-chat:error`、`dg-chat:message-action`、`dg-chat:session-change`、`dg-chat:model-change`、`dg-chat:open`、`dg-chat:close`。
154
146
 
@@ -204,10 +196,10 @@ chat.configure({ protocol: 'page-protocol' });
204
196
  - 后端始终负责 Agent 调用权限、模型白名单、附件能力和大小限制,前端开关不能越权。
205
197
  - Agent 协议响应不应包含 Agent 内部模型名。模型选择器只能读取 Agent 明确授权的 `/selectable-models` 目录。
206
198
 
207
- 交付前确认:只加载一个完整版脚本;新页面以 `<dg-chat>` 为对话 UI;同页多实例隔离 `storageKey`;外部协议走服务端代理;页面离开时停止在途请求。
199
+ 交付前确认:DraftGo Page 使用 `draftgo/chat` 且不手工加载第二套脚本;同页多实例隔离 `storageKey`;外部协议走服务端代理;页面离开时停止在途请求。
208
200
 
209
201
  ## 移动端契约
210
202
 
211
- - `inline`、`floating`、`drawer`、`fullscreen` 四种 surface 均由 SDK 自适应窄屏;`threads`、`workspace` 和 Artifact 会按容器宽度自动收敛为单栏,不要复制 Shadow DOM 内部布局规则。
203
+ - `inline`、`floating`、`drawer`、`fullscreen` 四种 surface 均由 SDK 自适应窄屏;`threads`、`canvas` 和 Artifact 会按容器宽度自动收敛为单栏,不要复制 Shadow DOM 内部布局规则。
212
204
  - SDK 使用 `VisualViewport` 和 `safe-area-inset-*` 跟随软键盘、浏览器工具栏与横竖屏变化。触摸设备打开面板时不会主动弹出软键盘。
213
205
  - 触摸端按钮和行操作具有移动端点击尺寸,输入字号防止 iOS 自动缩放;所有内部滚动区隐藏滚动条,但仍保留触摸、滚轮和键盘滚动能力。
@@ -16,9 +16,9 @@ draftgo commit pages 42
16
16
 
17
17
  导航和文档分别替换为 `nav`、`docs`。route/title 为精确匹配,两个条件取交集;只需确认范围或 checkout 状态时使用 `map --summary`,必须浏览时使用 `--limit <1-100>`(默认 20),并仅在单一 `--type` 下用 `--cursor <opaque>` 翻页。新资源先用 `draftgo api search "create page"` 或对应内容类型定位创建 operation,describe/call 取得 ID 后再 checkout;不要用 checkout 创建资源。`verify` 通过不等于已交付,commit 返回新版本与哈希才算正文写入成功。发生 409/412 时保留冲突材料并停止提交。
18
18
 
19
- ## Workflow 2.0 scope
19
+ ## Workflow 2.0 coverage
20
20
 
21
- The checkout set includes `pages`, `navigations`, `docs/articles`, and `custom_services`. A custom-service checkout contains exactly `service.go` and `service.json`, plus one complete `.base` directory. Runner-managed `go.mod/go.sum` never participate in diff or commit. `draftgo commit custom-services <id>` performs the complete delivery (`commit -> validate -> publish`) and prints an explicit published confirmation. Use `draftgo test custom-services <id>` for server Runner validation/execution; `draftgo publish custom-services <id>` remains as a direct compatibility entry point. DB Meta remains a live MCP/API resource and is never checked out.
21
+ The checkout set includes `pages`, `navigations`, and `docs/articles`. DB Meta and all other structured resources remain live MCP/API resources and are never checked out.
22
22
 
23
23
  `draftgo refresh <type> <id...>` is a safe checkout shortcut. It updates only a clean local worktree; local changes stop it. A successful commit keeps current local files and one base only. Cloud version storage is the sole history source.
24
24
 
@@ -34,7 +34,7 @@ The checkout set includes `pages`, `navigations`, `docs/articles`, and `custom_s
34
34
  | `nav` / `navigation` / `navigations` | `navigations` | `.draftgo/worktree/navigations/` | `nav_` |
35
35
  | `doc` / `docs` / `article(s)` / `docs/articles` | `docs` | `.draftgo/worktree/docs/` | `article_` |
36
36
 
37
- db_meta、AIHub、system_config、roles、users、doc_categories 和普通配置使用 MCP 实时 API,不 checkout。
37
+ db_meta、AI 配置、system_config、roles、users、doc_categories 和普通配置使用 MCP 实时 API,不 checkout。
38
38
 
39
39
  Checkout 只为已存在且已确认 ID 的资源建立本地正文与 base,不创建页面、导航或文档。新增资源先按 MCP 实时 API 契约创建并取得 ID;需要编辑完整正文时再 checkout。只需元数据或正文片段即可完成判断时,不必 checkout。
40
40
 
@@ -44,7 +44,7 @@ Checkout 只为已存在且已确认 ID 的资源建立本地正文与 base,
44
44
  draftgo checkout <pages|nav|docs> <id...>
45
45
  draftgo commit <pages|nav|docs> <id...>
46
46
  draftgo reconcile <pages|nav|docs> <id...>
47
- draftgo diff <pages|nav|docs|custom-services> <id> [--stat|--summary]
47
+ draftgo diff <pages|nav|docs> <id> [--stat|--summary]
48
48
  draftgo conflicts
49
49
  draftgo conflict show <pages|nav|docs> <id>
50
50
  draftgo conflict resolve <pages|nav|docs> <id>
@@ -61,43 +61,6 @@ draftgo api search "dynamic db record"
61
61
 
62
62
  ---
63
63
 
64
- ## 自定义服务内的 ctx.DB.Query
65
-
66
- Go 自定义服务使用 `ctx.DB.Query(type, sdk.QueryOptions{...})` 操作动态 DB,返回 `sdk.QueryResult`:
67
-
68
- ```go
69
- result, err := ctx.DB.Query("order", sdk.QueryOptions{
70
- Filters: map[string]any{"status": "paid"},
71
- Page: 1, PageSize: 20, OrderBy: "id", Order: "desc",
72
- })
73
- items := result.Items
74
- ```
75
-
76
- | 参数 | 说明 |
77
- |---|---|
78
- | `filters` | 字典形式结构化过滤;默认 `{field: value}` 是 `eq` 精确匹配 |
79
- | `Page` / `PageSize` | 分页参数;零值交由平台使用默认列表行为 |
80
- | `order_by` / `order` | 按 searchable 字段排序,`order` 为 `asc` / `desc` |
81
-
82
- ⚠️ 返回结构为 `sdk.QueryResult{Items, Total, Page, PageSize}`。需要完整数据时必须按 `Total` 分页读取,不能用超大 `PageSize` 假装全量。
83
-
84
- 普通用户调用时只读 `status=1` 数据;系统身份/管理员脚本可读全部状态数据,但仍受 db_meta permission 约束。不要把“拿不到禁用数据”和分页截断混在一起排查。
85
-
86
- `filters` 操作符示例:
87
-
88
- ```go
89
- ctx.DB.Query("order", sdk.QueryOptions{Filters: map[string]any{
90
- "status": "paid",
91
- "customer_name": map[string]any{"op": "like", "value": "张"},
92
- "amount": map[string]any{"op": "gte", "value": 100},
93
- "id": map[string]any{"op": "in", "value": []int{1, 2, 3}},
94
- }})
95
- ```
96
-
97
- 字段必须在 db_meta schema 中标记 `searchable`,系统字段 `id/userid/created_at/updated_at` 可直接检索和排序。`status` 若作为业务字段检索,仍需在 schema 中显式声明。
98
-
99
- ---
100
-
101
64
  ## 关联关系(ref)
102
65
 
103
66
  关系只在需要时读取 `references/db-relations.md`。核心不变量:`many-to-one` 与 `many-to-many` 在真实持有引用 ID 的字段上配置 `ref` 和 `onDelete`;`one-to-many` 是用于 `populate` 的虚拟反向关系。级联继承当前用户权限并在同一事务中执行,不要在前端用多次 DELETE 模拟。
@@ -115,14 +78,6 @@ const res = await App.get(`db/order`, {
115
78
  });
116
79
  const { items, total } = res.data;
117
80
 
118
- // 非后台管理页面读取业务列表时,如果当前用户含 admin 角色,带 scope=mine
119
- // 这只影响 GET /api/db/{type} 列表,让管理员业务视角只看自己的 owner 数据
120
- const ownOrders = await App.get(`db/order`, {
121
- page: 1,
122
- page_size: 20,
123
- scope: 'mine',
124
- });
125
-
126
81
  // 系统字段检索和排序(无需在 schema 中定义)
127
82
  const res = await App.get(`db/order`, {
128
83
  filters: ['created_at:gte:2024-01-01', 'userid:eq:123'],
@@ -161,7 +116,6 @@ await App.patch(`db/order/batch`, [
161
116
  - 多个 filters 为 AND
162
117
  - 字段未标 searchable 或操作符不匹配 → 后端返回 400
163
118
  - **系统字段**(`id` / `userid` / `created_at` / `updated_at`)无需在 schema 中声明,可直接使用
164
- - `scope=mine` 只对拥有 admin 角色的用户在 `GET /api/db/{type}` 列表请求中生效;非后台管理页面若当前用户是管理员,读取动态 DB 业务列表时应带该参数;后台管理页不要带,详情和写操作也不要带
165
119
 
166
120
  ---
167
121