@optima-chat/optima-agent 0.4.15 → 0.4.17

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.
Files changed (42) hide show
  1. package/.claude/skills/comfy/SKILL.md +1 -1
  2. package/.claude/skills/order/SKILL.md +152 -2
  3. package/dist/bin/bi-cli.js +0 -0
  4. package/dist/bin/comfy.js +0 -0
  5. package/dist/bin/commerce.js +0 -0
  6. package/dist/bin/google-ads.js +0 -0
  7. package/dist/bin/optima.js +0 -0
  8. package/dist/bin/scout.js +0 -0
  9. package/package.json +1 -1
  10. package/.claude/settings.local.json +0 -48
  11. package/dist/src/ui/App.d.ts +0 -6
  12. package/dist/src/ui/App.d.ts.map +0 -1
  13. package/dist/src/ui/App.js +0 -164
  14. package/dist/src/ui/App.js.map +0 -1
  15. package/dist/src/ui/components/Composer.d.ts +0 -10
  16. package/dist/src/ui/components/Composer.d.ts.map +0 -1
  17. package/dist/src/ui/components/Composer.js +0 -13
  18. package/dist/src/ui/components/Composer.js.map +0 -1
  19. package/dist/src/ui/components/Header.d.ts +0 -7
  20. package/dist/src/ui/components/Header.d.ts.map +0 -1
  21. package/dist/src/ui/components/Header.js +0 -7
  22. package/dist/src/ui/components/Header.js.map +0 -1
  23. package/dist/src/ui/components/Message.d.ts +0 -12
  24. package/dist/src/ui/components/Message.d.ts.map +0 -1
  25. package/dist/src/ui/components/Message.js +0 -21
  26. package/dist/src/ui/components/Message.js.map +0 -1
  27. package/dist/src/ui/components/MessageList.d.ts +0 -9
  28. package/dist/src/ui/components/MessageList.d.ts.map +0 -1
  29. package/dist/src/ui/components/MessageList.js +0 -18
  30. package/dist/src/ui/components/MessageList.js.map +0 -1
  31. package/dist/src/ui/components/Spinner.d.ts +0 -6
  32. package/dist/src/ui/components/Spinner.d.ts.map +0 -1
  33. package/dist/src/ui/components/Spinner.js +0 -7
  34. package/dist/src/ui/components/Spinner.js.map +0 -1
  35. package/dist/src/ui/components/StatusBar.d.ts +0 -11
  36. package/dist/src/ui/components/StatusBar.d.ts.map +0 -1
  37. package/dist/src/ui/components/StatusBar.js +0 -7
  38. package/dist/src/ui/components/StatusBar.js.map +0 -1
  39. package/dist/src/ui/components/index.d.ts +0 -7
  40. package/dist/src/ui/components/index.d.ts.map +0 -1
  41. package/dist/src/ui/components/index.js +0 -7
  42. package/dist/src/ui/components/index.js.map +0 -1
@@ -189,7 +189,7 @@ comfy video story.png --shot-type multi -d 15 --prompt "a day in the life"
189
189
  comfy video product.png --no-audio --prompt "360 degree rotation"
190
190
 
191
191
  # 自定义音频(需先上传获取 URL)
192
- commerce upload /home/aiuser/music.mp3
192
+ commerce upload file --path "/home/aiuser/music.mp3"
193
193
  # 返回 URL 后使用
194
194
  comfy video scene.png --audio-url "https://..." -o /home/aiuser/project/with-audio.mp4
195
195
 
@@ -11,7 +11,7 @@ description: Order fulfillment and shipping management. Process orders, ship pac
11
11
 
12
12
  当用户说:
13
13
  - "查看待发货订单" → `commerce order list --status paid`
14
- - "订单XX发货" → `commerce order ship --id XX --tracking YY --carrier ZZ`
14
+ - "订单XX发货" → 先查订单详情,根据 shipping_mode_used 决定发货方式(见下方流程)
15
15
  - "取消订单XX" → `commerce order cancel --id XX --yes`
16
16
  - "标记订单已送达" → `commerce order mark-delivered --id XX`
17
17
  - "查询运费" → `commerce shipping calculate --country XX --weight YY`
@@ -36,6 +36,144 @@ description: Order fulfillment and shipping management. Process orders, ship pac
36
36
  5. **物流跟踪** - 定期 `commerce shipping track` 监控异常
37
37
  6. **确认送达** - 签收后 `commerce order mark-delivered --id XX`
38
38
 
39
+ ### 发货流程详解(重要)
40
+
41
+ 订单发货需要根据 `shipping_mode_used` 字段选择正确的发货方式。
42
+
43
+ #### 运费模式说明
44
+
45
+ | shipping_mode_used | 含义 | 发货方式 |
46
+ |--------------------|------|----------|
47
+ | `easyship` | 买家选择了 Easyship 快递 | 可选 Easyship 自动发货 或 手动发货 |
48
+ | `fixed` | 买家使用固定运费 | 只能手动发货 |
49
+ | 空/null | 历史订单 | 只能手动发货 |
50
+
51
+ #### 发货决策规则(必须严格遵守)
52
+
53
+ 当用户说"订单XXX发货"时,按以下步骤执行:
54
+
55
+ **步骤1**:执行 `commerce order get --id XXX` 获取订单详情
56
+
57
+ **步骤2**:在返回结果中找到 `shipping_mode_used` 字段的值
58
+
59
+ **步骤3**:根据字段值决定下一步操作:
60
+
61
+ - **如果 `shipping_mode_used = "easyship"`**:
62
+ 1. **必须**使用 AskUserQuestion 工具询问用户
63
+ 2. 提供两个选项让用户选择
64
+ 3. **禁止**直接询问运单号
65
+ 4. 等待用户选择后再执行对应命令
66
+
67
+ - **如果 `shipping_mode_used = "fixed"` 或字段为空**:
68
+ 1. 直接询问用户提供运单号和快递公司名称
69
+ 2. 收集信息后执行手动发货命令
70
+
71
+ #### Easyship 自动发货
72
+
73
+ **适用场景**:`shipping_mode_used = "easyship"` 且用户选择使用 Easyship
74
+
75
+ **命令**:
76
+ ```bash
77
+ # 使用买家选择的快递(推荐)
78
+ commerce order ship --id <order-id> --easyship
79
+
80
+ # 或指定其他 Easyship 支持的快递
81
+ commerce order ship --id <order-id> --easyship --courier-id <courier-id>
82
+ ```
83
+
84
+ **返回结果包含**:
85
+ - `tracking_number`: 自动生成的运单号
86
+ - `tracking_url`: 快递跟踪链接
87
+ - `label_url`: 运单标签下载链接(可打印)
88
+ - `carrier`: 快递公司名称
89
+
90
+ **查看可用快递**:
91
+ ```bash
92
+ commerce easyship couriers
93
+ ```
94
+
95
+ #### 手动发货
96
+
97
+ **适用场景**:
98
+ - `shipping_mode_used = "fixed"` 或为空
99
+ - 或用户选择不使用 Easyship
100
+
101
+ **命令**:
102
+ ```bash
103
+ commerce order ship --id <order-id> \
104
+ --tracking <运单号> \
105
+ --carrier <快递公司名称> \
106
+ --tracking-url <跟踪链接> # 可选
107
+ ```
108
+
109
+ **示例**:
110
+ ```bash
111
+ # 顺丰快递
112
+ commerce order ship --id order_123 \
113
+ --tracking SF1234567890 \
114
+ --carrier "顺丰速运"
115
+
116
+ # DHL(带跟踪链接)
117
+ commerce order ship --id order_123 \
118
+ --tracking DHL9876543210 \
119
+ --carrier "DHL Express" \
120
+ --tracking-url "https://www.dhl.com/track?num=DHL9876543210"
121
+ ```
122
+
123
+ #### 物流状态更新(手动发货后)
124
+
125
+ ```bash
126
+ # 更新为运输中
127
+ commerce order update-shipping-status --id <order-id> --status in_transit
128
+
129
+ # 更新为派送中
130
+ commerce order update-shipping-status --id <order-id> --status out_for_delivery
131
+
132
+ # 标记已送达
133
+ commerce order mark-delivered --id <order-id>
134
+ ```
135
+
136
+ #### 发货场景示例对话
137
+
138
+ **场景1:Easyship 订单**
139
+ ```
140
+ 用户:订单 order_abc 发货
141
+
142
+ 助手:[执行 Bash: commerce order get --id order_abc]
143
+ [发现 shipping_mode_used = "easyship"]
144
+ [使用 AskUserQuestion 工具]
145
+
146
+ AskUserQuestion:
147
+ question: "该订单使用 Easyship 运费模式,请选择发货方式"
148
+ options:
149
+ - label: "Easyship 自动发货(推荐)"
150
+ description: "自动生成运单号和标签,使用买家选择的快递"
151
+ - label: "手动填写运单号"
152
+ description: "使用其他快递公司,需要提供运单号"
153
+
154
+ 用户:[选择 Easyship 自动发货]
155
+
156
+ 助手:[执行 Bash: commerce order ship --id order_abc --easyship]
157
+ 发货成功!
158
+ - 运单号:ES123456789
159
+ - 快递公司:FedEx
160
+ - 标签下载:https://...
161
+ ```
162
+
163
+ **场景2:固定运费订单**
164
+ ```
165
+ 用户:订单 order_xyz 发货
166
+
167
+ 助手:[执行 Bash: commerce order get --id order_xyz]
168
+ [发现 shipping_mode_used = "fixed"]
169
+ 该订单使用固定运费,请提供运单号和快递公司名称。
170
+
171
+ 用户:顺丰,单号 SF123456
172
+
173
+ 助手:[执行 Bash: commerce order ship --id order_xyz --tracking SF123456 --carrier 顺丰速运]
174
+ 发货成功!
175
+ ```
176
+
39
177
  ### 退款处理流程
40
178
  1. **创建退款** - `commerce refund create` 填写详细原因
41
179
  2. **审核评估** - 检查商品状态、退货凭证、历史记录
@@ -132,6 +270,11 @@ commerce order ship --id order_789 --tracking DHL123458 --carrier DHL
132
270
  - `commerce shipping track` - 物流追踪
133
271
  - `commerce shipping update-status` - 更新物流状态
134
272
 
273
+ ### Easyship 集成
274
+ - `commerce easyship couriers` - 查看可用快递公司
275
+ - `commerce easyship rates --order-id <id>` - 获取订单运费报价
276
+ - `commerce easyship track --order-id <id>` - 跟踪 Easyship 运单
277
+
135
278
  ## 详细示例
136
279
 
137
280
  ### 查看待处理订单
@@ -142,7 +285,14 @@ commerce order list --status paid --limit 50
142
285
 
143
286
  ### 订单发货
144
287
  ```bash
145
- # 用户说:"订单order_123发货,快递单号DHL123456,承运商DHL"
288
+ # 步骤1:先获取订单信息,检查 shipping_mode_used
289
+ commerce order get --id order_123
290
+
291
+ # 步骤2a:如果 shipping_mode_used = "easyship",询问用户选择后
292
+ # 用户选择 Easyship 自动发货
293
+ commerce order ship --id order_123 --easyship
294
+
295
+ # 步骤2b:如果用户选择手动发货,或 shipping_mode_used = "fixed"
146
296
  commerce order ship \
147
297
  --id order_123 \
148
298
  --tracking DHL123456 \
File without changes
package/dist/bin/comfy.js CHANGED
File without changes
File without changes
File without changes
File without changes
package/dist/bin/scout.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optima-chat/optima-agent",
3
- "version": "0.4.15",
3
+ "version": "0.4.17",
4
4
  "description": "基于 Claude Agent SDK 的电商运营 AI 助手",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -1,48 +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
- ],
45
- "deny": [],
46
- "ask": []
47
- }
48
- }
@@ -1,6 +0,0 @@
1
- interface AppProps {
2
- cwd?: string;
3
- }
4
- export declare function App({ cwd }: AppProps): import("react/jsx-runtime").JSX.Element;
5
- export {};
6
- //# sourceMappingURL=App.d.ts.map
@@ -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"}
@@ -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
@@ -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,7 +0,0 @@
1
- import React from "react";
2
- interface HeaderProps {
3
- version: string;
4
- }
5
- export declare const Header: React.NamedExoticComponent<HeaderProps>;
6
- export {};
7
- //# sourceMappingURL=Header.d.ts.map
@@ -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,6 +0,0 @@
1
- interface SpinnerProps {
2
- message?: string;
3
- }
4
- export declare function Spinner({ message }: SpinnerProps): import("react/jsx-runtime").JSX.Element;
5
- export {};
6
- //# sourceMappingURL=Spinner.d.ts.map
@@ -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"}