@lark-base-open/base-database-cli 1.0.0

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 (149) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +169 -0
  3. package/changelog/CHANGELOG-0.x.md +103 -0
  4. package/config-schema.json +28 -0
  5. package/dist/agent-guide.d.ts +18 -0
  6. package/dist/agent-guide.d.ts.map +1 -0
  7. package/dist/agent-guide.js +30 -0
  8. package/dist/agent-guide.js.map +1 -0
  9. package/dist/archive.d.ts +16 -0
  10. package/dist/archive.d.ts.map +1 -0
  11. package/dist/archive.js +162 -0
  12. package/dist/archive.js.map +1 -0
  13. package/dist/assets.d.ts +4 -0
  14. package/dist/assets.d.ts.map +1 -0
  15. package/dist/assets.js +6 -0
  16. package/dist/assets.js.map +1 -0
  17. package/dist/auth.d.ts +17 -0
  18. package/dist/auth.d.ts.map +1 -0
  19. package/dist/auth.js +63 -0
  20. package/dist/auth.js.map +1 -0
  21. package/dist/cli.d.ts +3 -0
  22. package/dist/cli.d.ts.map +1 -0
  23. package/dist/cli.js +15 -0
  24. package/dist/cli.js.map +1 -0
  25. package/dist/config.d.ts +5 -0
  26. package/dist/config.d.ts.map +1 -0
  27. package/dist/config.js +50 -0
  28. package/dist/config.js.map +1 -0
  29. package/dist/database-skill.d.ts +22 -0
  30. package/dist/database-skill.d.ts.map +1 -0
  31. package/dist/database-skill.js +135 -0
  32. package/dist/database-skill.js.map +1 -0
  33. package/dist/deploy.d.ts +28 -0
  34. package/dist/deploy.d.ts.map +1 -0
  35. package/dist/deploy.js +476 -0
  36. package/dist/deploy.js.map +1 -0
  37. package/dist/environment.d.ts +12 -0
  38. package/dist/environment.d.ts.map +1 -0
  39. package/dist/environment.js +27 -0
  40. package/dist/environment.js.map +1 -0
  41. package/dist/function-schema.d.ts +3 -0
  42. package/dist/function-schema.d.ts.map +1 -0
  43. package/dist/function-schema.js +310 -0
  44. package/dist/function-schema.js.map +1 -0
  45. package/dist/init.d.ts +77 -0
  46. package/dist/init.d.ts.map +1 -0
  47. package/dist/init.js +418 -0
  48. package/dist/init.js.map +1 -0
  49. package/dist/lark-cli.d.ts +8 -0
  50. package/dist/lark-cli.d.ts.map +1 -0
  51. package/dist/lark-cli.js +228 -0
  52. package/dist/lark-cli.js.map +1 -0
  53. package/dist/npm.d.ts +13 -0
  54. package/dist/npm.d.ts.map +1 -0
  55. package/dist/npm.js +93 -0
  56. package/dist/npm.js.map +1 -0
  57. package/dist/page-title.d.ts +3 -0
  58. package/dist/page-title.d.ts.map +1 -0
  59. package/dist/page-title.js +47 -0
  60. package/dist/page-title.js.map +1 -0
  61. package/dist/preview-receipt.d.ts +23 -0
  62. package/dist/preview-receipt.d.ts.map +1 -0
  63. package/dist/preview-receipt.js +133 -0
  64. package/dist/preview-receipt.js.map +1 -0
  65. package/dist/process.d.ts +17 -0
  66. package/dist/process.d.ts.map +1 -0
  67. package/dist/process.js +53 -0
  68. package/dist/process.js.map +1 -0
  69. package/dist/program.d.ts +12 -0
  70. package/dist/program.d.ts.map +1 -0
  71. package/dist/program.js +204 -0
  72. package/dist/program.js.map +1 -0
  73. package/dist/pull.d.ts +18 -0
  74. package/dist/pull.d.ts.map +1 -0
  75. package/dist/pull.js +324 -0
  76. package/dist/pull.js.map +1 -0
  77. package/dist/skill.d.ts +7 -0
  78. package/dist/skill.d.ts.map +1 -0
  79. package/dist/skill.js +28 -0
  80. package/dist/skill.js.map +1 -0
  81. package/dist/types.d.ts +32 -0
  82. package/dist/types.d.ts.map +1 -0
  83. package/dist/types.js +2 -0
  84. package/dist/types.js.map +1 -0
  85. package/dist/workspace-fingerprint.d.ts +8 -0
  86. package/dist/workspace-fingerprint.d.ts.map +1 -0
  87. package/dist/workspace-fingerprint.js +64 -0
  88. package/dist/workspace-fingerprint.js.map +1 -0
  89. package/package.json +54 -0
  90. package/skills/lark-base-database/SKILL.md +307 -0
  91. package/skills/lark-base-database/references/base-capability-routing.md +81 -0
  92. package/skills/lark-base-database/references/base-sql-unsupported.md +42 -0
  93. package/skills/lark-base-database/references/database-capability-skill.md +24 -0
  94. package/skills/lark-base-database/references/development.md +642 -0
  95. package/skills/lark-base-database/references/file-transfer.md +275 -0
  96. package/skills/lark-base-database/references/permission-design.md +138 -0
  97. package/skills/lark-base-database/references/release.md +81 -0
  98. package/skills/lark-base-database/references/sql-function.md +276 -0
  99. package/skills/lark-base-database/references/style-guide.md +88 -0
  100. package/templates/database-capability/SKILL.md.tmpl +41 -0
  101. package/templates/database-starter/README.md +11 -0
  102. package/templates/database-starter/gitignore +3 -0
  103. package/templates/database-starter/page/.prettierignore +4 -0
  104. package/templates/database-starter/page/.prettierrc.json +7 -0
  105. package/templates/database-starter/page/README.md +29 -0
  106. package/templates/database-starter/page/index.html +24 -0
  107. package/templates/database-starter/page/package-lock.json +2675 -0
  108. package/templates/database-starter/page/package.json +44 -0
  109. package/templates/database-starter/page/public/favicon.png +0 -0
  110. package/templates/database-starter/page/src/App.tsx +18 -0
  111. package/templates/database-starter/page/src/components/UserSelectorEditor/index.tsx +267 -0
  112. package/templates/database-starter/page/src/components/UserSelectorPanel/index.css +32 -0
  113. package/templates/database-starter/page/src/components/UserSelectorPanel/index.test.ts +24 -0
  114. package/templates/database-starter/page/src/components/UserSelectorPanel/index.tsx +478 -0
  115. package/templates/database-starter/page/src/components/UserSelectorPanel/user-search.test.ts +175 -0
  116. package/templates/database-starter/page/src/components/UserSelectorPanel/user-search.ts +201 -0
  117. package/templates/database-starter/page/src/components/database-runtime-ready.tsx +21 -0
  118. package/templates/database-starter/page/src/components/database-user-menu/index.tsx +238 -0
  119. package/templates/database-starter/page/src/components/feedback/page-state.tsx +66 -0
  120. package/templates/database-starter/page/src/components/floating-button/chatbot-entry.test.ts +23 -0
  121. package/templates/database-starter/page/src/components/floating-button/chatbot-entry.tsx +873 -0
  122. package/templates/database-starter/page/src/components/floating-button/index.tsx +196 -0
  123. package/templates/database-starter/page/src/components/floating-button/local-chat-panel.test.ts +25 -0
  124. package/templates/database-starter/page/src/components/floating-button/local-chat-panel.tsx +197 -0
  125. package/templates/database-starter/page/src/components/floating-button/utils/current-user.ts +56 -0
  126. package/templates/database-starter/page/src/components/floating-button/utils/env.ts +18 -0
  127. package/templates/database-starter/page/src/components/floating-button/utils/project-meta.test.ts +79 -0
  128. package/templates/database-starter/page/src/components/floating-button/utils/project-meta.ts +252 -0
  129. package/templates/database-starter/page/src/components/ui/button.tsx +56 -0
  130. package/templates/database-starter/page/src/index.css +67 -0
  131. package/templates/database-starter/page/src/lib/cn.test.ts +9 -0
  132. package/templates/database-starter/page/src/lib/cn.ts +7 -0
  133. package/templates/database-starter/page/src/lib/database-runtime-attachment.test.ts +168 -0
  134. package/templates/database-starter/page/src/lib/database-runtime-context.test.ts +111 -0
  135. package/templates/database-starter/page/src/lib/database-runtime.test.ts +103 -0
  136. package/templates/database-starter/page/src/lib/database-runtime.ts +389 -0
  137. package/templates/database-starter/page/src/main.tsx +34 -0
  138. package/templates/database-starter/page/src/vite-env.d.ts +1 -0
  139. package/templates/database-starter/page/tsconfig.json +23 -0
  140. package/templates/database-starter/page/vite.config.ts +13 -0
  141. package/templates/database-starter/prettierignore +1 -0
  142. package/templates/database-starter/server-functions/.prettierignore +3 -0
  143. package/templates/database-starter/server-functions/.prettierrc.json +7 -0
  144. package/templates/database-starter/server-functions/README.md +11 -0
  145. package/templates/database-starter/server-functions/package-lock.json +1687 -0
  146. package/templates/database-starter/server-functions/package.json +22 -0
  147. package/templates/database-starter/server-functions/scripts/run-tsc.mjs +50 -0
  148. package/templates/database-starter/server-functions/tsconfig.json +20 -0
  149. package/templates/database-starter/sql/README.md +8 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,11 @@
1
+ # Changelog
2
+
3
+ ## [1.0.0] - 2026-09-08
4
+
5
+ ### Added
6
+
7
+ - 首次发布 Base Database CLI 与配套 Agent Skill。
8
+
9
+ ## 历史版本
10
+
11
+ - [0.x 版本归档](changelog/CHANGELOG-0.x.md)
package/README.md ADDED
@@ -0,0 +1,169 @@
1
+ # Base Database CLI
2
+
3
+ `@lark-base-open/base-database-cli` 为 Coding Agent 提供 `lark-base-database`
4
+ Skill 和配套 CLI,用于基于飞书多维表格创建、开发并发布数据库应用。CLI
5
+ 负责初始化 Base 与应用、生成项目、校验和构建 Functions,以及发布 Preview
6
+ 和正式版本。
7
+
8
+ ## 安装 Agent Skill
9
+
10
+ 首次安装到 Codex:
11
+
12
+ ```bash
13
+ npx --yes @lark-base-open/base-database-cli@latest skill install --target codex
14
+ ```
15
+
16
+ 升级已安装的 Skill:
17
+
18
+ ```bash
19
+ npx --yes @lark-base-open/base-database-cli@latest skill install --target codex --force
20
+ ```
21
+
22
+ 安装后,在 Codex 中描述要搭建的业务系统;Agent 会读取 Skill,并通过 CLI
23
+ 完成数据模型、页面和 Functions 的开发与发布。
24
+
25
+ ## 创建、恢复并发布数据库应用
26
+
27
+ ### 新建数据库应用
28
+
29
+ 新建工程时,`init` 支持两种 Base 来源。需要从零建数据模型时,Agent 根据 Skill 写出完整 `base-schema.json`,再用一条命令创建 Base、全部 table、应用与 binding,并生成 hello-world 工程和 Catalog:
30
+
31
+ ```bash
32
+ npx @lark-base-open/base-database-cli init ./todo-database \
33
+ --schema ./base-schema.json \
34
+ --name 'Todo 管理' \
35
+ --env online
36
+ ```
37
+
38
+ 已有 Base 时,不创建或修改 Base。CLI 会读取其中的全部 table,直接创建绑定该 Base 的新应用,获取 Catalog,并生成同样的工程:
39
+
40
+ ```bash
41
+ npx @lark-base-open/base-database-cli init ./todo-database \
42
+ --base-token basxxxxxxxx \
43
+ --name 'Todo 管理' \
44
+ --env online
45
+ ```
46
+
47
+ `--schema` 与 `--base-token` 必须且只能选择一个。宿主已经创建目标应用时,额外传入 `--app-token`;CLI 会把选中的 Base 绑定到该应用,而不会再调用应用创建接口:
48
+
49
+ ```bash
50
+ npx @lark-base-open/base-database-cli init ./todo-database \
51
+ --schema ./base-schema.json \
52
+ --app-token PrjExistingToken \
53
+ --name 'Todo 管理' \
54
+ --description '供个人集中创建、跟踪和完成日常任务'
55
+ ```
56
+
57
+ 成功结果通过 `baseSource`、`databaseSource` 分别列出 Base 与应用来源,通过 `baseToken`、`appToken` 返回对应 token;新建或复用的应用信息位于 `created.database` 或 `reused.database`。结果同时列出数据表、binding、生成的工程目录、配置文件和 `catalog.json`,并在 `nextSteps` 中给出开发目录与 Preview 发布命令。
58
+
59
+ 生成项目的 `page/`、`server-functions/`、`sql/` 直接位于项目根目录;`base-database.jsonc` 和 `catalog.json` 也保留在根目录。`server-functions/` 是服务端 FaaS Functions 的源码与构建工作区。CLI 的 Preview 状态和发布临时制品统一写入被 Git 忽略的 `.base-database-cli/state/`。
60
+
61
+ ### 恢复并修改已有数据库应用
62
+
63
+ 已有数据库应用存在源码制品时,使用 `pull` 恢复可编辑工程,不要重新执行 `init`。目标目录必须为空;CLI 会下载当前 `page/`、`server-functions/` 和 `sql/` 源码,读取应用 Catalog,并重建 `base-database.jsonc` 与 `catalog.json`,不会创建或修改 Base、应用元信息和 binding:
64
+
65
+ ```bash
66
+ npx @lark-base-open/base-database-cli pull ./todo-database \
67
+ --app-token PrjExistingToken \
68
+ --env online
69
+ ```
70
+
71
+ 恢复完成后,先读取现有配置、Catalog 和源码,只修改本次需求涉及的内容,再使用 `deploy` 发布新的 Preview。
72
+
73
+ ### 发布 Preview 和正式版本
74
+
75
+ 新建流程是 `init → deploy`;修改已有数据库应用时是 `pull → 修改 → deploy`。Agent 在每个阶段一次性获取所需上下文,根据 Catalog 完整实现 Page、SQL 和 FaaS 后发布 Preview:
76
+
77
+ ```bash
78
+ cd todo-database
79
+ npx @lark-base-open/base-database-cli deploy
80
+ ```
81
+
82
+ 部署结果只返回当前环境用户可访问的顶层 `baseAppUrl`。Agent 把链接交给用户后停止;用户体验并明确回复“部署正式版”后,把同一制品发布到 Prod:
83
+
84
+ ```bash
85
+ npx @lark-base-open/base-database-cli deploy --production --yes
86
+ ```
87
+
88
+ Preview 回执会记录生成该制品时的工作区输入指纹。Preview 之后只要源码、配置或
89
+ 文件结构发生变化,Production 发布就会在任何远端请求前停止,并要求重新运行
90
+ 普通 `deploy` 生成和验证新的 Preview;旧版回执缺少输入指纹时同样不会放行。
91
+
92
+ ### 部署后的应用能力 Skill
93
+
94
+ 每次部署成功后,CLI 自动将该应用的专属 Skill 安装或更新到当前用户的 `$CODEX_HOME/skills`,未配置时使用 `~/.codex/skills`。部署结果的 `agentGuide.skill` 包含安装状态、名称和路径;后续可直接让 Agent 查询或操作这个应用的数据,或输入 `$<skill.name>`。客户端若未刷新技能列表,开启新会话即可。
95
+
96
+ Skill 按需读取正式版的 Function 和参数 Schema,不依赖应用工程目录。Preview 发布也会更新 Skill,但不会把 Preview 当成正式版。安装不授予额外权限,也不会自动执行业务动作。
97
+
98
+ 需要单独修复安装或指定其他 Agent 的用户技能目录时:
99
+
100
+ ```bash
101
+ npx @lark-base-open/base-database-cli database-skill install --app-token <app-token> --title '<应用名称>' --dir <skills-root>
102
+ ```
103
+
104
+ 只更新本工具管理的该应用 `SKILL.md`,不删除其他文件;安装失败会单独返回,不影响已经成功的应用发布。
105
+
106
+ 能力 Skill 使用 `base-database-<hash>` 名称,通过 `database-skill` 命令安装和使用。
107
+ 同一应用和环境使用固定目录,每次部署更新本工具管理的 `SKILL.md`,保留附加文件。
108
+ 目标目录不受本工具管理或存在符号链接冲突时报告错误,不自动覆盖。
109
+
110
+ ## 环境
111
+
112
+ CLI 只支持 `online`,`--env` 默认且仅接受 `online`。保留该参数是为了兼容现有自动化命令;传入其他值会直接失败。所有 lark-cli、OpenAPI、Accounts、应用管理后台和 Page 运行时请求都直接使用线上域名,不启动代理、不改写域名,也不向项目配置写入环境路由。
113
+
114
+ 需要登录或诊断时:
115
+
116
+ ```bash
117
+ npx @lark-base-open/base-database-cli auth login --env online
118
+ npx @lark-base-open/base-database-cli doctor --env online
119
+ ```
120
+
121
+ `auth login` 使用默认 lark-cli 配置;首次使用时自动启动 `config init --new`,配置完成后继续申请 Base 用户权限。
122
+
123
+ Base Database CLI 会按 `PATH` 顺序探测全部 `lark-cli`,读取各自的 `--version`,并跳过版本号中带构建 hash 的定制版本,默认使用第一个不带构建 hash 的 release 版本。如果没有可用的 release 版本,命令会明确失败而不会回退到定制版本。需要显式覆盖自动选择时,可将 `BASE_DATABASE_LARK_CLI_PATH` 设置为目标可执行文件的绝对路径;显式设置不会应用版本过滤。
124
+
125
+ ## 项目配置
126
+
127
+ 线上项目的最小配置:
128
+
129
+ ```jsonc
130
+ {
131
+ "configVersion": 1,
132
+ "name": "todo-database",
133
+ "appToken": "Prjxxxxxxxx",
134
+ "bindings": {
135
+ "MAIN_BASE": {
136
+ "type": "base",
137
+ "baseToken": "basxxxxxxxx",
138
+ "tableIds": ["tbl_tasks"],
139
+ },
140
+ },
141
+ }
142
+ ```
143
+
144
+ `deploy` 会在发布前应用合法的 Base binding。目前只支持一个 Base;多个不同 `baseToken` 会停止发布并提示删除多余 binding。无法解析或暂不支持类型的单个 binding 会输出警告并建议修正 `base-database.jsonc`。
145
+
146
+ ## CLI 命令
147
+
148
+ ```text
149
+ npx @lark-base-open/base-database-cli skill install
150
+ npx @lark-base-open/base-database-cli auth login|logout|whoami
151
+ npx @lark-base-open/base-database-cli doctor
152
+ npx @lark-base-open/base-database-cli init
153
+ npx @lark-base-open/base-database-cli pull
154
+ npx @lark-base-open/base-database-cli deploy
155
+ npx @lark-base-open/base-database-cli deployments status
156
+ npx @lark-base-open/base-database-cli lark-cli -- <arguments...>
157
+ ```
158
+
159
+ `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`,因为平台镜像打包器直接调用它。
160
+
161
+ 初始化结果保留所绑定多维表格的 `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 回执。
162
+
163
+ `lark-cli` 子命令仅用于调试。先进入包含 `base-database.jsonc` 的项目根目录;命令只读取当前目录,不接受额外项目路径,并在线上环境直接透传参数。正常初始化和发布无需调用:
164
+
165
+ ```bash
166
+ npx @lark-base-open/base-database-cli lark-cli -- \
167
+ api GET /open-apis/base/v3/sites/list \
168
+ --params '{"pageSize":1}' --json
169
+ ```
@@ -0,0 +1,103 @@
1
+ # Changelog — 0.x
2
+
3
+ ## [0.3.8] - 2026-09-04
4
+
5
+ ### Added
6
+
7
+ - 新增 `install` 与 `update` 命令,可持久安装稳定版 CLI 和同版本 Building Skill,并检查、升级或暂缓 npm 新版本。
8
+
9
+ ### Changed
10
+
11
+ - 建站和修改任务改用持久的 `base-site` 命令;每个任务首次执行 CLI 前检查更新,结果缓存 24 小时,发现新版时先征求用户确认。
12
+
13
+ ## [0.3.7] - 2026-09-03
14
+
15
+ ### Fixed
16
+
17
+ - 修正多份 `lark-cli` 共存时的入口选择:自动跳过版本号含构建 hash 的定制版本,选择 `PATH` 中首个可识别的 release 版本;也可通过 `BASE_SITE_LARK_CLI_PATH` 指定绝对路径。
18
+
19
+ ## [0.3.6] - 2026-09-03
20
+
21
+ ### Removed
22
+
23
+ - 移除建站和修改任务开始前的公开 CLI 自动版本检查与升级询问,安装 Skill 后直接进入任务流程。
24
+
25
+ ### Fixed
26
+
27
+ - 修正 Base SQL 条件聚合指导,使用浮点数分支生成 `SUM` / `AVG`,避免整数分支导致聚合类型校验失败。
28
+
29
+ ## [0.3.5] - 2026-09-02
30
+
31
+ ### Added
32
+
33
+ - 本地建站和修改任务会在开始前检查公开 CLI 版本;发现新版时先征求升级同意,并在 24 小时内复用处理结果,避免重复查询和询问。
34
+
35
+ ### Fixed
36
+
37
+ - 修正 Base SQL 聚合、子查询和窗口函数指导,避免生成聚合派生表 JOIN、表达式标量子查询及当前不支持的窗口函数。
38
+ - 修正 Base SQL 表达式和字段筛选指导,避免生成 `COALESCE`、`SPLIT`、文本日期范围比较及空选项比较等当前不支持的写法。
39
+
40
+ ## [0.3.4] - 2026-08-27
41
+
42
+ ### Security
43
+
44
+ - Page 的记录创建、更新和删除统一通过 FaaS 执行;starter 不再提供直接记录写入 helper,避免 Page 运行时直接传递 Base token。
45
+
46
+ ## [0.3.3] - 2026-08-27
47
+
48
+ ### Added
49
+
50
+ - Page 可批量创建、更新和删除已绑定 Base 记录,普通记录写入无需额外创建 FaaS Function。
51
+ - 建站时会明确站点准入、数据可见范围和操作权限。
52
+
53
+ ### Changed
54
+
55
+ - 修改已有 Site 时,新增 Table 可通过增量追加 binding 并刷新 Catalog,无需重新执行 `init` 或 `pull`。
56
+ - 从零建站在交付 Preview 前写入真实示例数据,并通过页面 SQL Function 回读验证。
57
+
58
+ ## [0.3.2] - 2026-08-26
59
+
60
+ ### Changed
61
+
62
+ - 新生成站点把当前用户、所属组织和退出登录入口移入站点自身导航;右下角悬浮控件只保留编辑站点与 Chatbot 入口。
63
+
64
+ ## [0.3.1] - 2026-08-26
65
+
66
+ ### Fixed
67
+
68
+ - 修正 Base SQL 条件分支指导,明确使用 searched CASE(`CASE WHEN ... THEN ... END`),避免生成不受支持的 Simple CASE。
69
+
70
+ ## [0.3.0] - 2026-08-25
71
+
72
+ ### Added
73
+
74
+ - 新增 `pull` 命令,可从已有 Site 的源码制品恢复 Page、FaaS、SQL、项目配置和 Catalog,并在不重建 Base、Site 或 binding 的前提下继续增量开发。
75
+ - `init` 新增 `--site-token`,可将新建或已有 Base 绑定到宿主预先创建的 Site,避免托管建站流程额外创建 Site。
76
+ - 新生成的 Site 工程提供站内对话面板、当前用户与组织操作,以及面向 Site 成员的用户选择能力。
77
+
78
+ ### Changed
79
+
80
+ - **Breaking:** 调整 CLI 发布结果和 Site 访问入口契约,统一使用顶层 `baseAppUrl`。
81
+ - **Breaking:** 调整 Preview 到 Production 的发布契约;工作区发生变化或使用旧版 Preview 回执时,需要重新发布 Preview。
82
+ - 更新 Site starter 的站内交互体验,并使 Skill 与当前 Base 写入、Base SQL 和 Site Runtime 能力保持一致。
83
+
84
+ ## [0.2.7] - 2026-08-06
85
+
86
+ ### Changed
87
+
88
+ - 原生 workflow 通知按明确的入口策略配置:与 Site 业务对象关联的通知默认进入对应站内对象,纯展示或进入多维表格仅在用户明确要求时使用。
89
+
90
+ ### Fixed
91
+
92
+ - 新建 Site 通知 workflow 会在 Preview 发布成功后使用最终 Site 链接直接创建;入口配置或回读失败时立即禁用,避免错误通知继续生效。
93
+
94
+ ## [0.2.6] - 2026-08-04
95
+
96
+ ### Added
97
+
98
+ - 初始化 Site 工程时生成页面标题,并在发布前校验标题配置。
99
+
100
+ ### Changed
101
+
102
+ - 明确 Base SQL Function 的支持边界和不支持能力。
103
+ - 原生 workflow 的 Site 通知入口会随 Preview 和正式发布地址切换。
@@ -0,0 +1,28 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Base Database CLI configuration",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": ["configVersion", "appToken"],
7
+ "properties": {
8
+ "$schema": {
9
+ "type": "string"
10
+ },
11
+ "configVersion": {
12
+ "const": 1
13
+ },
14
+ "name": {
15
+ "type": "string",
16
+ "minLength": 1
17
+ },
18
+ "runtimeProfile": {
19
+ "type": "string",
20
+ "minLength": 1
21
+ },
22
+ "appToken": {
23
+ "type": "string",
24
+ "minLength": 1
25
+ },
26
+ "bindings": {}
27
+ }
28
+ }
@@ -0,0 +1,18 @@
1
+ import type { RuntimeProfile } from './environment.js';
2
+ export declare function deploymentAgentGuide(appToken: string, target: 'preview' | 'prod', options: {
3
+ workspace: string;
4
+ profile: RuntimeProfile;
5
+ }): {
6
+ target: 'prod';
7
+ availability: string;
8
+ skill: {
9
+ status: "installed" | "updated";
10
+ name: string;
11
+ path: string;
12
+ } | {
13
+ status: 'failed';
14
+ error: string;
15
+ };
16
+ message: string;
17
+ };
18
+ //# sourceMappingURL=agent-guide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-guide.d.ts","sourceRoot":"","sources":["../src/agent-guide.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKvD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,GAAG,MAAM,EAC1B,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE;YAgB7C,MAAM;;;;;;;gBALJ,QAAQ;;;;EAgBrB"}
@@ -0,0 +1,30 @@
1
+ import { validatePageTitle } from './page-title.js';
2
+ import { installDatabaseSkill } from './database-skill.js';
3
+ // Runs only after successful publication; never discovers or invokes Functions.
4
+ export function deploymentAgentGuide(appToken, target, options) {
5
+ let skill;
6
+ try {
7
+ skill = installDatabaseSkill({
8
+ appToken,
9
+ title: validatePageTitle(options.workspace),
10
+ profile: options.profile,
11
+ });
12
+ }
13
+ catch (error) {
14
+ skill = {
15
+ status: 'failed',
16
+ error: error instanceof Error ? error.message : String(error),
17
+ };
18
+ }
19
+ return {
20
+ target: 'prod',
21
+ availability: target === 'prod'
22
+ ? '正式版发布成功;实际发现结果以服务端接口及开关状态为准,尚未自动验证。'
23
+ : '本次仅发布预览版;Skill 只读取正式版,不代表本次预览可被发现。不执行发现或调用,先等待用户确认。',
24
+ skill,
25
+ message: skill.status === 'failed'
26
+ ? '应用发布成功,但专属 Skill 安装失败;向用户报告原因,不要重新发布应用来修复安装。'
27
+ : `已${skill.status === 'installed' ? '安装' : '更新'}本应用 Skill。请告知用户可直接让 Agent 使用本应用能力,或使用 $${skill.name};当前客户端若未自动刷新 Skill 列表,请开启新会话。安装不代表业务操作授权。`,
28
+ };
29
+ }
30
+ //# sourceMappingURL=agent-guide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-guide.js","sourceRoot":"","sources":["../src/agent-guide.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,gFAAgF;AAChF,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,MAA0B,EAC1B,OAAuD;IAEvD,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,oBAAoB,CAAC;YAC3B,QAAQ;YACR,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC;YAC3C,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,KAAK,GAAG;YACN,MAAM,EAAE,QAAiB;YACzB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,MAAe;QACvB,YAAY,EACV,MAAM,KAAK,MAAM;YACf,CAAC,CAAC,qCAAqC;YACvC,CAAC,CAAC,qDAAqD;QAC3D,KAAK;QACL,OAAO,EACL,KAAK,CAAC,MAAM,KAAK,QAAQ;YACvB,CAAC,CAAC,8CAA8C;YAChD,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,0CAA0C,KAAK,CAAC,IAAI,2CAA2C;KACpJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface SQLValidationArtifact {
2
+ functionId: string;
3
+ path: string;
4
+ }
5
+ export interface DatabaseMetadataArtifacts {
6
+ metaList: string;
7
+ sqlValidation: SQLValidationArtifact[];
8
+ }
9
+ export declare function prepareDatabaseMetadata(workspace: string): DatabaseMetadataArtifacts;
10
+ export declare function archiveDatabase(workspace: string, metadata?: DatabaseMetadataArtifacts): Promise<{
11
+ archive: string;
12
+ metaList: string;
13
+ sqlValidation: SQLValidationArtifact[];
14
+ displayArchive: string;
15
+ }>;
16
+ //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../src/archive.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,qBAAqB,EAAE,CAAC;CACxC;AAmKD,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,GAChB,yBAAyB,CAK3B;AAED,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,yBAA8D;;;;;GAazE"}
@@ -0,0 +1,162 @@
1
+ import { createWriteStream, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync, } from 'node:fs';
2
+ import { basename, dirname, join, relative, resolve } from 'node:path';
3
+ import { ZipArchive } from 'archiver';
4
+ import { deriveSQLInputSchema, normalizeFunctionInputSchema, } from './function-schema.js';
5
+ const FUNCTION_ID_PATTERN = /^[A-Za-z0-9_-]+$/;
6
+ const MAX_FUNCTIONS = 200;
7
+ function findMetaFiles(directory) {
8
+ if (!existsSync(directory))
9
+ return [];
10
+ return readdirSync(directory, { withFileTypes: true }).flatMap((entry) => {
11
+ if (!entry.isDirectory())
12
+ return [];
13
+ const path = join(directory, entry.name, 'meta.json');
14
+ return existsSync(path) && statSync(path).isFile() ? [path] : [];
15
+ });
16
+ }
17
+ function readMetaItem(type, path) {
18
+ const manifest = JSON.parse(readFileSync(path, 'utf8'));
19
+ const functionId = basename(dirname(path));
20
+ if (functionId.length > 64 ||
21
+ functionId.length < 1 ||
22
+ !FUNCTION_ID_PATTERN.test(functionId)) {
23
+ throw new Error(`Invalid Function ID: ${functionId}`);
24
+ }
25
+ if (typeof manifest.name !== 'string' || manifest.name === '') {
26
+ throw new Error(`Function name must be a non-empty string: ${path}`);
27
+ }
28
+ if (manifest.description !== undefined &&
29
+ typeof manifest.description !== 'string') {
30
+ throw new Error(`Function description must be a string: ${path}`);
31
+ }
32
+ const item = {
33
+ functionId,
34
+ functionType: type === 'sql' ? 1 : 2,
35
+ name: manifest.name,
36
+ description: manifest.description ?? '',
37
+ sourceCode: '',
38
+ };
39
+ if (type === 'sql') {
40
+ if (manifest.inputSchema !== undefined) {
41
+ throw new Error(`SQL inputSchema is derived from meta.params and must not be set: ${path}`);
42
+ }
43
+ let meta = manifest.meta;
44
+ if (meta === undefined) {
45
+ meta = { params: [] };
46
+ }
47
+ else if (!meta || typeof meta !== 'object' || Array.isArray(meta)) {
48
+ throw new Error(`SQL meta must be an object: ${path}`);
49
+ }
50
+ else if (!Object.hasOwn(meta, 'params')) {
51
+ meta = { ...meta, params: [] };
52
+ }
53
+ else if (!Array.isArray(meta.params)) {
54
+ throw new Error(`SQL meta.params must be an array: ${path}`);
55
+ }
56
+ const sql = readFileSync(join(dirname(path), 'main.sql'), 'utf8');
57
+ item.sourceCode = JSON.stringify({
58
+ sql,
59
+ meta,
60
+ inputSchema: JSON.parse(deriveSQLInputSchema(meta, sql)),
61
+ });
62
+ }
63
+ else {
64
+ if (manifest.inputSchema === undefined) {
65
+ throw new Error(`FaaS inputSchema is required: ${path}`);
66
+ }
67
+ item.sourceCode = JSON.stringify({
68
+ inputSchema: JSON.parse(normalizeFunctionInputSchema(manifest.inputSchema, path)),
69
+ });
70
+ }
71
+ return item;
72
+ }
73
+ function writeMetadata(workspace, output) {
74
+ const files = [
75
+ ...findMetaFiles(join(workspace, 'server-functions/functions')).map((path) => ({
76
+ type: 'faas',
77
+ path,
78
+ })),
79
+ ...findMetaFiles(join(workspace, 'sql')).map((path) => ({
80
+ type: 'sql',
81
+ path,
82
+ })),
83
+ ];
84
+ if (files.length > MAX_FUNCTIONS) {
85
+ throw new Error(`Functions cannot exceed ${MAX_FUNCTIONS}`);
86
+ }
87
+ const ids = new Set();
88
+ const items = files.map(({ type, path }) => {
89
+ const item = readMetaItem(type, path);
90
+ if (ids.has(item.functionId)) {
91
+ throw new Error(`Duplicate Function ID: ${item.functionId}`);
92
+ }
93
+ ids.add(item.functionId);
94
+ return item;
95
+ });
96
+ const validations = join(output, 'sql-validation');
97
+ mkdirSync(output, { recursive: true });
98
+ rmSync(validations, { recursive: true, force: true });
99
+ mkdirSync(validations, { recursive: true });
100
+ const metaList = join(output, 'meta-list.json');
101
+ writeFileSync(metaList, `${JSON.stringify({ functions: items }, null, 2)}\n`);
102
+ const sqlValidation = items.flatMap((item) => {
103
+ if (item.functionType !== 1)
104
+ return [];
105
+ const path = join(validations, `${item.functionId}.json`);
106
+ writeFileSync(path, `${JSON.stringify({ sourceCode: item.sourceCode }, null, 2)}\n`);
107
+ return [{ functionId: item.functionId, path }];
108
+ });
109
+ return { metaList, sqlValidation };
110
+ }
111
+ function createArchive(workspace, destination) {
112
+ return new Promise((resolvePromise, reject) => {
113
+ const output = createWriteStream(destination);
114
+ const zip = new ZipArchive({ zlib: { level: 9 } });
115
+ output.once('finish', resolvePromise);
116
+ output.once('error', reject);
117
+ zip.once('warning', reject);
118
+ zip.once('error', reject);
119
+ zip.pipe(output);
120
+ zip.glob('{page,server-functions,sql}/**/*', {
121
+ cwd: workspace,
122
+ dot: true,
123
+ ignore: [
124
+ '**/node_modules/**',
125
+ '**/dist/**',
126
+ '**/.DS_Store',
127
+ '**/.env',
128
+ '**/.env.*',
129
+ ],
130
+ });
131
+ void zip.finalize();
132
+ });
133
+ }
134
+ function databaseProject(workspace) {
135
+ const project = resolve(workspace);
136
+ for (const directory of ['page', 'server-functions', 'sql']) {
137
+ if (!existsSync(join(project, directory))) {
138
+ throw new Error(`application source not found: ${join(project, directory)}`);
139
+ }
140
+ }
141
+ return project;
142
+ }
143
+ export function prepareDatabaseMetadata(workspace) {
144
+ const project = databaseProject(workspace);
145
+ const artifacts = join(project, '.base-database-cli/state/artifacts');
146
+ mkdirSync(artifacts, { recursive: true });
147
+ return writeMetadata(project, artifacts);
148
+ }
149
+ export async function archiveDatabase(workspace, metadata = prepareDatabaseMetadata(workspace)) {
150
+ const project = databaseProject(workspace);
151
+ const artifacts = join(project, '.base-database-cli/state/artifacts');
152
+ mkdirSync(artifacts, { recursive: true });
153
+ const archive = join(artifacts, 'site.zip');
154
+ await createArchive(project, archive);
155
+ return {
156
+ archive,
157
+ metaList: metadata.metaList,
158
+ sqlValidation: metadata.sqlValidation,
159
+ displayArchive: relative(project, archive),
160
+ };
161
+ }
162
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../src/archive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const packageRoot: string;
2
+ export declare const skillRoot: string;
3
+ export declare const starterRoot: string;
4
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,QAGvB,CAAC;AACF,eAAO,MAAM,SAAS,QAAiD,CAAC;AACxE,eAAO,MAAM,WAAW,QAAkD,CAAC"}
package/dist/assets.js ADDED
@@ -0,0 +1,6 @@
1
+ import { dirname, join, resolve } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ export const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
4
+ export const skillRoot = join(packageRoot, 'skills/lark-base-database');
5
+ export const starterRoot = join(packageRoot, 'templates/database-starter');
6
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAChC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EACvC,IAAI,CACL,CAAC;AACF,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,4BAA4B,CAAC,CAAC"}
package/dist/auth.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ import { type RuntimeProfile } from './environment.js';
2
+ import { runCommand } from './process.js';
3
+ export declare function ensureConfiguration(env: NodeJS.ProcessEnv, runner?: typeof runCommand): void;
4
+ export declare function login(profile?: RuntimeProfile): Promise<void>;
5
+ export declare function logout(profile?: RuntimeProfile): Promise<void>;
6
+ export declare function whoami(profile?: RuntimeProfile): Promise<import("./types.js").CommandResult>;
7
+ export declare function doctor(profile?: RuntimeProfile): Promise<{
8
+ ok: true;
9
+ environment: string;
10
+ node: string;
11
+ user: {
12
+ status: unknown;
13
+ available: unknown;
14
+ verified: unknown;
15
+ };
16
+ }>;
17
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,MAAM,oBAAa,GAClB,IAAI,CAWN;AAED,wBAAsB,KAAK,CACzB,OAAO,GAAE,cAAuC,GAC/C,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAsB,MAAM,CAC1B,OAAO,GAAE,cAAuC,GAC/C,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,MAAM,CAAC,OAAO,GAAE,cAAuC,+CAG5E;AAED,wBAAsB,MAAM,CAAC,OAAO,GAAE,cAAuC;;;;;QA4BvE,MAAM;QACN,SAAS;QACT,QAAQ;;GAGb"}