@lark-base-open/base-database-cli 1.1.1 → 1.3.8

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 (199) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/LICENSE +6 -0
  3. package/README.md +47 -27
  4. package/dist/ai-functions.d.ts +53 -0
  5. package/dist/ai-functions.d.ts.map +1 -0
  6. package/dist/ai-functions.js +436 -0
  7. package/dist/ai-functions.js.map +1 -0
  8. package/dist/archive.d.ts +21 -0
  9. package/dist/archive.d.ts.map +1 -1
  10. package/dist/archive.js +69 -10
  11. package/dist/archive.js.map +1 -1
  12. package/dist/auth.d.ts +5 -0
  13. package/dist/auth.d.ts.map +1 -1
  14. package/dist/auth.js +26 -3
  15. package/dist/auth.js.map +1 -1
  16. package/dist/check.d.ts +74 -0
  17. package/dist/check.d.ts.map +1 -0
  18. package/dist/check.js +283 -0
  19. package/dist/check.js.map +1 -0
  20. package/dist/dependency-policy.d.ts +10 -0
  21. package/dist/dependency-policy.d.ts.map +1 -0
  22. package/dist/dependency-policy.js +162 -0
  23. package/dist/dependency-policy.js.map +1 -0
  24. package/dist/deploy.d.ts +5 -0
  25. package/dist/deploy.d.ts.map +1 -1
  26. package/dist/deploy.js +141 -176
  27. package/dist/deploy.js.map +1 -1
  28. package/dist/environment-variables.d.ts +52 -0
  29. package/dist/environment-variables.d.ts.map +1 -0
  30. package/dist/environment-variables.js +563 -0
  31. package/dist/environment-variables.js.map +1 -0
  32. package/dist/environment.d.ts +1 -1
  33. package/dist/environment.js +1 -1
  34. package/dist/environment.js.map +1 -1
  35. package/dist/function-input-types.d.ts +10 -0
  36. package/dist/function-input-types.d.ts.map +1 -0
  37. package/dist/function-input-types.js +160 -0
  38. package/dist/function-input-types.js.map +1 -0
  39. package/dist/function-schema.d.ts.map +1 -1
  40. package/dist/function-schema.js +89 -36
  41. package/dist/function-schema.js.map +1 -1
  42. package/dist/init-field-retry.d.ts +17 -0
  43. package/dist/init-field-retry.d.ts.map +1 -0
  44. package/dist/init-field-retry.js +127 -0
  45. package/dist/init-field-retry.js.map +1 -0
  46. package/dist/init-journal.d.ts +98 -0
  47. package/dist/init-journal.d.ts.map +1 -0
  48. package/dist/init-journal.js +492 -0
  49. package/dist/init-journal.js.map +1 -0
  50. package/dist/init-schema.d.ts +8 -0
  51. package/dist/init-schema.d.ts.map +1 -0
  52. package/dist/init-schema.js +423 -0
  53. package/dist/init-schema.js.map +1 -0
  54. package/dist/init.d.ts +15 -1
  55. package/dist/init.d.ts.map +1 -1
  56. package/dist/init.js +884 -261
  57. package/dist/init.js.map +1 -1
  58. package/dist/lark-cli-error.d.ts +47 -0
  59. package/dist/lark-cli-error.d.ts.map +1 -0
  60. package/dist/lark-cli-error.js +201 -0
  61. package/dist/lark-cli-error.js.map +1 -0
  62. package/dist/lark-cli.d.ts +1 -1
  63. package/dist/lark-cli.d.ts.map +1 -1
  64. package/dist/lark-cli.js +78 -18
  65. package/dist/lark-cli.js.map +1 -1
  66. package/dist/mutation-schema.d.ts +146 -0
  67. package/dist/mutation-schema.d.ts.map +1 -0
  68. package/dist/mutation-schema.js +153 -0
  69. package/dist/mutation-schema.js.map +1 -0
  70. package/dist/mutation.d.ts +10 -0
  71. package/dist/mutation.d.ts.map +1 -0
  72. package/dist/mutation.js +131 -0
  73. package/dist/mutation.js.map +1 -0
  74. package/dist/npm.d.ts +1 -0
  75. package/dist/npm.d.ts.map +1 -1
  76. package/dist/npm.js +2 -2
  77. package/dist/npm.js.map +1 -1
  78. package/dist/preview-receipt.d.ts.map +1 -1
  79. package/dist/preview-receipt.js +15 -5
  80. package/dist/preview-receipt.js.map +1 -1
  81. package/dist/process.d.ts +3 -1
  82. package/dist/process.d.ts.map +1 -1
  83. package/dist/process.js +16 -4
  84. package/dist/process.js.map +1 -1
  85. package/dist/program.d.ts.map +1 -1
  86. package/dist/program.js +246 -42
  87. package/dist/program.js.map +1 -1
  88. package/dist/project-build.d.ts +25 -0
  89. package/dist/project-build.d.ts.map +1 -0
  90. package/dist/project-build.js +229 -0
  91. package/dist/project-build.js.map +1 -0
  92. package/dist/project-context.d.ts +344 -0
  93. package/dist/project-context.d.ts.map +1 -0
  94. package/dist/project-context.js +485 -0
  95. package/dist/project-context.js.map +1 -0
  96. package/dist/project-layout.d.ts +5 -0
  97. package/dist/project-layout.d.ts.map +1 -0
  98. package/dist/project-layout.js +24 -0
  99. package/dist/project-layout.js.map +1 -0
  100. package/dist/public-sql-error.d.ts +25 -0
  101. package/dist/public-sql-error.d.ts.map +1 -0
  102. package/dist/public-sql-error.js +65 -0
  103. package/dist/public-sql-error.js.map +1 -0
  104. package/dist/pull.d.ts +1 -0
  105. package/dist/pull.d.ts.map +1 -1
  106. package/dist/pull.js +67 -15
  107. package/dist/pull.js.map +1 -1
  108. package/dist/site-readme.d.ts +3 -0
  109. package/dist/site-readme.d.ts.map +1 -0
  110. package/dist/site-readme.js +83 -0
  111. package/dist/site-readme.js.map +1 -0
  112. package/dist/workspace-fingerprint.d.ts +21 -1
  113. package/dist/workspace-fingerprint.d.ts.map +1 -1
  114. package/dist/workspace-fingerprint.js +81 -2
  115. package/dist/workspace-fingerprint.js.map +1 -1
  116. package/package.json +2 -1
  117. package/skills/lark-base-database/SKILL.md +86 -52
  118. package/skills/lark-base-database/references/ai-function.md +479 -0
  119. package/skills/lark-base-database/references/base-capability-routing.md +7 -7
  120. package/skills/lark-base-database/references/base-sql-errors.generated.md +403 -0
  121. package/skills/lark-base-database/references/database-function-limitations.md +29 -0
  122. package/skills/lark-base-database/references/database-function.md +323 -0
  123. package/skills/lark-base-database/references/development.md +166 -33
  124. package/skills/lark-base-database/references/environment-variables.md +55 -0
  125. package/skills/lark-base-database/references/faas.md +46 -53
  126. package/skills/lark-base-database/references/file-transfer.md +25 -25
  127. package/skills/lark-base-database/references/frontend-design-guide.md +151 -65
  128. package/skills/lark-base-database/references/mutations.md +295 -0
  129. package/skills/lark-base-database/references/notifications.md +9 -9
  130. package/skills/lark-base-database/references/permission-design.md +24 -24
  131. package/skills/lark-base-database/references/release.md +57 -30
  132. package/skills/lark-base-database/references/style-guide.md +10 -67
  133. package/skills/lark-base-database/references/verification.md +19 -13
  134. package/skills/lark-base-database/references/workspace.md +57 -17
  135. package/templates/database-starter/README.md +34 -4
  136. package/templates/database-starter/database-functions/README.md +8 -0
  137. package/templates/database-starter/gitignore +7 -0
  138. package/templates/database-starter/mutations/README.md +19 -0
  139. package/templates/database-starter/page/README.md +25 -19
  140. package/templates/database-starter/page/package-lock.json +8 -16
  141. package/templates/database-starter/page/package.json +2 -3
  142. package/templates/database-starter/page/src/App.tsx +23 -3
  143. package/templates/database-starter/page/src/components/UserSelectorEditor/index.tsx +32 -4
  144. package/templates/database-starter/page/src/components/UserSelectorPanel/index.tsx +104 -34
  145. package/templates/database-starter/page/src/components/UserSelectorPanel/user-search.test.ts +55 -11
  146. package/templates/database-starter/page/src/components/UserSelectorPanel/user-search.ts +68 -25
  147. package/templates/database-starter/page/src/components/database-runtime-ready.tsx +1 -1
  148. package/templates/database-starter/page/src/components/database-user-menu/index.tsx +4 -7
  149. package/templates/database-starter/page/src/components/feedback/page-state.tsx +40 -5
  150. package/templates/database-starter/page/src/components/floating-button/assets/edit-active.svg +3 -0
  151. package/templates/database-starter/page/src/components/floating-button/assets/edit-default.svg +3 -0
  152. package/templates/database-starter/page/src/components/floating-button/assets/toast-close.svg +3 -0
  153. package/templates/database-starter/page/src/components/floating-button/assets/toast-info.svg +5 -0
  154. package/templates/database-starter/page/src/components/floating-button/assets/tooltip-caret.svg +3 -0
  155. package/templates/database-starter/page/src/components/floating-button/index.tsx +193 -113
  156. package/templates/database-starter/page/src/components/floating-button/utils/project-meta.test.ts +107 -37
  157. package/templates/database-starter/page/src/components/floating-button/utils/project-meta.ts +13 -50
  158. package/templates/database-starter/page/src/components/ui-language.test.tsx +101 -0
  159. package/templates/database-starter/page/src/examples/ai-function/ImageTaskOperation.tsx +202 -0
  160. package/templates/database-starter/page/src/examples/ai-function/README.md +14 -0
  161. package/templates/database-starter/page/src/examples/ai-function/TextStreamOperation.tsx +184 -0
  162. package/templates/database-starter/page/src/examples/ai-function/ai-copy.ts +173 -0
  163. package/templates/database-starter/page/src/examples/ai-function/ai-delta.test.ts +30 -0
  164. package/templates/database-starter/page/src/examples/ai-function/ai-delta.ts +26 -0
  165. package/templates/database-starter/page/src/examples/ai-function/ai-language.test.tsx +86 -0
  166. package/templates/database-starter/page/src/examples/ai-function/ai-media-panel.test.ts +201 -0
  167. package/templates/database-starter/page/src/examples/ai-function/ai-media-panel.tsx +382 -0
  168. package/templates/database-starter/page/src/lib/attachment-image.tsx +144 -0
  169. package/templates/database-starter/page/src/lib/database-function-inputs.generated.ts +4 -0
  170. package/templates/database-starter/page/src/lib/database-runtime-attachment.test.ts +180 -76
  171. package/templates/database-starter/page/src/lib/database-runtime.test.ts +130 -10
  172. package/templates/database-starter/page/src/lib/database-runtime.ts +484 -51
  173. package/templates/database-starter/page/src/lib/date-time.ts +61 -0
  174. package/templates/database-starter/page/src/lib/ui-language.ts +86 -0
  175. package/templates/database-starter/page/src/main.tsx +1 -1
  176. package/templates/database-starter/page/tsconfig.json +2 -2
  177. package/templates/database-starter/page/vite.config.ts +1 -2
  178. package/templates/database-starter/prettierignore +1 -1
  179. package/templates/database-starter/server-functions/README.md +2 -2
  180. package/templates/database-starter/server-functions/package-lock.json +4 -4
  181. package/templates/database-starter/server-functions/package.json +1 -1
  182. package/dist/agent-guide.d.ts +0 -19
  183. package/dist/agent-guide.d.ts.map +0 -1
  184. package/dist/agent-guide.js +0 -31
  185. package/dist/agent-guide.js.map +0 -1
  186. package/dist/database-skill.d.ts +0 -24
  187. package/dist/database-skill.d.ts.map +0 -1
  188. package/dist/database-skill.js +0 -148
  189. package/dist/database-skill.js.map +0 -1
  190. package/skills/lark-base-database/references/base-sql-unsupported.md +0 -42
  191. package/skills/lark-base-database/references/database-capability-skill.md +0 -40
  192. package/skills/lark-base-database/references/sql-function.md +0 -289
  193. package/templates/database-capability/SKILL.md.tmpl +0 -58
  194. package/templates/database-starter/page/src/components/floating-button/chatbot-entry.test.ts +0 -23
  195. package/templates/database-starter/page/src/components/floating-button/chatbot-entry.tsx +0 -873
  196. package/templates/database-starter/page/src/components/floating-button/local-chat-panel.test.ts +0 -25
  197. package/templates/database-starter/page/src/components/floating-button/local-chat-panel.tsx +0 -197
  198. package/templates/database-starter/page/src/components/floating-button/utils/env.ts +0 -18
  199. package/templates/database-starter/sql/README.md +0 -8
package/CHANGELOG.md CHANGED
@@ -1,5 +1,102 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.3.8] - 2026-09-29
4
+
5
+ ### Added
6
+
7
+ - 支持跳过 AI Function 同步。
8
+ - 发布状态提供易读说明。
9
+
10
+ ### Changed
11
+
12
+ - 更新建站与前端设计指引。
13
+ - 更新新建站点的运行时版本。
14
+
15
+ ### Fixed
16
+
17
+ - 修复 AI Function 恢复时的配置遗漏。
18
+ - 防止部署时误删已有 AI Function。
19
+ - 完整展示 SQL 错误信息。
20
+ - 修复初始化时区兼容问题。
21
+
22
+ ### Security
23
+
24
+ - 防止包管理器配置中的凭证进入部署制品。
25
+
26
+ ## [1.3.7] - 2026-09-28
27
+
28
+ ### Added
29
+
30
+ - 支持通过 Mutation 创建、更新、删除记录及追加附件。
31
+ - AI Function 支持图片、视频、音频和 PDF 等多模态输入。
32
+ - 新增 Skill 前端设计指引。
33
+
34
+ ### Changed
35
+
36
+ - Database Function 参数对齐 TEXT、INT、DOUBLE、BOOL、TIMESTAMP、INTERVAL,支持一维数组和空值;不再接受 DURATION、USER_ID、GROUP_ID、RECORD_ID 声明。
37
+ - 完善 Skill 的 SQL 使用说明。
38
+ - 新建站点和 README 支持中英日语言。
39
+ - CLI 通用提示改为英文。
40
+ - 新建站点使用 Channel SDK 0.1.3。
41
+ - 更新新建站点的编辑入口。
42
+
43
+ ### Removed
44
+
45
+ - 移除应用能力 Skill 及相关 CLI 入口。
46
+
47
+ ### Fixed
48
+
49
+ - 部署时跳过未变化的 Base 表绑定。
50
+ - SQL 请求失败时展示结构化错误及诊断信息。
51
+ - 修复附件封面和下载请求缺少站点身份的问题。
52
+ - 修复 AI Function 调试的能力类型判断。
53
+ - 保留 AI Function 批量请求失败时的诊断信息。
54
+ - 修复 Prod 发布结果中的制品信息误用本地 Preview 回执。
55
+
56
+ ## [1.3.0] - 2026-09-22
57
+
58
+ ### Added
59
+
60
+ - 站点工程提供面向展示的 README 模板,记录用户诉求、已提供的业务能力和验证边界;README 随源码制品上传,并可从远端恢复。
61
+
62
+ ### Changed
63
+
64
+ - Skill 引导 Agent 在每次部署前核对 README 与用户需求及当前实现,业务能力变化时先更新说明。
65
+ - `check` 和 `deploy` 要求 README 已填写且包含必要业务章节;旧 Preview 制品需重新生成后才能发布 Prod。
66
+
67
+ ## [1.2.0] - 2026-09-21
68
+
69
+ ### Added
70
+
71
+ - 支持配置、同步和调用 AI Function,覆盖文本、流式及图片、视频等媒体任务。
72
+ - 支持声明、设置、清除和查看第三方 Agent 使用的 FaaS 环境变量,并避免在错误信息中回显变量值。
73
+ - 新增项目级 `check` 命令,在发布前检查并构建 Page、Database Function 与 FaaS。
74
+ - 初始化过程新增本地回执、字段级有限重试和 `--resume` 恢复能力,避免重复创建已确认资源。
75
+ - 为 Database Function 生成输入类型,并在 starter 中提供日期时区和附件图片处理能力。
76
+ - 新增 `context` 命令,汇总当前项目的资源、命令入口和开发上下文。
77
+ - `check` 支持结构化结果和增量检查,便于定位具体失败项。
78
+
79
+ ### Changed
80
+
81
+ - 将 SQL Function 统一更名为 Database Function,并同步命令、文档与生成工程中的术语。
82
+ - 更新 Page starter 的 Channel runtime 接入与宿主组件集成,固定使用可发布的组合制品。
83
+ - 精简公开 npm 包内容,加入许可证并排除维护者内部文件。
84
+ - 生成工程将 Database Function 目录统一为 `database-functions/`,并兼容现有 `sql/` 目录。
85
+
86
+ ### Removed
87
+
88
+ - 移除 starter 中的旧 Chatbot 集成;AI 场景统一使用 AI Function。
89
+ - 移除 starter 对 `base-site-js` 和页面 CSRF 注入插件的依赖。
90
+
91
+ ### Fixed
92
+
93
+ - 修复附件图片加载时的宿主 Blob 处理和错误透传。
94
+ - 修复初始化前 Schema 校验、部分结果保留及限流字段重试行为。
95
+ - 修复空 AI Function 配置的部署同步和 starter 兼容性检查。
96
+ - 修复应用身份授权缺少权限时的申请与诊断提示。
97
+ - 修复 AI Function 参数与用量契约、Database Function Schema 与交付结果不一致的问题。
98
+ - 修复生成工程依赖安装和部分预览重复构建问题。
99
+
3
100
  ## [1.1.1] - 2026-09-10
4
101
 
5
102
  ### Changed
package/LICENSE ADDED
@@ -0,0 +1,6 @@
1
+ ©Lark Technologies Pte. Ltd. All rights reserved. Use is subject to the Legal Agreements outlined here:
2
+ [Feishu User Terms of Service](https://www.feishu.cn/terms)
3
+ [Feishu Privacy Policy](https://www.feishu.cn/privacy)
4
+ [Feishu Open Platform App Service Provider Security Management Specifications](https://open.feishu.cn/document/uAjLw4CM/uMzNwEjLzcDMx4yM3ATM/management-practice/app-service-provider-security-management-specifications)
5
+ [Lark User Terms of Service](https://www.larksuite.com/user-terms-of-service)
6
+ [Lark Privacy Policy](https://www.larksuite.com/privacy-policy)
package/README.md CHANGED
@@ -14,7 +14,7 @@ npm install -g @lark-base-open/base-database-cli@latest
14
14
  base-database-cli install --target codex
15
15
  ```
16
16
 
17
- 安装器将自身版本安装到 npm 全局目录,再从全局包安装 Skill;已有同版本 CLI 时只安装 Skill。支持 `--target codex|claude|agents|all` 或 `--dir <skills 根目录>`。安装器也会同步上述受支持用户目录中可确认来源的公开版 Lark Base Database Skill,避免 Agent 读取另一份旧副本;自动发现跳过内部版和来源不明的副本,不会为未安装的 Agent 新建副本。任一目标已有内容时需显式添加 `--force`,否则在更改 CLI 前停止。单独的 `skill install` 仍只处理所选目标。Codex 使用 `CODEX_HOME/skills`,未设置时使用 `~/.codex/skills`。
17
+ 安装器将自身版本安装到 npm 全局目录,再从全局包安装 Skill;已有同版本 CLI 时只安装 Skill。支持 `--target codex|claude|agents|all` 或 `--dir <skills 根目录>`。安装器也会同步上述受支持用户目录中可确认来源的公开版 Lark Base Database Skill,避免 Agent 读取另一份旧副本;自动发现跳过与当前 CLI 来源不匹配或来源不明的副本,不会为未安装的 Agent 新建副本。任一目标已有内容时需显式添加 `--force`,否则在更改 CLI 前停止。单独的 `skill install` 仍只处理所选目标。Codex 使用 `CODEX_HOME/skills`,未设置时使用 `~/.codex/skills`。
18
18
 
19
19
  若已安装的 CLI 文件损坏,先用 `npm install -g @lark-base-open/base-database-cli@<精确版本>` 重装,再执行 `base-database-cli update --version <同一精确版本> --yes` 同步已安装的 Skills。测试或私有 registry 环境需在重装时保留对应 npm registry 配置。
20
20
 
@@ -48,6 +48,14 @@ CLI 版本来自包内 `package.json`;每份 Skill 的 `base-database-version.
48
48
 
49
49
  ## 创建、恢复并发布数据库应用
50
50
 
51
+ 已有或待初始化的本地目录可以先读取一份紧凑、确定性的项目快照:
52
+
53
+ ```bash
54
+ base-database-cli context . --summary --json
55
+ ```
56
+
57
+ `context` 只读取本地配置、Catalog、Function metadata 和 init/Preview 回执。摘要保留环境、资源数量、readiness 与建议的下一步,不输出本地路径、fingerprint 值或逐项资源;排障时去掉 `--summary` 可读取完整快照。Preview freshness 只跟踪 `base-database.jsonc`、Page、Database Function、FaaS 和 AI Function 等部署输入,README、workflow 定义及验收材料不会触发无效重发。缺少 `base-database.jsonc` 时返回 `project.status=uninitialized`,不会报 project-not-found。该命令不读取认证凭证或环境变量值,不调用远端 API,也不执行 `doctor`、`check`、构建或发布;默认输出已经是 JSON,`--json` 用于显式声明机器读取。
58
+
51
59
  ### 复用 lark-cli profile
52
60
 
53
61
  CLI 复用本机已有的 lark-cli profile,不另存应用密钥或用户 token。通过全局
@@ -103,13 +111,27 @@ base-database-cli init ./todo-database \
103
111
  --description '供个人集中创建、跟踪和完成日常任务'
104
112
  ```
105
113
 
106
- 成功结果通过 `baseSource`、`databaseSource` 分别列出 Base 与应用来源,通过 `baseToken`、`appToken` 返回对应 token;新建或复用的应用信息位于 `created.database` 或 `reused.database`。结果同时列出数据表、binding、生成的工程目录、配置文件和 `catalog.json`,并在 `nextSteps` 中给出开发目录与 Preview 发布命令。
114
+ 成功结果通过 `baseSource`、`databaseSource` 分别列出 Base 与应用来源,通过 `baseToken`、`appToken` 返回对应 token;新建或复用的应用信息位于 `created.database` 或 `reused.database`。结果同时列出数据表、binding、生成的工程目录、配置文件和 `catalog.json`。`developmentReadiness` 明确标记初始化尚未准备 Page/FaaS 依赖或执行本地检查,`nextSteps` 按开发、`base-database-cli check --json`、Preview 发布给出后续命令。
115
+
116
+ 初始化失败或在步骤之间中断时,CLI 保留 `.base-database-cli/state/init.json`。字段批次返回完整逐项结果且失败项明确为 `retryable=true` 时,CLI 只重试该字段,单字段最多执行 3 次,按 1 秒、2 秒退避且单次初始化的自动重试等待总计不超过 3 秒;成功后再继续从未尝试的字段。已创建字段不会重发;`retryable=false`、不完整响应、transport 错误和结果未知都不会自动重试,初始化以 `partial` 或 `unknown` 退出并保留回执。
107
117
 
108
- 生成项目的 `page/`、`server-functions/`、`sql/` 直接位于项目根目录;`base-database.jsonc` 和 `catalog.json` 也保留在根目录。`server-functions/` 是服务端 FaaS Functions 的源码与构建工作区。CLI 的 Preview 状态和发布临时制品统一写入被 Git 忽略的 `.base-database-cli/state/`。
118
+ 确认回执没有结果未知或正在写入的步骤后,使用原命令和原参数追加 `--resume`;CLI 会先核对环境、profile、计划摘要及回执中的真实资源 ID,再跳过已确认步骤并执行尚未开始的步骤。字段批次只有在逐项结果完整且已创建字段 ID 与远端一致时才补剩余字段。参数变化、资源漂移、`unknown` 或写入中的 `running` 都会在恢复写入前停止;恢复不会按名称认领资源、自动删除资源或整体回滚。
119
+
120
+ ```bash
121
+ base-database-cli init ./todo-database \
122
+ --resume \
123
+ --schema ./base-schema.json \
124
+ --name 'Todo 管理' \
125
+ --env online
126
+ ```
127
+
128
+ 生成项目的 `page/`、`server-functions/`、`database-functions/` 直接位于项目根目录;`base-database.jsonc` 和 `catalog.json` 也保留在根目录。`server-functions/` 是服务端 FaaS Functions 的源码与构建工作区。CLI 的 Preview 状态和发布临时制品统一写入被 Git 忽略的 `.base-database-cli/state/`。
109
129
 
110
130
  ### 恢复并修改已有数据库应用
111
131
 
112
- 已有数据库应用存在源码制品时,使用 `pull` 恢复可编辑工程,不要重新执行 `init`。目标目录必须为空;CLI 会下载当前 `page/`、`server-functions/` 和 `sql/` 源码,读取应用 Catalog,并重建 `base-database.jsonc` 与 `catalog.json`,不会创建或修改 Base、应用元信息和 binding:
132
+ 已有数据库应用存在源码制品时,使用 `pull` 恢复可编辑工程,不要重新执行 `init`。目标目录必须为空;CLI 会下载当前 `page/`、`server-functions/` 和 `database-functions/` 源码,读取应用 Catalog,并重建 `base-database.jsonc` 与 `catalog.json`,不会创建或修改 Base、应用元信息和 binding:
133
+
134
+ 旧制品中的 `sql/` 会在恢复时迁移为 `database-functions/`。本地旧工程仍可直接检查和发布,但不能同时保留两个目录。
113
135
 
114
136
  ```bash
115
137
  base-database-cli pull ./todo-database \
@@ -121,10 +143,11 @@ base-database-cli pull ./todo-database \
121
143
 
122
144
  ### 发布 Preview 和正式版本
123
145
 
124
- 新建流程是 `init → deploy`;修改已有数据库应用时是 `pull → 修改 → deploy`。Agent 在每个阶段一次性获取所需上下文,根据 Catalog 完整实现 Page、SQL 和 FaaS 后发布 Preview:
146
+ 新建流程是 `init → 开发 → check → deploy`;修改已有数据库应用时是 `pull → 修改 → check → deploy`。Agent 在每个阶段一次性获取所需上下文,根据 Catalog 完整实现 Page、Database Function 和 FaaS,通过项目级本地检查后发布 Preview:
125
147
 
126
148
  ```bash
127
149
  cd todo-database
150
+ base-database-cli check --json
128
151
  base-database-cli deploy
129
152
  ```
130
153
 
@@ -140,25 +163,6 @@ Preview 回执会记录生成该制品时的工作区输入指纹。Preview 之
140
163
  Preview 回执同时绑定有效的 lark-cli profile;切换 profile 或旧回执没有 profile
141
164
  而当前使用本地 profile 时,需要重新发布 Preview,不能直接推广为正式版。
142
165
 
143
- ### 部署后的应用能力 Skill
144
-
145
- 每次部署成功后,CLI 自动将该应用的专属 Skill 安装或更新到当前用户的 `$CODEX_HOME/skills`,未配置时使用 `~/.codex/skills`。部署结果的 `agentGuide.skill` 包含安装状态、名称和路径;后续可直接让 Agent 查询或操作这个应用的数据,或输入 `$<skill.name>`。客户端若未刷新技能列表,开启新会话即可。
146
-
147
- Skill 按需读取正式版的 Function 和参数 Schema,不依赖应用工程目录。Preview 发布也会更新 Skill,但不会把 Preview 当成正式版。安装不授予额外权限,也不会自动执行业务动作。
148
-
149
- 需要单独修复安装或指定其他 Agent 的用户技能目录时:
150
-
151
- ```bash
152
- base-database-cli --profile <profile-name> database-skill install --app-token <app-token> --title '<应用名称>' --dir <skills-root>
153
- ```
154
-
155
- 只更新本工具管理的该应用 `SKILL.md`,不删除其他文件;安装失败会单独返回,不影响已经成功的应用发布。
156
-
157
- 能力 Skill 使用 `base-database-<hash>` 名称,通过 `database-skill` 命令安装和使用。
158
- 同一应用、环境和 profile 使用固定目录,每次部署更新本工具管理的 `SKILL.md`,保留附加文件。
159
- 生成的发现和调用命令显式携带 profile,不跟随 lark-cli 默认账号变化;托管凭证模式不写入 profile。
160
- 目标目录不受本工具管理或存在符号链接冲突时报告错误,不自动覆盖。
161
-
162
166
  ## 环境
163
167
 
164
168
  CLI 只支持 `online`,`--env` 默认且仅接受 `online`。保留该参数是为了兼容现有自动化命令;传入其他值会直接失败。所有 lark-cli、OpenAPI、Accounts、应用管理后台和 Page 运行时请求都直接使用线上域名,不启动代理、不改写域名,也不向项目配置写入环境路由。
@@ -170,10 +174,14 @@ base-database-cli auth login --env online
170
174
  base-database-cli doctor --env online
171
175
  ```
172
176
 
173
- `auth login` 使用上述规则选中的 lark-cli profile,并申请 Base 用户权限。仅未指定
177
+ `auth login` 使用上述规则选中的 lark-cli profile,并申请多维表格相关的用户身份权限(`--domain base`),显式补充
178
+ `base:appmode:read`、`base:appmode:create`、`base:appmode:update`。仅未指定
174
179
  profile 且 lark-cli 尚未配置时,才自动启动首次 `config init --new`;指定的 profile
175
180
  不存在时直接报错,不创建或覆盖配置。
176
181
 
182
+ CLI 明确报告 scope 权限不足时,使用同一 profile 重新执行 `auth login`;若错误另有应用权限开通或额外 scope 的处理要求,按错误提示处理。正常业务调用不增加权限探测。
183
+ `doctor` 复用登录状态中的 scope 列表检查上述三个用户权限,缺少时列出 `missing_scopes` 并提示重新登录;未返回 scope 列表时报告 `unavailable`,托管授权报告 `host_managed`。此项不代替应用侧权限开通检查。
184
+
177
185
  Base Database CLI 按 `PATH` 顺序选择第一个可识别的 `lark-cli`。可通过 `BASE_DATABASE_LARK_CLI_PATH` 指定已确认的可执行文件绝对路径;显式路径优先于 PATH。
178
186
 
179
187
  宿主入口缺少 `config` 且未选择 profile 时,CLI 保留宿主认证上下文,不生成虚构的本地 profile;指定 profile 却无法核验时仍报错。缺少 `auth` 时,`doctor` 和 `auth whoami` 使用当前用户只读接口核验身份,`doctor` 还检查应用列表接口;认证失败和权限错误不会按命令缺失跳过。宿主登录、退出仍由宿主提供,不模拟成功。Skill 文档命令 `skills read` 缺失时可直接读取已安装文件,不影响业务执行。
@@ -211,14 +219,26 @@ base-database-cli auth login|logout|whoami
211
219
  base-database-cli doctor
212
220
  base-database-cli init
213
221
  base-database-cli pull
222
+ base-database-cli environment-variables list|declare|set|clear
223
+ base-database-cli check [directory] [--no-install | --force-install] [--force-build] [--json]
214
224
  base-database-cli deploy
215
225
  base-database-cli deployments status
216
226
  base-database-cli lark-cli -- <arguments...>
217
227
  ```
218
228
 
219
- `deploy` 在一次调用内先生成 Function metadata 并完成全部 SQL validate,通过后再检查依赖指纹、执行必要的依赖安装、Page/FaaS build、archive、Functions sync、Artifact upload、Preview publish 和状态轮询。CLI 会汇总全部未通过的 SQL Function 后一次性报错;存在任一 SQL 校验失败时不会安装依赖或执行 build。依赖指纹未变化且对应 `node_modules` 仍存在时,默认跳过该子项目的 `npm ci`;`--force-install` 强制重装,`--no-install` 无条件跳过安装。build 仍会在每次 Preview deploy 中执行。正常应用开发不单独运行这些步骤;FaaS 子项目仍保留 `npm run build`,因为平台镜像打包器直接调用它。
229
+ `check` 用于开发期本地检查:验证工程配置、页面标题、Function metadata 和输入 Schema,先从 Database Function/FaaS metadata 生成 Page Function 输入类型,再使用 CLI 内置 npm 按依赖指纹准备 Page/FaaS 依赖并运行两者的 build(starter 的 build 包含类型检查)。默认目录为当前目录;`--no-install` 要求依赖已存在,`--force-install` 强制重装,两者不能同时使用。
230
+
231
+ 成功的 Page 和 FaaS build 会分别按源码、lock、Node/npm、平台和构建环境指纹缓存在 `.base-database-cli/state/check-build/`。输入未变化时后续 `check` 直接复用对应结果;只有一侧失败时,修复重试会保留并复用另一侧的成功结果。`--force-build` 忽略这份构建缓存,`--force-install` 会同时重新安装并重新构建;`deploy` 仍执行完整 build,不复用本地 `check` 的构建结果。
232
+
233
+ 使用 `--json` 时,成功或失败的 stdout 都是单个 JSON 文档,报告 `schemaVersion` 为 `2`;成功结果的 `functions["database-functions"]` 和 `functions["server-functions"]` 分别计数两类本地 Function。构建日志在失败时收敛到 `error.diagnostics`;失败结果还提供稳定的 `error.code`、`error.stage`、阶段状态和 `nextActions`,`cache.pageBuild` / `cache.faasBuild` 使用 `hit`、`miss`、`not_run` 单独表达缓存状态,不改变 `checks.*=passed` 的成功语义。不加该参数时保留面向终端的实时 npm/build 输出和文本错误。命令会更新 `page/src/lib/database-function-inputs.generated.ts`、生成本地缓存和构建输出,不调用应用 API、不修改 binding、不上传或发布,也不改写初始化和 Preview 回执。结果中的 `sqlValidation.status=not_run` 表示服务端查询语法、Catalog 与绑定校验未执行;本地通过不代表查询语句或业务运行态已通过。
234
+
235
+ `deploy` 在一次调用内先生成 Function metadata 并完成全部查询校验,通过后再检查依赖指纹、执行必要的依赖安装、Page/FaaS build、archive、Functions sync、Artifact upload、Preview publish 和状态轮询。CLI 会汇总全部未通过的 Database Function 后一次性报错;存在任一查询校验失败时不会安装依赖或执行 build。依赖指纹未变化且对应 `node_modules` 仍存在时,默认跳过该子项目的 `npm ci`;`--force-install` 强制重装,`--no-install` 无条件跳过安装。build 仍会在每次 Preview deploy 中执行;`check` 不替代发布门禁。FaaS 子项目必须保留可通过 `npm run build` 执行的构建脚本。
236
+
237
+ 本地存在 `ai/<functionKey>/meta.json` 声明时,`deploy` 还会把本地 AI Function 全集全量覆盖同步到草稿版本;本地没有 `ai/` 声明时不调用任何 AI Function 接口(返回 `no_local_ai_functions` 跳过原因),不涉及 AI 能力的应用无需开通 AI Function。`--skip-ai-functions` 显式跳过本次 AI Function 同步,Page/Database Function/FaaS 仍正常发布,成功结果中带 `aiFunctionsSkipped: true`;使用该参数发布后,远端 AI Function 与本次制品的对应关系需要自行确认并在交付说明中标注。
238
+
239
+ FaaS 中静态引用的 `process.env` 变量通过 `environment-variables` 命令管理。定义由 Preview 和 Prod 共享,两套值独立保存;Config 查询时明文返回,Secret 只返回脱敏值。`declare` 创建共享定义并默认拒绝覆盖同名但元数据不同的定义;确认影响后可用 `--force` 修改。声明必须显式传入 `--target`、`--type`,并用 `--required` 或 `--optional` 表明是否必填;`set` 和 `clear` 也必须显式指定目标环境。`set` 只接受 `--value-stdin`,CLI 不提供把值放入进程参数的 `--value`。保存后需重新发布才生效,保存动作不会自动发布。
220
240
 
221
- 初始化结果保留所绑定多维表格的 `baseUrl`。发布完成后,CLI 只读取成功态 `publish_status` 返回的 `result.baseAppUrl`,不再使用 `catalog.json` 或 OpenAPI GetProject 兜底;成功态缺少该字段时会明确报错。Preview 发布返回的顶层 `baseAppUrl` 会保留原有查询参数并设置 `mode=edit`,Production 发布返回的顶层 `baseAppUrl` 会移除 `mode`。命令结果不再包含应用管理后台 URL、旧 Preview URL、`preview`/`production` URL 对象或静态资源 `appUrl`/`staticUrl`;静态资源地址只保存在内部 Preview 回执。
241
+ 初始化结果保留所绑定多维表格的 `baseUrl`。发布完成后,使用 CLI 返回的顶层 `baseAppUrl` 访问应用;发布成功但未返回访问入口时,CLI 会明确报错。CLI 校验并原样返回 DevCenter 在发布结果中给出的完整访问入口:Preview 入口由服务端提供 `mode=edit`,Production 入口由服务端提供正式访问地址。不要根据应用 token 猜测访问地址,也不要使用构建产物的静态资源地址作为应用入口。
222
242
 
223
243
  `lark-cli` 子命令仅用于调试。先进入包含 `base-database.jsonc` 的项目根目录;命令只读取当前目录,不接受额外项目路径。普通 JSON API 响应会统一输出到 stdout,兼容宿主将 JSON 正文落盘的行为;显式 `--output`、`--jq`、`--page-all`、非 JSON 格式及其他原生命令保留透传行为。正常初始化和发布无需调用:
224
244
 
@@ -0,0 +1,53 @@
1
+ import { type RuntimeProfile } from './environment.js';
2
+ export declare const AI_FUNCTION_FEATURE_NOT_ENABLED_CODE = 800004011;
3
+ export declare const AI_FUNCTION_FEATURE_NOT_ENABLED_MESSAGE = "AI Function management is not enabled for the current user (800004011). This is a feature gate, not a missing scope, so `auth login` does not help. Publish without AI Functions via `deploy --skip-ai-functions` (or remove ai/) and report the AI Function part as blocked.";
4
+ export declare function isAIFunctionFeatureNotEnabled(error: unknown): boolean;
5
+ export interface AIFunctionInput {
6
+ functionKey: string;
7
+ name: string;
8
+ description: string;
9
+ configJson: string;
10
+ }
11
+ export declare function collectLocalAIFunctions(workspace: string): AIFunctionInput[];
12
+ export declare function syncAIFunctionsFullCover(appToken: string, items: AIFunctionInput[], env: NodeJS.ProcessEnv, cwd?: string): Record<string, unknown>;
13
+ export type AIFunctionRestoreResult = {
14
+ status: 'restored';
15
+ functionKeys: string[];
16
+ } | {
17
+ status: 'not_enabled';
18
+ };
19
+ export declare function restoreRemoteAIFunctions(appToken: string, workspace: string, env: NodeJS.ProcessEnv, cwd?: string): AIFunctionRestoreResult;
20
+ export declare function assertNoRemoteAIFunctionLoss(appToken: string, items: AIFunctionInput[], env: NodeJS.ProcessEnv, cwd?: string): void;
21
+ export declare function syncAIFunctionsForDeploy(appToken: string, items: AIFunctionInput[], env: NodeJS.ProcessEnv, cwd?: string): Record<string, unknown>;
22
+ export interface AIFunctionCommandOptions {
23
+ directory: string;
24
+ runtimeProfile?: RuntimeProfile;
25
+ }
26
+ export declare function listAIFunctions(options: AIFunctionCommandOptions): Promise<Record<string, unknown>>;
27
+ export declare function getAIFunction(functionKey: string, options: AIFunctionCommandOptions): Promise<Record<string, unknown>>;
28
+ export declare function syncAIFunctions(options: AIFunctionCommandOptions): Promise<Record<string, unknown>>;
29
+ export declare function validateAIFunction(functionKey: string, options: AIFunctionCommandOptions): Promise<Record<string, unknown>>;
30
+ export interface AIFunctionDebugOptions extends AIFunctionCommandOptions {
31
+ env: 'preview' | 'prod';
32
+ variables?: Record<string, unknown>;
33
+ messages?: Array<{
34
+ content: Array<Record<string, unknown>>;
35
+ role: string;
36
+ }>;
37
+ input?: Record<string, unknown>;
38
+ }
39
+ export declare function debugAIFunction(functionKey: string, options: AIFunctionDebugOptions): Promise<Record<string, unknown>>;
40
+ export interface AIFunctionTaskOptions extends AIFunctionCommandOptions {
41
+ env: 'preview' | 'prod';
42
+ }
43
+ export declare function getAIFunctionTask(functionKey: string, taskId: string, options: AIFunctionTaskOptions): Promise<Record<string, unknown>>;
44
+ export interface AIFunctionUsageOptions extends AIFunctionCommandOptions {
45
+ env?: string;
46
+ from?: string;
47
+ to?: string;
48
+ functionKey?: string;
49
+ model?: string;
50
+ capabilityType?: string;
51
+ }
52
+ export declare function getAIFunctionUsage(options: AIFunctionUsageOptions): Promise<Record<string, unknown>>;
53
+ //# sourceMappingURL=ai-functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-functions.d.ts","sourceRoot":"","sources":["../src/ai-functions.ts"],"names":[],"mappings":"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"}