@lark-base-open/base-database-cli 1.8.1 → 1.9.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.
- package/CHANGELOG.md +18 -0
- package/README.md +7 -5
- package/dist/agent-tools-guide.js +1 -1
- package/dist/agent-tools-guide.js.map +1 -1
- package/dist/agent-tools-skill.d.ts +1 -7
- package/dist/agent-tools-skill.d.ts.map +1 -1
- package/dist/agent-tools-skill.js +90 -87
- package/dist/agent-tools-skill.js.map +1 -1
- package/dist/author-skill-hash.d.ts +6 -0
- package/dist/author-skill-hash.d.ts.map +1 -0
- package/dist/author-skill-hash.js +42 -0
- package/dist/author-skill-hash.js.map +1 -0
- package/dist/author-skill-pack.d.ts +24 -0
- package/dist/author-skill-pack.d.ts.map +1 -0
- package/dist/author-skill-pack.js +77 -0
- package/dist/author-skill-pack.js.map +1 -0
- package/dist/author-skill.d.ts +42 -0
- package/dist/author-skill.d.ts.map +1 -0
- package/dist/author-skill.js +226 -0
- package/dist/author-skill.js.map +1 -0
- package/dist/check.d.ts +19 -2
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +41 -9
- package/dist/check.js.map +1 -1
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +11 -0
- package/dist/deploy.js.map +1 -1
- package/dist/distribution-commands.d.ts.map +1 -1
- package/dist/distribution-commands.js +3 -3
- package/dist/distribution-commands.js.map +1 -1
- package/dist/draft-publication.d.ts.map +1 -1
- package/dist/draft-publication.js +9 -1
- package/dist/draft-publication.js.map +1 -1
- package/dist/draft-state.d.ts +1 -0
- package/dist/draft-state.d.ts.map +1 -1
- package/dist/draft-state.js +3 -0
- package/dist/draft-state.js.map +1 -1
- package/dist/draft-submit.d.ts +5 -0
- package/dist/draft-submit.d.ts.map +1 -1
- package/dist/draft-submit.js +19 -3
- package/dist/draft-submit.js.map +1 -1
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +9 -11
- package/dist/install.js.map +1 -1
- package/dist/lark-base-database-tools-call.d.ts +8 -0
- package/dist/lark-base-database-tools-call.d.ts.map +1 -0
- package/dist/lark-base-database-tools-call.js +18 -0
- package/dist/lark-base-database-tools-call.js.map +1 -0
- package/dist/managed-agent-docs.js +1 -1
- package/dist/managed-agent-docs.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +30 -9
- package/dist/program.js.map +1 -1
- package/dist/pull.d.ts.map +1 -1
- package/dist/pull.js +1 -0
- package/dist/pull.js.map +1 -1
- package/dist/site-capabilities.d.ts +7 -0
- package/dist/site-capabilities.d.ts.map +1 -0
- package/dist/site-capabilities.js +11 -0
- package/dist/site-capabilities.js.map +1 -0
- package/dist/site-skill-bundle.d.ts +9 -0
- package/dist/site-skill-bundle.d.ts.map +1 -0
- package/dist/site-skill-bundle.js +55 -0
- package/dist/site-skill-bundle.js.map +1 -0
- package/dist/skill-install-transaction.d.ts +13 -0
- package/dist/skill-install-transaction.d.ts.map +1 -0
- package/dist/skill-install-transaction.js +279 -0
- package/dist/skill-install-transaction.js.map +1 -0
- package/dist/skill.d.ts +22 -2
- package/dist/skill.d.ts.map +1 -1
- package/dist/skill.js +192 -28
- package/dist/skill.js.map +1 -1
- package/dist/source-archive-inputs.d.ts.map +1 -1
- package/dist/source-archive-inputs.js +2 -1
- package/dist/source-archive-inputs.js.map +1 -1
- package/dist/updates.js +2 -2
- package/dist/updates.js.map +1 -1
- package/dist/workspace-fingerprint.d.ts.map +1 -1
- package/dist/workspace-fingerprint.js +1 -0
- package/dist/workspace-fingerprint.js.map +1 -1
- package/package.json +6 -2
- package/resources/author-skill-rules.json +19 -0
- package/skills/lark-base-database/SKILL.md +2 -0
- package/skills/lark-base-database/references/agent-tool-design.md +4 -2
- package/skills/lark-base-database/references/agent-tools.md +22 -29
- package/skills/lark-base-database/references/database-function.md +2 -2
- package/skills/lark-base-database/references/development.md +12 -4
- package/skills/lark-base-database/references/notifications.md +2 -2
- package/skills/lark-base-database/references/workspace.md +6 -0
- package/skills/lark-base-database-tools-call/SKILL.md +13 -0
- package/skills/lark-base-database-tools-call/references/call.md +131 -0
- package/templates/author-skill/SKILL.md +10 -0
- package/templates/author-skill/references/reimburse.md +10 -0
- package/templates/database-starter/page/package-lock.json +4 -4
- package/templates/database-starter/page/package.json +1 -1
- package/templates/database-starter/page/src/main.test.ts +7 -3
- package/templates/database-starter/page/src/main.tsx +16 -5
- package/templates/database-starter-v2/package-lock.json +9 -9
- package/templates/database-starter-v2/page/package.json +1 -1
- package/templates/database-starter-v2/page/src/main.tsx +5 -1
- package/templates/database-starter-v2/server/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.9.0] - 2026-10-31
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- 支持站点作者 Skill:工程内的 `skill/` 会随 `check`、`deploy` 校验和发布,`pull` 可恢复。删除本地 `skill/` 不会清除已发布的作者 Skill,如需替换,请发布一份新的最小 `skill/`。
|
|
8
|
+
- 新增 `skill pack`,用已发布站点的身份把本地作者 Skill 打成成员可安装的站点 Skill 包,可指定 Preview 版本。
|
|
9
|
+
- 站点提供通用调用协议时,安装站点 Skill 会一并安装 `lark-base-database-tools-call`,统一函数发现、契约读取、调用与分页流程。
|
|
10
|
+
- 多页面应用使用 hash 路由时,可同步为可分享的子页面深链接。
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- 新建工程的 Page 和 Server SDK 升级到 `0.5.2`,classic 模板的 Channel 升级到 `0.2.1`;存量工程保留原依赖,升级需用户显式授权。
|
|
15
|
+
- `install`、`skill install` 和 `agent-tools skill install` 的默认目标由 `codex` 改为 `all`,默认安装到所有 Agent。
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- 业务命令的更新检查等待时间放宽到 2 秒,减少检查超时。
|
|
20
|
+
|
|
3
21
|
## [1.8.1] - 2026-10-29
|
|
4
22
|
|
|
5
23
|
### Fixed
|
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ npx @lark-base-open/base-database-cli@latest install --target all
|
|
|
24
24
|
在 WorkBuddy 对话框中粘贴时,如果包名中的 `@` 被识别为引用标签,改为直接在系统终端执行;
|
|
25
25
|
输入框中的标签展示、任务取消都不能作为安装成功或失败的回执。
|
|
26
26
|
|
|
27
|
-
安装器将自身版本安装到 npm 全局目录,再从全局包安装 Skill;已有同版本 CLI 时只安装 Skill。支持 `--target codex|claude|agents|workbuddy|all` 或 `--dir <skills
|
|
27
|
+
安装器将自身版本安装到 npm 全局目录,再从全局包安装 Skill;已有同版本 CLI 时只安装 Skill。支持 `--target codex|claude|agents|workbuddy|all` 或 `--dir <skills 根目录>`,默认目标为所有支持的 Agent 目录。
|
|
28
28
|
|
|
29
29
|
| 目标 | Skill 根目录 |
|
|
30
30
|
| --- | --- |
|
|
@@ -34,7 +34,8 @@ npx @lark-base-open/base-database-cli@latest install --target all
|
|
|
34
34
|
| `workbuddy` | `~/.codebuddy/skills` |
|
|
35
35
|
| `all` | 以上全部目录 |
|
|
36
36
|
|
|
37
|
-
每个目标中安装 `lark-base-database/` 完整目录,包含 `SKILL.md` 和 references
|
|
37
|
+
每个目标中安装 `lark-base-database/` 完整目录,包含 `SKILL.md` 和 references;
|
|
38
|
+
同时安装或更新通用调用 Skill `lark-base-database-tools-call/`。
|
|
38
39
|
WorkBuddy 在代码开发时兼容用户级 `.codebuddy` 配置,项目级安装可使用
|
|
39
40
|
`--dir <项目根目录>/.codebuddy/skills`,项目级同名 Skill 优先。
|
|
40
41
|
目录加载不等于技能管理界面已完成导入;需通过界面安装时,在 WorkBuddy 的
|
|
@@ -75,7 +76,7 @@ base-database-cli update --version 1.0.1 --skill-dir "/Users/alice/.codex/skills
|
|
|
75
76
|
|
|
76
77
|
npm 的权限、网络和环境错误直接报告,不预先探测或自动修复用户环境,也不覆盖用户的 npm engine-strict 配置。CLI 升级成功但部分 Skill 失败时返回 `skill-update-failed`,分别列出成功目录、失败目录及各自的修复参数;继续处理其他目录,不自动整体回滚。切换 npm/Node 环境后,应使用该环境中的全局 CLI。
|
|
77
78
|
|
|
78
|
-
CLI 版本来自包内 `package.json`;每份 Skill 的 `base-database-version.json` 记录其来源版本;用户目录下 `.base-database-cli/update-state.json` 按状态区分成功查询与 `unavailable`:成功结果缓存 24 小时,失败结果缓存 1 小时,负缓存有效期间不再发起查询。查询与全局安装使用相同的 npm 全局配置,忽略项目级 registry;手动 `check-update` 在线查询总预算 5 秒,`doctor`、`init`、`pull`、`deploy` 等业务命令的更新查询预算为
|
|
79
|
+
CLI 版本来自包内 `package.json`;每份 Skill 的 `base-database-version.json` 记录其来源版本;用户目录下 `.base-database-cli/update-state.json` 按状态区分成功查询与 `unavailable`:成功结果缓存 24 小时,失败结果缓存 1 小时,负缓存有效期间不再发起查询。查询与全局安装使用相同的 npm 全局配置,忽略项目级 registry;手动 `check-update` 在线查询总预算 5 秒,`doctor`、`init`、`pull`、`deploy` 等业务命令的更新查询预算为 2 秒,有新版时在输出附带 `update` 字段(普通文本错误在 stderr 附带该字段);检查失败与缓存不可写不影响业务结果。CI 跳过公开更新。
|
|
79
80
|
|
|
80
81
|
## 创建、恢复并发布数据库应用
|
|
81
82
|
|
|
@@ -179,7 +180,7 @@ base-database-cli init ./todo-database \
|
|
|
179
180
|
|
|
180
181
|
### 恢复并修改已有数据库应用
|
|
181
182
|
|
|
182
|
-
已有数据库应用存在源码制品时,使用 `pull` 恢复可编辑工程,不要重新执行 `init`。目标目录必须为空;`pull` 会按制品模板布局恢复 Page、Database Function、Mutation、FaaS 和 AI Function 的本地声明(见[工程目录](skills/lark-base-database/references/workspace.md#工程目录与构建模式)),读取应用 Catalog,并重建 `base-database.jsonc` 与 `catalog.json`,不会创建或修改 Base、应用元信息和 binding:
|
|
183
|
+
已有数据库应用存在源码制品时,使用 `pull` 恢复可编辑工程,不要重新执行 `init`。目标目录必须为空;`pull` 会按制品模板布局恢复 Page、Database Function、Mutation、FaaS 和 AI Function,以及作者 Skill 的 `skill/` 的本地声明(见[工程目录](skills/lark-base-database/references/workspace.md#工程目录与构建模式)),读取应用 Catalog,并重建 `base-database.jsonc` 与 `catalog.json`,不会创建或修改 Base、应用元信息和 binding:
|
|
183
184
|
|
|
184
185
|
旧制品中的 `sql/` 会在恢复时迁移为 `database-functions/`。本地旧工程仍可直接检查和发布,但不能同时保留两个目录。
|
|
185
186
|
|
|
@@ -275,6 +276,7 @@ base-database-cli install
|
|
|
275
276
|
base-database-cli check-update
|
|
276
277
|
base-database-cli update
|
|
277
278
|
base-database-cli skill install
|
|
279
|
+
base-database-cli skill pack --output <directory> [--env prod|preview]
|
|
278
280
|
base-database-cli auth login|logout|whoami
|
|
279
281
|
base-database-cli doctor
|
|
280
282
|
base-database-cli init
|
|
@@ -294,7 +296,7 @@ base-database-cli lark-cli -- <arguments...>
|
|
|
294
296
|
|
|
295
297
|
`deploy` 发布 Preview 时先解析账号环境、获取目标应用依赖策略并校验 package.json 来源,失败时不安装。策略通过后安装依赖,再提取 SDK 契约、校验声明与查询,之后构建和发布;查询校验失败不会继续 build,但依赖可能已安装。依赖指纹未变化且 node_modules 有效时可跳过 npm ci;`--force-install` 强制重装,`--no-install` 要求依赖已就绪。各类 Function 的发布顺序及错误边界见[发布参考](skills/lark-base-database/references/release.md#function-发布顺序与错误边界)。
|
|
296
298
|
|
|
297
|
-
`pull` 从 `source_code` 一次恢复 Page、Database Function、Mutation、FaaS 和 AI Function
|
|
299
|
+
`pull` 从 `source_code` 一次恢复 Page、Database Function、Mutation、FaaS 和 AI Function,以及作者 Skill 的 `skill/`;恢复来源与兼容边界见[工程与环境](skills/lark-base-database/references/workspace.md#先选择工程来源)。Preview deploy 按本地完整声明统一覆盖各类 Function;AI 的配置、Page 调用和显式跳过边界见[AI Function](skills/lark-base-database/references/ai-function.md)。
|
|
298
300
|
|
|
299
301
|
Preview deploy 按草稿基线原子提交源码、Function、工具策略及新增绑定;远端修订变化时整次拒绝覆盖。缺少基线或发生冲突时,按[远端更新与冲突恢复](skills/lark-base-database/references/workspace.md#远端更新与冲突恢复)对齐。
|
|
300
302
|
|
|
@@ -108,7 +108,7 @@ export function externalAgentGuide(workspace, appToken, runtime, environment, en
|
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
const handoff = [
|
|
111
|
-
`开发者:在包含 base-database.jsonc 的工程目录执行 \`${command}
|
|
111
|
+
`开发者:在包含 base-database.jsonc 的工程目录执行 \`${command}\`。需要我现在在工程目录执行,安装到当前用户所有支持的 Agent Skill 目录(Codex、Agents、Claude、WorkBuddy)吗?${projectUpdate}`,
|
|
112
112
|
...(memberInstallation
|
|
113
113
|
? [
|
|
114
114
|
'',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-tools-guide.js","sourceRoot":"","sources":["../src/agent-tools-guide.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent-tools-guide.js","sourceRoot":"","sources":["../src/agent-tools-guide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEnE,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAE,EAAE,CACxC,IAAI,CAAC,SAAS,EAAE,iDAAiD,CAAC,CAAC;AACrE,MAAM,MAAM,GAAG,CAAC,OAAe,EAAE,EAAE,CACjC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAWrD,SAAS,WAAW,CAClB,SAAiB,EACjB,QAAgB,EAChB,OAAe;IAEf,IAAI,CAAC;QACH,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CACjC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAC7C,CAAC;QACF,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAClC,OAAO,CAAC,OAAO,KAAK,OAAO;YAC3B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;YACpC,CAAC,CAAC,OAAO,CAAC,aAAa;YACvB,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,2BAA2B,CACzC,SAAiB,EACjB,QAAgB,EAChB,OAAe,EACf,MAAuD,EACvD,WAAqB;IAErB,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,CACpE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAChD,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAC9B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;QACpD,IAAI;QACJ,MAAM,CAAC,OAAO,CAAC;KAChB,CAAC,CACH,CAAC;IACF,aAAa,CAAC,IAAI,CAChB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACjC,SAAS;QACT,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK;KACN,CAAC,CAAC,CACJ,CAAC;IACF,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACpC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CACX,IAAI,EACJ,IAAI,CAAC,SAAS,CACZ,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAoB,EACtD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI,CACT,CAAC;AACJ,CAAC;AAWD,uFAAuF;AACvF,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,QAAgB,EAChB,OAAuB,EACvB,WAA+B,EAC/B,GAAsB,EACtB,UAAmB;IAEnB,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,GAAG,GAAG,mCAAmC,QAAQ,EAAE,CAAC;IACpE,MAAM,aAAa,GACjB,sDAAsD,CAAC;IACzD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO;YACL,WAAW;YACX,YAAY,EAAE;gBACZ,SAAS,EAAE,KAAK;gBAChB,OAAO,EACL,qFAAqF;oBACrF,aAAa;gBACf,OAAO;aACR;YACD,OAAO,EAAE;gBACP,QAAQ,EAAE,kDAAkD,OAAO,SAAS,aAAa,EAAE;aAC5F;SACF,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,4BAA4B,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC9E,MAAM,YAAY,GAAG,GAAG,GAAG,wBAAwB,IAAI,SAAS,QAAQ,EAAE,CAAC;IAC3E,MAAM,gBAAgB,GAAG,GAAG,GAAG,iDAAiD,kBAAkB,CAAC,QAAQ,CAAC,4DAA4D,QAAQ,EAAE,CAAC;IACnL,IAAI,CAAC;QACH,sEAAsE;QACtE,UAAU,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,GACT,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,MAAM,UAAU,GAAG,KAAK;YACtB,CAAC,CAAC,YAAY,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,GAAG,CAAC,GAAG;YAChF,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gFAAgF,UAAU,KAAK,CAChG,CAAC;QACF,OAAO;YACL,WAAW;YACX,YAAY,EAAE;gBACZ,SAAS,EAAE,KAAK;gBAChB,OAAO,EACL,8CAA8C;oBAC9C,aAAa;gBACf,OAAO;aACR;YACD,YAAY;YACZ,gBAAgB;SACjB,CAAC;IACJ,CAAC;IACD,MAAM,kBAAkB,GAAG,UAAU;QACnC,CAAC,CAAC;YACE,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,GAAG,OAAO,WAAW,UAAU,CAAC,UAAU,CAAC,EAAE;YACtD,OAAO,EACL,gDAAgD;SACnD;QACH,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,iBAAqC,CAAC;IAC1C,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAC1B,UAAU,CACR;gBACE,KAAK;gBACL,KAAK;gBACL,4BAA4B,kBAAkB,CAAC,QAAQ,CAAC,MAAM;gBAC9D,UAAU;gBACV,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;aACrC,EACD,GAAG,EACH,SAAS,CACV,CACF,CAAC,OAAO,CAAC;YACV,IACE,OAAO;gBACP,OAAO,OAAO,KAAK,QAAQ;gBAC3B,MAAM,IAAI,OAAO;gBACjB,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAChC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;gBAEnB,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;QACpE,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG;QACd,yCAAyC,OAAO,+EAA+E,aAAa,EAAE;QAC9I,GAAG,CAAC,kBAAkB;YACpB,CAAC,CAAC;gBACE,EAAE;gBACF,WAAW;gBACX,iBAAiB;oBACf,CAAC,CAAC,QAAQ,YAAY,CAAC,iBAAiB,CAAC,IAAI,WAAW,CAAC,UAAW,CAAC,GAAG;oBACxE,CAAC,CAAC,UAAU,WAAW,CAAC,UAAW,CAAC,EAAE;gBACxC,YAAY,kBAAkB,CAAC,OAAO,IAAI;gBAC1C,yDAAyD;aAC1D;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO;QACL,WAAW;QACX,YAAY,EAAE;YACZ,SAAS,EAAE,IAAI;YACf,OAAO,EACL,kDAAkD;gBAClD,aAAa;YACf,OAAO;SACR;QACD,YAAY;QACZ,gBAAgB;QAChB,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK;SACT,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;SACtC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,IAAI,EAAE;SACN,OAAO,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK;SACT,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;SACtB,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,QAAgB,EAChB,OAAuB,EACvB,WAA+B,EAC/B,GAAsB,EACtB,UAAmB;IAEnB,MAAM,aAAa,GAAG,kBAAkB,CACtC,SAAS,EACT,QAAQ,EACR,OAAO,EACP,WAAW,EACX,GAAG,EACH,UAAU,CACX,CAAC;IACF,MAAM,QAAQ,GACZ,WAAW,KAAK,SAAS;QACvB,CAAC,CAAC,2PAA2P;QAC7P,CAAC,CAAC,mGAAmG,CAAC;IAC1G,MAAM,YAAY,GAChB,WAAW,KAAK,MAAM;QACpB,CAAC,CAAC,wCAAwC,aAAa,CAAC,gBAAgB,sVAAsV,aAAa,CAAC,YAAY,6SAA6S;QACruB,CAAC,CAAC,EAAE,CAAC;IACT,OAAO;QACL,QAAQ,EACN,QAAQ;YACR,YAAY;YACZ,CAAC,aAAa,CAAC,OAAO;gBACpB,CAAC,CAAC,8MAA8M;gBAChN,CAAC,CAAC,kFAAkF,CAAC;YACvF,6FAA6F;QAC/F,aAAa;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
+
export { validateSiteSkillBundle } from './site-skill-bundle.js';
|
|
1
2
|
import { type RuntimeProfile } from './environment.js';
|
|
2
3
|
import { type SkillInstallOptions } from './skill.js';
|
|
3
|
-
interface SiteSkillBundle {
|
|
4
|
-
skillName: string;
|
|
5
|
-
hash: string;
|
|
6
|
-
files: Record<string, string>;
|
|
7
|
-
}
|
|
8
|
-
export declare function validateSiteSkillBundle(value: unknown): SiteSkillBundle;
|
|
9
4
|
export declare function installAgentToolsSkill(options: SkillInstallOptions, runtime?: RuntimeProfile, site?: string, explicitProfile?: string): Promise<{
|
|
10
5
|
ok: boolean;
|
|
11
6
|
installed: string[];
|
|
12
7
|
skillName: string;
|
|
13
8
|
hash: string;
|
|
14
9
|
}>;
|
|
15
|
-
export {};
|
|
16
10
|
//# sourceMappingURL=agent-tools-skill.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-tools-skill.d.ts","sourceRoot":"","sources":["../src/agent-tools-skill.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-tools-skill.d.ts","sourceRoot":"","sources":["../src/agent-tools-skill.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAOjE,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAMpB,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,cAAuC,EAChD,IAAI,CAAC,EAAE,MAAM,EACb,eAAe,CAAC,EAAE,MAAM;;;;;GAoMzB"}
|
|
@@ -1,42 +1,22 @@
|
|
|
1
1
|
import { LarkCliError, safeDiagnostic } from './lark-cli-error.js';
|
|
2
2
|
import { skillFrontmatter } from './skill-frontmatter.js';
|
|
3
|
-
import {
|
|
3
|
+
import { fileHashes, withSkillInstallLock, } from './skill-install-transaction.js';
|
|
4
|
+
import { bundledLarkBaseDatabaseToolsCall } from './lark-base-database-tools-call.js';
|
|
5
|
+
import { validateSiteSkillBundle } from './site-skill-bundle.js';
|
|
6
|
+
export { validateSiteSkillBundle } from './site-skill-bundle.js';
|
|
4
7
|
import { createHash } from 'node:crypto';
|
|
5
|
-
import { existsSync,
|
|
6
|
-
import { homedir
|
|
8
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
9
|
+
import { homedir } from 'node:os';
|
|
7
10
|
import { dirname, join } from 'node:path';
|
|
8
11
|
import { readConfig } from './config.js';
|
|
9
12
|
import { assertProjectRuntimeProfile, ONLINE_RUNTIME_PROFILE, } from './environment.js';
|
|
10
13
|
import { responseData, resolveLarkProfileEnvironment, runLarkCli, } from './lark-cli.js';
|
|
11
|
-
import {
|
|
14
|
+
import { assertSkillDestination, installSkillTransaction, installedLarkBaseDatabaseToolsVersion, skillDestinations, } from './skill.js';
|
|
12
15
|
function isRecord(value) {
|
|
13
16
|
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
14
17
|
}
|
|
15
|
-
export function validateSiteSkillBundle(value) {
|
|
16
|
-
if (!isRecord(value))
|
|
17
|
-
throw new Error('Invalid site Skill bundle');
|
|
18
|
-
const { skillName, hash, files } = value;
|
|
19
|
-
if (typeof skillName !== 'string' ||
|
|
20
|
-
skillName.length > 64 ||
|
|
21
|
-
!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(skillName))
|
|
22
|
-
throw new Error('Invalid site Skill bundle: illegal skillName');
|
|
23
|
-
if (typeof hash !== 'string' || hash.trim() === '')
|
|
24
|
-
throw new Error('Invalid site Skill bundle: hash is required');
|
|
25
|
-
if (!isRecord(files) || typeof files['SKILL.md'] !== 'string')
|
|
26
|
-
throw new Error('Invalid site Skill bundle: SKILL.md is required');
|
|
27
|
-
for (const [path, content] of Object.entries(files)) {
|
|
28
|
-
if (path !== 'SKILL.md' &&
|
|
29
|
-
!/^references\/[^/\\\u0000-\u001f<>:"|?*]+\.md$/.test(path))
|
|
30
|
-
throw new Error(`Invalid site Skill bundle path: ${path}; only SKILL.md and references/*.md are allowed`);
|
|
31
|
-
if (typeof content !== 'string')
|
|
32
|
-
throw new Error(`Invalid site Skill bundle content: ${path}`);
|
|
33
|
-
}
|
|
34
|
-
const header = skillFrontmatter(files['SKILL.md']);
|
|
35
|
-
if (header.value.name !== skillName)
|
|
36
|
-
throw new Error('Invalid site Skill bundle: SKILL.md frontmatter name must match skillName');
|
|
37
|
-
return { skillName, hash, files: files };
|
|
38
|
-
}
|
|
39
18
|
export async function installAgentToolsSkill(options, runtime = ONLINE_RUNTIME_PROFILE, site, explicitProfile) {
|
|
19
|
+
withSkillInstallLock(() => { });
|
|
40
20
|
const workspace = process.cwd();
|
|
41
21
|
const config = site ? undefined : readConfig(workspace);
|
|
42
22
|
if (config)
|
|
@@ -49,6 +29,8 @@ export async function installAgentToolsSkill(options, runtime = ONLINE_RUNTIME_P
|
|
|
49
29
|
'api',
|
|
50
30
|
'GET',
|
|
51
31
|
`/open-apis/base/v3/sites/${encodeURIComponent(siteToken)}/skill`,
|
|
32
|
+
'--params',
|
|
33
|
+
JSON.stringify({ layout: 'split' }),
|
|
52
34
|
], env, config ? workspace : homedir()));
|
|
53
35
|
}
|
|
54
36
|
catch (error) {
|
|
@@ -72,20 +54,20 @@ export async function installAgentToolsSkill(options, runtime = ONLINE_RUNTIME_P
|
|
|
72
54
|
throw failure('The current account cannot access this site Skill. Parameter: site. Fix: Ask a site administrator to add you to the site, then retry the installation.');
|
|
73
55
|
throw error;
|
|
74
56
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
writeFileSync(target, content);
|
|
57
|
+
return withSkillInstallLock(() => {
|
|
58
|
+
const bundle = validateSiteSkillBundle(rawBundle);
|
|
59
|
+
const common = bundle.layout === 'split'
|
|
60
|
+
? bundledLarkBaseDatabaseToolsCall(runtime)
|
|
61
|
+
: undefined;
|
|
62
|
+
if (common && common.protocolVersion < bundle.protocolVersion) {
|
|
63
|
+
throw new Error(`This site requires lark-base-database-tools-call protocolVersion ${bundle.protocolVersion}; this CLI bundles ${common.protocolVersion}. Upgrade the CLI and retry. No new installation was started.`);
|
|
83
64
|
}
|
|
84
65
|
let installName = bundle.skillName;
|
|
85
|
-
|
|
86
|
-
|
|
66
|
+
const receiptFile = site
|
|
67
|
+
? userReceiptPath()
|
|
68
|
+
: join(workspace, '.base-database-cli/state/agent-tools-skill.json');
|
|
69
|
+
const tracked = readUserReceipt(receiptFile, site ? undefined : { appToken: siteToken, runtime: runtime.name });
|
|
87
70
|
if (site) {
|
|
88
|
-
tracked = readUserReceipt(receiptFile);
|
|
89
71
|
const destinations = skillDestinations(options, installName);
|
|
90
72
|
const conflicts = destinations.some((directory) => existsSync(directory) &&
|
|
91
73
|
tracked.some((item) => item.directory === directory && item.siteToken !== siteToken));
|
|
@@ -104,50 +86,87 @@ export async function installAgentToolsSkill(options, runtime = ONLINE_RUNTIME_P
|
|
|
104
86
|
'SKILL.md': skillFrontmatter(bundle.files['SKILL.md']).rename(installName),
|
|
105
87
|
},
|
|
106
88
|
};
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
89
|
+
const directories = skillDestinations(options, installName);
|
|
90
|
+
const hashes = (files) => Object.fromEntries(Object.entries(files).map(([name, content]) => [
|
|
91
|
+
name,
|
|
92
|
+
createHash('sha256').update(content).digest('hex'),
|
|
93
|
+
]));
|
|
94
|
+
const files = hashes(installBundle.files);
|
|
95
|
+
for (const directory of directories) {
|
|
96
|
+
assertSkillDestination(directory);
|
|
97
|
+
const trackedSite = Boolean(site) &&
|
|
98
|
+
tracked.some((item) => item.directory === directory &&
|
|
99
|
+
item.siteToken === siteToken &&
|
|
100
|
+
item.runtime === runtime.name);
|
|
101
|
+
if (existsSync(directory) && !options.force && !trackedSite)
|
|
102
|
+
throw new Error(`${directory} already exists; pass --force to replace it`);
|
|
114
103
|
}
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
104
|
+
const roots = [...new Set(directories.map(dirname))];
|
|
105
|
+
const commonDirectories = common
|
|
106
|
+
? roots.map((root) => join(root, common.skillName))
|
|
107
|
+
: [];
|
|
108
|
+
const installations = tracked.filter((item) => ![...directories, ...commonDirectories].includes(item.directory));
|
|
109
|
+
installations.push(...directories.map((directory) => ({
|
|
110
|
+
directory,
|
|
111
|
+
siteToken,
|
|
112
|
+
runtime: runtime.name,
|
|
113
|
+
hash: bundle.hash,
|
|
114
|
+
files,
|
|
115
|
+
})));
|
|
116
|
+
if (common)
|
|
117
|
+
for (const directory of commonDirectories) {
|
|
118
|
+
const existingVersion = installedLarkBaseDatabaseToolsVersion(directory);
|
|
119
|
+
const retain = existingVersion !== undefined &&
|
|
120
|
+
existingVersion > common.protocolVersion;
|
|
121
|
+
installations.push({
|
|
122
|
+
directory,
|
|
123
|
+
siteToken,
|
|
124
|
+
runtime: runtime.name,
|
|
125
|
+
hash: `protocol:${retain ? existingVersion : common.protocolVersion}`,
|
|
126
|
+
files: retain ? fileHashes(directory) : hashes(common.files),
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
const receipt = site
|
|
130
|
+
? { installations }
|
|
131
|
+
: {
|
|
132
|
+
appToken: siteToken,
|
|
133
|
+
runtime: runtime.name,
|
|
134
|
+
installations: installations.map(({ directory, hash, files }) => ({
|
|
135
|
+
directory,
|
|
136
|
+
hash,
|
|
137
|
+
files,
|
|
138
|
+
})),
|
|
139
|
+
};
|
|
140
|
+
return installSkillTransaction({
|
|
141
|
+
packages: [
|
|
142
|
+
{ name: installName, files: installBundle.files },
|
|
143
|
+
...(common ? [{ name: common.skillName, files: common.files }] : []),
|
|
144
|
+
],
|
|
145
|
+
destinations: roots,
|
|
146
|
+
receiptPath: receiptFile,
|
|
147
|
+
receiptContent: JSON.stringify(receipt, null, 2) + '\n',
|
|
148
|
+
}).then(() => ({
|
|
131
149
|
ok: true,
|
|
132
|
-
installed,
|
|
150
|
+
installed: directories,
|
|
133
151
|
skillName: installName,
|
|
134
152
|
hash: bundle.hash,
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
finally {
|
|
138
|
-
rmSync(temporary, { recursive: true, force: true });
|
|
139
|
-
}
|
|
153
|
+
}));
|
|
154
|
+
});
|
|
140
155
|
}
|
|
141
156
|
function userReceiptPath() {
|
|
142
157
|
return join(homedir(), '.base-database-cli/state/agent-tools-skills.json');
|
|
143
158
|
}
|
|
144
|
-
function readUserReceipt(path) {
|
|
159
|
+
function readUserReceipt(path, project) {
|
|
145
160
|
try {
|
|
146
161
|
const value = JSON.parse(readFileSync(path, 'utf8'));
|
|
162
|
+
if (project &&
|
|
163
|
+
(value.appToken !== project.appToken || value.runtime !== project.runtime))
|
|
164
|
+
return [];
|
|
147
165
|
return Array.isArray(value.installations)
|
|
148
166
|
? value.installations.filter((item) => isRecord(item) &&
|
|
149
|
-
|
|
150
|
-
|
|
167
|
+
(Boolean(project) ||
|
|
168
|
+
(typeof item.siteToken === 'string' &&
|
|
169
|
+
typeof item.runtime === 'string')) &&
|
|
151
170
|
typeof item.directory === 'string' &&
|
|
152
171
|
typeof item.hash === 'string' &&
|
|
153
172
|
isRecord(item.files) &&
|
|
@@ -158,22 +177,6 @@ function readUserReceipt(path) {
|
|
|
158
177
|
return [];
|
|
159
178
|
}
|
|
160
179
|
}
|
|
161
|
-
function writeUserReceipt(path, existing, siteToken, runtime, bundle, directories) {
|
|
162
|
-
const files = Object.fromEntries(Object.entries(bundle.files).map(([name, content]) => [
|
|
163
|
-
name,
|
|
164
|
-
createHash('sha256').update(content).digest('hex'),
|
|
165
|
-
]));
|
|
166
|
-
const installations = existing.filter((item) => !directories.includes(item.directory));
|
|
167
|
-
installations.push(...directories.map((directory) => ({
|
|
168
|
-
siteToken,
|
|
169
|
-
runtime,
|
|
170
|
-
directory,
|
|
171
|
-
hash: bundle.hash,
|
|
172
|
-
files,
|
|
173
|
-
})));
|
|
174
|
-
mkdirSync(dirname(path), { recursive: true });
|
|
175
|
-
writeFileSync(path, JSON.stringify({ installations }, null, 2) + '\n');
|
|
176
|
-
}
|
|
177
180
|
function parseSiteToken(value) {
|
|
178
181
|
const input = value.trim();
|
|
179
182
|
let token = input;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-tools-skill.js","sourceRoot":"","sources":["../src/agent-tools-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"agent-tools-skill.js","sourceRoot":"","sources":["../src/agent-tools-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function hashWithVersion(files: Record<string, string>, version: string, excludedFields?: string[]): string;
|
|
2
|
+
export declare function splitHash(files: Record<string, string>): string;
|
|
3
|
+
export declare function siteSkillName(name: string, token: string): string;
|
|
4
|
+
/** Match Go encoding/json with SetEscapeHTML(false), including JavaScript separators. */
|
|
5
|
+
export declare function skillScalar(value: string): string;
|
|
6
|
+
//# sourceMappingURL=author-skill-hash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"author-skill-hash.d.ts","sourceRoot":"","sources":["../src/author-skill-hash.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,OAAO,EAAE,MAAM,EACf,cAAc,WAAgB,GAC7B,MAAM,CAyBR;AACD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAE/D;AACD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CASjE;AAED,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
export function hashWithVersion(files, version, excludedFields = ['skillHash']) {
|
|
3
|
+
const hash = createHash('sha256').update(version).update('\0');
|
|
4
|
+
for (const path of Object.keys(files).sort((a, b) => Buffer.compare(Buffer.from(a), Buffer.from(b)))) {
|
|
5
|
+
let content = files[path];
|
|
6
|
+
if (path === 'SKILL.md' && content.startsWith('---\n')) {
|
|
7
|
+
const end = content.indexOf('\n---\n', 4);
|
|
8
|
+
if (end >= 0) {
|
|
9
|
+
content =
|
|
10
|
+
'---\n' +
|
|
11
|
+
content
|
|
12
|
+
.slice(4, end)
|
|
13
|
+
.split('\n')
|
|
14
|
+
.filter((line) => !excludedFields.some((field) => line.startsWith(`${field}: `)))
|
|
15
|
+
.join('\n') +
|
|
16
|
+
content.slice(end);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
hash.update(path).update('\0').update(content).update('\0');
|
|
20
|
+
}
|
|
21
|
+
return hash.digest('hex');
|
|
22
|
+
}
|
|
23
|
+
export function splitHash(files) {
|
|
24
|
+
return hashWithVersion(files, 'split-v1', ['skillHash', 'siteEnv']);
|
|
25
|
+
}
|
|
26
|
+
export function siteSkillName(name, token) {
|
|
27
|
+
const slug = [...name]
|
|
28
|
+
.map((char) => [...char.toLowerCase()][0])
|
|
29
|
+
.join('')
|
|
30
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
31
|
+
.replace(/^-|-$/g, '')
|
|
32
|
+
.slice(0, 24)
|
|
33
|
+
.replace(/-$/g, '');
|
|
34
|
+
return `site-${slug ? slug + '-' : ''}${createHash('sha256').update(token).digest('hex').slice(0, 8)}`;
|
|
35
|
+
}
|
|
36
|
+
/** Match Go encoding/json with SetEscapeHTML(false), including JavaScript separators. */
|
|
37
|
+
export function skillScalar(value) {
|
|
38
|
+
return JSON.stringify(value)
|
|
39
|
+
.replace(/\u2028/g, '\\u2028')
|
|
40
|
+
.replace(/\u2029/g, '\\u2029');
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=author-skill-hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"author-skill-hash.js","sourceRoot":"","sources":["../src/author-skill-hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,eAAe,CAC7B,KAA6B,EAC7B,OAAe,EACf,cAAc,GAAG,CAAC,WAAW,CAAC;IAE9B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAC/C,EAAE,CAAC;QACF,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAE,CAAC;QAC3B,IAAI,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAC1C,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;gBACb,OAAO;oBACL,OAAO;wBACP,OAAO;6BACJ,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;6BACb,KAAK,CAAC,IAAI,CAAC;6BACX,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CACjE;6BACA,IAAI,CAAC,IAAI,CAAC;wBACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AACD,MAAM,UAAU,SAAS,CAAC,KAA6B;IACrD,OAAO,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;AACtE,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAa;IACvD,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;SACnB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SACzC,IAAI,CAAC,EAAE,CAAC;SACR,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtB,OAAO,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACzG,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SACzB,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;SAC7B,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type RuntimeProfile } from './environment.js';
|
|
2
|
+
import { type AuthorSkill } from './author-skill.js';
|
|
3
|
+
export declare function renderSplit(project: {
|
|
4
|
+
name: string;
|
|
5
|
+
token: string;
|
|
6
|
+
description: string;
|
|
7
|
+
}, author: AuthorSkill | undefined, env: 'prod' | 'preview'): {
|
|
8
|
+
skillName: string;
|
|
9
|
+
hash: string;
|
|
10
|
+
files: {
|
|
11
|
+
'SKILL.md': string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
/** Uses current deployment metadata. Rename requires redeploy, then repack, to match GET /skill. */
|
|
15
|
+
export declare function packAuthorSkill(options: {
|
|
16
|
+
directory: string;
|
|
17
|
+
output: string;
|
|
18
|
+
env: 'prod' | 'preview';
|
|
19
|
+
}, runtime: RuntimeProfile): Promise<{
|
|
20
|
+
skillName: string;
|
|
21
|
+
hash: string;
|
|
22
|
+
files: Record<string, string>;
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=author-skill-pack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"author-skill-pack.d.ts","sourceRoot":"","sources":["../src/author-skill-pack.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAS1B,OAAO,EAOL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAG3B,wBAAgB,WAAW,CACzB,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAC7D,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,GAAG,EAAE,MAAM,GAAG,SAAS;;;;;;EA8BxB;AACD,oGAAoG;AACpG,wBAAsB,eAAe,CACnC,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EACvE,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CA2E7E"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join, resolve } from 'node:path';
|
|
3
|
+
import { readConfig } from './config.js';
|
|
4
|
+
import { assertProjectRuntimeProfile, } from './environment.js';
|
|
5
|
+
import { responseData, runLarkCli, resolveLarkProfileEnvironment, } from './lark-cli.js';
|
|
6
|
+
import { readRemoteDraft } from './draft-state.js';
|
|
7
|
+
import { readAgentTools } from './agent-tools.js';
|
|
8
|
+
import { buildLocalFunctionWriteRequest } from './function-write-request.js';
|
|
9
|
+
import { authorSkillZip, authorSkillError, readAuthorSkill, validateAuthorReferences, validateSkillDynamicCommands, finalSkillFunctions, } from './author-skill.js';
|
|
10
|
+
import { siteSkillName, splitHash, skillScalar } from './author-skill-hash.js';
|
|
11
|
+
export function renderSplit(project, author, env) {
|
|
12
|
+
if (env !== 'prod' && env !== 'preview')
|
|
13
|
+
throw new Error('Invalid site environment');
|
|
14
|
+
const singleLine = (s) => s.replace(/\p{White_Space}+/gu, ' ').replace(/^ | $/g, '');
|
|
15
|
+
const name = singleLine(project.name) || project.token;
|
|
16
|
+
const description = author?.description ??
|
|
17
|
+
`查询或操作站点应用「${singleLine(name)}」的数据时使用。${singleLine(project.description)}`;
|
|
18
|
+
const body = author?.body ??
|
|
19
|
+
`# ${singleLine(name)
|
|
20
|
+
.replace(/&/g, '&')
|
|
21
|
+
.replace(/</g, '<')
|
|
22
|
+
.replace(/>/g, '>')
|
|
23
|
+
.replace(/"/g, '"')
|
|
24
|
+
.replace(/'/g, ''')
|
|
25
|
+
.replace(/[\\\x60\[\]*_#]/g, '\\$&')}\n\n${singleLine(project.description)}\n\n调用前先加载 lark-base-database-tools-call。通过实时函数发现接口了解当前开放能力,再读取 detail 后调用。\n`;
|
|
26
|
+
const skillName = siteSkillName(project.name, project.token);
|
|
27
|
+
const header = (hash) => `---\nname: ${skillName}\ndescription: ${skillScalar(description)}\nskillHash: ${hash}\nsiteToken: ${skillScalar(project.token)}\nsiteEnv: ${env}\n---\n${body}`;
|
|
28
|
+
const files = { ...author?.files, 'SKILL.md': header('') };
|
|
29
|
+
validateSkillDynamicCommands(files);
|
|
30
|
+
const hash = splitHash(files);
|
|
31
|
+
files['SKILL.md'] = header(hash);
|
|
32
|
+
return { skillName, hash, files };
|
|
33
|
+
}
|
|
34
|
+
/** Uses current deployment metadata. Rename requires redeploy, then repack, to match GET /skill. */
|
|
35
|
+
export async function packAuthorSkill(options, runtime) {
|
|
36
|
+
const workspace = resolve(options.directory);
|
|
37
|
+
const config = readConfig(workspace);
|
|
38
|
+
assertProjectRuntimeProfile(config.runtimeProfile, runtime);
|
|
39
|
+
const author = readAuthorSkill(workspace);
|
|
40
|
+
if (!author)
|
|
41
|
+
throw authorSkillError('SKILL_FILE_TYPE_INVALID', 'skill/SKILL.md is required for author pack');
|
|
42
|
+
await authorSkillZip(author);
|
|
43
|
+
const { env, larkProfile } = resolveLarkProfileEnvironment(await runtime.commandEnvironment(), undefined, config.larkProfile, runtime);
|
|
44
|
+
const data = responseData(runLarkCli([
|
|
45
|
+
'api',
|
|
46
|
+
'GET',
|
|
47
|
+
`/open-apis/base/v3/sites/${encodeURIComponent(config.appToken)}/get`,
|
|
48
|
+
], env, workspace)).project;
|
|
49
|
+
if (!data ||
|
|
50
|
+
typeof data.name !== 'string' ||
|
|
51
|
+
typeof data.description !== 'string')
|
|
52
|
+
throw new Error('Site metadata is missing name or description');
|
|
53
|
+
const draft = readRemoteDraft({ appToken: config.appToken, environment: runtime.name, larkProfile }, env, workspace, true);
|
|
54
|
+
const request = buildLocalFunctionWriteRequest(workspace);
|
|
55
|
+
const agentTools = readAgentTools(workspace);
|
|
56
|
+
const remoteAIIds = new Set(draft.sources?.functions
|
|
57
|
+
.filter((fn) => fn.functionType === 'ai')
|
|
58
|
+
.map((fn) => fn.functionId));
|
|
59
|
+
const exclude = [
|
|
60
|
+
...agentTools.exclude,
|
|
61
|
+
...(!request.kinds.includes('ai')
|
|
62
|
+
? (draft.sources?.agentTools.exclude.filter((id) => remoteAIIds.has(id)) ?? [])
|
|
63
|
+
: []),
|
|
64
|
+
];
|
|
65
|
+
validateAuthorReferences(author, finalSkillFunctions(request, draft.sources?.functions), exclude, draft.sources?.functions);
|
|
66
|
+
const bundle = renderSplit({ name: data.name, description: data.description, token: config.appToken }, author, options.env);
|
|
67
|
+
const output = resolve(options.output);
|
|
68
|
+
// Output must be new: avoid mixing stale references with the packed bundle.
|
|
69
|
+
mkdirSync(output, { recursive: false });
|
|
70
|
+
for (const [path, content] of Object.entries(bundle.files)) {
|
|
71
|
+
const target = join(output, path);
|
|
72
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
73
|
+
writeFileSync(target, content, { flag: 'wx' });
|
|
74
|
+
}
|
|
75
|
+
return bundle;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=author-skill-pack.js.map
|