@optima-chat/optima-agent 0.4.20 → 0.4.22
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/.claude/skills/homepage/SKILL.md +58 -14
- package/.claude/skills/order/SKILL.md +35 -5
- package/.claude/skills/product/SKILL.md +5 -0
- package/dist/bin/bi-cli.js +0 -0
- package/dist/bin/comfy.js +0 -0
- package/dist/bin/commerce.js +0 -0
- package/dist/bin/google-ads.js +0 -0
- package/dist/bin/optima.js +0 -0
- package/dist/bin/scout.js +0 -0
- package/package.json +1 -1
- package/.claude/settings.local.json +0 -76
- package/dist/src/ui/App.d.ts +0 -6
- package/dist/src/ui/App.d.ts.map +0 -1
- package/dist/src/ui/App.js +0 -164
- package/dist/src/ui/App.js.map +0 -1
- package/dist/src/ui/components/Composer.d.ts +0 -10
- package/dist/src/ui/components/Composer.d.ts.map +0 -1
- package/dist/src/ui/components/Composer.js +0 -13
- package/dist/src/ui/components/Composer.js.map +0 -1
- package/dist/src/ui/components/Header.d.ts +0 -7
- package/dist/src/ui/components/Header.d.ts.map +0 -1
- package/dist/src/ui/components/Header.js +0 -7
- package/dist/src/ui/components/Header.js.map +0 -1
- package/dist/src/ui/components/Message.d.ts +0 -12
- package/dist/src/ui/components/Message.d.ts.map +0 -1
- package/dist/src/ui/components/Message.js +0 -21
- package/dist/src/ui/components/Message.js.map +0 -1
- package/dist/src/ui/components/MessageList.d.ts +0 -9
- package/dist/src/ui/components/MessageList.d.ts.map +0 -1
- package/dist/src/ui/components/MessageList.js +0 -18
- package/dist/src/ui/components/MessageList.js.map +0 -1
- package/dist/src/ui/components/Spinner.d.ts +0 -6
- package/dist/src/ui/components/Spinner.d.ts.map +0 -1
- package/dist/src/ui/components/Spinner.js +0 -7
- package/dist/src/ui/components/Spinner.js.map +0 -1
- package/dist/src/ui/components/StatusBar.d.ts +0 -11
- package/dist/src/ui/components/StatusBar.d.ts.map +0 -1
- package/dist/src/ui/components/StatusBar.js +0 -7
- package/dist/src/ui/components/StatusBar.js.map +0 -1
- package/dist/src/ui/components/index.d.ts +0 -7
- package/dist/src/ui/components/index.d.ts.map +0 -1
- package/dist/src/ui/components/index.js +0 -7
- package/dist/src/ui/components/index.js.map +0 -1
|
@@ -29,13 +29,17 @@ Homepage
|
|
|
29
29
|
├── 基本信息
|
|
30
30
|
│ ├── id: 区块 ID
|
|
31
31
|
│ ├── type: 类型(见下方)
|
|
32
|
-
│ ├── title: 标题
|
|
33
32
|
│ ├── handle: URL 标识
|
|
34
33
|
│ └── position: 显示顺序(0 开始)
|
|
35
34
|
│
|
|
36
|
-
|
|
35
|
+
├── settings: 类型特定配置(JSONB)
|
|
36
|
+
│
|
|
37
|
+
└── translations: 多语言标题/描述(JSONB)
|
|
38
|
+
└── { "zh-CN": { "title": "...", "description": "..." }, ... }
|
|
37
39
|
```
|
|
38
40
|
|
|
41
|
+
**注意**:区块的 title 和 description 存储在 `translations` 字段中,需要指定语言代码。
|
|
42
|
+
|
|
39
43
|
## 区块类型详解
|
|
40
44
|
|
|
41
45
|
### 1. banner(图片轮播)
|
|
@@ -164,12 +168,15 @@ Homepage
|
|
|
164
168
|
当用户说:
|
|
165
169
|
- "查看首页配置" → `commerce homepage get-config`
|
|
166
170
|
- "查看首页区块" → `commerce homepage list`
|
|
167
|
-
- "添加轮播图" → `commerce homepage create-banner --title "主Banner" --images '[{"url":"..."}]'`
|
|
168
|
-
- "添加集合入口" → `commerce homepage create-collections --title "精选系列" --slugs "a,b,c"`
|
|
169
|
-
- "添加集合商品" → `commerce homepage create-collection-products --title "新品" --slug new-arrivals`
|
|
170
|
-
- "添加特色推荐" → `commerce homepage create-featured --title "推荐" --target-type collection --target-handle xx --cta "查看" --image-url "..."`
|
|
171
|
+
- "添加轮播图" → `commerce homepage create-banner --title "主Banner" --lang <识别语言> --images '[{"url":"..."}]'`
|
|
172
|
+
- "添加集合入口" → `commerce homepage create-collections --title "精选系列" --lang <识别语言> --slugs "a,b,c"`
|
|
173
|
+
- "添加集合商品" → `commerce homepage create-collection-products --title "新品" --lang <识别语言> --slug new-arrivals`
|
|
174
|
+
- "添加特色推荐" → `commerce homepage create-featured --title "推荐" --lang <识别语言> --target-type collection --target-handle xx --cta "查看" --image-url "..."`
|
|
171
175
|
- "更新轮播图图片" → `commerce homepage update-images --id xx --images '[...]'`
|
|
176
|
+
- "修改区块标题" → `commerce i18n homepage set --section-id xx --lang <识别语言> --title "新标题"`
|
|
177
|
+
- "给区块添加描述" → `commerce i18n homepage set --section-id xx --lang <识别语言> --description "描述"`
|
|
172
178
|
- "调整区块顺序" → `commerce homepage reorder --moves '[{"section_id":"id1","new_position":0}]'`
|
|
179
|
+
- "使用模板" → `commerce homepage switch-template --template-key minimal`
|
|
173
180
|
- "删除区块" → `commerce homepage delete --id xx --yes`
|
|
174
181
|
|
|
175
182
|
## 命令参考
|
|
@@ -180,11 +187,11 @@ Homepage
|
|
|
180
187
|
- `commerce homepage switch-template --template-key <key>` - 切换模板(minimal|standard)
|
|
181
188
|
- `commerce homepage delete-config --yes` - 删除首页配置
|
|
182
189
|
|
|
183
|
-
###
|
|
184
|
-
- `commerce homepage create-banner --title <title> --images <json>` - 创建轮播图
|
|
185
|
-
- `commerce homepage create-collections --title <title> --slugs <slugs>` - 创建集合入口
|
|
186
|
-
- `commerce homepage create-collection-products --title <title> --slug <slug>` - 创建集合商品
|
|
187
|
-
- `commerce homepage create-featured --title <title> --target-type <type> --target-handle <handle> --cta <text> --image-url <url>` - 创建特色推荐
|
|
190
|
+
### 创建区块(支持 --title --description --lang)
|
|
191
|
+
- `commerce homepage create-banner --title <title> --lang <code> --images <json>` - 创建轮播图
|
|
192
|
+
- `commerce homepage create-collections --title <title> --lang <code> --slugs <slugs>` - 创建集合入口
|
|
193
|
+
- `commerce homepage create-collection-products --title <title> --lang <code> --slug <slug>` - 创建集合商品
|
|
194
|
+
- `commerce homepage create-featured --title <title> --lang <code> --target-type <type> --target-handle <handle> --cta <text> --image-url <url>` - 创建特色推荐
|
|
188
195
|
|
|
189
196
|
### 区块管理
|
|
190
197
|
- `commerce homepage list` - 列出所有区块
|
|
@@ -199,6 +206,20 @@ Homepage
|
|
|
199
206
|
- `commerce homepage update-target --id <id> --type <type> --handle <handle>` - 更新 featured 目标
|
|
200
207
|
- `commerce homepage patch-settings --id <id> --settings <json>` - 通用设置更新
|
|
201
208
|
|
|
209
|
+
### 多语言翻译
|
|
210
|
+
- `commerce i18n homepage list --section-id <id>` - 查看区块所有翻译
|
|
211
|
+
- `commerce i18n homepage set --section-id <id> --lang <code> --title <title> --description <desc>` - 设置翻译
|
|
212
|
+
- `commerce i18n homepage delete --section-id <id> --lang <code> --yes` - 删除翻译
|
|
213
|
+
- `commerce i18n languages` - 查看支持的语言列表
|
|
214
|
+
|
|
215
|
+
## 语言代码
|
|
216
|
+
|
|
217
|
+
设置标题和描述时必须指定 `--lang`。
|
|
218
|
+
|
|
219
|
+
支持的语言:`zh-CN`、`en-US`、`ja-JP`、`es-ES`、`vi-VN`
|
|
220
|
+
|
|
221
|
+
根据用户提供的文字内容识别语言。如果无法确定,询问用户。
|
|
222
|
+
|
|
202
223
|
## 典型操作示例
|
|
203
224
|
|
|
204
225
|
### 快速开始:使用模板
|
|
@@ -214,9 +235,10 @@ commerce homepage switch-template --template-key standard --yes
|
|
|
214
235
|
### 创建轮播图
|
|
215
236
|
|
|
216
237
|
```bash
|
|
217
|
-
# 创建 banner
|
|
238
|
+
# 创建 banner 并设置图片
|
|
218
239
|
commerce homepage create-banner \
|
|
219
240
|
--title "首页轮播" \
|
|
241
|
+
--lang zh-CN \
|
|
220
242
|
--images '[{"url":"https://cdn.../img1.jpg","link":"/sale"}]'
|
|
221
243
|
|
|
222
244
|
# 后续更新图片
|
|
@@ -228,9 +250,10 @@ commerce homepage update-images \
|
|
|
228
250
|
### 创建集合入口
|
|
229
251
|
|
|
230
252
|
```bash
|
|
231
|
-
# 创建 collections
|
|
253
|
+
# 创建 collections 区块
|
|
232
254
|
commerce homepage create-collections \
|
|
233
255
|
--title "精选系列" \
|
|
256
|
+
--lang zh-CN \
|
|
234
257
|
--slugs "new-arrivals,best-sellers,summer-sale"
|
|
235
258
|
|
|
236
259
|
# 后续更新集合列表
|
|
@@ -243,6 +266,7 @@ commerce homepage update-collections --id section_xxx --slugs "a,b,c"
|
|
|
243
266
|
# 创建 collection_products 区块
|
|
244
267
|
commerce homepage create-collection-products \
|
|
245
268
|
--title "新品上市" \
|
|
269
|
+
--lang zh-CN \
|
|
246
270
|
--slug new-arrivals \
|
|
247
271
|
--limit 8
|
|
248
272
|
```
|
|
@@ -253,6 +277,8 @@ commerce homepage create-collection-products \
|
|
|
253
277
|
# 推荐集合
|
|
254
278
|
commerce homepage create-featured \
|
|
255
279
|
--title "本周推荐" \
|
|
280
|
+
--description "精选好物,限时优惠" \
|
|
281
|
+
--lang zh-CN \
|
|
256
282
|
--target-type collection \
|
|
257
283
|
--target-handle weekly-picks \
|
|
258
284
|
--cta "立即查看" \
|
|
@@ -261,6 +287,7 @@ commerce homepage create-featured \
|
|
|
261
287
|
# 推荐商品
|
|
262
288
|
commerce homepage create-featured \
|
|
263
289
|
--title "爆款单品" \
|
|
290
|
+
--lang zh-CN \
|
|
264
291
|
--target-type product \
|
|
265
292
|
--target-handle ceramic-cup-white \
|
|
266
293
|
--cta "立即购买" \
|
|
@@ -270,6 +297,24 @@ commerce homepage create-featured \
|
|
|
270
297
|
commerce homepage update-target --id section_xxx --type collection --handle "new-picks"
|
|
271
298
|
```
|
|
272
299
|
|
|
300
|
+
### 更新标题和描述
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
# 更新中文
|
|
304
|
+
commerce i18n homepage set \
|
|
305
|
+
--section-id section_xxx \
|
|
306
|
+
--lang zh-CN \
|
|
307
|
+
--title "新标题" \
|
|
308
|
+
--description "新描述"
|
|
309
|
+
|
|
310
|
+
# 添加英文翻译
|
|
311
|
+
commerce i18n homepage set \
|
|
312
|
+
--section-id section_xxx \
|
|
313
|
+
--lang en-US \
|
|
314
|
+
--title "New Title" \
|
|
315
|
+
--description "New description"
|
|
316
|
+
```
|
|
317
|
+
|
|
273
318
|
## 注意事项
|
|
274
319
|
|
|
275
320
|
- **区块顺序**:使用 `reorder` 调整,position 从 0 开始
|
|
@@ -277,4 +322,3 @@ commerce homepage update-target --id section_xxx --type collection --handle "new
|
|
|
277
322
|
- **图片格式**:banner images 需要完整的 JSON 数组,每个元素必须有 url 和 alt
|
|
278
323
|
- **集合引用**:确保引用的 collection slug 存在,否则前端可能显示空
|
|
279
324
|
- **删除确认**:删除操作需要 `--yes` 参数
|
|
280
|
-
- **slugs 参数**:逗号分隔,不要有空格
|
|
@@ -12,6 +12,7 @@ description: Order fulfillment and shipping management. Process orders, ship pac
|
|
|
12
12
|
当用户说:
|
|
13
13
|
- "查看待发货订单" → `commerce order list --status paid`
|
|
14
14
|
- "订单XX发货" → 先查订单详情,根据 shipping_mode_used 决定发货方式(见下方流程)
|
|
15
|
+
- "查询订单物流" / "运单标签好了吗" → `commerce order tracking --id XX`
|
|
15
16
|
- "取消订单XX" → `commerce order cancel --id XX --yes`
|
|
16
17
|
- "标记订单已送达" → `commerce order mark-delivered --id XX`
|
|
17
18
|
- "查询运费" → `commerce shipping calculate --country XX --weight YY`
|
|
@@ -84,9 +85,27 @@ commerce order ship --id <order-id> --easyship --courier-id <courier-id>
|
|
|
84
85
|
**返回结果包含**:
|
|
85
86
|
- `tracking_number`: 自动生成的运单号
|
|
86
87
|
- `tracking_url`: 快递跟踪链接
|
|
87
|
-
- `label_url`:
|
|
88
|
+
- `label_url`: 运单标签下载链接(可能为空)
|
|
89
|
+
- `label_state`: 标签状态
|
|
88
90
|
- `carrier`: 快递公司名称
|
|
89
91
|
|
|
92
|
+
**运单标签处理(重要)**:
|
|
93
|
+
|
|
94
|
+
运单标签是用户必须打印并贴在包裹上的快递单。Easyship 生成标签需要几秒到几分钟。
|
|
95
|
+
|
|
96
|
+
**发货后根据 label_state 处理**:
|
|
97
|
+
|
|
98
|
+
| label_state | 含义 | 处理方式 |
|
|
99
|
+
|-------------|------|----------|
|
|
100
|
+
| `generated` / `printed` | 标签已生成 | 提供 `label_url` 让用户下载打印 |
|
|
101
|
+
| `pending` / `generating` | 标签生成中 | 告知用户「标签正在生成,稍后可以让我帮你查询」 |
|
|
102
|
+
| `failed` / `technical_failed` | 生成失败 | 告知用户需要检查 EasyShip 后台或重新发货 |
|
|
103
|
+
|
|
104
|
+
**查询标签状态**:
|
|
105
|
+
```bash
|
|
106
|
+
commerce order tracking --id <order-id>
|
|
107
|
+
```
|
|
108
|
+
|
|
90
109
|
**查看可用快递**:
|
|
91
110
|
```bash
|
|
92
111
|
commerce easyship couriers
|
|
@@ -154,10 +173,20 @@ AskUserQuestion:
|
|
|
154
173
|
用户:[选择 Easyship 自动发货]
|
|
155
174
|
|
|
156
175
|
助手:[执行 Bash: commerce order ship --id order_abc --easyship]
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
176
|
+
[检查返回结果中的 label_state]
|
|
177
|
+
|
|
178
|
+
[情况A:label_state = "generated",有 label_url]
|
|
179
|
+
发货成功!运单号 ES123456789,快递公司 FedEx。
|
|
180
|
+
运单标签已生成,请下载打印后贴在包裹上:https://...
|
|
181
|
+
|
|
182
|
+
[情况B:label_state = "pending" 或 "generating"]
|
|
183
|
+
发货成功!运单号 ES123456789,快递公司 FedEx。
|
|
184
|
+
运单标签正在生成中,稍后可以让我帮你查询。
|
|
185
|
+
|
|
186
|
+
用户:查一下标签好了没
|
|
187
|
+
|
|
188
|
+
助手:[执行 Bash: commerce order tracking --id order_abc]
|
|
189
|
+
运单标签已生成,请下载打印后贴在包裹上:https://...
|
|
161
190
|
```
|
|
162
191
|
|
|
163
192
|
**场景2:固定运费订单**
|
|
@@ -254,6 +283,7 @@ commerce order ship --id order_789 --tracking DHL123458 --carrier DHL
|
|
|
254
283
|
- `commerce order list` - 查看订单列表
|
|
255
284
|
- `commerce order get` - 查看订单详情
|
|
256
285
|
- `commerce order ship` - 标记订单发货
|
|
286
|
+
- `commerce order tracking` - 查询物流跟踪和标签状态
|
|
257
287
|
- `commerce order cancel` - 取消订单
|
|
258
288
|
- `commerce order complete` - 完成订单
|
|
259
289
|
- `commerce order mark-delivered` - 标记已送达
|
|
@@ -188,6 +188,7 @@ commerce product create --title "T恤" --price 99 --stock 50 # 确保真实有5
|
|
|
188
188
|
- "添加商品变体" → `commerce variant create --product-id XX --sku YY`
|
|
189
189
|
- "更新商品价格" → `commerce product update --id XX --price YY`
|
|
190
190
|
- "给商品打标签" → `commerce product update --id XX --tags "featured,new"`
|
|
191
|
+
- "设置商品重量和尺寸" → `commerce product update --id XX --weight 0.5 --length 10 --width 8 --height 5`
|
|
191
192
|
- "查看所有商品" → `commerce product list`
|
|
192
193
|
|
|
193
194
|
### 核心功能
|
|
@@ -305,3 +306,7 @@ commerce product get --id prod_123
|
|
|
305
306
|
- 使用 `--help` 查看命令详细参数
|
|
306
307
|
- 删除商品会同时删除所有变体和图片关联
|
|
307
308
|
- 价格单位默认为美元(USD),可通过后台配置修改
|
|
309
|
+
- **重量单位:kg**(如 0.5 表示 500g)
|
|
310
|
+
- **尺寸单位:cm**(length/width/height)
|
|
311
|
+
- 集合 slug 必须唯一,用于 URL,使用英文和连字符
|
|
312
|
+
- 集合封面支持三种方式:`--media-id`(推荐)、`--url`、`--path`
|
package/dist/bin/bi-cli.js
CHANGED
|
File without changes
|
package/dist/bin/comfy.js
CHANGED
|
File without changes
|
package/dist/bin/commerce.js
CHANGED
|
File without changes
|
package/dist/bin/google-ads.js
CHANGED
|
File without changes
|
package/dist/bin/optima.js
CHANGED
|
File without changes
|
package/dist/bin/scout.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"permissions": {
|
|
3
|
-
"allow": [
|
|
4
|
-
"Bash(gh api:*)",
|
|
5
|
-
"WebFetch(domain:platform.claude.com)",
|
|
6
|
-
"Bash(git init:*)",
|
|
7
|
-
"Bash(mkdir:*)",
|
|
8
|
-
"Bash(npm run typecheck:*)",
|
|
9
|
-
"Bash(npm view:*)",
|
|
10
|
-
"WebSearch",
|
|
11
|
-
"Bash(commerce --help)",
|
|
12
|
-
"Bash(done)",
|
|
13
|
-
"Bash(commerce product:*)",
|
|
14
|
-
"Bash(commerce order:*)",
|
|
15
|
-
"Bash(commerce i18n:*)",
|
|
16
|
-
"Bash(google-ads:*)",
|
|
17
|
-
"Bash(scout --help:*)",
|
|
18
|
-
"Bash(tree:*)",
|
|
19
|
-
"Bash(cloc:*)",
|
|
20
|
-
"Bash(npm run build:*)",
|
|
21
|
-
"Bash(git restore:*)",
|
|
22
|
-
"Bash(gh repo view:*)",
|
|
23
|
-
"Bash(mv:*)",
|
|
24
|
-
"Bash(rmdir:*)",
|
|
25
|
-
"Bash(git add:*)",
|
|
26
|
-
"Bash(git commit:*)",
|
|
27
|
-
"Bash(git push)",
|
|
28
|
-
"Bash(timeout 5 npm run optima:*)",
|
|
29
|
-
"Bash(npm install:*)",
|
|
30
|
-
"Bash(cat:*)",
|
|
31
|
-
"Bash(gh issue create:*)",
|
|
32
|
-
"Bash(npx tsx:*)",
|
|
33
|
-
"Bash(timeout 30 npx tsx:*)",
|
|
34
|
-
"Bash(git push origin feature/ask-user-question)",
|
|
35
|
-
"Bash(node:*)",
|
|
36
|
-
"Bash(npm version:*)",
|
|
37
|
-
"Bash(git push:*)",
|
|
38
|
-
"Bash(npm publish:*)",
|
|
39
|
-
"Bash(pkill:*)",
|
|
40
|
-
"Bash(git -C /Users/verypro/optima-agent log --oneline --all -- \".claude/\")",
|
|
41
|
-
"Bash(wc:*)",
|
|
42
|
-
"Bash(grep:*)",
|
|
43
|
-
"Bash(find:*)",
|
|
44
|
-
"Bash(commerce collection --help:*)",
|
|
45
|
-
"Bash(commerce collection update --help:*)",
|
|
46
|
-
"Bash(commerce collection set-cover:*)",
|
|
47
|
-
"Bash(commerce collection get --help:*)",
|
|
48
|
-
"Bash(commerce collection list --help:*)",
|
|
49
|
-
"Bash(commerce collection create --help:*)",
|
|
50
|
-
"Bash(commerce collection remove-products:*)",
|
|
51
|
-
"Bash(commerce collection list-products:*)",
|
|
52
|
-
"Bash(commerce --version:*)",
|
|
53
|
-
"Bash(bi-cli --version:*)",
|
|
54
|
-
"Bash(commerce homepage create --help:*)",
|
|
55
|
-
"Bash(commerce homepage reorder --help:*)",
|
|
56
|
-
"Bash(commerce homepage delete --help:*)",
|
|
57
|
-
"Bash(commerce homepage update-images:*)",
|
|
58
|
-
"Bash(commerce homepage update-collections:*)",
|
|
59
|
-
"Bash(commerce homepage update-target:*)",
|
|
60
|
-
"Bash(commerce homepage switch-template:*)",
|
|
61
|
-
"Bash(commerce inventory:*)",
|
|
62
|
-
"Bash(commerce merchant:*)",
|
|
63
|
-
"Bash(commerce review:*)",
|
|
64
|
-
"Bash(commerce product-page:*)",
|
|
65
|
-
"Bash(bi-cli:*)",
|
|
66
|
-
"Bash(comfy:*)",
|
|
67
|
-
"Bash(scout search:*)",
|
|
68
|
-
"Bash(scout product:*)",
|
|
69
|
-
"Bash(commerce homepage create-collections:*)",
|
|
70
|
-
"Bash(commerce homepage create-featured:*)",
|
|
71
|
-
"Bash(commerce homepage create-collection-products:*)"
|
|
72
|
-
],
|
|
73
|
-
"deny": [],
|
|
74
|
-
"ask": []
|
|
75
|
-
}
|
|
76
|
-
}
|
package/dist/src/ui/App.d.ts
DELETED
package/dist/src/ui/App.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/ui/App.tsx"],"names":[],"mappings":"AAcA,UAAU,QAAQ;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,2CAqMpC"}
|
package/dist/src/ui/App.js
DELETED
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useCallback, useRef } from "react";
|
|
3
|
-
import { Box, useApp, useInput } from "ink";
|
|
4
|
-
import { Header, Composer, MessageList, StatusBar, Spinner, } from "./components/index.js";
|
|
5
|
-
import { OptimaAgent } from "../agent.js";
|
|
6
|
-
const VERSION = "0.1.25";
|
|
7
|
-
export function App({ cwd }) {
|
|
8
|
-
const { exit } = useApp();
|
|
9
|
-
const [input, setInput] = useState("");
|
|
10
|
-
const [messages, setMessages] = useState([]);
|
|
11
|
-
const [isProcessing, setIsProcessing] = useState(false);
|
|
12
|
-
const [skills, setSkills] = useState([]);
|
|
13
|
-
const [tokens, setTokens] = useState();
|
|
14
|
-
const [agent] = useState(() => new OptimaAgent({ cwd }));
|
|
15
|
-
const abortControllerRef = useRef(null);
|
|
16
|
-
// 处理斜杠命令
|
|
17
|
-
const handleSlashCommand = useCallback((command) => {
|
|
18
|
-
const cmd = command.toLowerCase().trim();
|
|
19
|
-
if (cmd === "/help") {
|
|
20
|
-
setMessages((prev) => [
|
|
21
|
-
...prev,
|
|
22
|
-
{
|
|
23
|
-
role: "assistant",
|
|
24
|
-
content: `可用命令:
|
|
25
|
-
/help - 显示帮助
|
|
26
|
-
/clear - 清空对话
|
|
27
|
-
/skills - 查看已加载技能
|
|
28
|
-
/exit - 退出`,
|
|
29
|
-
},
|
|
30
|
-
]);
|
|
31
|
-
return true;
|
|
32
|
-
}
|
|
33
|
-
if (cmd === "/clear") {
|
|
34
|
-
setMessages([]);
|
|
35
|
-
agent.reset();
|
|
36
|
-
setSkills([]);
|
|
37
|
-
setTokens(undefined);
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
if (cmd === "/skills") {
|
|
41
|
-
setMessages((prev) => [
|
|
42
|
-
...prev,
|
|
43
|
-
{
|
|
44
|
-
role: "assistant",
|
|
45
|
-
content: skills.length > 0
|
|
46
|
-
? `已加载技能: ${skills.join(", ")}`
|
|
47
|
-
: "暂无已加载技能",
|
|
48
|
-
},
|
|
49
|
-
]);
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
if (cmd === "/exit") {
|
|
53
|
-
exit();
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
return false;
|
|
57
|
-
}, [agent, exit, skills]);
|
|
58
|
-
// 取消当前请求
|
|
59
|
-
const handleCancel = useCallback(() => {
|
|
60
|
-
if (abortControllerRef.current) {
|
|
61
|
-
abortControllerRef.current.abort();
|
|
62
|
-
abortControllerRef.current = null;
|
|
63
|
-
setIsProcessing(false);
|
|
64
|
-
setMessages((prev) => [
|
|
65
|
-
...prev,
|
|
66
|
-
{ role: "system", content: "已取消" },
|
|
67
|
-
]);
|
|
68
|
-
}
|
|
69
|
-
}, []);
|
|
70
|
-
// 处理消息提交
|
|
71
|
-
const handleSubmit = useCallback(async (text) => {
|
|
72
|
-
// 检查斜杠命令
|
|
73
|
-
if (text.startsWith("/")) {
|
|
74
|
-
if (handleSlashCommand(text)) {
|
|
75
|
-
setInput("");
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// 添加用户消息
|
|
80
|
-
setMessages((prev) => [...prev, { role: "user", content: text }]);
|
|
81
|
-
setInput("");
|
|
82
|
-
setIsProcessing(true);
|
|
83
|
-
// 创建 AbortController
|
|
84
|
-
const abortController = new AbortController();
|
|
85
|
-
abortControllerRef.current = abortController;
|
|
86
|
-
let assistantContent = "";
|
|
87
|
-
try {
|
|
88
|
-
for await (const msg of agent.chat(text, { signal: abortController.signal })) {
|
|
89
|
-
// 处理系统消息(获取 skills)
|
|
90
|
-
if (msg.type === "system" && "skills" in msg && msg.skills) {
|
|
91
|
-
const skillsData = msg.skills;
|
|
92
|
-
setSkills(skillsData.filter(Boolean));
|
|
93
|
-
}
|
|
94
|
-
// 处理助手消息
|
|
95
|
-
if (msg.type === "assistant" && msg.message?.content) {
|
|
96
|
-
for (const block of msg.message.content) {
|
|
97
|
-
if (block.type === "text") {
|
|
98
|
-
assistantContent += block.text;
|
|
99
|
-
}
|
|
100
|
-
else if (block.type === "tool_use") {
|
|
101
|
-
// 显示工具调用
|
|
102
|
-
setMessages((prev) => [
|
|
103
|
-
...prev,
|
|
104
|
-
{
|
|
105
|
-
role: "tool",
|
|
106
|
-
toolName: block.name,
|
|
107
|
-
content: typeof block.input === "string"
|
|
108
|
-
? block.input
|
|
109
|
-
: JSON.stringify(block.input, null, 2),
|
|
110
|
-
},
|
|
111
|
-
]);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
// 处理结果(累计 tokens)
|
|
116
|
-
if (msg.type === "result") {
|
|
117
|
-
const usage = msg.usage;
|
|
118
|
-
setTokens((prev) => ({
|
|
119
|
-
input: (prev?.input ?? 0) + (usage?.input_tokens ?? 0),
|
|
120
|
-
output: (prev?.output ?? 0) + (usage?.output_tokens ?? 0),
|
|
121
|
-
}));
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
// 添加助手回复
|
|
125
|
-
if (assistantContent) {
|
|
126
|
-
setMessages((prev) => [
|
|
127
|
-
...prev,
|
|
128
|
-
{ role: "assistant", content: assistantContent },
|
|
129
|
-
]);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
catch (error) {
|
|
133
|
-
// 用户取消不显示错误
|
|
134
|
-
const errorMsg = error instanceof Error ? error.message : "未知错误";
|
|
135
|
-
if (!errorMsg.includes("aborted")) {
|
|
136
|
-
setMessages((prev) => [
|
|
137
|
-
...prev,
|
|
138
|
-
{
|
|
139
|
-
role: "error",
|
|
140
|
-
content: errorMsg,
|
|
141
|
-
},
|
|
142
|
-
]);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
finally {
|
|
146
|
-
setIsProcessing(false);
|
|
147
|
-
abortControllerRef.current = null;
|
|
148
|
-
}
|
|
149
|
-
}, [agent, handleSlashCommand]);
|
|
150
|
-
// 快捷键
|
|
151
|
-
useInput((input, key) => {
|
|
152
|
-
if (key.ctrl && input === "c") {
|
|
153
|
-
exit();
|
|
154
|
-
}
|
|
155
|
-
if (key.ctrl && input === "l") {
|
|
156
|
-
setMessages([]);
|
|
157
|
-
}
|
|
158
|
-
if (key.escape && isProcessing) {
|
|
159
|
-
handleCancel();
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
return (_jsxs(Box, { flexDirection: "column", height: "100%", children: [_jsx(Header, { version: VERSION }), _jsxs(Box, { flexDirection: "column", flexGrow: 1, paddingX: 1, children: [_jsx(MessageList, { messages: messages }), isProcessing && _jsx(Spinner, {})] }), _jsx(StatusBar, { skills: skills, tokens: tokens }), _jsx(Composer, { value: input, onChange: setInput, onSubmit: handleSubmit, disabled: isProcessing })] }));
|
|
163
|
-
}
|
|
164
|
-
//# sourceMappingURL=App.js.map
|
package/dist/src/ui/App.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../../src/ui/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
interface ComposerProps {
|
|
3
|
-
value: string;
|
|
4
|
-
onChange: (value: string) => void;
|
|
5
|
-
onSubmit: (value: string) => void;
|
|
6
|
-
disabled?: boolean;
|
|
7
|
-
}
|
|
8
|
-
export declare const Composer: React.NamedExoticComponent<ComposerProps>;
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=Composer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/Composer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAIjD,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,QAAQ,2CA6BnB,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { memo, useCallback } from "react";
|
|
3
|
-
import { Box, Text } from "ink";
|
|
4
|
-
import TextInput from "ink-text-input";
|
|
5
|
-
export const Composer = memo(function Composer({ value, onChange, onSubmit, disabled = false, }) {
|
|
6
|
-
const handleSubmit = useCallback((text) => {
|
|
7
|
-
if (text.trim()) {
|
|
8
|
-
onSubmit(text.trim());
|
|
9
|
-
}
|
|
10
|
-
}, [onSubmit]);
|
|
11
|
-
return (_jsxs(Box, { borderStyle: "single", borderColor: disabled ? "gray" : "green", paddingX: 1, children: [_jsxs(Text, { color: disabled ? "gray" : "green", bold: true, children: [">", " "] }), disabled ? (_jsx(Text, { color: "gray", children: "\u8BF7\u7B49\u5F85\u54CD\u5E94..." })) : (_jsx(TextInput, { value: value, onChange: onChange, onSubmit: handleSubmit, placeholder: "\u8F93\u5165\u6D88\u606F\u6216 /help \u83B7\u53D6\u5E2E\u52A9" }))] }));
|
|
12
|
-
});
|
|
13
|
-
//# sourceMappingURL=Composer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../../../src/ui/components/Composer.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,SAAS,MAAM,gBAAgB,CAAC;AASvC,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,QAAQ,CAAC,EAC7C,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,GAAG,KAAK,GACF;IACd,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,IAAY,EAAE,EAAE;QAChD,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,CACL,MAAC,GAAG,IAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,aAC7E,MAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,mBAC3C,GAAG,EAAE,GAAG,IACJ,EACN,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kDAAgB,CACnC,CAAC,CAAC,CAAC,CACF,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAC,+DAAkB,GAC9B,CACH,IACG,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAGpC,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,MAAM,yCAWjB,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { memo } from "react";
|
|
3
|
-
import { Box, Text } from "ink";
|
|
4
|
-
export const Header = memo(function Header({ version }) {
|
|
5
|
-
return (_jsxs(Box, { borderStyle: "single", paddingX: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Optima Agent" }), _jsxs(Text, { color: "gray", children: [" v", version] }), _jsx(Box, { flexGrow: 1 }), _jsx(Text, { color: "gray", children: "[Ctrl+C \u9000\u51FA]" })] }));
|
|
6
|
-
});
|
|
7
|
-
//# sourceMappingURL=Header.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../../src/ui/components/Header.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAMhC,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,MAAM,CAAC,EAAE,OAAO,EAAe;IACjE,OAAO,CACL,MAAC,GAAG,IAAC,WAAW,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACnC,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,6BAEhB,EACP,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,mBAAI,OAAO,IAAQ,EACrC,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,GAAI,EACpB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,sCAAmB,IACjC,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
export interface MessageItem {
|
|
3
|
-
role: "user" | "assistant" | "tool" | "error" | "system";
|
|
4
|
-
content: string;
|
|
5
|
-
toolName?: string;
|
|
6
|
-
}
|
|
7
|
-
interface MessageProps {
|
|
8
|
-
message: MessageItem;
|
|
9
|
-
}
|
|
10
|
-
export declare const Message: React.NamedExoticComponent<MessageProps>;
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=Message.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/Message.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAGpC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,eAAO,MAAM,OAAO,0CAmDlB,CAAC"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { memo } from "react";
|
|
3
|
-
import { Box, Text } from "ink";
|
|
4
|
-
export const Message = memo(function Message({ message }) {
|
|
5
|
-
const { role, content, toolName } = message;
|
|
6
|
-
if (role === "user") {
|
|
7
|
-
return (_jsxs(Box, { marginY: 1, children: [_jsxs(Text, { color: "green", bold: true, children: [">", " "] }), _jsx(Text, { children: content })] }));
|
|
8
|
-
}
|
|
9
|
-
if (role === "tool") {
|
|
10
|
-
return (_jsxs(Box, { marginY: 1, borderStyle: "round", borderColor: "gray", paddingX: 1, flexDirection: "column", children: [_jsx(Text, { color: "yellow", children: toolName || "Tool" }), _jsx(Text, { color: "gray", children: content })] }));
|
|
11
|
-
}
|
|
12
|
-
if (role === "error") {
|
|
13
|
-
return (_jsx(Box, { marginY: 1, children: _jsxs(Text, { color: "red", children: ["\u9519\u8BEF: ", content] }) }));
|
|
14
|
-
}
|
|
15
|
-
if (role === "system") {
|
|
16
|
-
return (_jsx(Box, { marginY: 1, children: _jsx(Text, { color: "gray", italic: true, children: content }) }));
|
|
17
|
-
}
|
|
18
|
-
// assistant
|
|
19
|
-
return (_jsx(Box, { marginY: 1, children: _jsx(Text, { children: content }) }));
|
|
20
|
-
});
|
|
21
|
-
//# sourceMappingURL=Message.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Message.js","sourceRoot":"","sources":["../../../../src/ui/components/Message.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAYhC,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,OAAO,CAAC,EAAE,OAAO,EAAgB;IACpE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE5C,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,CACL,MAAC,GAAG,IAAC,OAAO,EAAE,CAAC,aACb,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,mBACrB,GAAG,EAAE,GAAG,IACJ,EACP,KAAC,IAAI,cAAE,OAAO,GAAQ,IAClB,CACP,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,CACL,MAAC,GAAG,IACF,OAAO,EAAE,CAAC,EACV,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,EACX,aAAa,EAAC,QAAQ,aAEtB,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,QAAQ,IAAI,MAAM,GAAQ,EAChD,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,OAAO,GAAQ,IAC/B,CACP,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,CACL,KAAC,GAAG,IAAC,OAAO,EAAE,CAAC,YACb,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,+BAAM,OAAO,IAAQ,GAClC,CACP,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,CACL,KAAC,GAAG,IAAC,OAAO,EAAE,CAAC,YACb,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,MAAM,kBAAE,OAAO,GAAQ,GACtC,CACP,CAAC;IACJ,CAAC;IAED,YAAY;IACZ,OAAO,CACL,KAAC,GAAG,IAAC,OAAO,EAAE,CAAC,YACb,KAAC,IAAI,cAAE,OAAO,GAAQ,GAClB,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { MessageItem } from "./Message.js";
|
|
3
|
-
interface MessageListProps {
|
|
4
|
-
messages: MessageItem[];
|
|
5
|
-
maxVisible?: number;
|
|
6
|
-
}
|
|
7
|
-
export declare const MessageList: React.NamedExoticComponent<MessageListProps>;
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=MessageList.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAW,WAAW,EAAE,MAAM,cAAc,CAAC;AAEpD,UAAU,gBAAgB;IACxB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,WAAW,8CA6BtB,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { memo, useMemo } from "react";
|
|
3
|
-
import { Box, Text } from "ink";
|
|
4
|
-
import { Message } from "./Message.js";
|
|
5
|
-
export const MessageList = memo(function MessageList({ messages, maxVisible = 10 }) {
|
|
6
|
-
// 只显示最近的消息,避免内容超出屏幕导致闪烁
|
|
7
|
-
const { visibleMessages, hiddenCount } = useMemo(() => {
|
|
8
|
-
if (messages.length <= maxVisible) {
|
|
9
|
-
return { visibleMessages: messages, hiddenCount: 0 };
|
|
10
|
-
}
|
|
11
|
-
return {
|
|
12
|
-
visibleMessages: messages.slice(-maxVisible),
|
|
13
|
-
hiddenCount: messages.length - maxVisible,
|
|
14
|
-
};
|
|
15
|
-
}, [messages, maxVisible]);
|
|
16
|
-
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [hiddenCount > 0 && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: "gray", italic: true, children: ["... ", hiddenCount, " \u6761\u5386\u53F2\u6D88\u606F\u5DF2\u9690\u85CF (\u4F7F\u7528 /clear \u6E05\u7A7A)"] }) })), visibleMessages.map((msg, index) => (_jsx(Message, { message: msg }, messages.length - maxVisible + index)))] }));
|
|
17
|
-
});
|
|
18
|
-
//# sourceMappingURL=MessageList.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.js","sourceRoot":"","sources":["../../../../src/ui/components/MessageList.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,OAAO,EAAe,MAAM,cAAc,CAAC;AAOpD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,WAAW,CAAC,EACnD,QAAQ,EACR,UAAU,GAAG,EAAE,EACE;IACjB,wBAAwB;IACxB,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;QACpD,IAAI,QAAQ,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;YAClC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACvD,CAAC;QACD,OAAO;YACL,eAAe,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;YAC5C,WAAW,EAAE,QAAQ,CAAC,MAAM,GAAG,UAAU;SAC1C,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAE3B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACpC,WAAW,GAAG,CAAC,IAAI,CAClB,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,MAAM,2BAClB,WAAW,4FACX,GACH,CACP,EACA,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CACnC,KAAC,OAAO,IAA4C,OAAO,EAAE,GAAG,IAAlD,QAAQ,CAAC,MAAM,GAAG,UAAU,GAAG,KAAK,CAAkB,CACrE,CAAC,IACE,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/Spinner.tsx"],"names":[],"mappings":"AAIA,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,OAAO,CAAC,EAAE,OAAkB,EAAE,EAAE,YAAY,2CAS3D"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text } from "ink";
|
|
3
|
-
import InkSpinner from "ink-spinner";
|
|
4
|
-
export function Spinner({ message = "思考中..." }) {
|
|
5
|
-
return (_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: _jsx(InkSpinner, { type: "dots" }) }), _jsxs(Text, { color: "gray", children: [" ", message] })] }));
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=Spinner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../../../src/ui/components/Spinner.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,UAAU,MAAM,aAAa,CAAC;AAMrC,MAAM,UAAU,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAgB;IAC1D,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAChB,KAAC,UAAU,IAAC,IAAI,EAAC,MAAM,GAAG,GACrB,EACP,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kBAAG,OAAO,IAAQ,IAChC,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
interface StatusBarProps {
|
|
3
|
-
skills: string[];
|
|
4
|
-
tokens?: {
|
|
5
|
-
input: number;
|
|
6
|
-
output: number;
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
export declare const StatusBar: React.NamedExoticComponent<StatusBarProps>;
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=StatusBar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/StatusBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAGpC,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED,eAAO,MAAM,SAAS,4CAoBpB,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { memo } from "react";
|
|
3
|
-
import { Box, Text } from "ink";
|
|
4
|
-
export const StatusBar = memo(function StatusBar({ skills, tokens }) {
|
|
5
|
-
return (_jsxs(Box, { paddingX: 1, justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { color: "gray", children: "Skills: " }), skills.length > 0 ? (_jsx(Text, { color: "cyan", children: skills.join(", ") })) : (_jsx(Text, { color: "gray", children: "\u65E0" }))] }), tokens && (_jsx(Box, { children: _jsxs(Text, { color: "gray", children: ["Tokens: ", tokens.input.toLocaleString(), " in / ", tokens.output.toLocaleString(), " out"] }) }))] }));
|
|
6
|
-
});
|
|
7
|
-
//# sourceMappingURL=StatusBar.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../../src/ui/components/StatusBar.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAOhC,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAkB;IACjF,OAAO,CACL,MAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAC,eAAe,aAC9C,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,yBAAgB,EACjC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACnB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAQ,CAC9C,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uBAAS,CAC5B,IACG,EACL,MAAM,IAAI,CACT,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,yBACP,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,YAAQ,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,YACvE,GACH,CACP,IACG,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { Header } from "./Header.js";
|
|
2
|
-
export { Spinner } from "./Spinner.js";
|
|
3
|
-
export { Message, type MessageItem } from "./Message.js";
|
|
4
|
-
export { MessageList } from "./MessageList.js";
|
|
5
|
-
export { Composer } from "./Composer.js";
|
|
6
|
-
export { StatusBar } from "./StatusBar.js";
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { Header } from "./Header.js";
|
|
2
|
-
export { Spinner } from "./Spinner.js";
|
|
3
|
-
export { Message } from "./Message.js";
|
|
4
|
-
export { MessageList } from "./MessageList.js";
|
|
5
|
-
export { Composer } from "./Composer.js";
|
|
6
|
-
export { StatusBar } from "./StatusBar.js";
|
|
7
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAoB,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|