honeydo 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +90 -0
- package/README.zh-CN.md +88 -0
- package/package.json +54 -0
- package/packages/cli/dist/index.d.ts +2 -0
- package/packages/cli/dist/index.js +171 -0
- package/packages/cli/dist/index.js.map +1 -0
- package/packages/doubao/dist/cli.d.ts +38 -0
- package/packages/doubao/dist/cli.d.ts.map +1 -0
- package/packages/doubao/dist/cli.js +206 -0
- package/packages/gcli/dist/cli.d.ts +465 -0
- package/packages/gcli/dist/cli.js +2017 -0
- package/packages/gcli/dist/cli.js.map +1 -0
- package/packages/lmedia/dist/index.d.ts +1 -0
- package/packages/lmedia/dist/index.js +1594 -0
- package/packages/lmedia/python/edit.py +107 -0
- package/packages/lmedia/python/esrgan_path.py +16 -0
- package/packages/lmedia/python/gen.py +131 -0
- package/packages/lmedia/python/serve.py +352 -0
- package/packages/lmedia/python/sfx.py +527 -0
- package/packages/lmedia/python/teacache.py +255 -0
- package/packages/lmedia/python/upscale.py +41 -0
- package/packages/minimax/dist/cli.d.ts +51 -0
- package/packages/minimax/dist/cli.js +307 -0
- package/packages/minimax/dist/cli.js.map +1 -0
- package/packages/minimax/dist/client.d.ts +20 -0
- package/packages/minimax/dist/client.js +55 -0
- package/packages/minimax/dist/client.js.map +1 -0
- package/packages/minimax/dist/tts.d.ts +33 -0
- package/packages/minimax/dist/tts.js +64 -0
- package/packages/minimax/dist/tts.js.map +1 -0
- package/packages/minimax/dist/validate.d.ts +29 -0
- package/packages/minimax/dist/validate.js +122 -0
- package/packages/minimax/dist/validate.js.map +1 -0
- package/packages/minimax/dist/voice-clone.d.ts +17 -0
- package/packages/minimax/dist/voice-clone.js +47 -0
- package/packages/minimax/dist/voice-clone.js.map +1 -0
- package/packages/minimax/dist/voices.d.ts +17 -0
- package/packages/minimax/dist/voices.js +20 -0
- package/packages/minimax/dist/voices.js.map +1 -0
- package/packages/qwen/dist/index.d.ts +1 -0
- package/packages/qwen/dist/index.js +311 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 stringzhao
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# honeydo
|
|
2
|
+
|
|
3
|
+
> Honey, do everything. 🍯
|
|
4
|
+
|
|
5
|
+
One CLI for every AI capability — **chat, vision, image, video, sound effects, TTS** — cloud and local, built for AI agents.
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm i -g honeydo
|
|
9
|
+
|
|
10
|
+
honeydo ask "explain this code" # LLM chat (claude / gemini / any OpenAI-compatible)
|
|
11
|
+
honeydo vision "how many ducks?" -i a.png # vision understanding
|
|
12
|
+
honeydo image gen "a cat under sakura" # local image gen (Apple Silicon)
|
|
13
|
+
honeydo image gen "logo" --engine doubao # cloud image gen (Volcengine)
|
|
14
|
+
honeydo video gen "waves at dusk" --seconds 5
|
|
15
|
+
honeydo tts "你好世界" # MiniMax TTS
|
|
16
|
+
honeydo sfx gen "rain on a tin roof"
|
|
17
|
+
hd ask "hi" # short alias, same thing
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Named after the **honey-do list** — *"honey, do this, honey, do that."* You ask, it does. 🐝
|
|
21
|
+
|
|
22
|
+
## Why a CLI, not MCP?
|
|
23
|
+
|
|
24
|
+
MCP servers inject their tool schemas into the agent's context **on every single call** — 10 tools you'll never use still cost tokens. A CLI is invoked **only when needed**, with zero standing context cost. honeydo was born from migrating five MCP servers (Gemini, Doubao, MiniMax, …) off MCP into plain commands.
|
|
25
|
+
|
|
26
|
+
Agent-friendly by contract:
|
|
27
|
+
|
|
28
|
+
- **Unified exit codes**: `0` ok / `1` runtime error / `2` bad args
|
|
29
|
+
- **stdout/stderr discipline**: results on stdout, progress/humans on stderr — pipes stay clean
|
|
30
|
+
- **JSON output** where it matters (`--json` on chat/vision, structured results on media gen)
|
|
31
|
+
|
|
32
|
+
## Capabilities
|
|
33
|
+
|
|
34
|
+
| Command | What | Engine |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| `honeydo ask` | LLM chat | Claude Code CLI / Gemini (agy) / direct Anthropic-compatible HTTP (`--backend agy\|api`) |
|
|
37
|
+
| `honeydo ask --backend local` | chat against any local OpenAI-compatible endpoint | llama.cpp, vLLM, Ollama… |
|
|
38
|
+
| `honeydo vision` | image understanding | same local endpoint (Qwen-VL style) |
|
|
39
|
+
| `honeydo image gen/edit/upscale/serve` | image generation, editing, 2x upscale, daemon | Qwen-Image-2512 local (bf16, Apple Silicon) |
|
|
40
|
+
| `honeydo image gen --engine doubao` | cloud image gen | Volcengine Ark (seedream) with model fallback chain |
|
|
41
|
+
| `honeydo video gen/setup` | text-to-video, first-frame conditioning | mmh3turbo (MiniMax-H3 GGUF) local |
|
|
42
|
+
| `honeydo sfx gen/batch/trim/normalize/...` | full SFX production line | Dasheng-AudioGen local |
|
|
43
|
+
| `honeydo lora list/add` | LoRA registry (style/character/speed) | local Qwen-Image LoRAs |
|
|
44
|
+
| `honeydo tts` | text-to-speech, word-level subtitle timestamps | MiniMax speech-02 |
|
|
45
|
+
| `honeydo voice clone/list` | voice cloning / voice inventory | MiniMax |
|
|
46
|
+
| `honeydo doctor` | local stack self-check | — |
|
|
47
|
+
|
|
48
|
+
## Install & configure
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npm i -g honeydo
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Cloud capabilities need API keys via env (nothing is stored by honeydo itself):
|
|
55
|
+
|
|
56
|
+
| Env var | Used by |
|
|
57
|
+
|---|---|
|
|
58
|
+
| `DOUBAO_API_KEY` | `image gen --engine doubao` (Volcengine Ark) |
|
|
59
|
+
| `MINIMAX_API_KEY` | `tts` / `voice` (`MINIMAX_API_HOST` to override endpoint) |
|
|
60
|
+
| `QWEN_API_URL` / `QWEN_MODEL` / `QWEN_API_KEY` | `ask --backend local` / `vision` (default `http://127.0.0.1:8001`) |
|
|
61
|
+
|
|
62
|
+
`honeydo ask` (claude backend) can optionally read providers from [cc-switch](https://github.com/farion1231/cc-switch)'s database when present — but works fine with a plain `claude` CLI login too.
|
|
63
|
+
|
|
64
|
+
### Local media stack (Apple Silicon)
|
|
65
|
+
|
|
66
|
+
`image` / `video` / `sfx` run fully local via a Python inference stack (diffusers + torch MPS, ~110GB of model weights for the full image+edit setup). Run:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
honeydo doctor # prints what's ready, what's missing, and how to set it up
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Security notes
|
|
73
|
+
|
|
74
|
+
- API keys are read from env vars only; honeydo never writes them anywhere.
|
|
75
|
+
- For the claude backend, the selected provider token is passed to the `claude` child process via argv (`--settings`) — visible in `ps` while the call runs. Prefer the `api` backend (pure HTTPS, no child process) if that matters to you.
|
|
76
|
+
- Local inference never leaves your machine.
|
|
77
|
+
|
|
78
|
+
## Legacy bins
|
|
79
|
+
|
|
80
|
+
If you used the standalone tools, they still exist and remain compatible: `gcli`, `lmedia`, `doubao`, `minimax`. (`qwen` is deprecated — it collides with Alibaba's official qwen CLI; use `honeydo vision` / `honeydo ask --backend local`.)
|
|
81
|
+
|
|
82
|
+
## Roadmap
|
|
83
|
+
|
|
84
|
+
See [ROADMAP.md](./ROADMAP.md) — unified config file, global `--json`, one-command local stack setup, i18n, brew tap.
|
|
85
|
+
|
|
86
|
+
中文文档:[README.zh-CN.md](./README.zh-CN.md)
|
|
87
|
+
|
|
88
|
+
## License
|
|
89
|
+
|
|
90
|
+
[MIT](./LICENSE)
|
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# honeydo
|
|
2
|
+
|
|
3
|
+
> Honey, do everything. 🍯
|
|
4
|
+
|
|
5
|
+
一个 CLI 打通所有 AI 能力——**对话、视觉理解、生图、视频、音效、TTS**——云端与本地兼有,为 AI agent 设计。
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm i -g honeydo
|
|
9
|
+
|
|
10
|
+
honeydo ask "解释这段代码" # LLM 对话(claude / gemini / 任意 OpenAI 兼容端点)
|
|
11
|
+
honeydo vision "图里有几只鸭子?" -i a.png
|
|
12
|
+
honeydo image gen "樱花下的猫" # 本地生图(Apple Silicon)
|
|
13
|
+
honeydo image gen "logo" --engine doubao # 云端生图(火山方舟)
|
|
14
|
+
honeydo video gen "黄昏的海浪" --seconds 5
|
|
15
|
+
honeydo tts "你好世界" # MiniMax TTS
|
|
16
|
+
honeydo sfx gen "雨打铁皮屋顶"
|
|
17
|
+
hd ask "hi" # 短别名,同一个命令
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
名字来自英语家庭梗 **honey-do list**:「honey, do this / honey, do that」——你喊 honey,它就 do。🐝
|
|
21
|
+
|
|
22
|
+
## 为什么是 CLI 而不是 MCP?
|
|
23
|
+
|
|
24
|
+
MCP server 的工具 schema **每次调用都占用 agent 上下文**——10 个用不到的工具也照吃不误。CLI **只在需要时被调用**,常驻上下文成本为零。honeydo 正是从 5 个 MCP server(Gemini、豆包、MiniMax……)迁徙而来的实战产物。
|
|
25
|
+
|
|
26
|
+
agent 友好契约:
|
|
27
|
+
|
|
28
|
+
- **统一退出码**:`0` 成功 / `1` 运行错误 / `2` 参数错误
|
|
29
|
+
- **stdout/stderr 纪律**:结果走 stdout,进度和给人看的信息走 stderr,管道永远干净
|
|
30
|
+
- 关键命令支持 **JSON 输出**(对话/视觉 `--json`,媒体生成结构化结果)
|
|
31
|
+
|
|
32
|
+
## 能力矩阵
|
|
33
|
+
|
|
34
|
+
| 命令 | 能力 | 引擎 |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| `honeydo ask` | LLM 对话 | Claude Code CLI / Gemini (agy) / Anthropic 协议直连 HTTP(`--backend agy\|api`) |
|
|
37
|
+
| `honeydo ask --backend local` | 本地 OpenAI 兼容端点对话 | llama.cpp、vLLM、Ollama…… |
|
|
38
|
+
| `honeydo vision` | 图像理解 | 本地端点(Qwen-VL 系) |
|
|
39
|
+
| `honeydo image gen/edit/upscale/serve` | 生图、图像编辑、2x 超分、常驻 daemon | Qwen-Image-2512 本地(bf16,Apple Silicon) |
|
|
40
|
+
| `honeydo image gen --engine doubao` | 云端生图 | 火山方舟(seedream,模型 fallback 链) |
|
|
41
|
+
| `honeydo video gen/setup` | 文生视频、首帧条件 | mmh3turbo(MiniMax-H3 GGUF)本地 |
|
|
42
|
+
| `honeydo sfx gen/batch/trim/...` | 音效产线全链 | Dasheng-AudioGen 本地 |
|
|
43
|
+
| `honeydo lora list/add` | LoRA 注册表(风格/角色/加速) | 本地 Qwen-Image LoRA |
|
|
44
|
+
| `honeydo tts` | TTS,字级时间戳字幕 | MiniMax speech-02 |
|
|
45
|
+
| `honeydo voice clone/list` | 声音克隆 / 音色列表 | MiniMax |
|
|
46
|
+
| `honeydo doctor` | 本地栈自检 | — |
|
|
47
|
+
|
|
48
|
+
## 安装与配置
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npm i -g honeydo
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
云端能力通过环境变量读 key(honeydo 自身不落盘):
|
|
55
|
+
|
|
56
|
+
| 环境变量 | 用于 |
|
|
57
|
+
|---|---|
|
|
58
|
+
| `DOUBAO_API_KEY` | `image gen --engine doubao`(火山方舟) |
|
|
59
|
+
| `MINIMAX_API_KEY` | `tts` / `voice`(`MINIMAX_API_HOST` 可换端点) |
|
|
60
|
+
| `QWEN_API_URL` / `QWEN_MODEL` / `QWEN_API_KEY` | `ask --backend local` / `vision`(默认 `http://127.0.0.1:8001`) |
|
|
61
|
+
|
|
62
|
+
`honeydo ask`(claude 后端)可选读取 [cc-switch](https://github.com/farion1231/cc-switch) 的 provider 库;没有 cc-switch 时直接用 `claude` CLI 的登录态即可。
|
|
63
|
+
|
|
64
|
+
### 本地媒体栈(Apple Silicon)
|
|
65
|
+
|
|
66
|
+
`image` / `video` / `sfx` 完全本地推理(diffusers + torch MPS,全量图像+编辑权重约 110GB)。运行:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
honeydo doctor # 打印哪些就绪、缺什么、怎么补
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## 安全说明
|
|
73
|
+
|
|
74
|
+
- API key 只从环境变量读取,honeydo 不写任何密钥到磁盘。
|
|
75
|
+
- claude 后端会把选中的 provider token 通过子进程 argv(`--settings`)传给 `claude`——调用期间 `ps` 可见。介意的话用 `api` 后端(纯 HTTPS,无子进程)。
|
|
76
|
+
- 本地推理不出本机。
|
|
77
|
+
|
|
78
|
+
## 旧命令兼容
|
|
79
|
+
|
|
80
|
+
独立工具的旧 bin 仍然可用:`gcli`、`lmedia`、`doubao`、`minimax`。(`qwen` 已废弃——与阿里官方 qwen CLI 冲突;请改用 `honeydo vision` / `honeydo ask --backend local`。)
|
|
81
|
+
|
|
82
|
+
## 路线图
|
|
83
|
+
|
|
84
|
+
见 [ROADMAP.md](./ROADMAP.md)——统一配置文件、全局 `--json`、本地栈一键 setup、i18n、brew tap。
|
|
85
|
+
|
|
86
|
+
## License
|
|
87
|
+
|
|
88
|
+
[MIT](./LICENSE)
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "honeydo",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "One CLI for every AI capability — chat, vision, image, video, audio. Built for AI agents.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"cli",
|
|
8
|
+
"ai",
|
|
9
|
+
"llm",
|
|
10
|
+
"claude",
|
|
11
|
+
"qwen",
|
|
12
|
+
"doubao",
|
|
13
|
+
"minimax",
|
|
14
|
+
"image-generation",
|
|
15
|
+
"video-generation",
|
|
16
|
+
"tts",
|
|
17
|
+
"ai-agents"
|
|
18
|
+
],
|
|
19
|
+
"workspaces": [
|
|
20
|
+
"packages/*"
|
|
21
|
+
],
|
|
22
|
+
"bin": {
|
|
23
|
+
"honeydo": "packages/cli/dist/index.js",
|
|
24
|
+
"hd": "packages/cli/dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"packages/cli/dist",
|
|
28
|
+
"packages/gcli/dist",
|
|
29
|
+
"packages/qwen/dist",
|
|
30
|
+
"packages/lmedia/dist",
|
|
31
|
+
"packages/lmedia/python",
|
|
32
|
+
"packages/doubao/dist",
|
|
33
|
+
"packages/minimax/dist"
|
|
34
|
+
],
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"commander": "^13.1.0"
|
|
37
|
+
},
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=18"
|
|
40
|
+
},
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "git+https://github.com/strzhao/honeydo.git"
|
|
44
|
+
},
|
|
45
|
+
"homepage": "https://github.com/strzhao/honeydo#readme",
|
|
46
|
+
"bugs": "https://github.com/strzhao/honeydo/issues",
|
|
47
|
+
"scripts": {
|
|
48
|
+
"build": "npm run build --workspaces --if-present",
|
|
49
|
+
"test": "npm test --workspaces --if-present",
|
|
50
|
+
"typecheck": "npm run typecheck --workspaces --if-present",
|
|
51
|
+
"lint": "biome check .",
|
|
52
|
+
"prepack": "npm run build"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* honeydo — one CLI for every AI capability.
|
|
4
|
+
*
|
|
5
|
+
* Thin dispatcher: routes subcommands to the sibling capability packages'
|
|
6
|
+
* built entries and forwards the exit code. Zero arg translation (except the
|
|
7
|
+
* documented --backend / --engine intercepts) so behaviour stays identical
|
|
8
|
+
* to the legacy bins (gcli / qwen / lmedia / doubao / minimax).
|
|
9
|
+
*
|
|
10
|
+
* Layout assumption (repo AND published tarball are identical):
|
|
11
|
+
* package.json
|
|
12
|
+
* packages/<pkg>/dist/<entry>
|
|
13
|
+
*/
|
|
14
|
+
import { spawnSync } from "node:child_process";
|
|
15
|
+
import * as fs from "node:fs";
|
|
16
|
+
import * as path from "node:path";
|
|
17
|
+
import { fileURLToPath } from "node:url";
|
|
18
|
+
const HERE = path.dirname(fileURLToPath(import.meta.url)); // packages/cli/dist
|
|
19
|
+
/** sibling package entry: gcli/doubao/minimax build to cli.js, qwen/lmedia to index.js */
|
|
20
|
+
const ENTRIES = {
|
|
21
|
+
gcli: path.resolve(HERE, "../../gcli/dist/cli.js"),
|
|
22
|
+
qwen: path.resolve(HERE, "../../qwen/dist/index.js"),
|
|
23
|
+
lmedia: path.resolve(HERE, "../../lmedia/dist/index.js"),
|
|
24
|
+
doubao: path.resolve(HERE, "../../doubao/dist/cli.js"),
|
|
25
|
+
minimax: path.resolve(HERE, "../../minimax/dist/cli.js"),
|
|
26
|
+
};
|
|
27
|
+
function forward(pkg, args) {
|
|
28
|
+
const entry = ENTRIES[pkg];
|
|
29
|
+
if (!fs.existsSync(entry)) {
|
|
30
|
+
process.stderr.write(`honeydo: missing build for ${pkg} (${entry})\nrun \`npm run build\` in the honeydo repo first\n`);
|
|
31
|
+
return 1;
|
|
32
|
+
}
|
|
33
|
+
const r = spawnSync(process.execPath, [entry, ...args], { stdio: "inherit" });
|
|
34
|
+
if (r.error) {
|
|
35
|
+
process.stderr.write(`honeydo: failed to launch ${pkg}: ${r.error.message}\n`);
|
|
36
|
+
return 1;
|
|
37
|
+
}
|
|
38
|
+
if (r.signal) {
|
|
39
|
+
process.stderr.write(`honeydo: ${pkg} killed by ${r.signal}\n`);
|
|
40
|
+
return 1;
|
|
41
|
+
}
|
|
42
|
+
return r.status ?? 1;
|
|
43
|
+
}
|
|
44
|
+
/** pull a `--flag value` / `--flag=value` pair out of argv; returns [value, rest] */
|
|
45
|
+
function takeFlag(argv, flag) {
|
|
46
|
+
const rest = [];
|
|
47
|
+
let value;
|
|
48
|
+
for (let i = 0; i < argv.length; i++) {
|
|
49
|
+
const a = argv[i];
|
|
50
|
+
if (a === flag) {
|
|
51
|
+
value = argv[++i];
|
|
52
|
+
}
|
|
53
|
+
else if (a.startsWith(`${flag}=`)) {
|
|
54
|
+
value = a.slice(flag.length + 1);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
rest.push(a);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return [value, rest];
|
|
61
|
+
}
|
|
62
|
+
function version() {
|
|
63
|
+
try {
|
|
64
|
+
const pkg = JSON.parse(fs.readFileSync(path.resolve(HERE, "../../../package.json"), "utf-8"));
|
|
65
|
+
return pkg.version ?? "0.0.0";
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return "0.0.0";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const HELP = `honeydo — honey, do everything. One CLI for every AI capability.
|
|
72
|
+
|
|
73
|
+
Usage: honeydo <command> [args] (alias: hd)
|
|
74
|
+
|
|
75
|
+
Chat & vision
|
|
76
|
+
ask [args] LLM chat (default backend: claude; --backend agy|api|local)
|
|
77
|
+
vision <prompt> -i <img> vision understanding via local OpenAI-compatible endpoint
|
|
78
|
+
models list local endpoint models
|
|
79
|
+
status local endpoint health
|
|
80
|
+
|
|
81
|
+
Image / video / sound (local, Apple Silicon)
|
|
82
|
+
image gen <prompt> local image gen (--engine doubao → cloud fallback)
|
|
83
|
+
image edit|upscale|serve image edit / upscale / daemon
|
|
84
|
+
video gen|setup|list-res local video gen (mmh3turbo)
|
|
85
|
+
sfx gen|batch|trim|... sound-effect production line
|
|
86
|
+
lora list|add LoRA registry
|
|
87
|
+
|
|
88
|
+
Cloud media
|
|
89
|
+
image gen --engine doubao Doubao (Volcengine Ark) cloud image
|
|
90
|
+
tts <text> MiniMax text-to-speech
|
|
91
|
+
voice clone|list MiniMax voice cloning / voice list
|
|
92
|
+
|
|
93
|
+
Misc
|
|
94
|
+
doctor local media stack self-check
|
|
95
|
+
--version print version
|
|
96
|
+
help this help
|
|
97
|
+
|
|
98
|
+
Legacy bins still work: gcli, qwen (deprecated), lmedia, doubao, minimax.
|
|
99
|
+
Exit codes follow the routed package: 0 ok / 1 runtime error / 2 bad args.
|
|
100
|
+
Docs: https://github.com/strzhao/honeydo
|
|
101
|
+
`;
|
|
102
|
+
function route(cmd, rest) {
|
|
103
|
+
switch (cmd) {
|
|
104
|
+
case undefined:
|
|
105
|
+
case "help":
|
|
106
|
+
case "--help":
|
|
107
|
+
case "-h":
|
|
108
|
+
process.stdout.write(HELP);
|
|
109
|
+
return cmd === undefined ? 2 : 0;
|
|
110
|
+
case "--version":
|
|
111
|
+
case "-V":
|
|
112
|
+
case "-v":
|
|
113
|
+
process.stdout.write(`${version()}\n`);
|
|
114
|
+
return 0;
|
|
115
|
+
case "ask": {
|
|
116
|
+
const [backend, args] = takeFlag(rest, "--backend");
|
|
117
|
+
if (backend === undefined || backend === "claude")
|
|
118
|
+
return forward("gcli", args);
|
|
119
|
+
if (backend === "agy" || backend === "api")
|
|
120
|
+
return forward("gcli", [backend, ...args]);
|
|
121
|
+
if (backend === "local")
|
|
122
|
+
return forward("qwen", ["ask", ...args]);
|
|
123
|
+
process.stderr.write(`honeydo: unknown --backend "${backend}" (expected claude|agy|api|local)\n`);
|
|
124
|
+
return 2;
|
|
125
|
+
}
|
|
126
|
+
case "vision":
|
|
127
|
+
return forward("qwen", ["vision", ...rest]);
|
|
128
|
+
case "models":
|
|
129
|
+
return forward("qwen", ["models", ...rest]);
|
|
130
|
+
case "status":
|
|
131
|
+
return forward("qwen", ["status", ...rest]);
|
|
132
|
+
case "image": {
|
|
133
|
+
if (rest[0] === "gen") {
|
|
134
|
+
const [engine, args] = takeFlag(rest.slice(1), "--engine");
|
|
135
|
+
if (engine === undefined || engine === "local")
|
|
136
|
+
return forward("lmedia", ["image", "gen", ...args]);
|
|
137
|
+
if (engine === "doubao")
|
|
138
|
+
return forward("doubao", args);
|
|
139
|
+
process.stderr.write(`honeydo: unknown --engine "${engine}" (expected local|doubao)\n`);
|
|
140
|
+
return 2;
|
|
141
|
+
}
|
|
142
|
+
return forward("lmedia", ["image", ...rest]);
|
|
143
|
+
}
|
|
144
|
+
case "video":
|
|
145
|
+
return forward("lmedia", ["video", ...rest]);
|
|
146
|
+
case "sfx":
|
|
147
|
+
return forward("lmedia", ["sfx", ...rest]);
|
|
148
|
+
case "lora":
|
|
149
|
+
return forward("lmedia", ["lora", ...rest]);
|
|
150
|
+
case "tts":
|
|
151
|
+
return forward("minimax", ["tts", ...rest]);
|
|
152
|
+
case "voice": {
|
|
153
|
+
const sub = rest[0];
|
|
154
|
+
if (sub === "clone")
|
|
155
|
+
return forward("minimax", ["voice-clone", ...rest.slice(1)]);
|
|
156
|
+
if (sub === "list")
|
|
157
|
+
return forward("minimax", ["voices", ...rest.slice(1)]);
|
|
158
|
+
process.stderr.write("honeydo: voice expects subcommand clone|list\n");
|
|
159
|
+
return 2;
|
|
160
|
+
}
|
|
161
|
+
case "doubao":
|
|
162
|
+
return forward("doubao", rest);
|
|
163
|
+
case "doctor":
|
|
164
|
+
return forward("lmedia", ["doctor", ...rest]);
|
|
165
|
+
default:
|
|
166
|
+
process.stderr.write(`honeydo: unknown command "${cmd}"\n\n${HELP}`);
|
|
167
|
+
return 2;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
process.exit(route(process.argv[2], process.argv.slice(3)));
|
|
171
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB;AAE/E,0FAA0F;AAC1F,MAAM,OAAO,GAAG;IACd,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,wBAAwB,CAAC;IAClD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,0BAA0B,CAAC;IACpD,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,4BAA4B,CAAC;IACxD,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,0BAA0B,CAAC;IACtD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,2BAA2B,CAAC;CAChD,CAAC;AAIX,SAAS,OAAO,CAAC,GAAQ,EAAE,IAAc;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8BAA8B,GAAG,KAAK,KAAK,sDAAsD,CAClG,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,6BAA6B,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CACzD,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,cAAc,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,qFAAqF;AACrF,SAAS,QAAQ,CACf,IAAc,EACd,IAAY;IAEZ,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,KAAyB,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACf,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,OAAO;IACd,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,uBAAuB,CAAC,EAAE,OAAO,CAAC,CACtE,CAAC;QACF,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BZ,CAAC;AAEF,SAAS,KAAK,CAAC,GAAuB,EAAE,IAAc;IACpD,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnC,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI,CAAC;QACV,KAAK,IAAI;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,CAAC;QAEX,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACpD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,QAAQ;gBAC/C,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC/B,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK;gBACxC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAC7C,IAAI,OAAO,KAAK,OAAO;gBAAE,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,+BAA+B,OAAO,qCAAqC,CAC5E,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QAED,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC9C,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC9C,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAE9C,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;gBACtB,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBAC3D,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,OAAO;oBAC5C,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;gBACtD,IAAI,MAAM,KAAK,QAAQ;oBAAE,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8BAA8B,MAAM,6BAA6B,CAClE,CAAC;gBACF,OAAO,CAAC,CAAC;YACX,CAAC;YACD,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,OAAO;YACV,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/C,KAAK,KAAK;YACR,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7C,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAE9C,KAAK,KAAK;YACR,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC9C,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,GAAG,KAAK,OAAO;gBACjB,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,IAAI,GAAG,KAAK,MAAM;gBAChB,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACvE,OAAO,CAAC,CAAC;QACX,CAAC;QAED,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACjC,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAEhD;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,GAAG,QAAQ,IAAI,EAAE,CAAC,CAAC;YACrE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* doubao — CLI for generating images via the Doubao (Volces Ark) API.
|
|
4
|
+
*
|
|
5
|
+
* Sends a prompt to the Ark image-generation endpoint, walks a model fallback
|
|
6
|
+
* chain (5-0 → lite → 4-5) when a model is not activated for the account,
|
|
7
|
+
* downloads the result, and saves it to a file. Last stdout line is always
|
|
8
|
+
* "Saved to: <absolute path>" so scripts can grep it.
|
|
9
|
+
*/
|
|
10
|
+
export declare const DEFAULT_SIZE = "2K";
|
|
11
|
+
export declare function normalizeSize(sizeInput: string): string;
|
|
12
|
+
export declare function isModelNotOpenError(status: number, errorText: string): boolean;
|
|
13
|
+
export declare function resolveSizeForModel(size: string, model: string): string;
|
|
14
|
+
export interface ParsedArgs {
|
|
15
|
+
prompt?: string;
|
|
16
|
+
size?: string;
|
|
17
|
+
output?: string;
|
|
18
|
+
help: boolean;
|
|
19
|
+
}
|
|
20
|
+
export type ParseResult = ParsedArgs | {
|
|
21
|
+
error: string;
|
|
22
|
+
};
|
|
23
|
+
export declare function parseCliArgs(argv: string[]): ParseResult;
|
|
24
|
+
export interface GenInput {
|
|
25
|
+
prompt: string;
|
|
26
|
+
size?: string;
|
|
27
|
+
output?: string;
|
|
28
|
+
apiKey: string;
|
|
29
|
+
}
|
|
30
|
+
export interface GenResult {
|
|
31
|
+
filePath: string;
|
|
32
|
+
model: string;
|
|
33
|
+
requestedSize: string;
|
|
34
|
+
appliedSize: string;
|
|
35
|
+
returnedSize: string;
|
|
36
|
+
}
|
|
37
|
+
export declare function generateImage(input: GenInput): Promise<GenResult>;
|
|
38
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAcH,eAAO,MAAM,YAAY,OAAO,CAAC;AASjC,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CASvD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAE9E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMvE;AAMD,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAoBxD;AAWD,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AASD,wBAAsB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAuFvE"}
|