@lark-base-open/base-database-cli 1.0.0 → 1.1.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 (92) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +81 -27
  3. package/config-schema.json +6 -0
  4. package/dist/agent-guide.d.ts +1 -0
  5. package/dist/agent-guide.d.ts.map +1 -1
  6. package/dist/agent-guide.js +3 -2
  7. package/dist/agent-guide.js.map +1 -1
  8. package/dist/auth.d.ts +5 -4
  9. package/dist/auth.d.ts.map +1 -1
  10. package/dist/auth.js +24 -15
  11. package/dist/auth.js.map +1 -1
  12. package/dist/cli.js +3 -2
  13. package/dist/cli.js.map +1 -1
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +7 -1
  16. package/dist/config.js.map +1 -1
  17. package/dist/database-skill.d.ts +4 -2
  18. package/dist/database-skill.d.ts.map +1 -1
  19. package/dist/database-skill.js +27 -11
  20. package/dist/database-skill.js.map +1 -1
  21. package/dist/deploy.d.ts +3 -1
  22. package/dist/deploy.d.ts.map +1 -1
  23. package/dist/deploy.js +16 -10
  24. package/dist/deploy.js.map +1 -1
  25. package/dist/distribution-commands.d.ts +3 -0
  26. package/dist/distribution-commands.d.ts.map +1 -0
  27. package/dist/distribution-commands.js +64 -0
  28. package/dist/distribution-commands.js.map +1 -0
  29. package/dist/distribution-npm.d.ts +23 -0
  30. package/dist/distribution-npm.d.ts.map +1 -0
  31. package/dist/distribution-npm.js +133 -0
  32. package/dist/distribution-npm.js.map +1 -0
  33. package/dist/environment.d.ts +1 -0
  34. package/dist/environment.d.ts.map +1 -1
  35. package/dist/environment.js +1 -1
  36. package/dist/environment.js.map +1 -1
  37. package/dist/init.d.ts +2 -0
  38. package/dist/init.d.ts.map +1 -1
  39. package/dist/init.js +4 -2
  40. package/dist/init.js.map +1 -1
  41. package/dist/install.d.ts +31 -0
  42. package/dist/install.d.ts.map +1 -0
  43. package/dist/install.js +150 -0
  44. package/dist/install.js.map +1 -0
  45. package/dist/lark-cli.d.ts +6 -1
  46. package/dist/lark-cli.d.ts.map +1 -1
  47. package/dist/lark-cli.js +57 -4
  48. package/dist/lark-cli.js.map +1 -1
  49. package/dist/preview-receipt.d.ts +5 -4
  50. package/dist/preview-receipt.d.ts.map +1 -1
  51. package/dist/preview-receipt.js +12 -3
  52. package/dist/preview-receipt.js.map +1 -1
  53. package/dist/profile-name.d.ts +2 -0
  54. package/dist/profile-name.d.ts.map +1 -0
  55. package/dist/profile-name.js +10 -0
  56. package/dist/profile-name.js.map +1 -0
  57. package/dist/program.d.ts.map +1 -1
  58. package/dist/program.js +18 -10
  59. package/dist/program.js.map +1 -1
  60. package/dist/pull.d.ts +2 -0
  61. package/dist/pull.d.ts.map +1 -1
  62. package/dist/pull.js +4 -2
  63. package/dist/pull.js.map +1 -1
  64. package/dist/skill.d.ts +9 -2
  65. package/dist/skill.d.ts.map +1 -1
  66. package/dist/skill.js +128 -11
  67. package/dist/skill.js.map +1 -1
  68. package/dist/types.d.ts +1 -0
  69. package/dist/types.d.ts.map +1 -1
  70. package/dist/updates.d.ts +20 -0
  71. package/dist/updates.d.ts.map +1 -0
  72. package/dist/updates.js +98 -0
  73. package/dist/updates.js.map +1 -0
  74. package/package.json +6 -4
  75. package/skills/lark-base-database/SKILL.md +72 -273
  76. package/skills/lark-base-database/references/base-capability-routing.md +12 -20
  77. package/skills/lark-base-database/references/base-sql-unsupported.md +2 -2
  78. package/skills/lark-base-database/references/database-capability-skill.md +27 -11
  79. package/skills/lark-base-database/references/development.md +26 -553
  80. package/skills/lark-base-database/references/faas.md +563 -0
  81. package/skills/lark-base-database/references/file-transfer.md +62 -199
  82. package/skills/lark-base-database/references/frontend-design-guide.md +97 -0
  83. package/skills/lark-base-database/references/notifications.md +48 -0
  84. package/skills/lark-base-database/references/permission-design.md +32 -38
  85. package/skills/lark-base-database/references/release.md +51 -43
  86. package/skills/lark-base-database/references/sql-function.md +17 -4
  87. package/skills/lark-base-database/references/style-guide.md +6 -8
  88. package/skills/lark-base-database/references/verification.md +57 -0
  89. package/skills/lark-base-database/references/workspace.md +159 -0
  90. package/templates/database-capability/SKILL.md.tmpl +28 -11
  91. package/templates/database-starter/README.md +1 -1
  92. package/templates/database-starter/page/src/lib/database-runtime-attachment.test.ts +43 -40
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.1.0] - 2026-09-10
4
+
5
+ ### Added
6
+
7
+ - 支持多账号切换,并记住每个应用使用的账号。
8
+ - 支持一键安装 CLI 和 Agent Skill。
9
+ - 支持检查新版本,并同步更新 CLI 和多个 Agent 中已安装的 Skill。
10
+
11
+ ### Changed
12
+
13
+ - 完善应用新建、恢复、修改、故障诊断和验收的操作指引。
14
+
3
15
  ## [1.0.0] - 2026-09-08
4
16
 
5
17
  ### Added
package/README.md CHANGED
@@ -5,31 +5,77 @@ Skill 和配套 CLI,用于基于飞书多维表格创建、开发并发布数
5
5
  负责初始化 Base 与应用、生成项目、校验和构建 Functions,以及发布 Preview
6
6
  和正式版本。
7
7
 
8
- ## 安装 Agent Skill
8
+ ## 安装 CLI 和 Agent Skill
9
9
 
10
- 首次安装到 Codex:
10
+ 需要 Node.js 20.19 或更新版本,以及可用的 npm。首次安装到 Codex:
11
11
 
12
12
  ```bash
13
- npx --yes @lark-base-open/base-database-cli@latest skill install --target codex
13
+ npx --yes @lark-base-open/base-database-cli@latest install --target codex
14
14
  ```
15
15
 
16
- 升级已安装的 Skill:
16
+ 安装器将自身版本安装到 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
+
18
+ 若已安装的 CLI 文件损坏,`npx` 可能复用损坏的全局命令,无法启动安装器。先用 `npm install -g @lark-base-open/base-database-cli@<精确版本>` 重装,再执行 `base-database-cli update --version <同一精确版本> --yes` 同步已安装的 Skills。测试或私有 registry 环境需在重装时保留对应 npm registry 配置。
19
+
20
+ 成功结果包含 CLI 版本、实际入口和 Skill 目录。PATH 不通时输出需加入的目录及可直接运行的 Node/CLI 参数;命令入口缺失时提示检查 npm 的 bin-links 配置。不修改 shell 配置、npm prefix 或 Node 安装。npm 失败时保留错误并停止后续步骤。重新加载 Skill 后,日常直接运行 `base-database-cli …`。
21
+
22
+ 已有全局 CLI、只需给另一个 Agent 安装 Skill 时:
17
23
 
18
24
  ```bash
19
- npx --yes @lark-base-open/base-database-cli@latest skill install --target codex --force
25
+ base-database-cli skill install --target claude
20
26
  ```
21
27
 
22
- 安装后,在 Codex 中描述要搭建的业务系统;Agent 会读取 Skill,并通过 CLI
23
- 完成数据模型、页面和 Functions 的开发与发布。
28
+ ## 检查和更新
29
+
30
+ Agent 每个会话首次业务操作前检查一次;检查只返回 JSON,不读取 stdin、不安装内容。示例路径需替换为当前实际加载的 Skill 目录:
31
+
32
+ ```bash
33
+ base-database-cli check-update --json --skill-dir "/Users/alice/.codex/skills/lark-base-database"
34
+ ```
35
+
36
+ 无新版或查询失败时静默继续。有新版时询问用户,拒绝后本会话不再询问;下个会话仍会比较当前 CLI 与缓存中的最新版本。用户同意更新 CLI 及已安装的用户级 Skill 后,使用刚确认的精确版本(以下 1.0.1 仅为示例):
37
+
38
+ ```bash
39
+ base-database-cli update --version 1.0.1 --skill-dir "/Users/alice/.codex/skills/lark-base-database" --yes
40
+ ```
41
+
42
+ 更新先现场检查已支持的用户级目录:Codex(遵循 `CODEX_HOME`)、Claude(遵循 `CLAUDE_CONFIG_DIR`,默认 `~/.claude/skills`)、`~/.agents/skills`,再调用 npm 安装指定版本,并由全局 CLI 同步其中可确认来源的公开版 `lark-base-database` 副本。显式传入的 `--skill-dir` 不受公开版来源筛选限制,仍须是包含同名 Skill 的 `lark-base-database` 目录;没有自定义目录时可省略。合法共享 Skill 的符号链接会保留,但真实目标是 CLI 源目录、用户目录、Agent 根目录或工程根时会在安装前拒绝覆盖。没有安装的目录不补装,不保存历史路径清单,不搜索项目目录或任意手动副本。Skill 版本差异仅提示,不阻塞业务。
43
+
44
+ npm 的权限、网络和环境错误直接报告,不预先探测或自动修复用户环境,也不覆盖用户的 npm engine-strict 配置。CLI 升级成功但部分 Skill 失败时返回 `skill-update-failed`,分别列出成功目录、失败目录及各自的修复参数;继续处理其他目录,不自动整体回滚。切换 npm/Node 环境后,应使用该环境中的全局 CLI。
45
+
46
+ CLI 版本来自包内 `package.json`;每份 Skill 的 `base-database-version.json` 记录其来源版本;用户目录下 `.base-database-cli/update-state.json` 仅缓存 registry、latest 和 checkedAt,24 小时有效。查询与全局安装使用相同的 npm 全局配置,忽略项目级 registry;在线查询总预算 3 秒;缓存不可写不影响检查。CI 和托管 Builder 跳过公开更新。
24
47
 
25
48
  ## 创建、恢复并发布数据库应用
26
49
 
50
+ ### 复用 lark-cli profile
51
+
52
+ CLI 复用本机已有的 lark-cli profile,不另存应用密钥或用户 token。通过全局
53
+ `--profile <name>` 选择账号;品牌和鉴权由该 profile 对应的 lark-cli 配置决定:
54
+
55
+ ```bash
56
+ base-database-cli --profile my-lark doctor
57
+ base-database-cli --profile my-lark init ./todo-database \
58
+ --base-token basxxxxxxxx --name 'Todo 管理' --description '管理个人任务'
59
+ ```
60
+
61
+ `init` 和 `pull` 会将实际选中的名称保存为 `base-database.jsonc` 的 `larkProfile`。
62
+ 后续项目命令的优先级为:`--profile` → 项目 `larkProfile` →
63
+ `LARKSUITE_CLI_PROFILE` → lark-cli 默认 profile。显式覆盖只影响本次命令,
64
+ 不修改项目绑定或 lark-cli 默认配置。项目目录内的 `auth` 和 `doctor` 也遵守此规则。
65
+ `--profile` 选择账号,`--env` 选择运行环境,两者互不替代。
66
+ 运行时未配置所选品牌的路由时会停止,不跨环境发送请求。
67
+
68
+ 不存在的 profile 会报错,不回退或自动创建。已选 profile 与环境注入的凭证、
69
+ AUTH_PROXY 等更高优先级凭证来源同时存在时会报冲突,避免静默换账号;
70
+ 没有选择 profile 的托管环境继续使用宿主凭证,不保存 `larkProfile`。
71
+ 跨设备时须在目标设备配置并授权对应 profile,不能复制凭证。
72
+
27
73
  ### 新建数据库应用
28
74
 
29
75
  新建工程时,`init` 支持两种 Base 来源。需要从零建数据模型时,Agent 根据 Skill 写出完整 `base-schema.json`,再用一条命令创建 Base、全部 table、应用与 binding,并生成 hello-world 工程和 Catalog:
30
76
 
31
77
  ```bash
32
- npx @lark-base-open/base-database-cli init ./todo-database \
78
+ base-database-cli init ./todo-database \
33
79
  --schema ./base-schema.json \
34
80
  --name 'Todo 管理' \
35
81
  --env online
@@ -38,7 +84,7 @@ npx @lark-base-open/base-database-cli init ./todo-database \
38
84
  已有 Base 时,不创建或修改 Base。CLI 会读取其中的全部 table,直接创建绑定该 Base 的新应用,获取 Catalog,并生成同样的工程:
39
85
 
40
86
  ```bash
41
- npx @lark-base-open/base-database-cli init ./todo-database \
87
+ base-database-cli init ./todo-database \
42
88
  --base-token basxxxxxxxx \
43
89
  --name 'Todo 管理' \
44
90
  --env online
@@ -47,7 +93,7 @@ npx @lark-base-open/base-database-cli init ./todo-database \
47
93
  `--schema` 与 `--base-token` 必须且只能选择一个。宿主已经创建目标应用时,额外传入 `--app-token`;CLI 会把选中的 Base 绑定到该应用,而不会再调用应用创建接口:
48
94
 
49
95
  ```bash
50
- npx @lark-base-open/base-database-cli init ./todo-database \
96
+ base-database-cli init ./todo-database \
51
97
  --schema ./base-schema.json \
52
98
  --app-token PrjExistingToken \
53
99
  --name 'Todo 管理' \
@@ -63,7 +109,7 @@ npx @lark-base-open/base-database-cli init ./todo-database \
63
109
  已有数据库应用存在源码制品时,使用 `pull` 恢复可编辑工程,不要重新执行 `init`。目标目录必须为空;CLI 会下载当前 `page/`、`server-functions/` 和 `sql/` 源码,读取应用 Catalog,并重建 `base-database.jsonc` 与 `catalog.json`,不会创建或修改 Base、应用元信息和 binding:
64
110
 
65
111
  ```bash
66
- npx @lark-base-open/base-database-cli pull ./todo-database \
112
+ base-database-cli pull ./todo-database \
67
113
  --app-token PrjExistingToken \
68
114
  --env online
69
115
  ```
@@ -76,18 +122,20 @@ npx @lark-base-open/base-database-cli pull ./todo-database \
76
122
 
77
123
  ```bash
78
124
  cd todo-database
79
- npx @lark-base-open/base-database-cli deploy
125
+ base-database-cli deploy
80
126
  ```
81
127
 
82
128
  部署结果只返回当前环境用户可访问的顶层 `baseAppUrl`。Agent 把链接交给用户后停止;用户体验并明确回复“部署正式版”后,把同一制品发布到 Prod:
83
129
 
84
130
  ```bash
85
- npx @lark-base-open/base-database-cli deploy --production --yes
131
+ base-database-cli deploy --production --yes
86
132
  ```
87
133
 
88
134
  Preview 回执会记录生成该制品时的工作区输入指纹。Preview 之后只要源码、配置或
89
135
  文件结构发生变化,Production 发布就会在任何远端请求前停止,并要求重新运行
90
136
  普通 `deploy` 生成和验证新的 Preview;旧版回执缺少输入指纹时同样不会放行。
137
+ Preview 回执同时绑定有效的 lark-cli profile;切换 profile 或旧回执没有 profile
138
+ 而当前使用本地 profile 时,需要重新发布 Preview,不能直接推广为正式版。
91
139
 
92
140
  ### 部署后的应用能力 Skill
93
141
 
@@ -98,13 +146,14 @@ Skill 按需读取正式版的 Function 和参数 Schema,不依赖应用工程
98
146
  需要单独修复安装或指定其他 Agent 的用户技能目录时:
99
147
 
100
148
  ```bash
101
- npx @lark-base-open/base-database-cli database-skill install --app-token <app-token> --title '<应用名称>' --dir <skills-root>
149
+ base-database-cli --profile <profile-name> database-skill install --app-token <app-token> --title '<应用名称>' --dir <skills-root>
102
150
  ```
103
151
 
104
152
  只更新本工具管理的该应用 `SKILL.md`,不删除其他文件;安装失败会单独返回,不影响已经成功的应用发布。
105
153
 
106
154
  能力 Skill 使用 `base-database-<hash>` 名称,通过 `database-skill` 命令安装和使用。
107
- 同一应用和环境使用固定目录,每次部署更新本工具管理的 `SKILL.md`,保留附加文件。
155
+ 同一应用、环境和 profile 使用固定目录,每次部署更新本工具管理的 `SKILL.md`,保留附加文件。
156
+ 生成的发现和调用命令显式携带 profile,不跟随 lark-cli 默认账号变化;托管凭证模式不写入 profile。
108
157
  目标目录不受本工具管理或存在符号链接冲突时报告错误,不自动覆盖。
109
158
 
110
159
  ## 环境
@@ -114,11 +163,13 @@ CLI 只支持 `online`,`--env` 默认且仅接受 `online`。保留该参数
114
163
  需要登录或诊断时:
115
164
 
116
165
  ```bash
117
- npx @lark-base-open/base-database-cli auth login --env online
118
- npx @lark-base-open/base-database-cli doctor --env online
166
+ base-database-cli auth login --env online
167
+ base-database-cli doctor --env online
119
168
  ```
120
169
 
121
- `auth login` 使用默认 lark-cli 配置;首次使用时自动启动 `config init --new`,配置完成后继续申请 Base 用户权限。
170
+ `auth login` 使用上述规则选中的 lark-cli profile,并申请 Base 用户权限。仅未指定
171
+ profile 且 lark-cli 尚未配置时,才自动启动首次 `config init --new`;指定的 profile
172
+ 不存在时直接报错,不创建或覆盖配置。
122
173
 
123
174
  Base Database CLI 会按 `PATH` 顺序探测全部 `lark-cli`,读取各自的 `--version`,并跳过版本号中带构建 hash 的定制版本,默认使用第一个不带构建 hash 的 release 版本。如果没有可用的 release 版本,命令会明确失败而不会回退到定制版本。需要显式覆盖自动选择时,可将 `BASE_DATABASE_LARK_CLI_PATH` 设置为目标可执行文件的绝对路径;显式设置不会应用版本过滤。
124
175
 
@@ -146,14 +197,17 @@ Base Database CLI 会按 `PATH` 顺序探测全部 `lark-cli`,读取各自的
146
197
  ## CLI 命令
147
198
 
148
199
  ```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...>
200
+ base-database-cli install
201
+ base-database-cli check-update
202
+ base-database-cli update
203
+ base-database-cli skill install
204
+ base-database-cli auth login|logout|whoami
205
+ base-database-cli doctor
206
+ base-database-cli init
207
+ base-database-cli pull
208
+ base-database-cli deploy
209
+ base-database-cli deployments status
210
+ base-database-cli lark-cli -- <arguments...>
157
211
  ```
158
212
 
159
213
  `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`,因为平台镜像打包器直接调用它。
@@ -163,7 +217,7 @@ npx @lark-base-open/base-database-cli lark-cli -- <arguments...>
163
217
  `lark-cli` 子命令仅用于调试。先进入包含 `base-database.jsonc` 的项目根目录;命令只读取当前目录,不接受额外项目路径,并在线上环境直接透传参数。正常初始化和发布无需调用:
164
218
 
165
219
  ```bash
166
- npx @lark-base-open/base-database-cli lark-cli -- \
220
+ base-database-cli lark-cli -- \
167
221
  api GET /open-apis/base/v3/sites/list \
168
222
  --params '{"pageSize":1}' --json
169
223
  ```
@@ -19,6 +19,12 @@
19
19
  "type": "string",
20
20
  "minLength": 1
21
21
  },
22
+ "larkProfile": {
23
+ "type": "string",
24
+ "minLength": 1,
25
+ "maxLength": 64,
26
+ "description": "Name of an existing lark-cli profile; credentials stay in lark-cli."
27
+ },
22
28
  "appToken": {
23
29
  "type": "string",
24
30
  "minLength": 1
@@ -2,6 +2,7 @@ import type { RuntimeProfile } from './environment.js';
2
2
  export declare function deploymentAgentGuide(appToken: string, target: 'preview' | 'prod', options: {
3
3
  workspace: string;
4
4
  profile: RuntimeProfile;
5
+ larkProfile?: string;
5
6
  }): {
6
7
  target: 'prod';
7
8
  availability: string;
@@ -1 +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"}
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,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE;YAiBnE,MAAM;;;;;;;gBALJ,QAAQ;;;;EAgBrB"}
@@ -8,6 +8,7 @@ export function deploymentAgentGuide(appToken, target, options) {
8
8
  appToken,
9
9
  title: validatePageTitle(options.workspace),
10
10
  profile: options.profile,
11
+ larkProfile: options.larkProfile,
11
12
  });
12
13
  }
13
14
  catch (error) {
@@ -20,11 +21,11 @@ export function deploymentAgentGuide(appToken, target, options) {
20
21
  target: 'prod',
21
22
  availability: target === 'prod'
22
23
  ? '正式版发布成功;实际发现结果以服务端接口及开关状态为准,尚未自动验证。'
23
- : '本次仅发布预览版;Skill 只读取正式版,不代表本次预览可被发现。不执行发现或调用,先等待用户确认。',
24
+ : '本次仅发布预览版;本应用 Skill 只发现正式版,不代表本次 Preview。不要因安装而额外发现或调用正式版能力;本次约定的 Preview 数据验证与通知收尾仍须完成。',
24
25
  skill,
25
26
  message: skill.status === 'failed'
26
27
  ? '应用发布成功,但专属 Skill 安装失败;向用户报告原因,不要重新发布应用来修复安装。'
27
- : `已${skill.status === 'installed' ? '安装' : '更新'}本应用 Skill。请告知用户可直接让 Agent 使用本应用能力,或使用 $${skill.name};当前客户端若未自动刷新 Skill 列表,请开启新会话。安装不代表业务操作授权。`,
28
+ : `已${skill.status === 'installed' ? '安装' : '更新'}本应用 Skill。请告知用户可直接让 Agent 使用本应用能力,或使用 $${skill.name};先确认安装路径属于目标客户端的发现目录,再按客户端方式刷新;仅重开会话不能修复目录不匹配。安装不代表业务操作授权。`,
28
29
  };
29
30
  }
30
31
  //# sourceMappingURL=agent-guide.js.map
@@ -1 +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"}
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,OAA6E;IAE7E,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;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,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,yFAAyF;QAC/F,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,4DAA4D;KACrK,CAAC;AACJ,CAAC"}
package/dist/auth.d.ts CHANGED
@@ -1,12 +1,13 @@
1
1
  import { type RuntimeProfile } from './environment.js';
2
2
  import { runCommand } from './process.js';
3
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<{
4
+ export declare function login(profile?: RuntimeProfile, larkProfile?: string): Promise<void>;
5
+ export declare function logout(profile?: RuntimeProfile, larkProfile?: string): Promise<void>;
6
+ export declare function whoami(profile?: RuntimeProfile, larkProfile?: string): Promise<import("./types.js").CommandResult>;
7
+ export declare function doctor(profile?: RuntimeProfile, selectedLarkProfile?: string): Promise<{
8
8
  ok: true;
9
9
  environment: string;
10
+ larkProfile?: string | undefined;
10
11
  node: string;
11
12
  user: {
12
13
  status: unknown;
@@ -1 +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"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAiB1C,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,MAAM,oBAAa,GAClB,IAAI,CAaN;AAED,wBAAsB,KAAK,CACzB,OAAO,GAAE,cAAuC,EAChD,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,MAAM,CAC1B,OAAO,GAAE,cAAuC,EAChD,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAsB,MAAM,CAC1B,OAAO,GAAE,cAAuC,EAChD,WAAW,CAAC,EAAE,MAAM,+CASrB;AAED,wBAAsB,MAAM,CAC1B,OAAO,GAAE,cAAuC,EAChD,mBAAmB,CAAC,EAAE,MAAM;;;;;;QA+BxB,MAAM;QACN,SAAS;QACT,QAAQ;;GAGb"}
package/dist/auth.js CHANGED
@@ -1,6 +1,14 @@
1
- import { ONLINE_RUNTIME_PROFILE } from './environment.js';
2
- import { resolveLarkCliExecutable, runLarkCli } from './lark-cli.js';
1
+ import { existsSync } from 'node:fs';
2
+ import { CONFIG_FILE_NAME, readConfig } from './config.js';
3
+ import { assertProjectRuntimeProfile, ONLINE_RUNTIME_PROFILE, } from './environment.js';
4
+ import { resolveLarkCliExecutable, runLarkCli, selectLarkProfileEnvironment, resolveLarkProfileEnvironment, } from './lark-cli.js';
3
5
  import { runCommand } from './process.js';
6
+ async function authEnvironment(profile, larkProfile) {
7
+ const config = existsSync(CONFIG_FILE_NAME) ? readConfig() : undefined;
8
+ if (config)
9
+ assertProjectRuntimeProfile(config.runtimeProfile, profile);
10
+ return selectLarkProfileEnvironment(await profile.commandEnvironment(), larkProfile, config?.larkProfile);
11
+ }
4
12
  function isNotConfigured(error) {
5
13
  const message = error instanceof Error ? error.message : String(error);
6
14
  return /"subtype"\s*:\s*"not_configured"/.test(message);
@@ -11,34 +19,34 @@ export function ensureConfiguration(env, runner = runCommand) {
11
19
  runner(executable, ['config', 'show'], { env, capture: true });
12
20
  }
13
21
  catch (error) {
22
+ // A dangling named profile is not permission to replace the default configuration.
23
+ if (env.LARKSUITE_CLI_PROFILE)
24
+ throw error;
14
25
  if (!isNotConfigured(error))
15
26
  throw error;
16
27
  process.stderr.write('lark-cli is not configured for this environment; starting first-time setup...\n');
17
28
  runner(executable, ['config', 'init', '--new'], { env });
18
29
  }
19
30
  }
20
- export async function login(profile = ONLINE_RUNTIME_PROFILE) {
21
- const env = await profile.commandEnvironment();
22
- ensureConfiguration(env);
31
+ export async function login(profile = ONLINE_RUNTIME_PROFILE, larkProfile) {
32
+ const selected = await authEnvironment(profile, larkProfile);
33
+ ensureConfiguration(selected);
34
+ const { env } = resolveLarkProfileEnvironment(selected, undefined, undefined, profile);
23
35
  runCommand(resolveLarkCliExecutable(env), ['auth', 'login', '--domain', 'base'], { env });
24
36
  }
25
- export async function logout(profile = ONLINE_RUNTIME_PROFILE) {
26
- const env = await profile.commandEnvironment();
37
+ export async function logout(profile = ONLINE_RUNTIME_PROFILE, larkProfile) {
38
+ const { env } = resolveLarkProfileEnvironment(await authEnvironment(profile, larkProfile), undefined, undefined, profile);
27
39
  runCommand(resolveLarkCliExecutable(env), ['auth', 'logout'], { env });
28
40
  }
29
- export async function whoami(profile = ONLINE_RUNTIME_PROFILE) {
30
- const env = await profile.commandEnvironment();
41
+ export async function whoami(profile = ONLINE_RUNTIME_PROFILE, larkProfile) {
42
+ const { env } = resolveLarkProfileEnvironment(await authEnvironment(profile, larkProfile), undefined, undefined, profile);
31
43
  return runLarkCli(['auth', 'status', '--verify'], env);
32
44
  }
33
- export async function doctor(profile = ONLINE_RUNTIME_PROFILE) {
45
+ export async function doctor(profile = ONLINE_RUNTIME_PROFILE, selectedLarkProfile) {
34
46
  const major = Number(process.versions.node.split('.')[0]);
35
47
  if (major < 20)
36
48
  throw new Error('Node.js 20 or newer is required');
37
- const env = await profile.commandEnvironment();
38
- runCommand(resolveLarkCliExecutable(env), ['config', 'show'], {
39
- env,
40
- capture: true,
41
- });
49
+ const { env, larkProfile } = resolveLarkProfileEnvironment(await authEnvironment(profile, selectedLarkProfile), undefined, undefined, profile);
42
50
  const identity = runLarkCli(['auth', 'status', '--verify'], env);
43
51
  runLarkCli([
44
52
  'api',
@@ -52,6 +60,7 @@ export async function doctor(profile = ONLINE_RUNTIME_PROFILE) {
52
60
  return {
53
61
  ok: true,
54
62
  environment: profile.name,
63
+ ...(larkProfile ? { larkProfile } : {}),
55
64
  node: process.version,
56
65
  user: {
57
66
  status: user?.status,
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -2,14 +2,15 @@
2
2
  import { readFileSync } from 'node:fs';
3
3
  import { dirname, join } from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
+ import { addDistributionCommands } from './distribution-commands.js';
5
6
  import { ONLINE_RUNTIME_PROFILE } from './environment.js';
6
7
  import { createBaseDatabaseProgram, runBaseDatabaseProgram, } from './program.js';
7
8
  const packageRoot = join(dirname(fileURLToPath(import.meta.url)), '..');
8
9
  const packageJson = JSON.parse(readFileSync(join(packageRoot, 'package.json'), 'utf8'));
9
- runBaseDatabaseProgram(createBaseDatabaseProgram({
10
+ runBaseDatabaseProgram(addDistributionCommands(createBaseDatabaseProgram({
10
11
  commandName: 'base-database-cli',
11
12
  description: 'Build and deploy database applications on Lark Base',
12
13
  version: packageJson.version,
13
14
  runtimeProfiles: [ONLINE_RUNTIME_PROFILE],
14
- }));
15
+ })));
15
16
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACxE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACjC,CAAC;AAEzB,sBAAsB,CACpB,yBAAyB,CAAC;IACxB,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,qDAAqD;IAClE,OAAO,EAAE,WAAW,CAAC,OAAO;IAC5B,eAAe,EAAE,CAAC,sBAAsB,CAAC;CAC1C,CAAC,CACH,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACxE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACjC,CAAC;AAEzB,sBAAsB,CACpB,uBAAuB,CACrB,yBAAyB,CAAC;IACxB,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,qDAAqD;IAClE,OAAO,EAAE,WAAW,CAAC,OAAO;IAC5B,eAAe,EAAE,CAAC,sBAAsB,CAAC;CAC1C,CAAC,CACH,CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAOrD,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AAEtD,wBAAgB,UAAU,CAAC,SAAS,SAAgB,GAAG,kBAAkB,CA8BxE;AAED,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,kBAAkB,GACzB,MAAM,CAUR"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAQrD,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AAEtD,wBAAgB,UAAU,CAAC,SAAS,SAAgB,GAAG,kBAAkB,CAgCxE;AAED,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,kBAAkB,GACzB,MAAM,CAWR"}
package/dist/config.js CHANGED
@@ -3,6 +3,7 @@ import { dirname, join, resolve } from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import Ajv2020 from 'ajv/dist/2020.js';
5
5
  import { parse, printParseErrorCode } from 'jsonc-parser';
6
+ import { validateLarkProfile } from './profile-name.js';
6
7
  const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
7
8
  const schema = JSON.parse(readFileSync(join(packageRoot, 'config-schema.json'), 'utf8'));
8
9
  const validate = new Ajv2020({ allErrors: true }).compile(schema);
@@ -34,7 +35,10 @@ export function readConfig(workspace = process.cwd()) {
34
35
  .join('; ');
35
36
  throw new Error(`Invalid ${configPath}: ${detail}`);
36
37
  }
37
- return value;
38
+ const config = value;
39
+ if (config.larkProfile !== undefined)
40
+ validateLarkProfile(config.larkProfile);
41
+ return config;
38
42
  }
39
43
  export function writeConfig(workspace, config) {
40
44
  if (!validate(config)) {
@@ -43,6 +47,8 @@ export function writeConfig(workspace, config) {
43
47
  .join('; ');
44
48
  throw new Error(`Cannot write invalid Base Database config: ${detail}`);
45
49
  }
50
+ if (config.larkProfile !== undefined)
51
+ validateLarkProfile(config.larkProfile);
46
52
  const path = join(resolve(workspace), CONFIG_FILE_NAME);
47
53
  writeFileSync(path, `${JSON.stringify(config, null, 2)}\n`);
48
54
  return path;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  import type { RuntimeProfile } from './environment.js';
2
- export declare function databaseSkillName(token: string, environment: string): string;
2
+ export declare function databaseSkillName(token: string, environment: string, larkProfile?: string): string;
3
3
  export declare function databaseSkillCommandPrefix(profile: RuntimeProfile): string;
4
4
  export declare function renderDatabaseSkill(options: {
5
+ larkProfile?: string;
5
6
  appToken: string;
6
7
  title: string;
7
8
  profile: RuntimeProfile;
8
9
  }): string;
9
10
  export declare function installDatabaseSkill(options: {
11
+ larkProfile?: string;
10
12
  appToken: string;
11
13
  title: string;
12
14
  profile: RuntimeProfile;
@@ -18,5 +20,5 @@ export declare function installDatabaseSkill(options: {
18
20
  };
19
21
  export declare function discoveryArgs(appToken: string, pageSize: number, pageToken?: string): string[];
20
22
  export declare function invocationArgs(appToken: string, functionId: string, params: string): string[];
21
- export declare function runDatabaseSkillRequest(profile: RuntimeProfile, args: string[]): Promise<import("./types.js").CommandResult>;
23
+ export declare function runDatabaseSkillRequest(profile: RuntimeProfile, args: string[], larkProfile?: string): Promise<import("./types.js").CommandResult>;
22
24
  //# sourceMappingURL=database-skill.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"database-skill.d.ts","sourceRoot":"","sources":["../src/database-skill.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAQvD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAM5E;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAI1E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,cAAc,CAAC;CACzB,GAAG,MAAM,CA0BT;AAoCD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;;;;EAwBA;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,EAAE,CAgBV;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CAgBV;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EAAE,+CAGf"}
1
+ {"version":3,"file":"database-skill.d.ts","sourceRoot":"","sources":["../src/database-skill.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASvD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAWR;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAO1E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,cAAc,CAAC;CACzB,GAAG,MAAM,CAoCT;AAoCD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;;;;EAgCA;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,EAAE,CAgBV;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CAgBV;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,CAAC,EAAE,MAAM,+CASrB"}
@@ -3,36 +3,48 @@ import { lstatSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSy
3
3
  import { homedir } from 'node:os';
4
4
  import { join, resolve } from 'node:path';
5
5
  import { packageRoot } from './assets.js';
6
- import { runLarkCli } from './lark-cli.js';
6
+ import { runLarkCli, resolveLarkProfileEnvironment } from './lark-cli.js';
7
+ import { validateLarkProfile } from './profile-name.js';
7
8
  function validateAppToken(token) {
8
9
  if (!/^[A-Za-z0-9_-]{1,128}$/.test(token))
9
10
  throw new Error('Invalid Application token');
10
11
  }
11
- export function databaseSkillName(token, environment) {
12
+ export function databaseSkillName(token, environment, larkProfile) {
12
13
  validateAppToken(token);
14
+ if (larkProfile !== undefined)
15
+ validateLarkProfile(larkProfile);
13
16
  return `base-database-${createHash('sha256')
14
- .update(JSON.stringify([environment, token]))
17
+ .update(JSON.stringify(larkProfile ? [environment, token, larkProfile] : [environment, token]))
15
18
  .digest('hex')
16
19
  .slice(0, 20)}`;
17
20
  }
18
21
  export function databaseSkillCommandPrefix(profile) {
19
22
  if (!profile.deployCommand.endsWith(' deploy'))
20
23
  throw new Error('Runtime profile has no CLI command prefix');
21
- return profile.deployCommand.slice(0, -' deploy'.length);
24
+ const command = profile.deployCommand.slice(0, -' deploy'.length);
25
+ return profile.name === 'online' && command === 'base-database-cli'
26
+ ? 'npx @lark-base-open/base-database-cli'
27
+ : command;
22
28
  }
23
29
  export function renderDatabaseSkill(options) {
24
30
  const { appToken, profile } = options;
25
- const name = databaseSkillName(appToken, profile.name);
31
+ const name = databaseSkillName(appToken, profile.name, options.larkProfile);
26
32
  if (!/^[a-z][a-z0-9-]*$/.test(profile.name))
27
33
  throw new Error('Invalid runtime profile name');
28
34
  const title = options.title.replace(/\s+/g, ' ').trim().slice(0, 200) || appToken;
29
35
  const values = {
30
36
  skill_name: name,
31
- description_json: JSON.stringify(`当用户希望查询或操作“${title}”应用时使用。通过实时 Function 发现和参数 Schema 使用该应用业务能力;不用于修改源码或部署。应用 ${appToken},环境 ${profile.name}。`),
37
+ description_json: JSON.stringify(`当用户希望查询或操作“${title}”应用时使用。当前能力发现仅限应用所有者,通过实时 Function 发现和参数 Schema 使用该应用业务能力;不用于修改源码或部署。应用 ${appToken},环境 ${profile.name}${options.larkProfile ? `,profile ${options.larkProfile}` : ''}。`),
32
38
  app_token: appToken,
33
39
  environment: profile.name,
34
40
  command_prefix: databaseSkillCommandPrefix(profile),
35
- managed_marker: `<!-- base-database-managed-skill:${profile.name}:${appToken} -->`,
41
+ profile_option: options.larkProfile
42
+ ? ` --profile '${options.larkProfile}'`
43
+ : '',
44
+ profile_guidance: options.larkProfile
45
+ ? `lark-cli profile 固定为 ${JSON.stringify(options.larkProfile)};每条命令显式携带 --profile,不跟随默认账号。该 profile 必须在本机存在并已授权;缺失或凭证来源冲突时停止,不回退其他账号。`
46
+ : '本应用使用宿主提供的凭证上下文;不自动选择或创建本地 profile。',
47
+ managed_marker: databaseSkillMarker(appToken, profile.name, options.larkProfile),
36
48
  };
37
49
  return readFileSync(join(packageRoot, 'templates/database-capability/SKILL.md.tmpl'), 'utf8').replace(/\{\{([a-z_]+)\}\}/g, (_, key) => {
38
50
  const value = values[key];
@@ -71,13 +83,13 @@ function assertManagedDirectory(directory, marker) {
71
83
  return true;
72
84
  }
73
85
  export function installDatabaseSkill(options) {
74
- const name = databaseSkillName(options.appToken, options.profile.name);
86
+ const name = databaseSkillName(options.appToken, options.profile.name, options.larkProfile);
75
87
  const root = resolve(options.directory ??
76
88
  join(process.env.CODEX_HOME || join(homedir(), '.codex'), 'skills'));
77
89
  const directory = join(root, name);
78
90
  const path = join(directory, 'SKILL.md');
79
91
  const content = renderDatabaseSkill(options);
80
- const marker = `<!-- base-database-managed-skill:${options.profile.name}:${options.appToken} -->`;
92
+ const marker = databaseSkillMarker(options.appToken, options.profile.name, options.larkProfile);
81
93
  const existing = assertManagedDirectory(directory, marker);
82
94
  mkdirSync(directory, { recursive: true });
83
95
  const temporary = join(directory, `.SKILL-${randomUUID()}.tmp`);
@@ -129,7 +141,11 @@ export function invocationArgs(appToken, functionId, params) {
129
141
  'user',
130
142
  ];
131
143
  }
132
- export async function runDatabaseSkillRequest(profile, args) {
133
- return runLarkCli(args, await profile.commandEnvironment());
144
+ export async function runDatabaseSkillRequest(profile, args, larkProfile) {
145
+ const { env } = resolveLarkProfileEnvironment(await profile.commandEnvironment(), larkProfile, undefined, profile);
146
+ return runLarkCli(args, env);
147
+ }
148
+ function databaseSkillMarker(appToken, environment, larkProfile) {
149
+ return `<!-- base-database-managed-skill:${environment}:${appToken}${larkProfile ? `:profile=${encodeURIComponent(larkProfile)}` : ''} -->`;
134
150
  }
135
151
  //# sourceMappingURL=database-skill.js.map