needware-cli 1.2.8 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -5
- package/dist/commands/agent.d.ts +4 -0
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +113 -6
- package/dist/commands/agent.js.map +1 -1
- package/dist/core/cli.js +1 -1
- package/dist/core/cli.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/prompt.d.ts +30 -0
- package/dist/types/prompt.d.ts.map +1 -0
- package/dist/types/prompt.js +5 -0
- package/dist/types/prompt.js.map +1 -0
- package/dist/utils/prompt-parser.d.ts +22 -0
- package/dist/utils/prompt-parser.d.ts.map +1 -0
- package/dist/utils/prompt-parser.js +228 -0
- package/dist/utils/prompt-parser.js.map +1 -0
- package/install.sh +528 -0
- package/package.json +2 -2
- package/test-multimodal.sh +68 -0
- package/AGENT_COMMAND_SUMMARY.md +0 -364
- package/CHANGELOG.md +0 -172
- package/FEATURE_INTERACTIVE_MODE.md +0 -304
- package/INTERACTIVE_EXAMPLE.md +0 -306
- package/PROJECT_SUMMARY.md +0 -435
- package/QUICK_START.md +0 -216
- package/SETUP.md +0 -315
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt 解析工具
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
/**
|
|
7
|
+
* 解析 Prompt 输入(自动判断类型)
|
|
8
|
+
*
|
|
9
|
+
* 支持两种格式:
|
|
10
|
+
* 1. 字符串 - 普通文本或文件路径(自动识别)
|
|
11
|
+
* 2. SDKUserMessage JSON - 符合 SDK 标准的消息对象
|
|
12
|
+
*/
|
|
13
|
+
export async function parsePrompt(input) {
|
|
14
|
+
// 如果是异步迭代器(交互式模式),直接返回
|
|
15
|
+
if (isAsyncIterable(input)) {
|
|
16
|
+
return {
|
|
17
|
+
prompt: input,
|
|
18
|
+
isInteractive: true,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// 如果是字符串,进一步判断
|
|
22
|
+
if (typeof input === 'string') {
|
|
23
|
+
// 检查是否是文件路径
|
|
24
|
+
if (input.endsWith('.txt') || input.endsWith('.json') || input.endsWith('.md')) {
|
|
25
|
+
if (fs.existsSync(path.resolve(input))) {
|
|
26
|
+
return await parsePromptFromFile(input);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// 尝试解析为 SDKUserMessage JSON
|
|
30
|
+
if (input.trim().startsWith('{')) {
|
|
31
|
+
try {
|
|
32
|
+
let data;
|
|
33
|
+
try {
|
|
34
|
+
// 首先尝试直接解析
|
|
35
|
+
data = JSON.parse(input);
|
|
36
|
+
}
|
|
37
|
+
catch (firstError) {
|
|
38
|
+
console.log('First parse failed, trying to unescape...');
|
|
39
|
+
// 如果失败,尝试反转义字符串(处理命令行转义问题)
|
|
40
|
+
// 将 \" 替换为 ",\\ 替换为 \
|
|
41
|
+
const unescaped = input.replace(/\\"/g, '"').replace(/\\\\/g, '\\');
|
|
42
|
+
console.log('Unescaped input:', unescaped);
|
|
43
|
+
data = JSON.parse(unescaped);
|
|
44
|
+
}
|
|
45
|
+
// 检查是否双重编码(data 是字符串而非对象)
|
|
46
|
+
if (typeof data === 'string') {
|
|
47
|
+
console.log('Detected double-encoded JSON, parsing again...');
|
|
48
|
+
const actualData = JSON.parse(data);
|
|
49
|
+
if (isSDKUserMessage(actualData)) {
|
|
50
|
+
return parseSDKUserMessage(actualData);
|
|
51
|
+
}
|
|
52
|
+
if (isSimplifiedUserMessage(actualData)) {
|
|
53
|
+
return parseSimplifiedUserMessage(actualData);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (isSDKUserMessage(data)) {
|
|
57
|
+
return parseSDKUserMessage(data);
|
|
58
|
+
}
|
|
59
|
+
// 检查是否为简化的用户消息格式
|
|
60
|
+
if (isSimplifiedUserMessage(data)) {
|
|
61
|
+
return parseSimplifiedUserMessage(data);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error('JSON parse error:', error);
|
|
66
|
+
// 不是有效的 JSON,继续作为普通字符串处理
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// 作为普通字符串处理
|
|
70
|
+
return {
|
|
71
|
+
prompt: input.trim(),
|
|
72
|
+
isInteractive: false,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// 如果是 SDKUserMessage 对象
|
|
76
|
+
if (isSDKUserMessage(input)) {
|
|
77
|
+
return parseSDKUserMessage(input);
|
|
78
|
+
}
|
|
79
|
+
throw new Error(`Unsupported prompt input type: ${typeof input}`);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 从文件读取 Prompt
|
|
83
|
+
*/
|
|
84
|
+
async function parsePromptFromFile(filePath) {
|
|
85
|
+
const resolvedPath = path.resolve(filePath);
|
|
86
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
87
|
+
throw new Error(`Prompt file not found: ${resolvedPath}`);
|
|
88
|
+
}
|
|
89
|
+
const content = fs.readFileSync(resolvedPath, 'utf-8').trim();
|
|
90
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
91
|
+
// 如果是 JSON 文件,尝试解析为 SDKUserMessage
|
|
92
|
+
if (ext === '.json') {
|
|
93
|
+
try {
|
|
94
|
+
const data = JSON.parse(content);
|
|
95
|
+
if (isSDKUserMessage(data)) {
|
|
96
|
+
return parseSDKUserMessage(data);
|
|
97
|
+
}
|
|
98
|
+
throw new Error('JSON file must contain a valid SDKUserMessage object');
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
throw new Error(`Invalid JSON in prompt file: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// 否则作为纯文本处理
|
|
105
|
+
return {
|
|
106
|
+
prompt: content,
|
|
107
|
+
isInteractive: false,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 解析 SDKUserMessage
|
|
112
|
+
*/
|
|
113
|
+
function parseSDKUserMessage(data) {
|
|
114
|
+
// 如果 content 包含非文本内容(如图片),使用交互式模式
|
|
115
|
+
const message = data.message;
|
|
116
|
+
const hasMultimodalContent = Array.isArray(message.content) &&
|
|
117
|
+
message.content.some((item) => item.type !== 'text');
|
|
118
|
+
if (hasMultimodalContent) {
|
|
119
|
+
// 创建消息流来支持多模态内容
|
|
120
|
+
const messageStream = createMessageStreamFromSDKMessage(data);
|
|
121
|
+
return {
|
|
122
|
+
prompt: messageStream,
|
|
123
|
+
sessionId: data.session_id,
|
|
124
|
+
isInteractive: true,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// 提取文本内容
|
|
128
|
+
let promptText = '';
|
|
129
|
+
if (typeof message.content === 'string') {
|
|
130
|
+
promptText = message.content;
|
|
131
|
+
}
|
|
132
|
+
else if (Array.isArray(message.content)) {
|
|
133
|
+
// 如果 content 是数组,提取文本部分
|
|
134
|
+
promptText = message.content
|
|
135
|
+
.filter((item) => item.type === 'text')
|
|
136
|
+
.map((item) => item.text || '')
|
|
137
|
+
.join('\n');
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
prompt: promptText.trim(),
|
|
141
|
+
sessionId: data.session_id,
|
|
142
|
+
isInteractive: false,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 解析简化的用户消息格式
|
|
147
|
+
*/
|
|
148
|
+
function parseSimplifiedUserMessage(data) {
|
|
149
|
+
// 将简化格式转换为标准的 SDKUserMessage
|
|
150
|
+
const sessionId = data.session_id || `session-${Date.now()}`;
|
|
151
|
+
const sdkMessage = {
|
|
152
|
+
type: 'user',
|
|
153
|
+
session_id: sessionId,
|
|
154
|
+
message: {
|
|
155
|
+
role: 'user',
|
|
156
|
+
content: data.user.content,
|
|
157
|
+
},
|
|
158
|
+
parent_tool_use_id: null,
|
|
159
|
+
};
|
|
160
|
+
// 使用 parseSDKUserMessage 处理转换后的消息
|
|
161
|
+
return parseSDKUserMessage(sdkMessage);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* 从 SDKUserMessage 创建消息流
|
|
165
|
+
*/
|
|
166
|
+
async function* createMessageStreamFromSDKMessage(message) {
|
|
167
|
+
yield message;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* 将字符串转换为消息流(用于交互式模式)
|
|
171
|
+
*/
|
|
172
|
+
export async function* createMessageStream(sessionId, initialPrompt) {
|
|
173
|
+
if (initialPrompt) {
|
|
174
|
+
yield {
|
|
175
|
+
session_id: sessionId,
|
|
176
|
+
type: 'user',
|
|
177
|
+
message: { role: 'user', content: initialPrompt.trim() },
|
|
178
|
+
parent_tool_use_id: null,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* 类型守卫:检查是否为 AsyncIterable
|
|
184
|
+
*/
|
|
185
|
+
function isAsyncIterable(obj) {
|
|
186
|
+
return (obj !== null &&
|
|
187
|
+
obj !== undefined &&
|
|
188
|
+
typeof obj[Symbol.asyncIterator] === 'function');
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* 类型守卫:检查是否为 SDKUserMessage
|
|
192
|
+
*/
|
|
193
|
+
function isSDKUserMessage(obj) {
|
|
194
|
+
return (obj !== null &&
|
|
195
|
+
obj !== undefined &&
|
|
196
|
+
typeof obj === 'object' &&
|
|
197
|
+
'type' in obj &&
|
|
198
|
+
obj.type === 'user' &&
|
|
199
|
+
'message' in obj &&
|
|
200
|
+
typeof obj.message === 'object' &&
|
|
201
|
+
'session_id' in obj &&
|
|
202
|
+
typeof obj.session_id === 'string');
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* 类型守卫:检查是否为简化的用户消息格式(只有 user 字段)
|
|
206
|
+
*/
|
|
207
|
+
function isSimplifiedUserMessage(obj) {
|
|
208
|
+
return (obj !== null &&
|
|
209
|
+
obj !== undefined &&
|
|
210
|
+
typeof obj === 'object' &&
|
|
211
|
+
'user' in obj &&
|
|
212
|
+
obj.user !== null &&
|
|
213
|
+
obj.user !== undefined &&
|
|
214
|
+
typeof obj.user === 'object' &&
|
|
215
|
+
'content' in obj.user);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* 从命令行参数解析 Prompt(自动判断类型)
|
|
219
|
+
*/
|
|
220
|
+
export async function parsePromptFromArgs(args) {
|
|
221
|
+
if (args.length === 0) {
|
|
222
|
+
throw new Error('No prompt provided');
|
|
223
|
+
}
|
|
224
|
+
const firstArg = args[0];
|
|
225
|
+
// 使用统一的 parsePrompt 函数,它会自动判断类型
|
|
226
|
+
return parsePrompt(firstArg);
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=prompt-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-parser.js","sourceRoot":"","sources":["../../src/utils/prompt-parser.ts"],"names":[],"mappings":"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"}
|