boohee-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 +207 -0
- package/bin/run.js +75 -0
- package/dist/base.d.ts +21 -0
- package/dist/base.d.ts.map +1 -0
- package/dist/base.js +77 -0
- package/dist/base.js.map +1 -0
- package/dist/commands/auth/status.d.ts +7 -0
- package/dist/commands/auth/status.d.ts.map +1 -0
- package/dist/commands/auth/status.js +28 -0
- package/dist/commands/auth/status.js.map +1 -0
- package/dist/commands/batch.d.ts +15 -0
- package/dist/commands/batch.d.ts.map +1 -0
- package/dist/commands/batch.js +63 -0
- package/dist/commands/batch.js.map +1 -0
- package/dist/commands/categories.d.ts +7 -0
- package/dist/commands/categories.d.ts.map +1 -0
- package/dist/commands/categories.js +14 -0
- package/dist/commands/categories.js.map +1 -0
- package/dist/commands/config/get.d.ts +10 -0
- package/dist/commands/config/get.d.ts.map +1 -0
- package/dist/commands/config/get.js +29 -0
- package/dist/commands/config/get.js.map +1 -0
- package/dist/commands/config/init.d.ts +12 -0
- package/dist/commands/config/init.d.ts.map +1 -0
- package/dist/commands/config/init.js +38 -0
- package/dist/commands/config/init.js.map +1 -0
- package/dist/commands/config/list.d.ts +7 -0
- package/dist/commands/config/list.d.ts.map +1 -0
- package/dist/commands/config/list.js +19 -0
- package/dist/commands/config/list.js.map +1 -0
- package/dist/commands/config/reset.d.ts +7 -0
- package/dist/commands/config/reset.d.ts.map +1 -0
- package/dist/commands/config/reset.js +20 -0
- package/dist/commands/config/reset.js.map +1 -0
- package/dist/commands/config/set.d.ts +11 -0
- package/dist/commands/config/set.d.ts.map +1 -0
- package/dist/commands/config/set.js +43 -0
- package/dist/commands/config/set.js.map +1 -0
- package/dist/commands/detail.d.ts +10 -0
- package/dist/commands/detail.d.ts.map +1 -0
- package/dist/commands/detail.js +27 -0
- package/dist/commands/detail.js.map +1 -0
- package/dist/commands/food/categories.d.ts +13 -0
- package/dist/commands/food/categories.d.ts.map +1 -0
- package/dist/commands/food/categories.js +28 -0
- package/dist/commands/food/categories.js.map +1 -0
- package/dist/commands/food/detail.d.ts +18 -0
- package/dist/commands/food/detail.d.ts.map +1 -0
- package/dist/commands/food/detail.js +44 -0
- package/dist/commands/food/detail.js.map +1 -0
- package/dist/commands/food/image-recognize-detail.d.ts +13 -0
- package/dist/commands/food/image-recognize-detail.d.ts.map +1 -0
- package/dist/commands/food/image-recognize-detail.js +26 -0
- package/dist/commands/food/image-recognize-detail.js.map +1 -0
- package/dist/commands/food/image-recognize.d.ts +13 -0
- package/dist/commands/food/image-recognize.d.ts.map +1 -0
- package/dist/commands/food/image-recognize.js +29 -0
- package/dist/commands/food/image-recognize.js.map +1 -0
- package/dist/commands/food/index.d.ts +7 -0
- package/dist/commands/food/index.d.ts.map +1 -0
- package/dist/commands/food/index.js +10 -0
- package/dist/commands/food/index.js.map +1 -0
- package/dist/commands/food/ingredients.d.ts +13 -0
- package/dist/commands/food/ingredients.d.ts.map +1 -0
- package/dist/commands/food/ingredients.js +31 -0
- package/dist/commands/food/ingredients.js.map +1 -0
- package/dist/commands/food/list.d.ts +20 -0
- package/dist/commands/food/list.d.ts.map +1 -0
- package/dist/commands/food/list.js +37 -0
- package/dist/commands/food/list.js.map +1 -0
- package/dist/commands/food/ranks.d.ts +17 -0
- package/dist/commands/food/ranks.d.ts.map +1 -0
- package/dist/commands/food/ranks.js +39 -0
- package/dist/commands/food/ranks.js.map +1 -0
- package/dist/commands/food/search.d.ts +18 -0
- package/dist/commands/food/search.d.ts.map +1 -0
- package/dist/commands/food/search.js +57 -0
- package/dist/commands/food/search.js.map +1 -0
- package/dist/commands/food/text-recognize.d.ts +13 -0
- package/dist/commands/food/text-recognize.d.ts.map +1 -0
- package/dist/commands/food/text-recognize.js +26 -0
- package/dist/commands/food/text-recognize.js.map +1 -0
- package/dist/commands/food/units.d.ts +10 -0
- package/dist/commands/food/units.d.ts.map +1 -0
- package/dist/commands/food/units.js +23 -0
- package/dist/commands/food/units.js.map +1 -0
- package/dist/commands/index.d.ts +6 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +62 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/meta.d.ts +11 -0
- package/dist/commands/meta.d.ts.map +1 -0
- package/dist/commands/meta.js +76 -0
- package/dist/commands/meta.js.map +1 -0
- package/dist/commands/rank.d.ts +10 -0
- package/dist/commands/rank.d.ts.map +1 -0
- package/dist/commands/rank.js +26 -0
- package/dist/commands/rank.js.map +1 -0
- package/dist/commands/raw.d.ts +19 -0
- package/dist/commands/raw.d.ts.map +1 -0
- package/dist/commands/raw.js +63 -0
- package/dist/commands/raw.js.map +1 -0
- package/dist/commands/recognize-image.d.ts +16 -0
- package/dist/commands/recognize-image.d.ts.map +1 -0
- package/dist/commands/recognize-image.js +106 -0
- package/dist/commands/recognize-image.js.map +1 -0
- package/dist/commands/recognize.d.ts +16 -0
- package/dist/commands/recognize.d.ts.map +1 -0
- package/dist/commands/recognize.js +43 -0
- package/dist/commands/recognize.js.map +1 -0
- package/dist/commands/search.d.ts +10 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +28 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/version.d.ts +7 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +10 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/hooks/prerun.d.ts +4 -0
- package/dist/hooks/prerun.d.ts.map +1 -0
- package/dist/hooks/prerun.js +24 -0
- package/dist/hooks/prerun.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api/client.d.ts +25 -0
- package/dist/lib/api/client.d.ts.map +1 -0
- package/dist/lib/api/client.js +59 -0
- package/dist/lib/api/client.js.map +1 -0
- package/dist/lib/api/endpoints.d.ts +17 -0
- package/dist/lib/api/endpoints.d.ts.map +1 -0
- package/dist/lib/api/endpoints.js +18 -0
- package/dist/lib/api/endpoints.js.map +1 -0
- package/dist/lib/api/index.d.ts +4 -0
- package/dist/lib/api/index.d.ts.map +1 -0
- package/dist/lib/api/index.js +5 -0
- package/dist/lib/api/index.js.map +1 -0
- package/dist/lib/api/interceptors.d.ts +3 -0
- package/dist/lib/api/interceptors.d.ts.map +1 -0
- package/dist/lib/api/interceptors.js +44 -0
- package/dist/lib/api/interceptors.js.map +1 -0
- package/dist/lib/api/types.d.ts +65 -0
- package/dist/lib/api/types.d.ts.map +1 -0
- package/dist/lib/api/types.js +2 -0
- package/dist/lib/api/types.js.map +1 -0
- package/dist/lib/auth.d.ts +17 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +51 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/cache.d.ts +13 -0
- package/dist/lib/cache.d.ts.map +1 -0
- package/dist/lib/cache.js +64 -0
- package/dist/lib/cache.js.map +1 -0
- package/dist/lib/config.d.ts +22 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +139 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/errors/api-error.d.ts +18 -0
- package/dist/lib/errors/api-error.d.ts.map +1 -0
- package/dist/lib/errors/api-error.js +24 -0
- package/dist/lib/errors/api-error.js.map +1 -0
- package/dist/lib/errors/auth-error.d.ts +16 -0
- package/dist/lib/errors/auth-error.d.ts.map +1 -0
- package/dist/lib/errors/auth-error.js +21 -0
- package/dist/lib/errors/auth-error.js.map +1 -0
- package/dist/lib/errors/base.d.ts +10 -0
- package/dist/lib/errors/base.d.ts.map +1 -0
- package/dist/lib/errors/base.js +21 -0
- package/dist/lib/errors/base.js.map +1 -0
- package/dist/lib/errors/config-error.d.ts +12 -0
- package/dist/lib/errors/config-error.d.ts.map +1 -0
- package/dist/lib/errors/config-error.js +20 -0
- package/dist/lib/errors/config-error.js.map +1 -0
- package/dist/lib/errors/index.d.ts +6 -0
- package/dist/lib/errors/index.d.ts.map +1 -0
- package/dist/lib/errors/index.js +7 -0
- package/dist/lib/errors/index.js.map +1 -0
- package/dist/lib/errors/validation-error.d.ts +13 -0
- package/dist/lib/errors/validation-error.d.ts.map +1 -0
- package/dist/lib/errors/validation-error.js +27 -0
- package/dist/lib/errors/validation-error.js.map +1 -0
- package/dist/lib/logger.d.ts +20 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +63 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/output/formatter.d.ts +9 -0
- package/dist/lib/output/formatter.d.ts.map +1 -0
- package/dist/lib/output/formatter.js +8 -0
- package/dist/lib/output/formatter.js.map +1 -0
- package/dist/lib/output/index.d.ts +8 -0
- package/dist/lib/output/index.d.ts.map +1 -0
- package/dist/lib/output/index.js +19 -0
- package/dist/lib/output/index.js.map +1 -0
- package/dist/lib/output/json.d.ts +8 -0
- package/dist/lib/output/json.d.ts.map +1 -0
- package/dist/lib/output/json.js +16 -0
- package/dist/lib/output/json.js.map +1 -0
- package/dist/lib/output/table.d.ts +17 -0
- package/dist/lib/output/table.d.ts.map +1 -0
- package/dist/lib/output/table.js +108 -0
- package/dist/lib/output/table.js.map +1 -0
- package/dist/lib/output/yaml.d.ts +8 -0
- package/dist/lib/output/yaml.d.ts.map +1 -0
- package/dist/lib/output/yaml.js +18 -0
- package/dist/lib/output/yaml.js.map +1 -0
- package/dist/types.d.ts +249 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +76 -0
- package/resources/config-template.json +17 -0
package/README.md
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# Boohee CLI
|
|
2
|
+
|
|
3
|
+
CLI tool for Boohee Open Platform API, optimized for AI Agent integration.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g boohee-cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Set API Key (required)
|
|
15
|
+
export BOOHEE_API_KEY=sk-xxx
|
|
16
|
+
|
|
17
|
+
# Initialize configuration (optional)
|
|
18
|
+
boohee config init
|
|
19
|
+
|
|
20
|
+
# Search for foods
|
|
21
|
+
boohee search 苹果
|
|
22
|
+
|
|
23
|
+
# Get food details
|
|
24
|
+
boohee detail 10001
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Commands
|
|
28
|
+
|
|
29
|
+
### Shortcuts
|
|
30
|
+
|
|
31
|
+
| Command | Description |
|
|
32
|
+
|---------|-------------|
|
|
33
|
+
| `boohee search <keyword>` | Search foods |
|
|
34
|
+
| `boohee detail <code>` | Get food details |
|
|
35
|
+
| `boohee categories` | List food categories |
|
|
36
|
+
| `boohee rank <nutrient>` | Food rankings |
|
|
37
|
+
| `boohee recognize <text>` | Text recognition |
|
|
38
|
+
|
|
39
|
+
### Food Module
|
|
40
|
+
|
|
41
|
+
| Command | Description |
|
|
42
|
+
|---------|-------------|
|
|
43
|
+
| `boohee food:search` | Search foods with full options |
|
|
44
|
+
| `boohee food:detail` | Get detailed food info |
|
|
45
|
+
| `boohee food:categories` | Get food categories |
|
|
46
|
+
| `boohee food:list` | List foods by category |
|
|
47
|
+
| `boohee food:units` | Get food units |
|
|
48
|
+
| `boohee food:ingredients` | Batch nutrition calculation |
|
|
49
|
+
| `boohee food:ranks` | Food rankings |
|
|
50
|
+
| `boohee food:image-recognize` | Image recognition |
|
|
51
|
+
| `boohee food:text-recognize` | Text recognition |
|
|
52
|
+
|
|
53
|
+
### Configuration
|
|
54
|
+
|
|
55
|
+
| Command | Description |
|
|
56
|
+
|---------|-------------|
|
|
57
|
+
| `boohee config:init` | Initialize config |
|
|
58
|
+
| `boohee config:list` | List all config |
|
|
59
|
+
| `boohee config:get <key>` | Get config value |
|
|
60
|
+
| `boohee config:set <key> <value>` | Set config value |
|
|
61
|
+
| `boohee config:reset` | Reset to defaults |
|
|
62
|
+
|
|
63
|
+
### Utilities
|
|
64
|
+
|
|
65
|
+
| Command | Description |
|
|
66
|
+
|---------|-------------|
|
|
67
|
+
| `boohee raw <method> <path>` | Raw API calls |
|
|
68
|
+
| `boohee meta` | Command metadata |
|
|
69
|
+
| `boohee batch` | Batch execution |
|
|
70
|
+
|
|
71
|
+
## Output Formats
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# JSON output (AI Agent recommended)
|
|
75
|
+
boohee search 苹果 -o json
|
|
76
|
+
|
|
77
|
+
# Table output (default)
|
|
78
|
+
boohee search 苹果 -o table
|
|
79
|
+
|
|
80
|
+
# YAML output
|
|
81
|
+
boohee search 苹果 -o yaml
|
|
82
|
+
|
|
83
|
+
# Machine-readable mode
|
|
84
|
+
boohee search 苹果 --machine-readable
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Environment Variables
|
|
88
|
+
|
|
89
|
+
| Variable | Required | Description |
|
|
90
|
+
|----------|----------|-------------|
|
|
91
|
+
| `BOOHEE_API_KEY` | Yes | API Key |
|
|
92
|
+
| `BOOHEE_API_BASE_URL` | No | API base URL |
|
|
93
|
+
| `BOOHEE_OUTPUT_FORMAT` | No | Default output format |
|
|
94
|
+
|
|
95
|
+
## AI Agent Integration
|
|
96
|
+
|
|
97
|
+
### Structured JSON Output
|
|
98
|
+
|
|
99
|
+
All commands support `--output json` for structured output:
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"success": true,
|
|
104
|
+
"data": { ... },
|
|
105
|
+
"meta": {
|
|
106
|
+
"command": "food:search",
|
|
107
|
+
"duration": 234,
|
|
108
|
+
"timestamp": "2024-01-15T10:30:00Z"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Command Discovery
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
boohee meta # All commands
|
|
117
|
+
boohee meta food:search # Specific command
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Error Handling
|
|
121
|
+
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"success": false,
|
|
125
|
+
"error": {
|
|
126
|
+
"code": "AUTH_MISSING",
|
|
127
|
+
"message": "API Key not found",
|
|
128
|
+
"recoverable": true,
|
|
129
|
+
"suggestion": "Set BOOHEE_API_KEY environment variable"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## License
|
|
135
|
+
|
|
136
|
+
MIT
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
-----
|
|
140
|
+
|
|
141
|
+
方式一:发布到 npm(推荐)
|
|
142
|
+
|
|
143
|
+
1. 准备发布
|
|
144
|
+
|
|
145
|
+
cd /Users/a2821/Binlt/Work/Code/open_food/cli
|
|
146
|
+
|
|
147
|
+
# 确认 package.json 信息正确
|
|
148
|
+
npm version patch # 或 minor/major,更新版本号
|
|
149
|
+
|
|
150
|
+
# 登录 npm(首次需要)
|
|
151
|
+
npm login
|
|
152
|
+
|
|
153
|
+
# 发布到 npm
|
|
154
|
+
npm publish
|
|
155
|
+
|
|
156
|
+
2. 别人安装
|
|
157
|
+
|
|
158
|
+
npm install -g boohee-cli
|
|
159
|
+
|
|
160
|
+
# 使用
|
|
161
|
+
boohee --help
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
方式二:从 GitHub 安装
|
|
165
|
+
|
|
166
|
+
1. 推送到 GitHub
|
|
167
|
+
|
|
168
|
+
git remote add origin https://github.com/your-username/boohee-cli.git
|
|
169
|
+
git push -u origin main
|
|
170
|
+
|
|
171
|
+
2. 别人安装
|
|
172
|
+
|
|
173
|
+
# 从 GitHub 直接安装
|
|
174
|
+
npm install -g your-username/boohee-cli
|
|
175
|
+
|
|
176
|
+
# 或者克隆后本地安装
|
|
177
|
+
git clone https://github.com/your-username/boohee-cli.git
|
|
178
|
+
cd boohee-cli
|
|
179
|
+
npm install
|
|
180
|
+
npm link
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
方式三:私有分发(内部使用)
|
|
184
|
+
|
|
185
|
+
1. 打包成 tar.gz
|
|
186
|
+
|
|
187
|
+
cd /Users/a2821/Binlt/Work/Code/open_food/cli
|
|
188
|
+
|
|
189
|
+
# 打包
|
|
190
|
+
npm pack # 生成 boohee-cli-1.0.0.tgz
|
|
191
|
+
|
|
192
|
+
# 分发这个文件给别人
|
|
193
|
+
|
|
194
|
+
2. 别人安装
|
|
195
|
+
|
|
196
|
+
npm install -g boohee-cli-1.0.0.tgz
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
方式四:内部 npm registry
|
|
200
|
+
|
|
201
|
+
如果公司有私有 npm registry:
|
|
202
|
+
|
|
203
|
+
# 发布到私有 registry
|
|
204
|
+
npm publish --registry=https://your-internal-registry.com
|
|
205
|
+
|
|
206
|
+
# 别人安装
|
|
207
|
+
npm install -g boohee-cli --registry=https://your-internal-registry.com
|
package/bin/run.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/usr/bin/env node --no-warnings
|
|
2
|
+
|
|
3
|
+
import { execute } from '@oclif/core'
|
|
4
|
+
import { readFileSync } from 'fs'
|
|
5
|
+
import { fileURLToPath } from 'url'
|
|
6
|
+
import { dirname, join } from 'path'
|
|
7
|
+
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
9
|
+
const __dirname = dirname(__filename)
|
|
10
|
+
const pkgPath = join(__dirname, '..', 'package.json')
|
|
11
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'))
|
|
12
|
+
|
|
13
|
+
const args = process.argv.slice(2)
|
|
14
|
+
|
|
15
|
+
// Handle --version or -v
|
|
16
|
+
if (args.includes('--version') || args.includes('-v')) {
|
|
17
|
+
console.log(pkg.version)
|
|
18
|
+
process.exit(0)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Only show enhanced help when no command is provided
|
|
22
|
+
// If there's a command (first arg doesn't start with -), let oclif handle it
|
|
23
|
+
const firstArg = args[0]
|
|
24
|
+
const isHelpFlag = firstArg === '--help' || firstArg === '-h'
|
|
25
|
+
const hasCommand = firstArg && !firstArg.startsWith('-')
|
|
26
|
+
|
|
27
|
+
if ((args.length === 0 || isHelpFlag) && !hasCommand) {
|
|
28
|
+
console.log(`
|
|
29
|
+
🍎 Boohee CLI v${pkg.version} - 薄荷科学.AI 平台命令行工具
|
|
30
|
+
|
|
31
|
+
用法: boohee <命令> [参数] [选项]
|
|
32
|
+
|
|
33
|
+
快速开始
|
|
34
|
+
────────────────────────────────────────────────────────────────
|
|
35
|
+
export BOOHEE_API_KEY=sk-xxx # 设置 API Key
|
|
36
|
+
boohee search 苹果 # 搜索食物
|
|
37
|
+
boohee detail 10001 # 获取详情
|
|
38
|
+
|
|
39
|
+
常用命令示例
|
|
40
|
+
────────────────────────────────────────────────────────────────
|
|
41
|
+
boohee search 苹果 # 搜索食物
|
|
42
|
+
boohee detail 10001 # 获取详情
|
|
43
|
+
boohee categories # 食物分类
|
|
44
|
+
boohee rank 蛋白质 # 营养排名
|
|
45
|
+
boohee recognize "一杯牛奶" # 文字识别
|
|
46
|
+
boohee recognize-image --url <图片URL> # 图片识别
|
|
47
|
+
|
|
48
|
+
命令列表
|
|
49
|
+
────────────────────────────────────────────────────────────────
|
|
50
|
+
search <关键词> 搜索食物
|
|
51
|
+
detail <编码> 获取食物详情
|
|
52
|
+
categories 获取食物分类
|
|
53
|
+
rank <营养素> 食物营养排名
|
|
54
|
+
recognize 文字识别食物
|
|
55
|
+
recognize-image 图片识别食物
|
|
56
|
+
|
|
57
|
+
food:search 高级搜索 (分页/排序)
|
|
58
|
+
food:detail 详细营养成分
|
|
59
|
+
food:list 按分类获取食物
|
|
60
|
+
food:ingredients 批量营养计算
|
|
61
|
+
|
|
62
|
+
config:init 初始化配置
|
|
63
|
+
config:list 查看配置
|
|
64
|
+
config:set 设置配置项
|
|
65
|
+
auth:status 认证状态
|
|
66
|
+
|
|
67
|
+
查看更多: boohee food --help | boohee config --help
|
|
68
|
+
|
|
69
|
+
输出格式: -o table (默认) | -o json (推荐) | -o yaml
|
|
70
|
+
|
|
71
|
+
`)
|
|
72
|
+
process.exit(0)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
await execute({ development: false, dir: import.meta.url })
|
package/dist/base.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { OutputFormat } from './lib/output/index.js';
|
|
3
|
+
import { CliError } from './lib/errors/index.js';
|
|
4
|
+
export declare abstract class BaseCommand extends Command {
|
|
5
|
+
static baseFlags: {
|
|
6
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
'machine-readable': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
protected startTime: number;
|
|
11
|
+
protected parsedFlags: Record<string, unknown>;
|
|
12
|
+
init(): Promise<void>;
|
|
13
|
+
protected getOutputFormat(): OutputFormat;
|
|
14
|
+
protected getDuration(): number;
|
|
15
|
+
protected output<T>(data: T): void;
|
|
16
|
+
protected outputError(error: CliError): void;
|
|
17
|
+
protected requireAuth(): void;
|
|
18
|
+
protected debugLog(message: string, data?: unknown): void;
|
|
19
|
+
protected getApiKey(): string;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAI5C,OAAO,EAA4B,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,8BAAsB,WAAY,SAAQ,OAAO;IAC/C,MAAM,CAAC,SAAS;;;;MAef;IAED,SAAS,CAAC,SAAS,EAAE,MAAM,CAAI;IAC/B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAK;IAE7C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,SAAS,CAAC,eAAe,IAAI,YAAY;IAKzC,SAAS,CAAC,WAAW,IAAI,MAAM;IAI/B,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IASlC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAU5C,SAAS,CAAC,WAAW,IAAI,IAAI;IAO7B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IASzD,SAAS,CAAC,SAAS,IAAI,MAAM;CAI9B"}
|
package/dist/base.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// src/base.ts
|
|
2
|
+
import { Command, Flags } from '@oclif/core';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { getConfig } from './lib/config.js';
|
|
5
|
+
import { getAuth } from './lib/auth.js';
|
|
6
|
+
import { getFormatter, createMeta } from './lib/output/index.js';
|
|
7
|
+
export class BaseCommand extends Command {
|
|
8
|
+
static baseFlags = {
|
|
9
|
+
'output': Flags.string({
|
|
10
|
+
char: 'o',
|
|
11
|
+
description: 'Output format',
|
|
12
|
+
options: ['json', 'table', 'yaml'],
|
|
13
|
+
}),
|
|
14
|
+
'machine-readable': Flags.boolean({
|
|
15
|
+
description: 'Machine-readable output for AI Agent',
|
|
16
|
+
default: false,
|
|
17
|
+
}),
|
|
18
|
+
'debug': Flags.boolean({
|
|
19
|
+
char: 'd',
|
|
20
|
+
description: 'Enable debug logging',
|
|
21
|
+
default: false,
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
startTime = 0;
|
|
25
|
+
parsedFlags = {};
|
|
26
|
+
async init() {
|
|
27
|
+
await super.init();
|
|
28
|
+
this.startTime = Date.now();
|
|
29
|
+
const { flags } = await this.parse(this.ctor);
|
|
30
|
+
this.parsedFlags = flags;
|
|
31
|
+
// Apply machine-readable mode
|
|
32
|
+
if (this.parsedFlags['machine-readable']) {
|
|
33
|
+
this.parsedFlags.output = 'json';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
getOutputFormat() {
|
|
37
|
+
const config = getConfig();
|
|
38
|
+
return this.parsedFlags.output || config.get('output').format;
|
|
39
|
+
}
|
|
40
|
+
getDuration() {
|
|
41
|
+
return Date.now() - this.startTime;
|
|
42
|
+
}
|
|
43
|
+
output(data) {
|
|
44
|
+
const format = this.getOutputFormat();
|
|
45
|
+
const config = getConfig();
|
|
46
|
+
const formatter = getFormatter(format, config.get('output').color && !this.parsedFlags['machine-readable']);
|
|
47
|
+
const meta = createMeta(this.id || 'unknown', this.getDuration());
|
|
48
|
+
this.log(formatter.format(data, meta));
|
|
49
|
+
}
|
|
50
|
+
outputError(error) {
|
|
51
|
+
const format = this.getOutputFormat();
|
|
52
|
+
const config = getConfig();
|
|
53
|
+
const formatter = getFormatter(format, config.get('output').color && !this.parsedFlags['machine-readable']);
|
|
54
|
+
this.error(formatter.formatError(error), {
|
|
55
|
+
exit: error.recoverable ? 1 : 2,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
requireAuth() {
|
|
59
|
+
const auth = getAuth();
|
|
60
|
+
if (!auth.hasApiKey()) {
|
|
61
|
+
throw new Error('API Key not found. Set BOOHEE_API_KEY environment variable.');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
debugLog(message, data) {
|
|
65
|
+
if (this.parsedFlags.debug) {
|
|
66
|
+
this.log(chalk.gray(`[DEBUG] ${message}`));
|
|
67
|
+
if (data) {
|
|
68
|
+
this.log(chalk.gray(JSON.stringify(data, null, 2)));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
getApiKey() {
|
|
73
|
+
this.requireAuth();
|
|
74
|
+
return getAuth().getApiKey();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=base.js.map
|
package/dist/base.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAIrC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAAgC;IAElD,MAAM,CAAC,QAAQ,WAAoC;IAE7C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB3B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// src/commands/auth/status.ts
|
|
2
|
+
import { Command } from '@oclif/core';
|
|
3
|
+
import { getAuth } from '../../lib/auth.js';
|
|
4
|
+
import { getFormatter, createMeta } from '../../lib/output/index.js';
|
|
5
|
+
export default class AuthStatus extends Command {
|
|
6
|
+
static description = 'Check authentication status';
|
|
7
|
+
static examples = ['<%= config.bin %> auth:status'];
|
|
8
|
+
async run() {
|
|
9
|
+
const auth = getAuth();
|
|
10
|
+
const status = auth.getStatus();
|
|
11
|
+
const formatter = getFormatter('json', false);
|
|
12
|
+
const meta = createMeta('auth:status', 0);
|
|
13
|
+
if (status.authenticated) {
|
|
14
|
+
this.log(formatter.format({
|
|
15
|
+
status: 'authenticated',
|
|
16
|
+
apiKey: status.apiKey,
|
|
17
|
+
source: status.source,
|
|
18
|
+
}, meta));
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
this.log(formatter.format({
|
|
22
|
+
status: 'not_authenticated',
|
|
23
|
+
suggestion: 'Set BOOHEE_API_KEY environment variable',
|
|
24
|
+
}, meta));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAEpE,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,GAAG,6BAA6B,CAAA;IAElD,MAAM,CAAC,QAAQ,GAAG,CAAC,+BAA+B,CAAC,CAAA;IAEnD,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAE/B,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;QAEzC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC;gBACxB,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,EAAE,IAAI,CAAC,CAAC,CAAA;QACX,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC;gBACxB,MAAM,EAAE,mBAAmB;gBAC3B,UAAU,EAAE,yCAAyC;aACtD,EAAE,IAAI,CAAC,CAAC,CAAA;QACX,CAAC;IACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseCommand } from '../base.js';
|
|
2
|
+
export default class Batch extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
file: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
commands: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
'machine-readable': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
private executeCommand;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=batch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../src/commands/batch.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAexC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC5C,MAAM,CAAC,WAAW,SAAuC;IAEzD,MAAM,CAAC,QAAQ,WAGd;IAED,MAAM,CAAC,KAAK;;;;;;MAUX;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAoCZ,cAAc;CAQ7B"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// src/commands/batch.ts
|
|
2
|
+
import { Flags } from '@oclif/core';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import { BaseCommand } from '../base.js';
|
|
5
|
+
export default class Batch extends BaseCommand {
|
|
6
|
+
static description = 'Execute multiple commands in batch';
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> batch --file commands.json',
|
|
9
|
+
'<%= config.bin %> batch --commands \'[{"command":"food:search","args":["苹果"]}]\'',
|
|
10
|
+
];
|
|
11
|
+
static flags = {
|
|
12
|
+
...BaseCommand.baseFlags,
|
|
13
|
+
file: Flags.string({
|
|
14
|
+
description: 'JSON file containing commands',
|
|
15
|
+
exclusive: ['commands'],
|
|
16
|
+
}),
|
|
17
|
+
commands: Flags.string({
|
|
18
|
+
description: 'JSON array of commands',
|
|
19
|
+
exclusive: ['file'],
|
|
20
|
+
}),
|
|
21
|
+
};
|
|
22
|
+
async run() {
|
|
23
|
+
const { flags } = await this.parse(Batch);
|
|
24
|
+
let commands;
|
|
25
|
+
if (flags.file) {
|
|
26
|
+
const content = fs.readFileSync(flags.file, 'utf-8');
|
|
27
|
+
commands = JSON.parse(content);
|
|
28
|
+
}
|
|
29
|
+
else if (flags.commands) {
|
|
30
|
+
commands = JSON.parse(flags.commands);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
this.error('Either --file or --commands is required');
|
|
34
|
+
}
|
|
35
|
+
const results = [];
|
|
36
|
+
for (const cmd of commands) {
|
|
37
|
+
try {
|
|
38
|
+
const result = await this.executeCommand(cmd);
|
|
39
|
+
results.push({
|
|
40
|
+
command: cmd.command,
|
|
41
|
+
success: true,
|
|
42
|
+
result,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
results.push({
|
|
47
|
+
command: cmd.command,
|
|
48
|
+
success: false,
|
|
49
|
+
error: error instanceof Error ? error.message : String(error),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
this.output(results);
|
|
54
|
+
}
|
|
55
|
+
async executeCommand(cmd) {
|
|
56
|
+
const args = cmd.args || [];
|
|
57
|
+
const flagArgs = cmd.flags
|
|
58
|
+
? Object.entries(cmd.flags).flatMap(([key, value]) => [`--${key}`, String(value)])
|
|
59
|
+
: [];
|
|
60
|
+
return this.config.runCommand(cmd.command, [...args, ...flagArgs]);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../src/commands/batch.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAexC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC5C,MAAM,CAAC,WAAW,GAAG,oCAAoC,CAAA;IAEzD,MAAM,CAAC,QAAQ,GAAG;QAChB,8CAA8C;QAC9C,kFAAkF;KACnF,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,WAAW,CAAC,SAAS;QACxB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE,+BAA+B;YAC5C,SAAS,EAAE,CAAC,UAAU,CAAC;SACxB,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YACrB,WAAW,EAAE,wBAAwB;YACrC,SAAS,EAAE,CAAC,MAAM,CAAC;SACpB,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAEzC,IAAI,QAAwB,CAAA;QAE5B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YACpD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAChC,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC1B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACvC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAA;QACvD,CAAC;QAED,MAAM,OAAO,GAAkB,EAAE,CAAA;QAEjC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;gBAC7C,OAAO,CAAC,IAAI,CAAC;oBACX,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,OAAO,EAAE,IAAI;oBACb,MAAM;iBACP,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC;oBACX,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACtB,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,GAAiB;QAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAA;QAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK;YACxB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAClF,CAAC,CAAC,EAAE,CAAA;QAEN,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAA;IACpE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../src/commands/categories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGxC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,WAAW,SAAuD;IAEzE,MAAM,CAAC,QAAQ,WAAmC;IAE5C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAY3B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// src/commands/categories.ts
|
|
2
|
+
import { BaseCommand } from '../base.js';
|
|
3
|
+
import { ApiClient } from '../lib/api/index.js';
|
|
4
|
+
export default class Categories extends BaseCommand {
|
|
5
|
+
static description = 'Get food categories (shortcut for food:categories)';
|
|
6
|
+
static examples = ['<%= config.bin %> categories'];
|
|
7
|
+
async run() {
|
|
8
|
+
await this.parse(Categories);
|
|
9
|
+
const client = new ApiClient(this.getApiKey(), undefined, undefined, this.debugLog.bind(this));
|
|
10
|
+
const result = await client.foodCategories();
|
|
11
|
+
this.output(result);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=categories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categories.js","sourceRoot":"","sources":["../../src/commands/categories.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAE/C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,WAAW,GAAG,oDAAoD,CAAA;IAEzE,MAAM,CAAC,QAAQ,GAAG,CAAC,8BAA8B,CAAC,CAAA;IAElD,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAC5B,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,IAAI,CAAC,SAAS,EAAE,EAChB,SAAS,EACT,SAAS,EACT,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CACzB,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAA;QAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class ConfigGet extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
key: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=get.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/config/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAQ,MAAM,aAAa,CAAA;AAI3C,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,SAA8B;IAEhD,MAAM,CAAC,QAAQ,WAGd;IAED,MAAM,CAAC,IAAI;;MAKV;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAa3B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// src/commands/config/get.ts
|
|
2
|
+
import { Command, Args } from '@oclif/core';
|
|
3
|
+
import { getConfig } from '../../lib/config.js';
|
|
4
|
+
import { getFormatter, createMeta } from '../../lib/output/index.js';
|
|
5
|
+
export default class ConfigGet extends Command {
|
|
6
|
+
static description = 'Get a configuration value';
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> config get api.baseUrl',
|
|
9
|
+
'<%= config.bin %> config get output.format',
|
|
10
|
+
];
|
|
11
|
+
static args = {
|
|
12
|
+
key: Args.string({
|
|
13
|
+
description: 'Configuration key (dot notation)',
|
|
14
|
+
required: true,
|
|
15
|
+
}),
|
|
16
|
+
};
|
|
17
|
+
async run() {
|
|
18
|
+
const { args } = await this.parse(ConfigGet);
|
|
19
|
+
const config = getConfig();
|
|
20
|
+
const value = config.getByPath(args.key);
|
|
21
|
+
const formatter = getFormatter('json', false);
|
|
22
|
+
const meta = createMeta('config:get', 0);
|
|
23
|
+
this.log(formatter.format({
|
|
24
|
+
key: args.key,
|
|
25
|
+
value,
|
|
26
|
+
}, meta));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/config/get.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAEpE,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,GAAG,2BAA2B,CAAA;IAEhD,MAAM,CAAC,QAAQ,GAAG;QAChB,0CAA0C;QAC1C,4CAA4C;KAC7C,CAAA;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;YACf,WAAW,EAAE,kCAAkC;YAC/C,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAExC,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;QAExC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC;YACxB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK;SACN,EAAE,IAAI,CAAC,CAAC,CAAA;IACX,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class ConfigInit extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
'output-format': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
cache: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/config/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAI5C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAAkC;IAEpD,MAAM,CAAC,QAAQ,WAAoC;IAEnD,MAAM,CAAC,KAAK;;;;MAIX;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4B3B"}
|