@heybox/hb-sdk 0.8.0-alpha.2 → 0.8.0-alpha.3
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 +8 -0
- package/README.md +20 -0
- package/dist/cli-chunks/{build-CCLWgXyA.cjs → build-qWzAbpS7.cjs} +2 -2
- package/dist/cli-chunks/{context-Brh56h56.cjs → context-CtS2Thp0.cjs} +1 -1
- package/dist/cli-chunks/{create-BZ-hi2s1.cjs → create-PV5ua977.cjs} +1 -1
- package/dist/cli-chunks/{dev-CoSXtEYa.cjs → dev-CwKbAm_H.cjs} +10 -14
- package/dist/cli-chunks/doctor-tJUGOYrm.cjs +65 -0
- package/dist/cli-chunks/{index-CS6Q0o5C.cjs → index-DVuD75Hr.cjs} +1 -1
- package/dist/cli-chunks/{index-BL5eEPap.cjs → index-De687C6-.cjs} +33 -24
- package/dist/cli-chunks/{index.esm-BoBHPfpq.cjs → index.esm-B-4yrLNm.cjs} +6 -5
- package/dist/cli-chunks/{login-CILLxGuf.cjs → login-DolpqD8K.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-Qu6Xe9Dn.cjs → project-vite-1rvkK-M8.cjs} +1 -1
- package/dist/cli-chunks/{remote-DRuTQ51u.cjs → remote-rIAQE_G2.cjs} +4 -4
- package/dist/cli-chunks/{session-D-_N3WVL.cjs → session-CzaM2Cq3.cjs} +1 -1
- package/dist/cli-chunks/skill-CM40_9WH.cjs +83 -0
- package/dist/cli-chunks/version-Bz-AfXQU.cjs +8 -0
- package/dist/cli.cjs +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/vite.cjs.js +1 -1
- package/dist/vite.esm.js +1 -1
- package/package.json +12 -7
- package/skill/SKILL.md +7 -8
- package/skill/references/api-protocol.md +2 -2
- package/skill/references/api-root.md +2 -2
- package/skill/references/cli.md +6 -5
- package/skill/references/examples.md +1 -1
- package/skill/references/llms-index.md +1 -1
- package/skill/references/recipes.md +1 -1
- package/skill/references/safety-boundaries.md +1 -1
- package/skill/skill.json +10 -5
- package/types/skill-metadata.d.ts +0 -4
- package/dist/cli-chunks/doctor-EsCYJGhV.cjs +0 -204
- package/skill/scripts/check-references.mjs +0 -14
- package/skill/scripts/markdown-sections.mjs +0 -36
- package/skill/scripts/package-skill.mjs +0 -60
- package/skill/scripts/package-skill.sh +0 -6
- package/skill/scripts/skill-metadata.mjs +0 -77
- package/skill/scripts/sync-agent-skills-payload.mjs +0 -359
- package/skill/scripts/sync-references.mjs +0 -826
- package/skill/scripts/validate-skill.mjs +0 -263
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.8.0-alpha.3
|
|
4
|
+
|
|
5
|
+
### SDK / Agent Skill
|
|
6
|
+
|
|
7
|
+
- Agent Skill 合并至 `@heybox/hb-sdk` npm 包,使用 `hb-sdk skill install`(项目)或 `hb-sdk skill install --global`(用户级)安装。
|
|
8
|
+
- 要求 Node.js `>=22.20.0`;安装会校验项目 SDK 版本并维护 `skills-lock.json`,内容被修改时需使用 `--force` 覆盖。
|
|
9
|
+
- `hb-sdk doctor` 改为本地多 Agent 诊断并支持 `--json`;Open 站点仅保留旧版只读兼容快照,不再持续发布。
|
|
10
|
+
|
|
3
11
|
## 0.8.0-alpha.2
|
|
4
12
|
|
|
5
13
|
### SDK
|
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
小黑盒 APP 小程序工坊的前端 SDK 与开发 CLI,用于创建、调试、构建和发布工坊小程序,并在业务页面中调用小黑盒开放能力。
|
|
4
4
|
|
|
5
|
+
运行环境要求 Node.js `>=22.20.0`。`@heybox/hb-sdk` npm 包同时包含与当前 SDK 版本严格对应的 Agent Skill;Skill 不再依赖 Open 远端分发。
|
|
6
|
+
|
|
5
7
|
SDK 只提供面向小程序开发者的稳定接口,不提供客户端内部协议、登录凭据或私有实现入口。本地浏览器调试请使用 `hb-sdk dev` 提供的 Mock 环境,发布前仍需在小黑盒 APP 中完成真机验收。
|
|
6
8
|
|
|
7
9
|
宿主集成边界:`@heybox/hb-sdk-runtime` 运行在 iframe 外并负责 bridge/Host Port;跨 iframe 的 wire contract 唯一维护在零依赖 `@heybox/hb-sdk-protocol`。业务页面不需要创建 Runtime、实现 Host Port 或导入协议包;客户端 SDK 只依赖已兼容 re-export 的 `@heybox/hb-sdk/protocol`。
|
|
@@ -25,6 +27,24 @@ npm run dev
|
|
|
25
27
|
npm install @heybox/hb-sdk
|
|
26
28
|
```
|
|
27
29
|
|
|
30
|
+
### 安装 Agent Skill
|
|
31
|
+
|
|
32
|
+
在项目目录安装到项目 Agent 目录:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
hb-sdk skill install
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
安装到当前用户目录,或指定 Agent:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
hb-sdk skill install --global
|
|
42
|
+
hb-sdk skill install --agent codex cursor
|
|
43
|
+
hb-sdk skill install --all-agents
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
使用 `hb-sdk doctor` 或 `hb-sdk doctor --json` 检查各 Agent 的 Skill 是否与当前 npm 包匹配;已有内容被修改时,使用 `--force` 才会覆盖。
|
|
47
|
+
|
|
28
48
|
SDK 会在导入时启动握手,能力调用会自动等待 SDK 就绪。未开通网络权限的小程序通过 `user.getInfo()` 静默读取当前小程序内的隔离身份和公开资料:
|
|
29
49
|
|
|
30
50
|
需要可信用户手势的按钮不能在点击回调里等待握手。页面加载时先用 `getHandshakeState()` 读取当前状态,再用 `onHandshakeStateChange()` 订阅并立即接收当前状态;仅在 `status === 'ready'` 时启用按钮,并在组件或页面销毁时调用订阅返回的取消函数。`ready` 生命周期事件只是握手成功瞬间派发、不会重放的边沿通知,不能用来判断当前状态。
|
|
@@ -5,8 +5,8 @@ var fs = require('node:fs/promises');
|
|
|
5
5
|
var path = require('node:path');
|
|
6
6
|
var runtimePermissionEnv = require('./runtime-permission-env-CjsCe5bp.cjs');
|
|
7
7
|
var runtimeGate = require('./runtime-gate-DFjw66kF.cjs');
|
|
8
|
-
var index = require('./index-
|
|
9
|
-
var projectVite = require('./project-vite-
|
|
8
|
+
var index = require('./index-De687C6-.cjs');
|
|
9
|
+
var projectVite = require('./project-vite-1rvkK-M8.cjs');
|
|
10
10
|
require('node:async_hooks');
|
|
11
11
|
require('node:module');
|
|
12
12
|
require('path');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var session = require('./session-
|
|
3
|
+
var session = require('./session-CzaM2Cq3.cjs');
|
|
4
4
|
var runtimePermissionEnv = require('./runtime-permission-env-CjsCe5bp.cjs');
|
|
5
5
|
var fs$1 = require('node:fs');
|
|
6
6
|
var fs = require('node:fs/promises');
|
|
@@ -5,7 +5,7 @@ var fs = require('node:fs/promises');
|
|
|
5
5
|
var path = require('node:path');
|
|
6
6
|
var require$$0 = require('fs');
|
|
7
7
|
var require$$1 = require('path');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-De687C6-.cjs');
|
|
9
9
|
require('node:module');
|
|
10
10
|
require('os');
|
|
11
11
|
require('readline');
|
|
@@ -8,15 +8,16 @@ var node_crypto = require('node:crypto');
|
|
|
8
8
|
var promises = require('node:dns/promises');
|
|
9
9
|
var node_http = require('node:http');
|
|
10
10
|
var node_module = require('node:module');
|
|
11
|
-
var context = require('./context-
|
|
11
|
+
var context = require('./context-CtS2Thp0.cjs');
|
|
12
12
|
var undici = require('undici');
|
|
13
13
|
var fs$1 = require('node:fs/promises');
|
|
14
|
-
var index = require('./index-
|
|
14
|
+
var index = require('./index-De687C6-.cjs');
|
|
15
15
|
var require$$0$1 = require('crypto');
|
|
16
16
|
var require$$0 = require('buffer');
|
|
17
|
-
var session = require('./session-
|
|
17
|
+
var session = require('./session-CzaM2Cq3.cjs');
|
|
18
18
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
19
|
-
var projectVite = require('./project-vite-
|
|
19
|
+
var projectVite = require('./project-vite-1rvkK-M8.cjs');
|
|
20
|
+
var version = require('./version-Bz-AfXQU.cjs');
|
|
20
21
|
var runtimePermissionEnv = require('./runtime-permission-env-CjsCe5bp.cjs');
|
|
21
22
|
|
|
22
23
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
@@ -1850,8 +1851,8 @@ const DEFAULT_CHANNEL_TRANSPORT = {
|
|
|
1850
1851
|
};
|
|
1851
1852
|
const IPV4_LOOPBACK_ADDRESSES = new net.BlockList();
|
|
1852
1853
|
IPV4_LOOPBACK_ADDRESSES.addSubnet('127.0.0.0', 8, 'ipv4');
|
|
1853
|
-
const { WebSocket, WebSocketServer } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-
|
|
1854
|
-
const { parse: parseHtml } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-
|
|
1854
|
+
const { WebSocket, WebSocketServer } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-CwKbAm_H.cjs', document.baseURI).href)))('ws');
|
|
1855
|
+
const { parse: parseHtml } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-CwKbAm_H.cjs', document.baseURI).href)))('parse5');
|
|
1855
1856
|
const BROWSER_DEV_HOST_ROOT_CANDIDATES = [
|
|
1856
1857
|
path.resolve(__dirname, 'devtools/browser-dev-host'),
|
|
1857
1858
|
path.resolve(__dirname, '../devtools/browser-dev-host'),
|
|
@@ -10894,7 +10895,7 @@ function assertNodeRuntimeCapabilities(ctx, settings) {
|
|
|
10894
10895
|
function createNodeRealtimeDriverRegistry() {
|
|
10895
10896
|
const registry = createRuntimeRealtimeDriverRegistry();
|
|
10896
10897
|
registry.registerLazy('node-websocket', async () => {
|
|
10897
|
-
const mod = await Promise.resolve().then(function () { return require('./index.esm-
|
|
10898
|
+
const mod = await Promise.resolve().then(function () { return require('./index.esm-B-4yrLNm.cjs'); });
|
|
10898
10899
|
return mod.createNodeWebSocketRuntimeDriver();
|
|
10899
10900
|
});
|
|
10900
10901
|
return registry;
|
|
@@ -14954,11 +14955,6 @@ function writeLaunchResponse(response, status, body) {
|
|
|
14954
14955
|
response.end(body ?? '');
|
|
14955
14956
|
}
|
|
14956
14957
|
|
|
14957
|
-
/** 构建时替换为当前发布包的实际版本。 */
|
|
14958
|
-
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
14959
|
-
? undefined
|
|
14960
|
-
: '0.8.0-alpha.2';
|
|
14961
|
-
|
|
14962
14958
|
const DEFAULT_APP_PORT = 5173;
|
|
14963
14959
|
const DEFAULT_BROWSER_DEV_HOST_PORT = 5174;
|
|
14964
14960
|
const DEFAULT_DEV_CONTEXT_TIMEOUT_MS = 3000;
|
|
@@ -15006,7 +15002,7 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
15006
15002
|
localDevLaunchToken: currentLocalDevLaunchToken,
|
|
15007
15003
|
miniProgramId: devLaunchContext.miniProgramId,
|
|
15008
15004
|
runtimePermissions: launchRuntimePermissions,
|
|
15009
|
-
sdkVersion: HB_SDK_VERSION,
|
|
15005
|
+
sdkVersion: version.HB_SDK_VERSION,
|
|
15010
15006
|
}));
|
|
15011
15007
|
if (!handled)
|
|
15012
15008
|
next();
|
|
@@ -15024,7 +15020,7 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
15024
15020
|
interfaces: networkInterfaceSnapshot,
|
|
15025
15021
|
localDevLaunchToken: currentLocalDevLaunchToken,
|
|
15026
15022
|
miniProgramId: devLaunchContext.miniProgramId,
|
|
15027
|
-
sdkVersion: HB_SDK_VERSION,
|
|
15023
|
+
sdkVersion: version.HB_SDK_VERSION,
|
|
15028
15024
|
viteNetworkUrls: appServer.resolvedUrls?.network ?? [],
|
|
15029
15025
|
});
|
|
15030
15026
|
const lanAddresses = buildLanAddresses();
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fs = require('node:fs/promises');
|
|
4
|
+
var os = require('node:os');
|
|
5
|
+
var path = require('node:path');
|
|
6
|
+
var index = require('./index-De687C6-.cjs');
|
|
7
|
+
require('node:module');
|
|
8
|
+
require('node:fs');
|
|
9
|
+
require('path');
|
|
10
|
+
require('os');
|
|
11
|
+
require('readline');
|
|
12
|
+
require('tty');
|
|
13
|
+
require('assert');
|
|
14
|
+
require('events');
|
|
15
|
+
require('stream');
|
|
16
|
+
require('buffer');
|
|
17
|
+
require('util');
|
|
18
|
+
|
|
19
|
+
const CANDIDATES = [path.resolve(__dirname, '..', 'package.json'), path.resolve(__dirname, '..', '..', 'package.json'), path.resolve(__dirname, '..', '..', '..', 'package.json')];
|
|
20
|
+
const AGENTS = ['codex', 'claude', 'cursor'];
|
|
21
|
+
async function runDoctorCommand(runtime = {}) {
|
|
22
|
+
const logger = runtime.logger ?? index.createCliLogger();
|
|
23
|
+
const result = await logger.task('正在检查本地 Agent Skill', () => getDoctorResult(runtime), { successText: 'Agent Skill 检查完成' });
|
|
24
|
+
if (runtime.json)
|
|
25
|
+
logger.raw(JSON.stringify(result));
|
|
26
|
+
else {
|
|
27
|
+
logger.section('Doctor');
|
|
28
|
+
logger.info(`SDK version: ${result.currentSdkVersion}`);
|
|
29
|
+
for (const a of result.agents)
|
|
30
|
+
logger.info(`${a.agent}: ${a.status}${a.skillVersion ? ` (${a.skillVersion})` : ''}`);
|
|
31
|
+
logger.info(`Status: ${result.status}`);
|
|
32
|
+
if (result.status !== 'OK')
|
|
33
|
+
logger.warn('请运行 hb-sdk skill install 安装或更新对应 Skill。');
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
async function getDoctorResult(runtime = {}) {
|
|
38
|
+
const version = await readVersion(runtime.packageJsonFiles);
|
|
39
|
+
const results = await Promise.all((runtime.agentNames ?? AGENTS).map(a => inspect(a, version, runtime)));
|
|
40
|
+
const status = results.every(a => a.status === 'OK') ? 'OK' : results.find(a => a.status !== 'OK').status;
|
|
41
|
+
return { currentSdkVersion: version, status, agents: results, localSkillJsonPath: results[0]?.path ?? '', localSkillVersion: results[0]?.skillVersion };
|
|
42
|
+
}
|
|
43
|
+
async function inspect(agent, version, runtime) {
|
|
44
|
+
const home = runtime.agentRoots?.[agent] ?? runtime.env?.[`${agent.toUpperCase()}_HOME`] ?? process.env[`${agent.toUpperCase()}_HOME`] ?? path.join(os.homedir(), `.${agent}`);
|
|
45
|
+
const file = path.join(home, 'skills', index.HB_SDK_SKILL_NAME, 'skill.json');
|
|
46
|
+
try {
|
|
47
|
+
const m = JSON.parse(await fs.readFile(file, 'utf8'));
|
|
48
|
+
const ok = m.name === index.HB_SDK_SKILL_NAME && m.sdk?.package === index.HB_SDK_PACKAGE_NAME && m.sdk?.version === version && m.distribution?.type === 'npm' && m.distribution?.package === index.HB_SDK_PACKAGE_NAME && m.distribution?.version === version && m.skillVersion?.startsWith(`${version}+skill.`);
|
|
49
|
+
return { agent, path: file, status: ok ? 'OK' : 'SKILL_OUTDATED', skillVersion: m.skillVersion };
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return { agent, path: file, status: 'SKILL_MISSING' };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async function readVersion(files = CANDIDATES) { for (const file of files) {
|
|
56
|
+
try {
|
|
57
|
+
const m = JSON.parse(await fs.readFile(file, 'utf8'));
|
|
58
|
+
if (typeof m.version === 'string' && m.version)
|
|
59
|
+
return m.version;
|
|
60
|
+
}
|
|
61
|
+
catch { }
|
|
62
|
+
} throw new Error(`未能读取 ${index.HB_SDK_PACKAGE_NAME} 当前版本号`); }
|
|
63
|
+
|
|
64
|
+
exports.getDoctorResult = getDoctorResult;
|
|
65
|
+
exports.runDoctorCommand = runDoctorCommand;
|
|
@@ -234,19 +234,19 @@ function requireArgument () {
|
|
|
234
234
|
|
|
235
235
|
var command = {};
|
|
236
236
|
|
|
237
|
-
const require$5 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
237
|
+
const require$5 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-De687C6-.cjs', document.baseURI).href)));
|
|
238
238
|
function __require$4() { return require$5("node:events"); }
|
|
239
239
|
|
|
240
|
-
const require$4 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
240
|
+
const require$4 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-De687C6-.cjs', document.baseURI).href)));
|
|
241
241
|
function __require$3() { return require$4("node:child_process"); }
|
|
242
242
|
|
|
243
|
-
const require$3 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
243
|
+
const require$3 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-De687C6-.cjs', document.baseURI).href)));
|
|
244
244
|
function __require$2() { return require$3("node:path"); }
|
|
245
245
|
|
|
246
|
-
const require$2 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
246
|
+
const require$2 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-De687C6-.cjs', document.baseURI).href)));
|
|
247
247
|
function __require$1() { return require$2("node:fs"); }
|
|
248
248
|
|
|
249
|
-
const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
249
|
+
const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-De687C6-.cjs', document.baseURI).href)));
|
|
250
250
|
function __require() { return require$1("node:process"); }
|
|
251
251
|
|
|
252
252
|
var help = {};
|
|
@@ -3883,10 +3883,6 @@ var envPaths = /*@__PURE__*/getDefaultExportFromCjs(envPathsExports);
|
|
|
3883
3883
|
|
|
3884
3884
|
const HB_SDK_PACKAGE_NAME = '@heybox/hb-sdk';
|
|
3885
3885
|
const HB_SDK_SKILL_NAME = 'hb-sdk';
|
|
3886
|
-
const HB_SDK_AGENT_SKILLS_BASE_URL = 'https://open.xiaoheihe.cn/agent-skills';
|
|
3887
|
-
const HB_SDK_SKILL_SOURCE = `${HB_SDK_AGENT_SKILLS_BASE_URL}/${HB_SDK_SKILL_NAME}`;
|
|
3888
|
-
const HB_SDK_SKILL_INDEX_URL = `${HB_SDK_AGENT_SKILLS_BASE_URL}/.well-known/agent-skills/index.json`;
|
|
3889
|
-
const HB_SDK_SKILL_INSTALL_COMMAND = `npx skills add ${HB_SDK_SKILL_SOURCE}`;
|
|
3890
3886
|
|
|
3891
3887
|
var ora$1 = {exports: {}};
|
|
3892
3888
|
|
|
@@ -13347,7 +13343,7 @@ function getPathname(pathWithQuery) {
|
|
|
13347
13343
|
}
|
|
13348
13344
|
|
|
13349
13345
|
const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
|
|
13350
|
-
const BUILT_CLI_VERSION = '0.8.0-alpha.
|
|
13346
|
+
const BUILT_CLI_VERSION = '0.8.0-alpha.3';
|
|
13351
13347
|
const PACKAGE_JSON_CANDIDATES = [
|
|
13352
13348
|
path.resolve(__dirname, '..', '..', 'package.json'),
|
|
13353
13349
|
path.resolve(__dirname, '..', 'package.json'),
|
|
@@ -13412,6 +13408,7 @@ function createCliProgram(overrides = {}) {
|
|
|
13412
13408
|
runDevCommand: defaultRunDevCommand,
|
|
13413
13409
|
runDoctorCommand: defaultRunDoctorCommand,
|
|
13414
13410
|
runRemoteCommand: defaultRunRemoteCommand,
|
|
13411
|
+
runSkillInstallCommand: defaultRunSkillInstallCommand,
|
|
13415
13412
|
...overrides,
|
|
13416
13413
|
};
|
|
13417
13414
|
const program = new Command();
|
|
@@ -13451,9 +13448,20 @@ function createCliProgram(overrides = {}) {
|
|
|
13451
13448
|
await handlers.runBuildCommand({}, { logger });
|
|
13452
13449
|
});
|
|
13453
13450
|
installRemoteCommands(program, handlers, resolveLogger);
|
|
13454
|
-
addVerboseOption(program.command('
|
|
13455
|
-
|
|
13456
|
-
|
|
13451
|
+
const skill = addVerboseOption(program.command('skill').description('管理 Agent Skill'));
|
|
13452
|
+
skill.command('install')
|
|
13453
|
+
.option('--global', '安装到用户级 Agent 目录')
|
|
13454
|
+
.option('--agent <agents...>', '指定 Agent')
|
|
13455
|
+
.option('--all-agents', '安装到所有检测到的 Agent')
|
|
13456
|
+
.option('--force', '覆盖已存在且被修改的 Skill')
|
|
13457
|
+
.action(async (options, command) => {
|
|
13458
|
+
const logger = resolveLogger(command);
|
|
13459
|
+
await handlers.runSkillInstallCommand({ ...options, logger });
|
|
13460
|
+
});
|
|
13461
|
+
addVerboseOption(program.command('doctor').description('诊断 hb-sdk 本地环境和 Agent Skill 版本').option('--json', '以 JSON 格式输出诊断结果')).action(async (...args) => {
|
|
13462
|
+
const command = readCommandFromActionArgs(args);
|
|
13463
|
+
const logger = resolveLogger(command);
|
|
13464
|
+
const result = await handlers.runDoctorCommand({ logger, json: Boolean(command?.opts().json) });
|
|
13457
13465
|
if (result.status !== 'SDK_MISMATCH') {
|
|
13458
13466
|
await handlers.printUpdateReminder({ logger });
|
|
13459
13467
|
}
|
|
@@ -13682,35 +13690,39 @@ function createCommandLoggerResolver(options) {
|
|
|
13682
13690
|
};
|
|
13683
13691
|
}
|
|
13684
13692
|
const defaultClearLoginStatus = async (...args) => {
|
|
13685
|
-
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13693
|
+
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-DolpqD8K.cjs'); });
|
|
13686
13694
|
return clearLoginStatus(...args);
|
|
13687
13695
|
};
|
|
13688
13696
|
const defaultLoginToHeybox = async (...args) => {
|
|
13689
|
-
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-
|
|
13697
|
+
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-DolpqD8K.cjs'); });
|
|
13690
13698
|
return loginToHeybox(...args);
|
|
13691
13699
|
};
|
|
13692
13700
|
const defaultPrintLoginStatus = async (...args) => {
|
|
13693
|
-
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13701
|
+
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-DolpqD8K.cjs'); });
|
|
13694
13702
|
return printLoginStatus(...args);
|
|
13695
13703
|
};
|
|
13696
13704
|
const defaultRunBuildCommand = async (...args) => {
|
|
13697
|
-
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-
|
|
13705
|
+
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-qWzAbpS7.cjs'); });
|
|
13698
13706
|
return runBuildCommand(...args);
|
|
13699
13707
|
};
|
|
13700
13708
|
const defaultRunCreateCommand = async (...args) => {
|
|
13701
|
-
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-
|
|
13709
|
+
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-PV5ua977.cjs'); });
|
|
13702
13710
|
return runCreateCommand(...args);
|
|
13703
13711
|
};
|
|
13704
13712
|
const defaultRunDevCommand = async (...args) => {
|
|
13705
|
-
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-
|
|
13713
|
+
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-CwKbAm_H.cjs'); }).then(function (n) { return n.dev; });
|
|
13706
13714
|
return runDevCommand(...args);
|
|
13707
13715
|
};
|
|
13708
13716
|
const defaultRunDoctorCommand = async (...args) => {
|
|
13709
|
-
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-
|
|
13717
|
+
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-tJUGOYrm.cjs'); });
|
|
13710
13718
|
return runDoctorCommand(...args);
|
|
13711
13719
|
};
|
|
13720
|
+
const defaultRunSkillInstallCommand = async (...args) => {
|
|
13721
|
+
const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-CM40_9WH.cjs'); });
|
|
13722
|
+
return runSkillInstallCommand(...args);
|
|
13723
|
+
};
|
|
13712
13724
|
const defaultRunRemoteCommand = async (...args) => {
|
|
13713
|
-
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-
|
|
13725
|
+
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-rIAQE_G2.cjs'); });
|
|
13714
13726
|
return runRemoteCommand(...args);
|
|
13715
13727
|
};
|
|
13716
13728
|
function resolveStandaloneLogger(options, verbose) {
|
|
@@ -13804,10 +13816,7 @@ function parseNonNegativeInteger(value) {
|
|
|
13804
13816
|
|
|
13805
13817
|
exports.CliError = CliError;
|
|
13806
13818
|
exports.HB_SDK_PACKAGE_NAME = HB_SDK_PACKAGE_NAME;
|
|
13807
|
-
exports.HB_SDK_SKILL_INDEX_URL = HB_SDK_SKILL_INDEX_URL;
|
|
13808
|
-
exports.HB_SDK_SKILL_INSTALL_COMMAND = HB_SDK_SKILL_INSTALL_COMMAND;
|
|
13809
13819
|
exports.HB_SDK_SKILL_NAME = HB_SDK_SKILL_NAME;
|
|
13810
|
-
exports.HB_SDK_SKILL_SOURCE = HB_SDK_SKILL_SOURCE;
|
|
13811
13820
|
exports.applyServiceTagIfNeeded = applyServiceTagIfNeeded;
|
|
13812
13821
|
exports.commonjsGlobal = commonjsGlobal;
|
|
13813
13822
|
exports.createCliLogger = createCliLogger;
|
|
@@ -11,8 +11,8 @@ var require$$0$4 = require('url');
|
|
|
11
11
|
var require$$0 = require('zlib');
|
|
12
12
|
var require$$0$1 = require('buffer');
|
|
13
13
|
var require$$1 = require('util');
|
|
14
|
-
var index = require('./index-
|
|
15
|
-
var dev = require('./dev-
|
|
14
|
+
var index = require('./index-De687C6-.cjs');
|
|
15
|
+
var dev = require('./dev-CwKbAm_H.cjs');
|
|
16
16
|
require('node:module');
|
|
17
17
|
require('node:fs');
|
|
18
18
|
require('node:fs/promises');
|
|
@@ -27,8 +27,8 @@ require('node:net');
|
|
|
27
27
|
require('node:crypto');
|
|
28
28
|
require('node:dns/promises');
|
|
29
29
|
require('node:http');
|
|
30
|
-
require('./context-
|
|
31
|
-
require('./session-
|
|
30
|
+
require('./context-CtS2Thp0.cjs');
|
|
31
|
+
require('./session-CzaM2Cq3.cjs');
|
|
32
32
|
require('fs');
|
|
33
33
|
require('constants');
|
|
34
34
|
require('./runtime-permission-env-CjsCe5bp.cjs');
|
|
@@ -40,7 +40,8 @@ require('node:buffer');
|
|
|
40
40
|
require('node:url');
|
|
41
41
|
require('node:util');
|
|
42
42
|
require('node:child_process');
|
|
43
|
-
require('./project-vite-
|
|
43
|
+
require('./project-vite-1rvkK-M8.cjs');
|
|
44
|
+
require('./version-Bz-AfXQU.cjs');
|
|
44
45
|
|
|
45
46
|
var bufferUtil = {exports: {}};
|
|
46
47
|
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
var promises = require('node:readline/promises');
|
|
4
4
|
var node_crypto = require('node:crypto');
|
|
5
5
|
var node_http = require('node:http');
|
|
6
|
-
var session = require('./session-
|
|
6
|
+
var session = require('./session-CzaM2Cq3.cjs');
|
|
7
7
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-De687C6-.cjs');
|
|
9
9
|
require('node:path');
|
|
10
10
|
require('fs');
|
|
11
11
|
require('constants');
|
|
@@ -5,7 +5,7 @@ var fs$1 = require('node:fs/promises');
|
|
|
5
5
|
var node_module = require('node:module');
|
|
6
6
|
var path = require('node:path');
|
|
7
7
|
var node_url = require('node:url');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-De687C6-.cjs');
|
|
9
9
|
|
|
10
10
|
function findProjectRoot(startDir) {
|
|
11
11
|
let current = path.resolve(startDir);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var promises = require('node:readline/promises');
|
|
4
|
-
var index = require('./index-
|
|
5
|
-
var session = require('./session-
|
|
4
|
+
var index = require('./index-De687C6-.cjs');
|
|
5
|
+
var session = require('./session-CzaM2Cq3.cjs');
|
|
6
6
|
var childProcess = require('node:child_process');
|
|
7
7
|
var fs = require('node:fs');
|
|
8
8
|
var fs$1 = require('node:fs/promises');
|
|
@@ -10,7 +10,7 @@ var path = require('node:path');
|
|
|
10
10
|
var runtimePermissionEnv = require('./runtime-permission-env-CjsCe5bp.cjs');
|
|
11
11
|
var runtimeGate = require('./runtime-gate-DFjw66kF.cjs');
|
|
12
12
|
var node_crypto = require('node:crypto');
|
|
13
|
-
var context = require('./context-
|
|
13
|
+
var context = require('./context-CtS2Thp0.cjs');
|
|
14
14
|
require('node:module');
|
|
15
15
|
require('path');
|
|
16
16
|
require('os');
|
|
@@ -271,7 +271,7 @@ function createDefaultCosClient(uploadToken, COS) {
|
|
|
271
271
|
};
|
|
272
272
|
}
|
|
273
273
|
async function loadCosConstructor() {
|
|
274
|
-
const cosModule = await Promise.resolve().then(function () { return require('./index-
|
|
274
|
+
const cosModule = await Promise.resolve().then(function () { return require('./index-DVuD75Hr.cjs'); }).then(function (n) { return n.index; });
|
|
275
275
|
return cosModule.default;
|
|
276
276
|
}
|
|
277
277
|
function formatSize(bytes) {
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var path = require('node:path');
|
|
4
|
+
var version = require('./version-Bz-AfXQU.cjs');
|
|
5
|
+
var childProcess = require('node:child_process');
|
|
6
|
+
var fs = require('node:fs/promises');
|
|
7
|
+
var index = require('./index-De687C6-.cjs');
|
|
8
|
+
require('node:module');
|
|
9
|
+
require('node:fs');
|
|
10
|
+
require('path');
|
|
11
|
+
require('os');
|
|
12
|
+
require('readline');
|
|
13
|
+
require('tty');
|
|
14
|
+
require('assert');
|
|
15
|
+
require('events');
|
|
16
|
+
require('stream');
|
|
17
|
+
require('buffer');
|
|
18
|
+
require('util');
|
|
19
|
+
|
|
20
|
+
function installSkill(options) {
|
|
21
|
+
const binary = require.resolve('skills/bin/cli.mjs');
|
|
22
|
+
const args = ['add', path.join(options.packageRoot, 'skill'), '--copy'];
|
|
23
|
+
if (options.global)
|
|
24
|
+
args.push('--global');
|
|
25
|
+
if (options.allAgents)
|
|
26
|
+
args.push('--agent', '*');
|
|
27
|
+
else if (options.agents?.length)
|
|
28
|
+
args.push('--agent', ...options.agents);
|
|
29
|
+
if (options.force)
|
|
30
|
+
args.push('--force');
|
|
31
|
+
const env = { ...process.env, ...options.env, DISABLE_TELEMETRY: '1', DO_NOT_TRACK: '1' };
|
|
32
|
+
const run = options.spawnImpl ?? childProcess.spawn;
|
|
33
|
+
return new Promise((resolve, reject) => {
|
|
34
|
+
const child = run(process.execPath, [binary, ...args], { cwd: options.cwd, env, stdio: 'inherit' });
|
|
35
|
+
child.on('error', reject);
|
|
36
|
+
child.on('close', (code) => resolve({ code: code ?? 1 }));
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async function findProjectPackageJson(cwd = process.cwd()) {
|
|
41
|
+
let current = path.resolve(cwd);
|
|
42
|
+
while (true) {
|
|
43
|
+
const candidate = path.join(current, 'package.json');
|
|
44
|
+
try {
|
|
45
|
+
await fs.access(candidate);
|
|
46
|
+
return candidate;
|
|
47
|
+
}
|
|
48
|
+
catch { /* continue */ }
|
|
49
|
+
const parent = path.dirname(current);
|
|
50
|
+
if (parent === current)
|
|
51
|
+
return undefined;
|
|
52
|
+
current = parent;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async function verifyProjectSdk(cwd, version) {
|
|
56
|
+
const file = await findProjectPackageJson(cwd);
|
|
57
|
+
if (!file)
|
|
58
|
+
throw new Error('未找到项目 package.json,请在项目目录执行');
|
|
59
|
+
const pkg = JSON.parse(await fs.readFile(file, 'utf8'));
|
|
60
|
+
const declared = pkg.dependencies?.['@heybox/hb-sdk'] ?? pkg.devDependencies?.['@heybox/hb-sdk'];
|
|
61
|
+
if (!declared)
|
|
62
|
+
throw new Error('项目缺少 @heybox/hb-sdk 依赖');
|
|
63
|
+
if (declared !== version && !String(declared).includes(version)) {
|
|
64
|
+
throw new Error(`项目 @heybox/hb-sdk 版本 ${declared} 与 CLI ${version} 不一致`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async function runSkillInstallCommand(options = {}) {
|
|
69
|
+
if (options.agent?.length && options.allAgents)
|
|
70
|
+
throw new Error('--agent 与 --all-agents 互斥');
|
|
71
|
+
const logger = options.logger ?? index.createCliLogger();
|
|
72
|
+
const packageRoot = options.packageRoot ?? path.resolve(__dirname, '../../..');
|
|
73
|
+
const cwd = options.cwd ?? process.cwd();
|
|
74
|
+
if (!options.global)
|
|
75
|
+
await verifyProjectSdk(cwd, version.HB_SDK_VERSION);
|
|
76
|
+
const result = await installSkill({ packageRoot, cwd, global: options.global, agents: options.agent, allAgents: options.allAgents, force: options.force });
|
|
77
|
+
if (result.code !== 0)
|
|
78
|
+
throw new Error(`Skill 安装失败(退出码 ${result.code})`);
|
|
79
|
+
logger.success('hb-sdk Skill 安装完成');
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
exports.runSkillInstallCommand = runSkillInstallCommand;
|
package/dist/cli.cjs
CHANGED
package/dist/index.cjs.js
CHANGED
|
@@ -785,7 +785,7 @@ function createMessageId() {
|
|
|
785
785
|
/** 构建时替换为当前发布包的实际版本。 */
|
|
786
786
|
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
787
787
|
? undefined
|
|
788
|
-
: '0.8.0-alpha.
|
|
788
|
+
: '0.8.0-alpha.3';
|
|
789
789
|
|
|
790
790
|
const DEFAULT_TIMEOUT = 10000;
|
|
791
791
|
const HANDSHAKE_RETRY_INTERVAL = 250;
|
package/dist/index.esm.js
CHANGED
|
@@ -781,7 +781,7 @@ function createMessageId() {
|
|
|
781
781
|
/** 构建时替换为当前发布包的实际版本。 */
|
|
782
782
|
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
783
783
|
? undefined
|
|
784
|
-
: '0.8.0-alpha.
|
|
784
|
+
: '0.8.0-alpha.3';
|
|
785
785
|
|
|
786
786
|
const DEFAULT_TIMEOUT = 10000;
|
|
787
787
|
const HANDSHAKE_RETRY_INTERVAL = 250;
|
package/dist/vite.cjs.js
CHANGED