@chatbi-v/cli 2.0.1 → 2.0.2
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 +45 -0
- package/dist/bench-ACSHVGHE.mjs +77 -0
- package/dist/build-UB4D3WNI.mjs +11 -0
- package/dist/chunk-4OD6C56P.mjs +89 -0
- package/dist/chunk-7A54IJI5.mjs +6368 -0
- package/dist/chunk-LJFX6MNO.mjs +255 -0
- package/dist/chunk-SBGVKO4C.mjs +2255 -0
- package/dist/chunk-TX5M36S5.mjs +55 -0
- package/dist/chunk-V7IEPMC4.mjs +52 -0
- package/dist/chunk-WCPZB47I.mjs +262 -0
- package/dist/chunk-WIVHOK75.mjs +5292 -0
- package/dist/chunk-Y24V4GQG.mjs +9577 -0
- package/dist/commands/add.js +182 -0
- package/dist/commands/bench.js +100 -0
- package/dist/commands/build.js +290 -0
- package/dist/commands/dev.js +8 -0
- package/dist/commands/discover.js +25 -0
- package/dist/commands/doctor.js +231 -0
- package/dist/commands/fetch.js +41 -0
- package/dist/commands/gl.js +151 -0
- package/dist/commands/init.js +253 -0
- package/dist/commands/install.js +85 -0
- package/dist/commands/ls.js +46 -0
- package/dist/commands/sync.js +78 -0
- package/dist/commands/use.js +31 -0
- package/dist/config.js +70 -0
- package/dist/corekit.js +370 -0
- package/dist/execa-METROS6Z.mjs +17 -0
- package/dist/fetch-7X2UFWIV.mjs +10 -0
- package/dist/index.cjs +27278 -0
- package/dist/index.js +193 -23981
- package/dist/index.mjs +2769 -0
- package/dist/init-QFRFYEA5.mjs +12 -0
- package/dist/sandbox.js +522 -0
- package/dist/sync-7HPKGVFY.mjs +11 -0
- package/dist/utils.js +99 -0
- package/package.json +4 -3
- package/templates/app/.env.hbs +2 -2
- package/templates/app/README.md.hbs +29 -11
- package/templates/app/chatbi.config.ts.hbs +10 -33
- package/templates/app/index.html.hbs +1 -1
- package/templates/app/package.json.hbs +12 -14
- package/templates/app/postcss.config.cjs.hbs +5 -1
- package/templates/app/src/App.tsx.hbs +66 -36
- package/templates/app/src/components/GlobalSettingsModal.tsx.hbs +11 -1
- package/templates/app/src/hooks/useAppRoutes.ts.hbs +3 -6
- package/templates/app/src/hooks/usePluginLoader.ts.hbs +54 -7
- package/templates/app/src/hooks/usePluginStateSync.ts.hbs +81 -0
- package/templates/app/src/hooks/useThemeSync.ts.hbs +25 -74
- package/templates/app/src/layouts/MainContent.tsx.hbs +1 -1
- package/templates/app/src/layouts/SidebarNav.tsx.hbs +15 -14
- package/templates/app/src/main.tsx.hbs +2 -9
- package/templates/app/src/providers/AppProviders.tsx.hbs +2 -0
- package/templates/app/src/stores/useSessionStore.ts.hbs +1 -1
- package/templates/app/src/stores/useUIStore.ts.hbs +22 -3
- package/templates/app/src/vite-env.d.ts.hbs +1 -0
- package/templates/app/tailwind.config.cjs.hbs +26 -7
- package/templates/app/tsconfig.json.hbs +2 -5
- package/templates/app/vite.config.ts.hbs +67 -52
- package/templates/monorepo/package.json.hbs +1 -1
- package/templates/plugin/README.md.hbs +36 -0
- package/templates/plugin/package.json.hbs +26 -21
- package/templates/plugin/src/api/index.ts.hbs +3 -0
- package/templates/plugin/src/components/MainView.tsx.hbs +12 -0
- package/templates/plugin/src/index.tsx.hbs +39 -72
- package/templates/plugin/tsconfig.json.hbs +4 -15
- package/templates/app/src/services/api/modules/auth.ts.hbs +0 -18
package/README.md
CHANGED
|
@@ -2,6 +2,44 @@
|
|
|
2
2
|
|
|
3
3
|
> ChatBI-V 统一开发工具。基于 **沙箱 (Sandbox)** 与 **零显式依赖 (Zero-Install)** 架构设计,助力开发者快速构建、预览和部署 ChatBI 插件与应用。
|
|
4
4
|
|
|
5
|
+
## 模块功能说明
|
|
6
|
+
|
|
7
|
+
- **项目初始化**: 快速生成 App、Plugin 或 Monorepo 模板。
|
|
8
|
+
- **环境编排**: 自动管理内核版本,支持项目级版本锁定。
|
|
9
|
+
- **开发预览**: 内置热更新开发服务器,支持沙箱环境下的实时预览。
|
|
10
|
+
- **依赖同步**: 自动化同步内核定义,解决开发环境配置难题。
|
|
11
|
+
|
|
12
|
+
## 安装和使用方法
|
|
13
|
+
|
|
14
|
+
### 安装 CLI
|
|
15
|
+
```bash
|
|
16
|
+
npm install -g @chatbi-v/cli
|
|
17
|
+
# 或使用 pnpm
|
|
18
|
+
pnpm add -g @chatbi-v/cli
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### 初始化项目
|
|
22
|
+
```bash
|
|
23
|
+
chatbi-cli init my-app --project-type app
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 启动开发环境
|
|
27
|
+
```bash
|
|
28
|
+
chatbi-cli dev
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## API 文档链接
|
|
32
|
+
|
|
33
|
+
请访问 [CLI 详细文档](https://github.com/your-repo/docs/cli/index.md) 或运行 `chatbi-cli --help` 查看指令详情。
|
|
34
|
+
|
|
35
|
+
## 开发注意事项
|
|
36
|
+
|
|
37
|
+
- **权限说明**: 部分命令涉及全局目录 (`~/.chatbi-v-core`) 的读写。
|
|
38
|
+
- **Node 版本**: 建议使用 Node.js >= 18.0.0。
|
|
39
|
+
- **沙箱隔离**: 开发过程中请勿手动修改 `.chatbi-v-core` 目录内容。
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
5
43
|
## 核心理念
|
|
6
44
|
|
|
7
45
|
### 1. 零显式依赖 (Zero-Install)
|
|
@@ -36,6 +74,11 @@ chatbi-cli init my-app --project-type app
|
|
|
36
74
|
chatbi-cli init my-plugin --project-type plugin
|
|
37
75
|
```
|
|
38
76
|
|
|
77
|
+
#### 创建一个 Monorepo 工作空间
|
|
78
|
+
```bash
|
|
79
|
+
chatbi-cli init my-workspace --project-type monorepo
|
|
80
|
+
```
|
|
81
|
+
|
|
39
82
|
### 启动开发环境
|
|
40
83
|
进入项目目录后执行:
|
|
41
84
|
```bash
|
|
@@ -43,6 +86,8 @@ npm run dev
|
|
|
43
86
|
# 或者直接使用 cli
|
|
44
87
|
chatbi-cli dev
|
|
45
88
|
```
|
|
89
|
+
- **App/Plugin 模式**: 直接启动当前项目。
|
|
90
|
+
- **Monorepo 模式**: 自动扫描并提供交互式菜单,选择要启动的子应用或插件。
|
|
46
91
|
|
|
47
92
|
---
|
|
48
93
|
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createSpinner,
|
|
3
|
+
logger,
|
|
4
|
+
printBox,
|
|
5
|
+
require_lib,
|
|
6
|
+
require_picocolors
|
|
7
|
+
} from "./chunk-Y24V4GQG.mjs";
|
|
8
|
+
import {
|
|
9
|
+
__toESM,
|
|
10
|
+
init_esm_shims
|
|
11
|
+
} from "./chunk-TX5M36S5.mjs";
|
|
12
|
+
|
|
13
|
+
// src/commands/bench.ts
|
|
14
|
+
init_esm_shims();
|
|
15
|
+
var import_picocolors = __toESM(require_picocolors());
|
|
16
|
+
var import_fs_extra = __toESM(require_lib());
|
|
17
|
+
import path from "path";
|
|
18
|
+
import os from "os";
|
|
19
|
+
async function bench() {
|
|
20
|
+
logger.info("\u6B63\u5728\u542F\u52A8 CLI \u6027\u80FD\u57FA\u51C6\u6D4B\u8BD5...");
|
|
21
|
+
const results = [];
|
|
22
|
+
const tmpDir = path.join(os.tmpdir(), `chatbi-bench-${Date.now()}`);
|
|
23
|
+
await import_fs_extra.default.ensureDir(tmpDir);
|
|
24
|
+
try {
|
|
25
|
+
const initSpinner = createSpinner("\u6B63\u5728\u6D4B\u8BD5: \u521D\u59CB\u5316\u63D2\u4EF6\u9879\u76EE (init)...").start();
|
|
26
|
+
const startInit = Date.now();
|
|
27
|
+
const { init } = await import("./init-QFRFYEA5.mjs");
|
|
28
|
+
const testProjDir = path.join(tmpDir, "bench-proj");
|
|
29
|
+
await init({ name: "bench-proj", projectType: "plugin", cwd: tmpDir });
|
|
30
|
+
const endInit = Date.now();
|
|
31
|
+
const initTime = (endInit - startInit) / 1e3;
|
|
32
|
+
initSpinner.succeed(`\u521D\u59CB\u5316\u5B8C\u6210: ${import_picocolors.default.cyan(initTime.toFixed(2) + "s")}`);
|
|
33
|
+
results.push({
|
|
34
|
+
scene: "\u521D\u59CB\u5316\u63D2\u4EF6\u9879\u76EE (init)",
|
|
35
|
+
target: "\u2264 5.0 s",
|
|
36
|
+
actual: `${initTime.toFixed(2)} s`
|
|
37
|
+
});
|
|
38
|
+
const syncSpinner = createSpinner("\u6B63\u5728\u6D4B\u8BD5: \u6C99\u7BB1\u73AF\u5883\u540C\u6B65 (sync)...").start();
|
|
39
|
+
const startSync = Date.now();
|
|
40
|
+
const { sync } = await import("./sync-7HPKGVFY.mjs");
|
|
41
|
+
await sync({ cwd: testProjDir });
|
|
42
|
+
const endSync = Date.now();
|
|
43
|
+
const syncTime = (endSync - startSync) / 1e3;
|
|
44
|
+
syncSpinner.succeed(`\u540C\u6B65\u5B8C\u6210: ${import_picocolors.default.cyan(syncTime.toFixed(2) + "s")}`);
|
|
45
|
+
results.push({
|
|
46
|
+
scene: "\u6C99\u7BB1\u73AF\u5883\u540C\u6B65 (sync)",
|
|
47
|
+
target: "\u2264 2.0 s",
|
|
48
|
+
actual: `${syncTime.toFixed(2)} s`
|
|
49
|
+
});
|
|
50
|
+
const buildSpinner = createSpinner("\u6B63\u5728\u6D4B\u8BD5: \u63D2\u4EF6\u9879\u76EE\u6784\u5EFA (build)...").start();
|
|
51
|
+
const startBuild = Date.now();
|
|
52
|
+
const { build } = await import("./build-UB4D3WNI.mjs");
|
|
53
|
+
const originalCwd = process.cwd();
|
|
54
|
+
process.chdir(testProjDir);
|
|
55
|
+
await build({ watch: false });
|
|
56
|
+
process.chdir(originalCwd);
|
|
57
|
+
const endBuild = Date.now();
|
|
58
|
+
const buildTime = (endBuild - startBuild) / 1e3;
|
|
59
|
+
buildSpinner.succeed(`\u6784\u5EFA\u5B8C\u6210: ${import_picocolors.default.cyan(buildTime.toFixed(2) + "s")}`);
|
|
60
|
+
results.push({
|
|
61
|
+
scene: "\u63D2\u4EF6\u9879\u76EE\u6784\u5EFA (build)",
|
|
62
|
+
target: "\u2264 10.0 s",
|
|
63
|
+
actual: `${buildTime.toFixed(2)} s`
|
|
64
|
+
});
|
|
65
|
+
printBox(
|
|
66
|
+
`${import_picocolors.default.green(import_picocolors.default.bold("\u2728 \u57FA\u51C6\u6D4B\u8BD5\u5B8C\u6210!"))}
|
|
67
|
+
|
|
68
|
+
` + results.map((r) => `${import_picocolors.default.white(r.scene.padEnd(20))}: ${import_picocolors.default.cyan(r.actual)} (\u76EE\u6807 ${r.target})`).join("\n"),
|
|
69
|
+
"Benchmark Results"
|
|
70
|
+
);
|
|
71
|
+
} finally {
|
|
72
|
+
await import_fs_extra.default.remove(tmpDir);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
bench
|
|
77
|
+
};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CoreKit
|
|
3
|
+
} from "./chunk-WIVHOK75.mjs";
|
|
4
|
+
import {
|
|
5
|
+
Sandbox
|
|
6
|
+
} from "./chunk-7A54IJI5.mjs";
|
|
7
|
+
import {
|
|
8
|
+
createSpinner,
|
|
9
|
+
logger,
|
|
10
|
+
printBox,
|
|
11
|
+
require_lib,
|
|
12
|
+
require_picocolors
|
|
13
|
+
} from "./chunk-Y24V4GQG.mjs";
|
|
14
|
+
import {
|
|
15
|
+
__toESM,
|
|
16
|
+
init_esm_shims
|
|
17
|
+
} from "./chunk-TX5M36S5.mjs";
|
|
18
|
+
|
|
19
|
+
// src/commands/sync.ts
|
|
20
|
+
init_esm_shims();
|
|
21
|
+
var import_fs_extra = __toESM(require_lib());
|
|
22
|
+
var import_picocolors = __toESM(require_picocolors());
|
|
23
|
+
import path from "path";
|
|
24
|
+
async function sync(options = {}) {
|
|
25
|
+
const cwd = options.cwd || process.cwd();
|
|
26
|
+
const pkgPath = path.join(cwd, "package.json");
|
|
27
|
+
if (!import_fs_extra.default.existsSync(pkgPath)) {
|
|
28
|
+
logger.error("\u672A\u627E\u5230 package.json\u3002\u8BF7\u5728\u9879\u76EE\u6839\u76EE\u5F55\u4E0B\u8FD0\u884C\u3002");
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const pkg = await import_fs_extra.default.readJson(pkgPath);
|
|
32
|
+
let version = options.version;
|
|
33
|
+
if (!version) {
|
|
34
|
+
version = await CoreKit.resolveVersion(cwd);
|
|
35
|
+
}
|
|
36
|
+
if (options.clean) {
|
|
37
|
+
const cleanSpinner = createSpinner(`\u6B63\u5728\u6E05\u7406\u6C99\u7BB1\u7248\u672C ${version}...`).start();
|
|
38
|
+
await Sandbox.cleanVersion(version);
|
|
39
|
+
cleanSpinner.succeed(`\u6C99\u7BB1\u7248\u672C ${version} \u5DF2\u6E05\u7406`);
|
|
40
|
+
}
|
|
41
|
+
const mainSpinner = createSpinner(`\u6B63\u5728\u540C\u6B65\u5185\u6838\u4F9D\u8D56 (\u7248\u672C: ${version})...`).start();
|
|
42
|
+
mainSpinner.text = "\u6B63\u5728\u540C\u6B65\u6C99\u7BB1\u5185\u6838...";
|
|
43
|
+
await Sandbox.prepare(version, options.force);
|
|
44
|
+
mainSpinner.text = "\u6B63\u5728\u751F\u6210\u865A\u62DF\u4E0A\u4E0B\u6587...";
|
|
45
|
+
if (options.version) {
|
|
46
|
+
const versionFilePath = path.join(cwd, ".chatbi-version");
|
|
47
|
+
await import_fs_extra.default.writeFile(versionFilePath, version, "utf-8");
|
|
48
|
+
}
|
|
49
|
+
await Sandbox.injectContext(cwd, version);
|
|
50
|
+
let modified = false;
|
|
51
|
+
const deps = pkg.dependencies || {};
|
|
52
|
+
const devDeps = pkg.devDependencies || {};
|
|
53
|
+
const isVirtualMode = true;
|
|
54
|
+
if (isVirtualMode) {
|
|
55
|
+
for (const pkgName of Sandbox.CORE_PACKAGES) {
|
|
56
|
+
if (deps[pkgName]) {
|
|
57
|
+
delete deps[pkgName];
|
|
58
|
+
modified = true;
|
|
59
|
+
}
|
|
60
|
+
if (devDeps[pkgName]) {
|
|
61
|
+
delete devDeps[pkgName];
|
|
62
|
+
modified = true;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (modified) {
|
|
67
|
+
pkg.dependencies = deps;
|
|
68
|
+
pkg.devDependencies = devDeps;
|
|
69
|
+
await import_fs_extra.default.writeJson(pkgPath, pkg, { spaces: 2 });
|
|
70
|
+
mainSpinner.succeed("\u5185\u6838\u540C\u6B65\u5B8C\u6210 (\u4F9D\u8D56\u5DF2\u4F18\u5316)");
|
|
71
|
+
} else {
|
|
72
|
+
mainSpinner.succeed("\u5185\u6838\u540C\u6B65\u5B8C\u6210");
|
|
73
|
+
}
|
|
74
|
+
if (!options.silent) {
|
|
75
|
+
printBox(
|
|
76
|
+
`${import_picocolors.default.green(import_picocolors.default.bold("\u2728 \u5185\u6838\u540C\u6B65\u6210\u529F!"))}
|
|
77
|
+
|
|
78
|
+
${import_picocolors.default.white("\u5F53\u524D\u7248\u672C: ")} ${import_picocolors.default.cyan(version)}
|
|
79
|
+
${import_picocolors.default.white("\u6C99\u7BB1\u8DEF\u5F84: ")} ${import_picocolors.default.gray(Sandbox.getVersionPath(version))}
|
|
80
|
+
|
|
81
|
+
${import_picocolors.default.white("\u63D0\u793A: ")} \u9879\u76EE\u73B0\u5728\u901A\u8FC7\u865A\u62DF\u522B\u540D\u5F15\u7528\u6838\u5FC3\u5305\uFF0C\u65E0\u9700\u663E\u5F0F\u5B89\u88C5\u4F9D\u8D56\u3002`,
|
|
82
|
+
"Sync Success"
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export {
|
|
88
|
+
sync
|
|
89
|
+
};
|