@seandong/seno 0.1.7 → 0.2.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/dist/agent/conversation.d.ts +19 -3
- package/dist/agent/conversation.js +40 -9
- package/dist/agent/conversation.js.map +1 -1
- package/dist/agent/loop.d.ts +3 -0
- package/dist/agent/loop.js +27 -15
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/session.js +1 -7
- package/dist/agent/session.js.map +1 -1
- package/dist/cli/commands.d.ts +2 -0
- package/dist/cli/commands.js +33 -353
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/logger.d.ts +55 -7
- package/dist/cli/logger.js +152 -16
- package/dist/cli/logger.js.map +1 -1
- package/dist/cli/output.d.ts +1 -5
- package/dist/cli/output.js +29 -59
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/prompt.js +7 -5
- package/dist/cli/prompt.js.map +1 -1
- package/dist/cli/readline-wrapper.d.ts +44 -0
- package/dist/cli/readline-wrapper.js +80 -0
- package/dist/cli/readline-wrapper.js.map +1 -0
- package/dist/cli/repl.js +23 -47
- package/dist/cli/repl.js.map +1 -1
- package/dist/commands/init.js +8 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/model.js +8 -2
- package/dist/commands/model.js.map +1 -1
- package/dist/commands/plugin-init.d.ts +24 -0
- package/dist/commands/plugin-init.js +313 -0
- package/dist/commands/plugin-init.js.map +1 -0
- package/dist/commands/server.d.ts +39 -0
- package/dist/commands/server.js +102 -0
- package/dist/commands/server.js.map +1 -0
- package/dist/config/manager.d.ts +14 -0
- package/dist/config/manager.js +151 -13
- package/dist/config/manager.js.map +1 -1
- package/dist/config/types.d.ts +15 -0
- package/dist/errors.d.ts +20 -3
- package/dist/errors.js +20 -5
- package/dist/errors.js.map +1 -1
- package/dist/i18n/strings.d.ts +44 -0
- package/dist/i18n/strings.js +46 -0
- package/dist/i18n/strings.js.map +1 -0
- package/dist/index.js +52 -18
- package/dist/index.js.map +1 -1
- package/dist/llm/anthropic.d.ts +0 -9
- package/dist/llm/anthropic.js +9 -62
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/error-handler.d.ts +28 -0
- package/dist/llm/error-handler.js +93 -0
- package/dist/llm/error-handler.js.map +1 -0
- package/dist/llm/openai-codex.js +15 -61
- package/dist/llm/openai-codex.js.map +1 -1
- package/dist/llm/openai.js +10 -57
- package/dist/llm/openai.js.map +1 -1
- package/dist/mcp/bridge.js.map +1 -1
- package/dist/mcp/manager.d.ts +4 -2
- package/dist/mcp/manager.js +36 -12
- package/dist/mcp/manager.js.map +1 -1
- package/dist/prompts/system.js +2 -1
- package/dist/prompts/system.js.map +1 -1
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/sync.js +3 -1
- package/dist/skills/sync.js.map +1 -1
- package/dist/tools/plugin-init.d.ts +6 -0
- package/dist/tools/plugin-init.js +46 -0
- package/dist/tools/plugin-init.js.map +1 -0
- package/dist/tools/registry.js +11 -2
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/server.d.ts +13 -0
- package/dist/tools/server.js +151 -0
- package/dist/tools/server.js.map +1 -0
- package/dist/tools/shell.js +1 -3
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/skills-sync.d.ts +6 -0
- package/dist/tools/skills-sync.js +39 -0
- package/dist/tools/skills-sync.js.map +1 -0
- package/dist/tools/ssh.js.map +1 -1
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/text.d.ts +45 -0
- package/dist/utils/text.js +95 -0
- package/dist/utils/text.js.map +1 -0
- package/package.json +23 -5
|
@@ -27,13 +27,29 @@ export declare class Conversation {
|
|
|
27
27
|
*/
|
|
28
28
|
getMessages(): Message[];
|
|
29
29
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
30
|
+
* 截断历史消息,按轮次边界保留最近 keepRecentTurns 个完整轮次
|
|
31
|
+
* 一个完整轮次 = 纯文本 user 消息 + assistant 消息 + (可选的) tool_result user 消息链
|
|
32
|
+
* 确保 tool_use 和 tool_result 不会被拆开,避免 Anthropic API 400 错误
|
|
33
|
+
*
|
|
34
|
+
* @param keepRecentTurns 保留的最近轮次数(默认 3)
|
|
32
35
|
* @returns true 表示成功截断,false 表示已无法再截断
|
|
33
36
|
*/
|
|
34
|
-
truncate(
|
|
37
|
+
truncate(keepRecentTurns?: number): boolean;
|
|
35
38
|
/**
|
|
36
39
|
* 清空历史
|
|
37
40
|
*/
|
|
38
41
|
clear(): void;
|
|
42
|
+
/**
|
|
43
|
+
* 查找轮次边界
|
|
44
|
+
* 一个轮次从纯文本 user 消息(非 tool_result)开始,
|
|
45
|
+
* 包含后续的 assistant 消息和可能的 tool_result user 消息链
|
|
46
|
+
*
|
|
47
|
+
* @returns 每个轮次起始消息的索引数组
|
|
48
|
+
*/
|
|
49
|
+
private findTurnBoundaries;
|
|
50
|
+
/**
|
|
51
|
+
* 判断消息是否为工具结果消息
|
|
52
|
+
* tool_result 消息的 content 是 ToolResultBlock 数组
|
|
53
|
+
*/
|
|
54
|
+
private isToolResultMessage;
|
|
39
55
|
}
|
|
@@ -36,18 +36,21 @@ export class Conversation {
|
|
|
36
36
|
return [...this.messages];
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
39
|
+
* 截断历史消息,按轮次边界保留最近 keepRecentTurns 个完整轮次
|
|
40
|
+
* 一个完整轮次 = 纯文本 user 消息 + assistant 消息 + (可选的) tool_result user 消息链
|
|
41
|
+
* 确保 tool_use 和 tool_result 不会被拆开,避免 Anthropic API 400 错误
|
|
42
|
+
*
|
|
43
|
+
* @param keepRecentTurns 保留的最近轮次数(默认 3)
|
|
41
44
|
* @returns true 表示成功截断,false 表示已无法再截断
|
|
42
45
|
*/
|
|
43
|
-
truncate(
|
|
44
|
-
|
|
46
|
+
truncate(keepRecentTurns = 3) {
|
|
47
|
+
const boundaries = this.findTurnBoundaries();
|
|
48
|
+
// 轮次数不超过 keepRecentTurns,无需截断
|
|
49
|
+
if (boundaries.length <= keepRecentTurns)
|
|
45
50
|
return false;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
this.messages.shift();
|
|
50
|
-
}
|
|
51
|
+
// 从倒数第 keepRecentTurns 个轮次的起始索引处截断
|
|
52
|
+
const cutIndex = boundaries[boundaries.length - keepRecentTurns];
|
|
53
|
+
this.messages = this.messages.slice(cutIndex);
|
|
51
54
|
return this.messages.length > 0;
|
|
52
55
|
}
|
|
53
56
|
/**
|
|
@@ -56,5 +59,33 @@ export class Conversation {
|
|
|
56
59
|
clear() {
|
|
57
60
|
this.messages = [];
|
|
58
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* 查找轮次边界
|
|
64
|
+
* 一个轮次从纯文本 user 消息(非 tool_result)开始,
|
|
65
|
+
* 包含后续的 assistant 消息和可能的 tool_result user 消息链
|
|
66
|
+
*
|
|
67
|
+
* @returns 每个轮次起始消息的索引数组
|
|
68
|
+
*/
|
|
69
|
+
findTurnBoundaries() {
|
|
70
|
+
const boundaries = [];
|
|
71
|
+
for (let i = 0; i < this.messages.length; i++) {
|
|
72
|
+
const msg = this.messages[i];
|
|
73
|
+
if (msg.role === 'user' && !this.isToolResultMessage(msg)) {
|
|
74
|
+
boundaries.push(i);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return boundaries;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 判断消息是否为工具结果消息
|
|
81
|
+
* tool_result 消息的 content 是 ToolResultBlock 数组
|
|
82
|
+
*/
|
|
83
|
+
isToolResultMessage(msg) {
|
|
84
|
+
if (typeof msg.content === 'string')
|
|
85
|
+
return false;
|
|
86
|
+
if (!Array.isArray(msg.content) || msg.content.length === 0)
|
|
87
|
+
return false;
|
|
88
|
+
return msg.content.every((block) => block.type === 'tool_result');
|
|
89
|
+
}
|
|
59
90
|
}
|
|
60
91
|
//# sourceMappingURL=conversation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/agent/conversation.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,YAAY;IACf,QAAQ,GAAc,EAAE,CAAC;IAEjC;;OAEG;IACH,cAAc,CAAC,IAAY;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,OAAuB;QACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,cAAc,CACZ,OAIE;QAEF,MAAM,gBAAgB,GAAsB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9D,IAAI,EAAE,aAAsB;YAC5B,WAAW,EAAE,CAAC,CAAC,SAAS;YACxB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,QAAQ,EAAE,CAAC,CAAC,OAAO;SACpB,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/agent/conversation.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,YAAY;IACf,QAAQ,GAAc,EAAE,CAAC;IAEjC;;OAEG;IACH,cAAc,CAAC,IAAY;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,OAAuB;QACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,cAAc,CACZ,OAIE;QAEF,MAAM,gBAAgB,GAAsB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9D,IAAI,EAAE,aAAsB;YAC5B,WAAW,EAAE,CAAC,CAAC,SAAS;YACxB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,QAAQ,EAAE,CAAC,CAAC,OAAO;SACpB,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,kBAA0B,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE7C,8BAA8B;QAC9B,IAAI,UAAU,CAAC,MAAM,IAAI,eAAe;YAAE,OAAO,KAAK,CAAC;QAEvD,mCAAmC;QACnC,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAE9C,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED;;;;;;OAMG;IACK,kBAAkB;QACxB,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1D,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;OAGG;IACK,mBAAmB,CAAC,GAAY;QACtC,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1E,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;IACpE,CAAC;CACF"}
|
package/dist/agent/loop.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { LLMProvider } from '../llm/provider.js';
|
|
2
2
|
import type { StreamEvent, ChatOptions } from '../llm/types.js';
|
|
3
3
|
import type { ToolRegistry } from '../tools/registry.js';
|
|
4
|
+
import type { AgentLoopConfig } from '../config/types.js';
|
|
4
5
|
import type { SessionState } from './session.js';
|
|
5
6
|
/**
|
|
6
7
|
* Agent 核心循环(ReAct 模式)
|
|
@@ -14,12 +15,14 @@ export declare class AgentLoop {
|
|
|
14
15
|
private baseSystemPrompt;
|
|
15
16
|
private chatOptions;
|
|
16
17
|
private session;
|
|
18
|
+
private config;
|
|
17
19
|
constructor(params: {
|
|
18
20
|
llmProvider: LLMProvider;
|
|
19
21
|
toolRegistry: ToolRegistry;
|
|
20
22
|
systemPrompt?: string;
|
|
21
23
|
chatOptions?: ChatOptions;
|
|
22
24
|
session?: SessionState;
|
|
25
|
+
agentConfig?: AgentLoopConfig;
|
|
23
26
|
});
|
|
24
27
|
/**
|
|
25
28
|
* 动态构建 system prompt
|
package/dist/agent/loop.js
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import { Conversation } from './conversation.js';
|
|
2
2
|
import { logger } from '../cli/logger.js';
|
|
3
3
|
import { LLMError } from '../errors.js';
|
|
4
|
-
|
|
4
|
+
import { STRINGS } from '../i18n/strings.js';
|
|
5
|
+
/** Agent Loop 参数默认值 */
|
|
6
|
+
const DEFAULTS = {
|
|
7
|
+
maxIterations: 20,
|
|
8
|
+
maxToolResultDisplay: 500,
|
|
9
|
+
maxToolResultStore: 10000,
|
|
10
|
+
truncateKeepRecentTurns: 3,
|
|
11
|
+
};
|
|
5
12
|
/**
|
|
6
13
|
* Agent 核心循环(ReAct 模式)
|
|
7
14
|
*
|
|
@@ -14,6 +21,7 @@ export class AgentLoop {
|
|
|
14
21
|
baseSystemPrompt;
|
|
15
22
|
chatOptions;
|
|
16
23
|
session;
|
|
24
|
+
config;
|
|
17
25
|
constructor(params) {
|
|
18
26
|
this.conversation = new Conversation();
|
|
19
27
|
this.toolRegistry = params.toolRegistry;
|
|
@@ -21,6 +29,7 @@ export class AgentLoop {
|
|
|
21
29
|
this.baseSystemPrompt = params.systemPrompt || '';
|
|
22
30
|
this.chatOptions = params.chatOptions || {};
|
|
23
31
|
this.session = params.session || null;
|
|
32
|
+
this.config = { ...DEFAULTS, ...params.agentConfig };
|
|
24
33
|
}
|
|
25
34
|
/**
|
|
26
35
|
* 动态构建 system prompt
|
|
@@ -53,7 +62,7 @@ export class AgentLoop {
|
|
|
53
62
|
this.session?.incrementTurn();
|
|
54
63
|
this.session?.checkUserInput(userInput);
|
|
55
64
|
this.conversation.addUserMessage(userInput);
|
|
56
|
-
for (let iteration = 0; iteration <
|
|
65
|
+
for (let iteration = 0; iteration < this.config.maxIterations; iteration++) {
|
|
57
66
|
// 通知 REPL:新一轮 LLM 调用开始
|
|
58
67
|
yield { type: 'turn_start' };
|
|
59
68
|
// 累积文本和工具调用,用于重建助手消息
|
|
@@ -96,18 +105,22 @@ export class AgentLoop {
|
|
|
96
105
|
break;
|
|
97
106
|
case 'error': {
|
|
98
107
|
// Context length exceeded → 截断历史并重试
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
(event.error.
|
|
102
|
-
event.error.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
108
|
+
// 优先使用结构化错误码判断;字符串匹配作为 UNKNOWN 错误码的 fallback
|
|
109
|
+
const isContextLengthExceeded = event.error instanceof LLMError &&
|
|
110
|
+
(event.error.llmErrorCode === 'CONTEXT_LENGTH_EXCEEDED' ||
|
|
111
|
+
(event.error.llmErrorCode === 'UNKNOWN' &&
|
|
112
|
+
event.error.statusCode === 400 &&
|
|
113
|
+
(event.error.message.includes('context') ||
|
|
114
|
+
event.error.message.includes('too long') ||
|
|
115
|
+
event.error.message.includes('max tokens') ||
|
|
116
|
+
event.error.message.includes('too many'))));
|
|
117
|
+
if (isContextLengthExceeded) {
|
|
118
|
+
const truncated = this.conversation.truncate(this.config.truncateKeepRecentTurns);
|
|
106
119
|
if (truncated) {
|
|
107
120
|
logger.debug('agent', 'Context length exceeded, truncated conversation history, retrying...');
|
|
108
121
|
yield {
|
|
109
122
|
type: 'text_delta',
|
|
110
|
-
text:
|
|
123
|
+
text: STRINGS.agent.contextTruncated,
|
|
111
124
|
};
|
|
112
125
|
shouldRetryWithTruncation = true;
|
|
113
126
|
break;
|
|
@@ -160,7 +173,7 @@ export class AgentLoop {
|
|
|
160
173
|
catch {
|
|
161
174
|
toolResults.push({
|
|
162
175
|
toolUseId: call.id,
|
|
163
|
-
content:
|
|
176
|
+
content: STRINGS.agent.toolArgsParseFailed(call.inputJson),
|
|
164
177
|
isError: true,
|
|
165
178
|
});
|
|
166
179
|
continue;
|
|
@@ -172,9 +185,8 @@ export class AgentLoop {
|
|
|
172
185
|
logger.debug('tool', `${call.name} completed in ${toolDuration}ms`);
|
|
173
186
|
// 观察工具执行结果,更新会话状态
|
|
174
187
|
this.session?.observe(call.name, args, result);
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
? result.content.slice(0, maxResultLen) + '…'
|
|
188
|
+
const resultSummary = result.content.length > this.config.maxToolResultDisplay
|
|
189
|
+
? result.content.slice(0, this.config.maxToolResultDisplay) + '…'
|
|
178
190
|
: result.content;
|
|
179
191
|
yield {
|
|
180
192
|
type: 'tool_execute_end',
|
|
@@ -195,7 +207,7 @@ export class AgentLoop {
|
|
|
195
207
|
// 达到最大循环次数
|
|
196
208
|
yield {
|
|
197
209
|
type: 'text_delta',
|
|
198
|
-
text:
|
|
210
|
+
text: STRINGS.agent.maxIterationsReached,
|
|
199
211
|
};
|
|
200
212
|
yield { type: 'message_end', stop_reason: 'end_turn' };
|
|
201
213
|
}
|
package/dist/agent/loop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/session.js
CHANGED
|
@@ -37,13 +37,7 @@ export class SessionState {
|
|
|
37
37
|
this.lastActivity = new Date();
|
|
38
38
|
}
|
|
39
39
|
/** SSH 相关关键词,匹配到任一即注入服务器列表 */
|
|
40
|
-
static SSH_KEYWORDS = [
|
|
41
|
-
'连接',
|
|
42
|
-
'服务器',
|
|
43
|
-
'ssh',
|
|
44
|
-
'远程',
|
|
45
|
-
'登录',
|
|
46
|
-
];
|
|
40
|
+
static SSH_KEYWORDS = ['连接', '服务器', 'ssh', '远程', '登录'];
|
|
47
41
|
/**
|
|
48
42
|
* 检查用户输入是否涉及 SSH 操作
|
|
49
43
|
* 匹配服务器名称或 SSH 关键词时,注入服务器列表到 system prompt
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/agent/session.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,OAAO,YAAY;IACvB,gCAAgC;IACvB,IAAI,CAAkB;IAE/B,qBAAqB;IACb,OAAO,CAAoB;IAEnC,6BAA6B;IACrB,cAAc,GAAkB,IAAI,CAAC;IAE7C,qBAAqB;IACrB,WAAW,GAAkB,IAAI,CAAC;IAElC,mBAAmB;IACnB,iBAAiB,GAAgB,IAAI,GAAG,EAAE,CAAC;IAE3C,yBAAyB;IACzB,WAAW,GAAkB,IAAI,CAAC;IAElC,oBAAoB;IACpB,UAAU,GAAkB,IAAI,CAAC;IAEjC,WAAW;IACX,iBAAiB,GAAW,CAAC,CAAC;IAE9B,aAAa;IACb,YAAY,GAAS,IAAI,IAAI,EAAE,CAAC;IAEhC,YAAY,IAAqB,EAAE,UAA6B,EAAE;QAChE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,8BAA8B;IACtB,MAAM,CAAU,YAAY,GAAG
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/agent/session.ts"],"names":[],"mappings":"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"}
|