@optima-chat/optima-agent 0.1.75 → 0.1.76
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/bi/SKILL.md +70 -47
- package/README.md +108 -54
- package/dist/bin/optima.js +1 -1
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +98 -21
- package/dist/src/server/index.js.map +1 -1
- package/dist/src/server/types.d.ts +18 -3
- package/dist/src/server/types.d.ts.map +1 -1
- package/dist/src/ui/stream.js +1 -1
- package/package.json +1 -1
- package/.claude/settings.local.json +0 -14
- package/dist/package.json +0 -67
- package/dist/src/version.d.ts +0 -2
- package/dist/src/version.d.ts.map +0 -1
- package/dist/src/version.js +0 -3
- package/dist/src/version.js.map +0 -1
|
@@ -1,87 +1,110 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bi
|
|
3
|
-
description:
|
|
3
|
+
description: "业务数据分析工具。使用场景:查看销售数据(sales/销售)、产品表现分析(product/产品)、趋势分析(trends/趋势)、综合分析(analytics/分析)。使用 bi-cli 命令。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# BI
|
|
6
|
+
# BI 数据分析工具
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## 必须遵守的规则
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
npm install -g @optima-chat/bi-cli@latest
|
|
12
|
-
bi auth login
|
|
13
|
-
```
|
|
10
|
+
**命令名称是 `bi-cli`,不是 `bi`**
|
|
14
11
|
|
|
15
|
-
##
|
|
12
|
+
## 标准操作
|
|
16
13
|
|
|
17
|
-
###
|
|
14
|
+
### 查看销售数据
|
|
15
|
+
```bash
|
|
16
|
+
bi-cli sales get [--days 7] [--pretty]
|
|
17
|
+
```
|
|
18
|
+
返回销售汇总和每日明细:
|
|
19
|
+
- 总收入、订单数、客单价、客户数
|
|
20
|
+
- 每日销售分解
|
|
18
21
|
|
|
22
|
+
### 产品表现分析
|
|
19
23
|
```bash
|
|
20
|
-
|
|
21
|
-
|
|
24
|
+
bi-cli product best-sellers [--limit 10] [--pretty]
|
|
25
|
+
```
|
|
26
|
+
返回畅销商品排行
|
|
22
27
|
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
### 趋势分析
|
|
29
|
+
```bash
|
|
30
|
+
bi-cli trends revenue --days 30 [--pretty]
|
|
31
|
+
```
|
|
32
|
+
返回收入趋势数据
|
|
25
33
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
bi
|
|
29
|
-
bi sales summary --group-by month
|
|
34
|
+
### 综合分析
|
|
35
|
+
```bash
|
|
36
|
+
bi-cli analytics dashboard [--pretty]
|
|
30
37
|
```
|
|
38
|
+
返回仪表盘数据
|
|
31
39
|
|
|
32
|
-
|
|
40
|
+
## 完整命令列表
|
|
33
41
|
|
|
42
|
+
### 认证
|
|
34
43
|
```bash
|
|
35
|
-
#
|
|
36
|
-
bi
|
|
44
|
+
bi-cli auth login # OAuth 登录
|
|
45
|
+
bi-cli auth status # 查看登录状态
|
|
46
|
+
bi-cli auth logout # 登出
|
|
47
|
+
```
|
|
37
48
|
|
|
38
|
-
|
|
39
|
-
|
|
49
|
+
### 销售分析
|
|
50
|
+
```bash
|
|
51
|
+
bi-cli sales get [--days 7] [--pretty]
|
|
52
|
+
```
|
|
40
53
|
|
|
41
|
-
|
|
42
|
-
|
|
54
|
+
### 产品分析
|
|
55
|
+
```bash
|
|
56
|
+
bi-cli product best-sellers [--limit 10] [--pretty]
|
|
43
57
|
```
|
|
44
58
|
|
|
45
59
|
### 趋势分析
|
|
46
|
-
|
|
47
60
|
```bash
|
|
48
|
-
|
|
49
|
-
bi trends overview --days 30
|
|
50
|
-
|
|
51
|
-
# 同比/环比分析
|
|
52
|
-
bi trends compare --period week
|
|
53
|
-
bi trends compare --period month
|
|
61
|
+
bi-cli trends revenue --days 30 [--pretty]
|
|
54
62
|
```
|
|
55
63
|
|
|
56
64
|
### 综合分析
|
|
57
|
-
|
|
58
65
|
```bash
|
|
59
|
-
|
|
60
|
-
|
|
66
|
+
bi-cli analytics dashboard [--pretty]
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 工作流示例
|
|
70
|
+
|
|
71
|
+
### 示例 1:查看近期销售
|
|
72
|
+
用户:"查看最近 7 天的销售情况"
|
|
61
73
|
|
|
62
|
-
|
|
63
|
-
bi
|
|
74
|
+
```bash
|
|
75
|
+
bi-cli sales get --days 7 --pretty
|
|
64
76
|
```
|
|
65
77
|
|
|
66
|
-
|
|
78
|
+
展示:
|
|
79
|
+
- 总收入、订单数、客单价、客户数
|
|
80
|
+
- 每日销售明细表格
|
|
67
81
|
|
|
68
|
-
###
|
|
82
|
+
### 示例 2:查看畅销商品
|
|
83
|
+
用户:"哪些商品卖得最好"
|
|
69
84
|
|
|
70
85
|
```bash
|
|
71
|
-
bi
|
|
72
|
-
bi product ranking --days 7 --limit 5
|
|
86
|
+
bi-cli product best-sellers --limit 5 --pretty
|
|
73
87
|
```
|
|
74
88
|
|
|
75
|
-
|
|
89
|
+
展示:
|
|
90
|
+
- TOP5 商品排行
|
|
91
|
+
- 销售额、销量、订单数
|
|
92
|
+
|
|
93
|
+
### 示例 3:收入趋势
|
|
94
|
+
用户:"收入趋势如何"
|
|
76
95
|
|
|
77
96
|
```bash
|
|
78
|
-
bi
|
|
79
|
-
bi trends compare --period month
|
|
80
|
-
bi product ranking --days 30
|
|
97
|
+
bi-cli trends revenue --days 30 --pretty
|
|
81
98
|
```
|
|
82
99
|
|
|
100
|
+
展示:
|
|
101
|
+
- 30 天收入趋势
|
|
102
|
+
- 增长率、环比数据
|
|
103
|
+
|
|
83
104
|
## 注意事项
|
|
84
105
|
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
106
|
+
- 命令是 `bi-cli` 不是 `bi`
|
|
107
|
+
- 默认输出 JSON 格式(AI 友好)
|
|
108
|
+
- 使用 `--pretty` 获取彩色表格
|
|
109
|
+
- 需要先登录:`bi-cli auth login`
|
|
110
|
+
- 默认时间范围是最近 7 天
|
package/README.md
CHANGED
|
@@ -2,50 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
基于 [Claude Agent SDK](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk) 的电商运营 AI 助手。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/@optima-chat/optima-agent)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
## 快速开始
|
|
9
|
+
|
|
10
|
+
### 安装
|
|
6
11
|
|
|
7
12
|
```bash
|
|
8
13
|
npm install -g @optima-chat/optima-agent
|
|
9
14
|
```
|
|
10
15
|
|
|
11
|
-
|
|
16
|
+
### 认证
|
|
12
17
|
|
|
13
|
-
设置环境变量(推荐):
|
|
14
18
|
```bash
|
|
15
19
|
export ANTHROPIC_API_KEY=your-api-key
|
|
16
20
|
```
|
|
17
21
|
|
|
18
22
|
或使用 Claude Code 的认证(`~/.claude/`)。
|
|
19
23
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
24
|
-
│ 客户端 │
|
|
25
|
-
│ 终端 CLI Web 前端 │
|
|
26
|
-
│ │ │ │
|
|
27
|
-
└──────────────┼────────────────────────────────────┼─────────────────────────┘
|
|
28
|
-
│ │ WebSocket
|
|
29
|
-
▼ ▼
|
|
30
|
-
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
31
|
-
│ Optima Agent │
|
|
32
|
-
│ ┌───────────────────────────────────────────────────────────────────────┐ │
|
|
33
|
-
│ │ Claude Agent SDK │ │
|
|
34
|
-
│ │ │ │
|
|
35
|
-
│ │ Skills · 流式输出 · 上下文压缩 · Hooks · 会话管理 · 权限控制 │ │
|
|
36
|
-
│ │ Bash · Read/Write/Edit · Glob/Grep · WebFetch · Task · TodoWrite │ │
|
|
37
|
-
│ │ │ │ │
|
|
38
|
-
│ └────────────────────────────────────┼───────────────────────────────────┘ │
|
|
39
|
-
└───────────────────────────────────────┼─────────────────────────────────────┘
|
|
40
|
-
▼
|
|
41
|
-
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
42
|
-
│ CLI 工具生态 │
|
|
43
|
-
│ commerce comfy google-ads scout bi │
|
|
44
|
-
│ 商品·订单·库存 图像·视频 广告投放 选品调研 数据分析 │
|
|
45
|
-
└─────────────────────────────────────────────────────────────────────────────┘
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## 使用
|
|
24
|
+
### 使用
|
|
49
25
|
|
|
50
26
|
```bash
|
|
51
27
|
# 交互模式
|
|
@@ -58,30 +34,53 @@ optima -p "查看商品列表"
|
|
|
58
34
|
optima serve --port 3000
|
|
59
35
|
```
|
|
60
36
|
|
|
61
|
-
##
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
37
|
+
## 功能特性
|
|
38
|
+
|
|
39
|
+
### 核心能力
|
|
40
|
+
|
|
41
|
+
- **店铺管理** - 查看和更新店铺信息
|
|
42
|
+
- **商品管理** - 创建、编辑、查询商品
|
|
43
|
+
- **订单处理** - 发货、退款、订单查询
|
|
44
|
+
- **库存管理** - 监控库存、调整数量
|
|
45
|
+
- **国际化** - 多语言翻译管理
|
|
46
|
+
- **店铺配置** - 首页、集合、商品详情页
|
|
47
|
+
- **图像/视频** - AI 生成产品图片和视频
|
|
48
|
+
- **广告投放** - Google Ads 管理
|
|
49
|
+
- **选品调研** - Amazon 产品分析
|
|
50
|
+
- **数据分析** - 销售数据和趋势
|
|
51
|
+
|
|
52
|
+
### Stream 模式特性
|
|
53
|
+
|
|
54
|
+
- Context 使用可视化(进度条显示)
|
|
55
|
+
- Skills 加载状态追踪
|
|
56
|
+
- Session token 统计(按模型分类)
|
|
57
|
+
- 对话计时
|
|
58
|
+
- 命令菜单(`/help`, `/model`, `/context`, `/clear`)
|
|
59
|
+
|
|
60
|
+
## 可用 Skills
|
|
61
|
+
|
|
62
|
+
| Skill | 用途 |
|
|
63
|
+
|-------|------|
|
|
64
|
+
| merchant | 店铺信息管理 |
|
|
65
|
+
| product | 商品管理 |
|
|
66
|
+
| order | 订单处理 |
|
|
67
|
+
| inventory | 库存管理 |
|
|
68
|
+
| i18n | 国际化翻译 |
|
|
69
|
+
| storefront | 店铺前台配置 |
|
|
70
|
+
| comfy | 图像/视频生成 |
|
|
71
|
+
| ads | Google Ads 广告 |
|
|
72
|
+
| scout | Amazon 选品调研 |
|
|
73
|
+
| bi | 数据分析 |
|
|
74
74
|
|
|
75
75
|
## 配置
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
项目根目录可选配置:
|
|
78
78
|
|
|
79
79
|
**OPTIMA.json** - 配置选项
|
|
80
80
|
```json
|
|
81
81
|
{
|
|
82
82
|
"model": "claude-sonnet-4-5-20250929",
|
|
83
|
-
"maxTurns": 50
|
|
84
|
-
"theme": "dark"
|
|
83
|
+
"maxTurns": 50
|
|
85
84
|
}
|
|
86
85
|
```
|
|
87
86
|
|
|
@@ -93,7 +92,7 @@ optima serve --port 3000
|
|
|
93
92
|
- 优先使用现有库存
|
|
94
93
|
```
|
|
95
94
|
|
|
96
|
-
## API
|
|
95
|
+
## API 使用
|
|
97
96
|
|
|
98
97
|
```typescript
|
|
99
98
|
import { OptimaAgent } from '@optima-chat/optima-agent';
|
|
@@ -103,10 +102,9 @@ const agent = new OptimaAgent({
|
|
|
103
102
|
maxTurns: 50,
|
|
104
103
|
});
|
|
105
104
|
|
|
106
|
-
// 单次对话
|
|
107
105
|
for await (const event of agent.chat('查看商品列表')) {
|
|
108
|
-
if (event.type === '
|
|
109
|
-
console.log(event.
|
|
106
|
+
if (event.type === 'assistant') {
|
|
107
|
+
console.log(event.message);
|
|
110
108
|
}
|
|
111
109
|
}
|
|
112
110
|
|
|
@@ -114,9 +112,65 @@ for await (const event of agent.chat('查看商品列表')) {
|
|
|
114
112
|
agent.reset();
|
|
115
113
|
```
|
|
116
114
|
|
|
117
|
-
##
|
|
115
|
+
## 技术架构
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
119
|
+
│ 用户界面层 │
|
|
120
|
+
│ ┌──────────────────┐ ┌──────────────────┐ │
|
|
121
|
+
│ │ 终端 CLI │ │ HTTP Server │ │
|
|
122
|
+
│ │ (Stream Mode) │ │ (WebSocket) │ │
|
|
123
|
+
│ └────────┬─────────┘ └────────┬─────────┘ │
|
|
124
|
+
└───────────┼──────────────────────────────────┼──────────────────┘
|
|
125
|
+
│ │
|
|
126
|
+
└──────────────┬───────────────────┘
|
|
127
|
+
▼
|
|
128
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
129
|
+
│ Optima Agent 核心 │
|
|
130
|
+
│ ┌───────────────────────────────────────────────────────────┐ │
|
|
131
|
+
│ │ Claude Agent SDK │ │
|
|
132
|
+
│ │ • 流式输出 • 上下文管理 • Hooks • 会话恢复 │ │
|
|
133
|
+
│ └───────────────────────────────────────────────────────────┘ │
|
|
134
|
+
│ │ │
|
|
135
|
+
│ ┌──────────────┬──────────┴──────────┬──────────────┐ │
|
|
136
|
+
│ │ │ │ │ │
|
|
137
|
+
│ ▼ ▼ ▼ ▼ │
|
|
138
|
+
│ Skills System Prompt Tools MCP Server │
|
|
139
|
+
│ (10个) (引导逻辑) (Bash/Read..) (Memory) │
|
|
140
|
+
└──────────────────────┬──────────────────────────────────────────┘
|
|
141
|
+
│
|
|
142
|
+
┌──────────────┼──────────────┐
|
|
143
|
+
▼ ▼ ▼
|
|
144
|
+
┌─────────────┐ ┌──────────┐ ┌──────────────┐
|
|
145
|
+
│ commerce │ │ comfy │ │ google-ads │
|
|
146
|
+
│ -cli │ │ -cli │ │ -cli │ ...
|
|
147
|
+
│ │ │ │ │ │
|
|
148
|
+
│ 商品·订单 │ │ 图像·视频 │ │ 广告投放 │
|
|
149
|
+
└─────────────┘ └──────────┘ └──────────────┘
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### 技术栈
|
|
153
|
+
|
|
154
|
+
- **核心**: Claude Agent SDK v0.1.55
|
|
155
|
+
- **语言**: TypeScript
|
|
156
|
+
- **UI**: 自定义终端渲染
|
|
157
|
+
- **工具集成**: 5 个专业 CLI 工具
|
|
118
158
|
|
|
119
|
-
|
|
159
|
+
## 开发
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# 安装依赖
|
|
163
|
+
npm install
|
|
164
|
+
|
|
165
|
+
# 开发模式
|
|
166
|
+
npm run dev
|
|
167
|
+
|
|
168
|
+
# 构建
|
|
169
|
+
npm run build
|
|
170
|
+
|
|
171
|
+
# 类型检查
|
|
172
|
+
npm run typecheck
|
|
173
|
+
```
|
|
120
174
|
|
|
121
175
|
## License
|
|
122
176
|
|
package/dist/bin/optima.js
CHANGED
|
@@ -3,7 +3,7 @@ import { parseArgs } from "node:util";
|
|
|
3
3
|
import { OptimaAgent } from "../src/index.js";
|
|
4
4
|
import { startInteractiveMode } from "../src/ui/index.js";
|
|
5
5
|
import { startServer } from "../src/server/index.js";
|
|
6
|
-
const VERSION = "0.1.
|
|
6
|
+
const VERSION = "0.1.76";
|
|
7
7
|
function printHelp() {
|
|
8
8
|
console.log(`
|
|
9
9
|
Optima Agent - 电商运营 AI 助手
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAgC,aAAa,EAAgB,MAAM,YAAY,CAAC;AAE5F,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAgC,aAAa,EAAgB,MAAM,YAAY,CAAC;AAE5F,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,sGA2PjD"}
|
package/dist/src/server/index.js
CHANGED
|
@@ -2,13 +2,14 @@ import { createServer } from "http";
|
|
|
2
2
|
import { WebSocketServer, WebSocket } from "ws";
|
|
3
3
|
import { URL } from "url";
|
|
4
4
|
import { OptimaAgent } from "../agent.js";
|
|
5
|
+
const VERSION = "0.1.76";
|
|
5
6
|
export function startServer(options) {
|
|
6
7
|
const { port, token, cwd } = options;
|
|
7
8
|
const server = createServer((req, res) => {
|
|
8
9
|
// 健康检查
|
|
9
10
|
if (req.url === "/health") {
|
|
10
11
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
11
|
-
res.end(JSON.stringify({ status: "ok", version:
|
|
12
|
+
res.end(JSON.stringify({ status: "ok", version: VERSION }));
|
|
12
13
|
return;
|
|
13
14
|
}
|
|
14
15
|
res.writeHead(404);
|
|
@@ -26,16 +27,40 @@ export function startServer(options) {
|
|
|
26
27
|
return;
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
|
-
//
|
|
30
|
-
const agent = new OptimaAgent({ cwd });
|
|
30
|
+
// 创建带 hooks 的 Agent 实例
|
|
31
31
|
const sessionId = `sess-${Date.now().toString(36)}`;
|
|
32
32
|
const skillsUsed = new Set();
|
|
33
|
+
const expandedSkills = new Set();
|
|
33
34
|
let toolsCalled = 0;
|
|
35
|
+
let abortController = null;
|
|
36
|
+
const agent = new OptimaAgent({
|
|
37
|
+
cwd,
|
|
38
|
+
hooks: {
|
|
39
|
+
PreToolUse: [{
|
|
40
|
+
matcher: "Skill",
|
|
41
|
+
hooks: [async (input) => {
|
|
42
|
+
const hookInput = input;
|
|
43
|
+
const skillName = hookInput.tool_input?.skill;
|
|
44
|
+
if (skillName) {
|
|
45
|
+
expandedSkills.add(skillName);
|
|
46
|
+
sendMessage(ws, {
|
|
47
|
+
type: "skill_loaded",
|
|
48
|
+
skill: skillName,
|
|
49
|
+
expanded: true,
|
|
50
|
+
timestamp: new Date().toISOString(),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return { continue: true };
|
|
54
|
+
}],
|
|
55
|
+
}],
|
|
56
|
+
},
|
|
57
|
+
});
|
|
34
58
|
// 发送连接成功消息
|
|
35
59
|
sendMessage(ws, {
|
|
36
60
|
type: "connected",
|
|
37
61
|
session_id: sessionId,
|
|
38
|
-
skills: [],
|
|
62
|
+
skills: [],
|
|
63
|
+
version: VERSION,
|
|
39
64
|
});
|
|
40
65
|
ws.on("message", async (data) => {
|
|
41
66
|
let msg;
|
|
@@ -49,29 +74,53 @@ export function startServer(options) {
|
|
|
49
74
|
if (msg.type === "reset") {
|
|
50
75
|
agent.reset();
|
|
51
76
|
skillsUsed.clear();
|
|
77
|
+
expandedSkills.clear();
|
|
52
78
|
toolsCalled = 0;
|
|
53
|
-
sendMessage(ws, { type: "connected", session_id: sessionId, skills: [] });
|
|
79
|
+
sendMessage(ws, { type: "connected", session_id: sessionId, skills: [], version: VERSION });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (msg.type === "abort") {
|
|
83
|
+
if (abortController) {
|
|
84
|
+
abortController.abort();
|
|
85
|
+
abortController = null;
|
|
86
|
+
}
|
|
54
87
|
return;
|
|
55
88
|
}
|
|
56
89
|
if (msg.type === "message") {
|
|
57
90
|
const messageId = msg.id;
|
|
58
91
|
const startTime = Date.now();
|
|
59
|
-
let
|
|
60
|
-
let
|
|
92
|
+
let totalTokens = { input: 0, output: 0 };
|
|
93
|
+
let modelTokens = {};
|
|
94
|
+
let currentContext = { used: 0, total: 0 };
|
|
95
|
+
abortController = new AbortController();
|
|
61
96
|
sendMessage(ws, { type: "processing", message_id: messageId });
|
|
62
97
|
try {
|
|
63
|
-
for await (const sdkMsg of agent.chat(msg.content)) {
|
|
98
|
+
for await (const sdkMsg of agent.chat(msg.content, { signal: abortController.signal })) {
|
|
64
99
|
const timestamp = new Date().toISOString();
|
|
65
|
-
// 处理系统消息(skills
|
|
100
|
+
// 处理系统消息(skills metadata 加载)
|
|
66
101
|
if (sdkMsg.type === "system" && "skills" in sdkMsg && sdkMsg.skills) {
|
|
67
102
|
const skills = sdkMsg.skills;
|
|
68
103
|
for (const skill of skills) {
|
|
69
104
|
if (skill && !skillsUsed.has(skill)) {
|
|
70
105
|
skillsUsed.add(skill);
|
|
71
|
-
sendMessage(ws, {
|
|
106
|
+
sendMessage(ws, {
|
|
107
|
+
type: "skill_loaded",
|
|
108
|
+
skill,
|
|
109
|
+
expanded: false, // metadata only
|
|
110
|
+
timestamp,
|
|
111
|
+
});
|
|
72
112
|
}
|
|
73
113
|
}
|
|
74
114
|
}
|
|
115
|
+
// 处理 assistant 消息(获取 context 和 token 信息)
|
|
116
|
+
if (sdkMsg.type === "assistant" && sdkMsg.message) {
|
|
117
|
+
// 从 message.usage 获取当前 context
|
|
118
|
+
if (sdkMsg.message.usage) {
|
|
119
|
+
const usage = sdkMsg.message.usage;
|
|
120
|
+
const inputTokens = (usage.input_tokens ?? 0) + (usage.cache_read_input_tokens ?? 0) + (usage.cache_creation_input_tokens ?? 0);
|
|
121
|
+
currentContext = { used: inputTokens, total: currentContext.total || 200000 };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
75
124
|
// 处理助手消息
|
|
76
125
|
if (sdkMsg.type === "assistant" && sdkMsg.message?.content) {
|
|
77
126
|
for (const block of sdkMsg.message.content) {
|
|
@@ -105,27 +154,55 @@ export function startServer(options) {
|
|
|
105
154
|
}
|
|
106
155
|
}
|
|
107
156
|
}
|
|
108
|
-
//
|
|
157
|
+
// 处理结果(获取完整的 model usage)
|
|
109
158
|
if (sdkMsg.type === "result") {
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
159
|
+
const modelUsage = sdkMsg.modelUsage;
|
|
160
|
+
if (modelUsage) {
|
|
161
|
+
for (const [modelName, model] of Object.entries(modelUsage)) {
|
|
162
|
+
const inputTokens = (model.inputTokens ?? 0) + (model.cacheReadInputTokens ?? 0) + (model.cacheCreationInputTokens ?? 0);
|
|
163
|
+
const outputTokens = model.outputTokens ?? 0;
|
|
164
|
+
totalTokens.input += inputTokens;
|
|
165
|
+
totalTokens.output += outputTokens;
|
|
166
|
+
if (!modelTokens[modelName]) {
|
|
167
|
+
modelTokens[modelName] = { input: 0, output: 0 };
|
|
168
|
+
}
|
|
169
|
+
modelTokens[modelName].input += inputTokens;
|
|
170
|
+
modelTokens[modelName].output += outputTokens;
|
|
171
|
+
// 更新 context window 信息
|
|
172
|
+
if (model.contextWindow) {
|
|
173
|
+
currentContext.total = model.contextWindow;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
113
177
|
}
|
|
114
178
|
}
|
|
115
179
|
const stats = {
|
|
116
|
-
tokens: {
|
|
180
|
+
tokens: {
|
|
181
|
+
total: totalTokens,
|
|
182
|
+
by_model: modelTokens,
|
|
183
|
+
},
|
|
184
|
+
context: currentContext,
|
|
117
185
|
duration_ms: Date.now() - startTime,
|
|
118
|
-
|
|
186
|
+
skills: {
|
|
187
|
+
loaded: Array.from(skillsUsed),
|
|
188
|
+
expanded: Array.from(expandedSkills),
|
|
189
|
+
},
|
|
119
190
|
tools_called: toolsCalled,
|
|
120
191
|
};
|
|
121
192
|
sendMessage(ws, { type: "done", message_id: messageId, stats });
|
|
122
193
|
}
|
|
123
194
|
catch (error) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
195
|
+
const errorMsg = error instanceof Error ? error.message : "Unknown error";
|
|
196
|
+
if (!errorMsg.includes("aborted")) {
|
|
197
|
+
sendMessage(ws, {
|
|
198
|
+
type: "error",
|
|
199
|
+
code: "EXECUTION_ERROR",
|
|
200
|
+
message: errorMsg,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
finally {
|
|
205
|
+
abortController = null;
|
|
129
206
|
}
|
|
130
207
|
}
|
|
131
208
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK1C,MAAM,UAAU,WAAW,CAAC,OAAsB;IAChD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAErC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACvC,OAAO;QACP,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEzD,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;QAC/B,WAAW;QACX,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAC/D,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;gBAC1B,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;gBAClF,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO;YACT,CAAC;QACH,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,12 +12,14 @@ export type ServerMessage = {
|
|
|
12
12
|
type: "connected";
|
|
13
13
|
session_id: string;
|
|
14
14
|
skills: string[];
|
|
15
|
+
version: string;
|
|
15
16
|
} | {
|
|
16
17
|
type: "processing";
|
|
17
18
|
message_id: string;
|
|
18
19
|
} | {
|
|
19
20
|
type: "skill_loaded";
|
|
20
21
|
skill: string;
|
|
22
|
+
expanded: boolean;
|
|
21
23
|
timestamp: string;
|
|
22
24
|
} | {
|
|
23
25
|
type: "tool_call";
|
|
@@ -45,11 +47,24 @@ export type ServerMessage = {
|
|
|
45
47
|
};
|
|
46
48
|
export interface MessageStats {
|
|
47
49
|
tokens: {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
total: {
|
|
51
|
+
input: number;
|
|
52
|
+
output: number;
|
|
53
|
+
};
|
|
54
|
+
by_model: Record<string, {
|
|
55
|
+
input: number;
|
|
56
|
+
output: number;
|
|
57
|
+
}>;
|
|
58
|
+
};
|
|
59
|
+
context: {
|
|
60
|
+
used: number;
|
|
61
|
+
total: number;
|
|
50
62
|
};
|
|
51
63
|
duration_ms: number;
|
|
52
|
-
|
|
64
|
+
skills: {
|
|
65
|
+
loaded: string[];
|
|
66
|
+
expanded: string[];
|
|
67
|
+
};
|
|
53
68
|
tools_called: number;
|
|
54
69
|
}
|
|
55
70
|
export interface ServerOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAGtB,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAGtB,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC7E;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACrG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE;QACN,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC7D,CAAC;IACF,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
|
package/dist/src/ui/stream.js
CHANGED
package/package.json
CHANGED
package/dist/package.json
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@optima-chat/optima-agent",
|
|
3
|
-
"version": "0.1.8",
|
|
4
|
-
"description": "基于 Claude Agent SDK 的电商运营 AI 助手",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "dist/src/index.js",
|
|
7
|
-
"types": "dist/src/index.d.ts",
|
|
8
|
-
"bin": {
|
|
9
|
-
"optima": "./dist/bin/optima.js"
|
|
10
|
-
},
|
|
11
|
-
"files": [
|
|
12
|
-
"dist",
|
|
13
|
-
".claude"
|
|
14
|
-
],
|
|
15
|
-
"repository": {
|
|
16
|
-
"type": "git",
|
|
17
|
-
"url": "https://github.com/Optima-Chat/optima-agent.git"
|
|
18
|
-
},
|
|
19
|
-
"keywords": [
|
|
20
|
-
"ai",
|
|
21
|
-
"agent",
|
|
22
|
-
"claude",
|
|
23
|
-
"ecommerce",
|
|
24
|
-
"cli"
|
|
25
|
-
],
|
|
26
|
-
"author": "Optima Chat",
|
|
27
|
-
"license": "MIT",
|
|
28
|
-
"scripts": {
|
|
29
|
-
"build": "tsc",
|
|
30
|
-
"dev": "tsx watch src/index.ts",
|
|
31
|
-
"start": "node dist/src/index.js",
|
|
32
|
-
"typecheck": "tsc --noEmit",
|
|
33
|
-
"test": "vitest run",
|
|
34
|
-
"test:watch": "vitest",
|
|
35
|
-
"optima": "tsx bin/optima.ts",
|
|
36
|
-
"prepublishOnly": "npm run build"
|
|
37
|
-
},
|
|
38
|
-
"dependencies": {
|
|
39
|
-
"@anthropic-ai/claude-agent-sdk": "^0.1.55",
|
|
40
|
-
"@optima-chat/bi-cli": "^0.2.0",
|
|
41
|
-
"@optima-chat/comfy-cli": "^0.7.2",
|
|
42
|
-
"@optima-chat/commerce-cli": "^1.5.0",
|
|
43
|
-
"@optima-chat/google-ads-cli": "^0.4.0",
|
|
44
|
-
"@optima-chat/scout-cli": "^0.1.10",
|
|
45
|
-
"gray-matter": "^4.0.3",
|
|
46
|
-
"ink": "^5.2.1",
|
|
47
|
-
"ink-spinner": "^5.0.0",
|
|
48
|
-
"ink-text-input": "^6.0.0",
|
|
49
|
-
"react": "^18.3.1",
|
|
50
|
-
"ws": "^8.18.3",
|
|
51
|
-
"zod": "^3.23.8"
|
|
52
|
-
},
|
|
53
|
-
"devDependencies": {
|
|
54
|
-
"@types/node": "^22.10.1",
|
|
55
|
-
"@types/react": "^18.3.27",
|
|
56
|
-
"@types/ws": "^8.18.1",
|
|
57
|
-
"tsx": "^4.19.2",
|
|
58
|
-
"typescript": "^5.7.2",
|
|
59
|
-
"vitest": "^4.0.14"
|
|
60
|
-
},
|
|
61
|
-
"engines": {
|
|
62
|
-
"node": ">=18.0.0"
|
|
63
|
-
},
|
|
64
|
-
"overrides": {
|
|
65
|
-
"react": "^18.3.1"
|
|
66
|
-
}
|
|
67
|
-
}
|
package/dist/src/version.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/src/version.js
DELETED
package/dist/src/version.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,OAAO;AACP,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|