@huyuan-ai/cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +99 -0
- package/dist/cli/program.d.ts +3 -0
- package/dist/cli/program.d.ts.map +1 -0
- package/dist/cli/program.js +19 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/commands/install.d.ts +2 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +75 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +29 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/install.d.ts +4 -0
- package/dist/core/install.d.ts.map +1 -0
- package/dist/core/install.js +89 -0
- package/dist/core/install.js.map +1 -0
- package/dist/core/login.d.ts +3 -0
- package/dist/core/login.d.ts.map +1 -0
- package/dist/core/login.js +11 -0
- package/dist/core/login.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/opencli/bootstrap.d.ts +8 -0
- package/dist/integrations/opencli/bootstrap.d.ts.map +1 -0
- package/dist/integrations/opencli/bootstrap.js +20 -0
- package/dist/integrations/opencli/bootstrap.js.map +1 -0
- package/dist/integrations/opencli/commands/doubao-ask-with-citations.d.ts +10 -0
- package/dist/integrations/opencli/commands/doubao-ask-with-citations.d.ts.map +1 -0
- package/dist/integrations/opencli/commands/doubao-ask-with-citations.js +323 -0
- package/dist/integrations/opencli/commands/doubao-ask-with-citations.js.map +1 -0
- package/dist/integrations/opencli/execute-registry-command.d.ts +11 -0
- package/dist/integrations/opencli/execute-registry-command.d.ts.map +1 -0
- package/dist/integrations/opencli/execute-registry-command.js +45 -0
- package/dist/integrations/opencli/execute-registry-command.js.map +1 -0
- package/dist/sites/doubao/ask-with-citations.d.ts +14 -0
- package/dist/sites/doubao/ask-with-citations.d.ts.map +1 -0
- package/dist/sites/doubao/ask-with-citations.js +21 -0
- package/dist/sites/doubao/ask-with-citations.js.map +1 -0
- package/dist/sites/doubao/ask.d.ts +11 -0
- package/dist/sites/doubao/ask.d.ts.map +1 -0
- package/dist/sites/doubao/ask.js +18 -0
- package/dist/sites/doubao/ask.js.map +1 -0
- package/dist/sites/doubao/register.d.ts +4 -0
- package/dist/sites/doubao/register.d.ts.map +1 -0
- package/dist/sites/doubao/register.js +30 -0
- package/dist/sites/doubao/register.js.map +1 -0
- package/dist/utils/config.d.ts +23 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +41 -0
- package/dist/utils/config.js.map +1 -0
- package/package.json +40 -0
- package/vendor/opencli/README.md +288 -0
package/README.md
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# `@huyuan-ai/cli`
|
|
2
|
+
|
|
3
|
+
企业场景下的 AI 助手与技能管理命令行工具。**npm 包名**为 **`@huyuan-ai/cli`**,安装后**命令行入口**为 **`huyuan-ai-cli`**(见 `package.json` 的 `bin`)。集成 [OpenCLI](https://github.com/jackwener/opencli)(Git Submodule)用于浏览器侧能力(如豆包对话),并通过自研 **Token Gateway** 与 **`npx skills`** 安装私有技能。
|
|
4
|
+
|
|
5
|
+
## 从 npm 全局安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @huyuan-ai/cli
|
|
9
|
+
huyuan-ai-cli --help
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## 功能概览
|
|
13
|
+
|
|
14
|
+
- **登录**:将企业授权 Key 写入 `~/.huyuan-ai/config.json`
|
|
15
|
+
- **安装技能**:用 Key 向网关换取短期令牌后,执行 `npx skills add` 拉取私有仓库技能
|
|
16
|
+
- **豆包对话**:`doubao ask` 在 OpenCLI 已加载的 registry 上执行 `doubao/ask`(需已登录,且依赖 OpenCLI 浏览器/Bridge 环境)
|
|
17
|
+
|
|
18
|
+
更细的架构、目录约定与开发约束见 **[AGENTS.md](./AGENTS.md)**。
|
|
19
|
+
|
|
20
|
+
## 环境要求
|
|
21
|
+
|
|
22
|
+
- **Node.js**:建议 ≥ 20(与 OpenCLI 子模块一致)
|
|
23
|
+
- **包管理**:推荐 **pnpm**(仓库已声明 `packageManager`)
|
|
24
|
+
|
|
25
|
+
## 从源码构建与运行
|
|
26
|
+
|
|
27
|
+
1. 克隆并初始化子模块:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
git clone --recurse-submodules <repo-url>
|
|
31
|
+
cd huyuan-ai-cli
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
若已克隆未带子模块:`git submodule update --init --recursive`
|
|
35
|
+
|
|
36
|
+
2. 安装主项目依赖:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pnpm install
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
3. **一键构建**(先安装并构建 `vendor/opencli`,再 `tsc` 编译本仓库;发布前也请执行此步):
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pnpm run build
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
若仅改本仓库 `src/`、且子模块 `dist/` 已是最新,可改用 `pnpm run build:tsc` 只跑 TypeScript,加快迭代。
|
|
49
|
+
|
|
50
|
+
4. 运行 CLI:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
node dist/index.js --help
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
全局链接(可选):`pnpm link --global`,之后可直接使用 `huyuan-ai-cli`。
|
|
57
|
+
|
|
58
|
+
## 常用命令
|
|
59
|
+
|
|
60
|
+
| 命令 | 说明 |
|
|
61
|
+
|------|------|
|
|
62
|
+
| `huyuan-ai-cli login <key>` | 保存企业授权 Key |
|
|
63
|
+
| `huyuan-ai-cli install <skill>` | 从私有技能库安装(需配置网关环境变量) |
|
|
64
|
+
| `huyuan-ai-cli doubao ask <prompt>` | 豆包对话(需已 `login`) |
|
|
65
|
+
|
|
66
|
+
查看子命令帮助:`huyuan-ai-cli doubao ask --help`
|
|
67
|
+
|
|
68
|
+
## 环境变量(安装技能)
|
|
69
|
+
|
|
70
|
+
| 变量 | 说明 |
|
|
71
|
+
|------|------|
|
|
72
|
+
| `HUYUAN_TOKEN_GATEWAY_URL` | Token Gateway 根地址(如 `https://your-app.vercel.app`),详见 [src/constants.ts](src/constants.ts) |
|
|
73
|
+
| `HUYUAN_SKILL_GITHUB_ORG` | 可选,默认 `WeDAOLabs` |
|
|
74
|
+
|
|
75
|
+
## 脚本
|
|
76
|
+
|
|
77
|
+
| 脚本 | 说明 |
|
|
78
|
+
|------|------|
|
|
79
|
+
| `pnpm run build` | 构建 `vendor/opencli`(`npm install` + `npm run build`)后 `tsc` 编译到 `dist/` |
|
|
80
|
+
| `pnpm run build:tsc` | 仅 `tsc`(子模块已有 `dist/` 时用) |
|
|
81
|
+
| `pnpm run typecheck` | `tsc --noEmit` |
|
|
82
|
+
|
|
83
|
+
## 仓库结构(摘要)
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
src/
|
|
87
|
+
index.ts # 入口
|
|
88
|
+
cli/program.ts # Commander 装配
|
|
89
|
+
core/ # 登录、安装等平台能力
|
|
90
|
+
sites/doubao/ # 豆包子命令(可扩展其他 sites)
|
|
91
|
+
integrations/opencli/ # OpenCLI bootstrap 与 registry 执行封装
|
|
92
|
+
utils/config.ts # 本地配置
|
|
93
|
+
constants.ts # 网关等常量与环境变量
|
|
94
|
+
vendor/opencli/ # OpenCLI 子模块(需单独 build)
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 许可证
|
|
98
|
+
|
|
99
|
+
ISC(见 [package.json](package.json))。
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,aAAa,IAAI,OAAO,CAavC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { registerInstall } from '../core/install.js';
|
|
4
|
+
import { registerLogin } from '../core/login.js';
|
|
5
|
+
import { registerDoubao } from '../sites/doubao/register.js';
|
|
6
|
+
const pkg = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf-8'));
|
|
7
|
+
export function createProgram() {
|
|
8
|
+
const program = new Command();
|
|
9
|
+
program
|
|
10
|
+
.name('huyuan-ai-cli')
|
|
11
|
+
.description('Huyuan AI 命令行工具')
|
|
12
|
+
.version(pkg.version)
|
|
13
|
+
.enablePositionalOptions();
|
|
14
|
+
registerLogin(program);
|
|
15
|
+
registerInstall(program);
|
|
16
|
+
registerDoubao(program);
|
|
17
|
+
return program;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAC/C,CAAC;AAEzB,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,eAAe,CAAC;SACrB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;SACpB,uBAAuB,EAAE,CAAC;IAE7B,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,cAAc,CAAC,OAAO,CAAC,CAAC;IAExB,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AA2BA,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DnE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { execa } from 'execa';
|
|
3
|
+
import { getSkillGithubOrg, getTokenRequestUrl } from '../constants.js';
|
|
4
|
+
import { auth } from '../utils/config.js';
|
|
5
|
+
const SKILL_NAME_PATTERN = /^[a-zA-Z0-9._-]+$/;
|
|
6
|
+
const SKILL_NAME_MAX_LEN = 100;
|
|
7
|
+
function assertValidSkillName(skillName) {
|
|
8
|
+
if (!skillName || skillName.length > SKILL_NAME_MAX_LEN) {
|
|
9
|
+
throw new Error(`无效的技能名称:长度应在 1~${SKILL_NAME_MAX_LEN} 之间`);
|
|
10
|
+
}
|
|
11
|
+
if (!SKILL_NAME_PATTERN.test(skillName)) {
|
|
12
|
+
throw new Error('无效的技能名称:仅允许字母、数字、点、下划线与连字符');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function isTokenPayload(data) {
|
|
16
|
+
return (typeof data === 'object' &&
|
|
17
|
+
data !== null &&
|
|
18
|
+
'token' in data &&
|
|
19
|
+
typeof data.token === 'string' &&
|
|
20
|
+
data.token.length > 0);
|
|
21
|
+
}
|
|
22
|
+
export async function installSkill(skillName) {
|
|
23
|
+
assertValidSkillName(skillName);
|
|
24
|
+
const entKey = auth.getEnterpriseKey();
|
|
25
|
+
if (!entKey) {
|
|
26
|
+
throw new Error("未发现授权信息,请先执行 hy login <your-key>");
|
|
27
|
+
}
|
|
28
|
+
const tokenUrl = getTokenRequestUrl();
|
|
29
|
+
const org = getSkillGithubOrg();
|
|
30
|
+
console.log('正在连接 Huyuan 授权中心...');
|
|
31
|
+
let token;
|
|
32
|
+
try {
|
|
33
|
+
const { data, status } = await axios.get(tokenUrl, {
|
|
34
|
+
params: { key: entKey },
|
|
35
|
+
timeout: 15_000,
|
|
36
|
+
validateStatus: () => true,
|
|
37
|
+
});
|
|
38
|
+
if (status === 401 || status === 403) {
|
|
39
|
+
throw new Error('授权失败:企业 Key 已过期或无权访问此技能');
|
|
40
|
+
}
|
|
41
|
+
if (status < 200 || status >= 300) {
|
|
42
|
+
throw new Error(`授权中心请求失败(HTTP ${String(status)})`);
|
|
43
|
+
}
|
|
44
|
+
if (!isTokenPayload(data)) {
|
|
45
|
+
throw new Error('授权中心返回无效令牌');
|
|
46
|
+
}
|
|
47
|
+
token = data.token;
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
if (axios.isAxiosError(err)) {
|
|
51
|
+
const s = err.response?.status;
|
|
52
|
+
if (s === 401 || s === 403) {
|
|
53
|
+
throw new Error('授权失败:企业 Key 已过期或无权访问此技能');
|
|
54
|
+
}
|
|
55
|
+
if (s !== undefined) {
|
|
56
|
+
throw new Error(`授权中心请求失败(HTTP ${String(s)})`);
|
|
57
|
+
}
|
|
58
|
+
throw new Error(`无法连接授权中心:${err.message}`);
|
|
59
|
+
}
|
|
60
|
+
throw err;
|
|
61
|
+
}
|
|
62
|
+
const authenticatedUrl = `https://x-access-token:${encodeURIComponent(token)}@github.com/${org}/${skillName}.git`;
|
|
63
|
+
console.log(`正在安装私有技能: ${skillName}...`);
|
|
64
|
+
try {
|
|
65
|
+
await execa('npx', ['skills', 'add', authenticatedUrl, '--yes'], {
|
|
66
|
+
stdio: 'inherit',
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
71
|
+
throw new Error(`安装过程失败: ${msg}`);
|
|
72
|
+
}
|
|
73
|
+
console.log(`技能 ${skillName} 已成功安装至本地。`);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** 技能仓库所在 GitHub 组织(仓库名为 `${org}/${skillName}`) */
|
|
2
|
+
export declare const DEFAULT_SKILL_GITHUB_ORG = "WeDAOLabs";
|
|
3
|
+
/**
|
|
4
|
+
* 解析用于 GET 临时安装令牌的完整 URL(通常为 `{base}/api/token`)。
|
|
5
|
+
* @throws 未设置 `HUYUAN_TOKEN_GATEWAY_URL` 时
|
|
6
|
+
*/
|
|
7
|
+
export declare function getTokenRequestUrl(): string;
|
|
8
|
+
export declare function getSkillGithubOrg(): string;
|
|
9
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,eAAO,MAAM,wBAAwB,cAAc,CAAC;AAUpD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAY3C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** 技能仓库所在 GitHub 组织(仓库名为 `${org}/${skillName}`) */
|
|
2
|
+
export const DEFAULT_SKILL_GITHUB_ORG = 'WeDAOLabs';
|
|
3
|
+
/**
|
|
4
|
+
* 部署在 Vercel 的 Token Gateway 根地址,不含尾斜杠。
|
|
5
|
+
* 例:`https://your-project.vercel.app`
|
|
6
|
+
*
|
|
7
|
+
* 若已配置为完整 token 端点且以 `/api/token` 结尾,将原样使用,不再拼接路径。
|
|
8
|
+
*/
|
|
9
|
+
const envGateway = () => process.env.HUYUAN_TOKEN_GATEWAY_URL?.trim();
|
|
10
|
+
/**
|
|
11
|
+
* 解析用于 GET 临时安装令牌的完整 URL(通常为 `{base}/api/token`)。
|
|
12
|
+
* @throws 未设置 `HUYUAN_TOKEN_GATEWAY_URL` 时
|
|
13
|
+
*/
|
|
14
|
+
export function getTokenRequestUrl() {
|
|
15
|
+
const raw = envGateway();
|
|
16
|
+
if (!raw) {
|
|
17
|
+
throw new Error('未配置授权网关:请设置环境变量 HUYUAN_TOKEN_GATEWAY_URL(例如 https://your-app.vercel.app)');
|
|
18
|
+
}
|
|
19
|
+
if (/\/api\/token\/?$/i.test(raw)) {
|
|
20
|
+
return raw.replace(/\/$/, '');
|
|
21
|
+
}
|
|
22
|
+
const base = raw.replace(/\/$/, '');
|
|
23
|
+
return `${base}/api/token`;
|
|
24
|
+
}
|
|
25
|
+
export function getSkillGithubOrg() {
|
|
26
|
+
const o = process.env.HUYUAN_SKILL_GITHUB_ORG?.trim();
|
|
27
|
+
return o && o.length > 0 ? o : DEFAULT_SKILL_GITHUB_ORG;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,MAAM,CAAC,MAAM,wBAAwB,GAAG,WAAW,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC;AAEtE;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;IACJ,CAAC;IACD,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,IAAI,YAAY,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/core/install.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BzC,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DnE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAYtD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { execa } from 'execa';
|
|
3
|
+
import { getSkillGithubOrg, getTokenRequestUrl } from '../constants.js';
|
|
4
|
+
import { auth } from '../utils/config.js';
|
|
5
|
+
const SKILL_NAME_PATTERN = /^[a-zA-Z0-9._-]+$/;
|
|
6
|
+
const SKILL_NAME_MAX_LEN = 100;
|
|
7
|
+
function assertValidSkillName(skillName) {
|
|
8
|
+
if (!skillName || skillName.length > SKILL_NAME_MAX_LEN) {
|
|
9
|
+
throw new Error(`无效的技能名称:长度应在 1~${SKILL_NAME_MAX_LEN} 之间`);
|
|
10
|
+
}
|
|
11
|
+
if (!SKILL_NAME_PATTERN.test(skillName)) {
|
|
12
|
+
throw new Error('无效的技能名称:仅允许字母、数字、点、下划线与连字符');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function isTokenPayload(data) {
|
|
16
|
+
return (typeof data === 'object' &&
|
|
17
|
+
data !== null &&
|
|
18
|
+
'token' in data &&
|
|
19
|
+
typeof data.token === 'string' &&
|
|
20
|
+
data.token.length > 0);
|
|
21
|
+
}
|
|
22
|
+
export async function installSkill(skillName) {
|
|
23
|
+
assertValidSkillName(skillName);
|
|
24
|
+
const entKey = auth.getEnterpriseKey();
|
|
25
|
+
if (!entKey) {
|
|
26
|
+
throw new Error("未发现授权信息,请先执行 huyuan-ai-cli login <your-key>");
|
|
27
|
+
}
|
|
28
|
+
const tokenUrl = getTokenRequestUrl();
|
|
29
|
+
const org = getSkillGithubOrg();
|
|
30
|
+
console.log('正在连接 Huyuan 授权中心...');
|
|
31
|
+
let token;
|
|
32
|
+
try {
|
|
33
|
+
const { data, status } = await axios.get(tokenUrl, {
|
|
34
|
+
params: { key: entKey },
|
|
35
|
+
timeout: 15_000,
|
|
36
|
+
validateStatus: () => true,
|
|
37
|
+
});
|
|
38
|
+
if (status === 401 || status === 403) {
|
|
39
|
+
throw new Error('授权失败:企业 Key 已过期或无权访问此技能');
|
|
40
|
+
}
|
|
41
|
+
if (status < 200 || status >= 300) {
|
|
42
|
+
throw new Error(`授权中心请求失败(HTTP ${String(status)})`);
|
|
43
|
+
}
|
|
44
|
+
if (!isTokenPayload(data)) {
|
|
45
|
+
throw new Error('授权中心返回无效令牌');
|
|
46
|
+
}
|
|
47
|
+
token = data.token;
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
if (axios.isAxiosError(err)) {
|
|
51
|
+
const s = err.response?.status;
|
|
52
|
+
if (s === 401 || s === 403) {
|
|
53
|
+
throw new Error('授权失败:企业 Key 已过期或无权访问此技能');
|
|
54
|
+
}
|
|
55
|
+
if (s !== undefined) {
|
|
56
|
+
throw new Error(`授权中心请求失败(HTTP ${String(s)})`);
|
|
57
|
+
}
|
|
58
|
+
throw new Error(`无法连接授权中心:${err.message}`);
|
|
59
|
+
}
|
|
60
|
+
throw err;
|
|
61
|
+
}
|
|
62
|
+
const authenticatedUrl = `https://x-access-token:${encodeURIComponent(token)}@github.com/${org}/${skillName}.git`;
|
|
63
|
+
console.log(`正在安装私有技能: ${skillName}...`);
|
|
64
|
+
try {
|
|
65
|
+
await execa('npx', ['skills', 'add', authenticatedUrl, '--yes'], {
|
|
66
|
+
stdio: 'inherit',
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
71
|
+
throw new Error(`安装过程失败: ${msg}`);
|
|
72
|
+
}
|
|
73
|
+
console.log(`技能 ${skillName} 已成功安装至本地。`);
|
|
74
|
+
}
|
|
75
|
+
export function registerInstall(program) {
|
|
76
|
+
program
|
|
77
|
+
.command('install <skill>')
|
|
78
|
+
.description('从企业私有库同步技能')
|
|
79
|
+
.action(async (skill) => {
|
|
80
|
+
try {
|
|
81
|
+
await installSkill(skill);
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
85
|
+
process.exitCode = 1;
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/core/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/core/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQpD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { auth } from '../utils/config.js';
|
|
2
|
+
export function registerLogin(program) {
|
|
3
|
+
program
|
|
4
|
+
.command('login <key>')
|
|
5
|
+
.description('使用企业授权码登录')
|
|
6
|
+
.action((key) => {
|
|
7
|
+
auth.setEnterpriseKey(key);
|
|
8
|
+
console.log('身份认证成功。');
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/core/login.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,WAAW,CAAC;SACxB,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE;QACtB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createProgram } from './cli/program.js';
|
|
3
|
+
import { bootstrapOpencli } from './integrations/opencli/bootstrap.js';
|
|
4
|
+
async function main() {
|
|
5
|
+
await bootstrapOpencli();
|
|
6
|
+
const program = createProgram();
|
|
7
|
+
await program.parseAsync(process.argv);
|
|
8
|
+
}
|
|
9
|
+
main().catch((err) => {
|
|
10
|
+
console.error(err instanceof Error ? err.message : err);
|
|
11
|
+
process.exitCode = 1;
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAEvE,KAAK,UAAU,IAAI;IACjB,MAAM,gBAAgB,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** 须先在 vendor/opencli 执行构建,生成 dist/clis 与 dist/cli-manifest.json */
|
|
2
|
+
export declare const builtinClisDir: string;
|
|
3
|
+
/**
|
|
4
|
+
* 初始化 opencli:网络代理、用户 CLI shim、命令发现(manifest + ~/.opencli/clis)。
|
|
5
|
+
* 须在解析 CLI 参数前调用一次。
|
|
6
|
+
*/
|
|
7
|
+
export declare function bootstrapOpencli(): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/integrations/opencli/bootstrap.ts"],"names":[],"mappings":"AAQA,oEAAoE;AACpE,eAAO,MAAM,cAAc,QAAsC,CAAC;AAElE;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAMtD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { discoverClis, ensureUserCliCompatShims, USER_CLIS_DIR } from '../../../vendor/opencli/dist/discovery.js';
|
|
4
|
+
import { installNodeNetwork } from '../../../vendor/opencli/dist/node-network.js';
|
|
5
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
const opencliRoot = path.join(__dirname, '../../../vendor/opencli');
|
|
7
|
+
/** 须先在 vendor/opencli 执行构建,生成 dist/clis 与 dist/cli-manifest.json */
|
|
8
|
+
export const builtinClisDir = path.join(opencliRoot, 'dist/clis');
|
|
9
|
+
/**
|
|
10
|
+
* 初始化 opencli:网络代理、用户 CLI shim、命令发现(manifest + ~/.opencli/clis)。
|
|
11
|
+
* 须在解析 CLI 参数前调用一次。
|
|
12
|
+
*/
|
|
13
|
+
export async function bootstrapOpencli() {
|
|
14
|
+
installNodeNetwork();
|
|
15
|
+
await ensureUserCliCompatShims();
|
|
16
|
+
await discoverClis(builtinClisDir, USER_CLIS_DIR);
|
|
17
|
+
// 内置扩展:注册 `doubao/ask-with-citations`(不改 vendor/opencli 源码)
|
|
18
|
+
await import('./commands/doubao-ask-with-citations.js');
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/integrations/opencli/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAClH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAElF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;AAEpE,oEAAoE;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAElE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,kBAAkB,EAAE,CAAC;IACrB,MAAM,wBAAwB,EAAE,CAAC;IACjC,MAAM,YAAY,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAClD,4DAA4D;IAC5D,MAAM,MAAM,CAAC,yCAAyC,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doubao-ask-with-citations.d.ts","sourceRoot":"","sources":["../../../../src/integrations/opencli/commands/doubao-ask-with-citations.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B"}
|