@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
package/dist/config/manager.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { homedir } from 'node:os';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { mkdir, readFile, writeFile, access, chmod } from 'node:fs/promises';
|
|
4
|
+
import { ConfigValidationError } from '../errors.js';
|
|
5
|
+
import { STRINGS } from '../i18n/strings.js';
|
|
4
6
|
const CONFIG_DIR_NAME = '.seno';
|
|
5
7
|
const CONFIG_FILE_NAME = 'config.json';
|
|
6
8
|
const SERVERS_FILE_NAME = 'servers.json';
|
|
@@ -49,8 +51,15 @@ async function fileExists(path) {
|
|
|
49
51
|
return false;
|
|
50
52
|
}
|
|
51
53
|
}
|
|
54
|
+
/** 合法的 LLM Provider 名称白名单 */
|
|
55
|
+
const VALID_PROVIDERS = new Set([
|
|
56
|
+
'anthropic',
|
|
57
|
+
'openai',
|
|
58
|
+
'openai-codex',
|
|
59
|
+
]);
|
|
52
60
|
/**
|
|
53
61
|
* 解析 "provider/model_name" 格式的模型 ID
|
|
62
|
+
* 对 provider 名称做白名单校验,不合法时抛出错误
|
|
54
63
|
*/
|
|
55
64
|
export function parseModelId(modelId) {
|
|
56
65
|
const slashIndex = modelId.indexOf('/');
|
|
@@ -58,9 +67,20 @@ export function parseModelId(modelId) {
|
|
|
58
67
|
// 无前缀时为旧版 anthropic 配置
|
|
59
68
|
return { provider: 'anthropic', model: modelId };
|
|
60
69
|
}
|
|
61
|
-
const
|
|
70
|
+
const providerStr = modelId.slice(0, slashIndex);
|
|
62
71
|
const model = modelId.slice(slashIndex + 1);
|
|
63
|
-
|
|
72
|
+
const supported = [...VALID_PROVIDERS].join(', ');
|
|
73
|
+
if (!VALID_PROVIDERS.has(providerStr)) {
|
|
74
|
+
throw new ConfigValidationError(STRINGS.config.unsupportedProvider(providerStr), [
|
|
75
|
+
STRINGS.config.invalidProviderInModel(modelId, providerStr, supported),
|
|
76
|
+
]);
|
|
77
|
+
}
|
|
78
|
+
if (!model) {
|
|
79
|
+
throw new ConfigValidationError(STRINGS.config.modelIdFormatError(modelId), [
|
|
80
|
+
STRINGS.config.modelIdMissingName(modelId),
|
|
81
|
+
]);
|
|
82
|
+
}
|
|
83
|
+
return { provider: providerStr, model };
|
|
64
84
|
}
|
|
65
85
|
/**
|
|
66
86
|
* 拼接 provider 和 model 为 "provider/model_name"
|
|
@@ -113,29 +133,139 @@ function migrateConfig(config) {
|
|
|
113
133
|
};
|
|
114
134
|
return { config: migrated, migrated: true };
|
|
115
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* 验证配置对象的结构和必需字段
|
|
138
|
+
* 纯函数,不涉及文件 I/O
|
|
139
|
+
*
|
|
140
|
+
* @param raw 待验证的原始对象
|
|
141
|
+
* @returns 验证结果:valid 标识是否通过,errors 包含所有错误描述
|
|
142
|
+
*/
|
|
143
|
+
export function validateConfig(raw) {
|
|
144
|
+
const errors = [];
|
|
145
|
+
if (raw === null || raw === undefined) {
|
|
146
|
+
return { valid: false, errors: [STRINGS.config.emptyConfig] };
|
|
147
|
+
}
|
|
148
|
+
if (typeof raw !== 'object' || Array.isArray(raw)) {
|
|
149
|
+
return { valid: false, errors: [STRINGS.config.invalidJsonObject] };
|
|
150
|
+
}
|
|
151
|
+
const obj = raw;
|
|
152
|
+
const supported = [...VALID_PROVIDERS].join(', ');
|
|
153
|
+
// ones_mcp_url 是新旧格式都必需的字段
|
|
154
|
+
if (!obj.ones_mcp_url || typeof obj.ones_mcp_url !== 'string') {
|
|
155
|
+
errors.push(STRINGS.config.missingMcpUrl);
|
|
156
|
+
}
|
|
157
|
+
// 新格式 model 字段校验
|
|
158
|
+
if (obj.model !== undefined) {
|
|
159
|
+
if (typeof obj.model !== 'string' || !obj.model) {
|
|
160
|
+
errors.push(STRINGS.config.invalidModelField);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
const slashIndex = obj.model.indexOf('/');
|
|
164
|
+
if (slashIndex !== -1) {
|
|
165
|
+
const providerStr = obj.model.slice(0, slashIndex);
|
|
166
|
+
if (!VALID_PROVIDERS.has(providerStr)) {
|
|
167
|
+
errors.push(STRINGS.config.invalidProviderInModel(obj.model, providerStr, supported));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// llm.providers 结构校验
|
|
173
|
+
if (obj.llm !== undefined) {
|
|
174
|
+
if (typeof obj.llm !== 'object' || obj.llm === null || Array.isArray(obj.llm)) {
|
|
175
|
+
errors.push(STRINGS.config.llmMustBeObject);
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
const llm = obj.llm;
|
|
179
|
+
if (llm.providers !== undefined) {
|
|
180
|
+
if (typeof llm.providers !== 'object' ||
|
|
181
|
+
llm.providers === null ||
|
|
182
|
+
Array.isArray(llm.providers)) {
|
|
183
|
+
errors.push(STRINGS.config.providersMustBeObject);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
const providers = llm.providers;
|
|
187
|
+
for (const [name, value] of Object.entries(providers)) {
|
|
188
|
+
if (!VALID_PROVIDERS.has(name)) {
|
|
189
|
+
errors.push(STRINGS.config.invalidProviderInProviders(name, supported));
|
|
190
|
+
}
|
|
191
|
+
if (typeof value !== 'object' || value === null) {
|
|
192
|
+
errors.push(STRINGS.config.providerEntryMustBeObject(name));
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
const pc = value;
|
|
196
|
+
if (!pc.mode || (pc.mode !== 'api_key' && pc.mode !== 'oauth')) {
|
|
197
|
+
errors.push(STRINGS.config.invalidProviderMode(name));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// agent 字段校验
|
|
206
|
+
if (obj.agent !== undefined) {
|
|
207
|
+
if (typeof obj.agent !== 'object' || obj.agent === null || Array.isArray(obj.agent)) {
|
|
208
|
+
errors.push(STRINGS.config.agentMustBeObject);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
const agent = obj.agent;
|
|
212
|
+
const numericFields = [
|
|
213
|
+
'maxIterations',
|
|
214
|
+
'maxToolResultDisplay',
|
|
215
|
+
'maxToolResultStore',
|
|
216
|
+
'truncateKeepRecentTurns',
|
|
217
|
+
];
|
|
218
|
+
for (const field of numericFields) {
|
|
219
|
+
if (agent[field] !== undefined &&
|
|
220
|
+
(typeof agent[field] !== 'number' || agent[field] <= 0)) {
|
|
221
|
+
errors.push(STRINGS.config.invalidAgentField(field));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// 既无新格式也无旧格式的 LLM 配置
|
|
227
|
+
if (!obj.model && !obj.anthropic_api_key) {
|
|
228
|
+
errors.push(STRINGS.config.missingLlmConfig);
|
|
229
|
+
}
|
|
230
|
+
return { valid: errors.length === 0, errors };
|
|
231
|
+
}
|
|
116
232
|
/**
|
|
117
233
|
* 读取配置文件 ~/.seno/config.json
|
|
118
234
|
* 自动检测并迁移旧格式配置
|
|
235
|
+
*
|
|
119
236
|
* @returns 配置对象,文件不存在返回 null
|
|
237
|
+
* @throws ConfigValidationError 配置文件存在但内容无效时抛出
|
|
120
238
|
*/
|
|
121
239
|
export async function loadConfig() {
|
|
122
240
|
const configPath = getConfigPath();
|
|
123
241
|
if (!(await fileExists(configPath))) {
|
|
124
242
|
return null;
|
|
125
243
|
}
|
|
244
|
+
let content;
|
|
126
245
|
try {
|
|
127
|
-
|
|
128
|
-
const raw = JSON.parse(content);
|
|
129
|
-
// 自动迁移旧配置
|
|
130
|
-
const { config, migrated } = migrateConfig(raw);
|
|
131
|
-
if (migrated) {
|
|
132
|
-
await saveConfig(config);
|
|
133
|
-
}
|
|
134
|
-
return config;
|
|
246
|
+
content = await readFile(configPath, 'utf-8');
|
|
135
247
|
}
|
|
136
|
-
catch {
|
|
137
|
-
|
|
248
|
+
catch (error) {
|
|
249
|
+
throw new ConfigValidationError(STRINGS.config.readFailed(error instanceof Error ? error.message : String(error)), [STRINGS.config.cannotRead(configPath)]);
|
|
250
|
+
}
|
|
251
|
+
let raw;
|
|
252
|
+
try {
|
|
253
|
+
raw = JSON.parse(content);
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
throw new ConfigValidationError(STRINGS.config.parseFailed(error instanceof Error ? error.message : String(error)), [STRINGS.config.repairHint(configPath)]);
|
|
138
257
|
}
|
|
258
|
+
// Schema 验证
|
|
259
|
+
const validation = validateConfig(raw);
|
|
260
|
+
if (!validation.valid) {
|
|
261
|
+
throw new ConfigValidationError(STRINGS.config.validationFailed(validation.errors.length), validation.errors);
|
|
262
|
+
}
|
|
263
|
+
// 自动迁移旧配置
|
|
264
|
+
const { config, migrated } = migrateConfig(raw);
|
|
265
|
+
if (migrated) {
|
|
266
|
+
await saveConfig(config);
|
|
267
|
+
}
|
|
268
|
+
return config;
|
|
139
269
|
}
|
|
140
270
|
/**
|
|
141
271
|
* 保存配置文件 ~/.seno/config.json
|
|
@@ -153,7 +283,15 @@ export async function saveConfig(config) {
|
|
|
153
283
|
* 兼容新格式(model + llm.providers)和旧格式(anthropic_api_key)
|
|
154
284
|
*/
|
|
155
285
|
export async function isInitialized() {
|
|
156
|
-
|
|
286
|
+
let config;
|
|
287
|
+
try {
|
|
288
|
+
config = await loadConfig();
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
// 配置存在但验证失败 → 视为"已初始化但配置损坏"
|
|
292
|
+
// 让后续 loadConfig 在主流程中抛出详细错误
|
|
293
|
+
return true;
|
|
294
|
+
}
|
|
157
295
|
if (!config)
|
|
158
296
|
return false;
|
|
159
297
|
if (!config.ones_mcp_url)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -80,6 +80,8 @@ export interface SenoConfig {
|
|
|
80
80
|
llm?: LLMProvidersConfig;
|
|
81
81
|
/** Skills 配置 */
|
|
82
82
|
ones_skills?: OnesSkillsConfig;
|
|
83
|
+
/** Agent Loop 运行时参数 */
|
|
84
|
+
agent?: AgentLoopConfig;
|
|
83
85
|
}
|
|
84
86
|
/**
|
|
85
87
|
* Skills 配置
|
|
@@ -90,6 +92,19 @@ export interface OnesSkillsConfig {
|
|
|
90
92
|
/** 上次同步时间 (ISO 8601) */
|
|
91
93
|
last_updated_at?: string;
|
|
92
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Agent Loop 运行时参数配置
|
|
97
|
+
*/
|
|
98
|
+
export interface AgentLoopConfig {
|
|
99
|
+
/** Agent 循环最大迭代次数(默认 20) */
|
|
100
|
+
maxIterations?: number;
|
|
101
|
+
/** 工具结果展示截断长度(默认 500) */
|
|
102
|
+
maxToolResultDisplay?: number;
|
|
103
|
+
/** 工具结果存储截断长度(默认 10000) */
|
|
104
|
+
maxToolResultStore?: number;
|
|
105
|
+
/** 对话截断保留轮次数(默认 3) */
|
|
106
|
+
truncateKeepRecentTurns?: number;
|
|
107
|
+
}
|
|
93
108
|
/**
|
|
94
109
|
* SSH 服务器列表配置(~/.seno/servers.json)
|
|
95
110
|
*/
|
package/dist/errors.d.ts
CHANGED
|
@@ -7,15 +7,23 @@ export declare class SenoError extends Error {
|
|
|
7
7
|
readonly code: string;
|
|
8
8
|
constructor(message: string, code: string);
|
|
9
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* LLM 结构化错误码
|
|
12
|
+
*
|
|
13
|
+
* 各 Provider 在捕获 API 错误时设置,供 Agent Loop 等上层逻辑
|
|
14
|
+
* 基于错误码(而非字符串匹配)做分支处理。
|
|
15
|
+
*/
|
|
16
|
+
export type LLMErrorCode = 'CONTEXT_LENGTH_EXCEEDED' | 'RATE_LIMITED' | 'AUTH_FAILED' | 'SERVER_ERROR' | 'NETWORK_ERROR' | 'UNKNOWN';
|
|
10
17
|
/**
|
|
11
18
|
* LLM API 错误
|
|
12
19
|
*
|
|
13
|
-
*
|
|
20
|
+
* 携带结构化错误码、HTTP 状态码和可重试标记,便于重试逻辑判断。
|
|
14
21
|
*/
|
|
15
22
|
export declare class LLMError extends SenoError {
|
|
16
|
-
readonly
|
|
23
|
+
readonly llmErrorCode: LLMErrorCode;
|
|
24
|
+
readonly statusCode?: number;
|
|
17
25
|
readonly retryable: boolean;
|
|
18
|
-
constructor(message: string, statusCode?: number
|
|
26
|
+
constructor(message: string, llmErrorCode: LLMErrorCode, statusCode?: number, retryable?: boolean);
|
|
19
27
|
}
|
|
20
28
|
/**
|
|
21
29
|
* MCP 服务器错误
|
|
@@ -35,3 +43,12 @@ export declare class MCPError extends SenoError {
|
|
|
35
43
|
export declare class UserInterruptError extends SenoError {
|
|
36
44
|
constructor();
|
|
37
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* 配置验证错误
|
|
48
|
+
*
|
|
49
|
+
* 携带具体的验证错误列表,用于配置加载失败时给出明确的修复提示。
|
|
50
|
+
*/
|
|
51
|
+
export declare class ConfigValidationError extends SenoError {
|
|
52
|
+
readonly errors: string[];
|
|
53
|
+
constructor(message: string, errors: string[]);
|
|
54
|
+
}
|
package/dist/errors.js
CHANGED
|
@@ -7,23 +7,25 @@ export class SenoError extends Error {
|
|
|
7
7
|
code;
|
|
8
8
|
constructor(message, code) {
|
|
9
9
|
super(message);
|
|
10
|
-
this.code = code;
|
|
11
10
|
this.name = 'SenoError';
|
|
11
|
+
this.code = code;
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* LLM API 错误
|
|
16
16
|
*
|
|
17
|
-
*
|
|
17
|
+
* 携带结构化错误码、HTTP 状态码和可重试标记,便于重试逻辑判断。
|
|
18
18
|
*/
|
|
19
19
|
export class LLMError extends SenoError {
|
|
20
|
+
llmErrorCode;
|
|
20
21
|
statusCode;
|
|
21
22
|
retryable;
|
|
22
|
-
constructor(message, statusCode, retryable = false) {
|
|
23
|
+
constructor(message, llmErrorCode, statusCode, retryable = false) {
|
|
23
24
|
super(message, 'LLM_ERROR');
|
|
25
|
+
this.name = 'LLMError';
|
|
26
|
+
this.llmErrorCode = llmErrorCode;
|
|
24
27
|
this.statusCode = statusCode;
|
|
25
28
|
this.retryable = retryable;
|
|
26
|
-
this.name = 'LLMError';
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
31
|
/**
|
|
@@ -35,8 +37,8 @@ export class MCPError extends SenoError {
|
|
|
35
37
|
serverName;
|
|
36
38
|
constructor(message, serverName) {
|
|
37
39
|
super(message, 'MCP_ERROR');
|
|
38
|
-
this.serverName = serverName;
|
|
39
40
|
this.name = 'MCPError';
|
|
41
|
+
this.serverName = serverName;
|
|
40
42
|
}
|
|
41
43
|
}
|
|
42
44
|
/**
|
|
@@ -51,4 +53,17 @@ export class UserInterruptError extends SenoError {
|
|
|
51
53
|
this.name = 'UserInterruptError';
|
|
52
54
|
}
|
|
53
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* 配置验证错误
|
|
58
|
+
*
|
|
59
|
+
* 携带具体的验证错误列表,用于配置加载失败时给出明确的修复提示。
|
|
60
|
+
*/
|
|
61
|
+
export class ConfigValidationError extends SenoError {
|
|
62
|
+
errors;
|
|
63
|
+
constructor(message, errors) {
|
|
64
|
+
super(message, 'CONFIG_VALIDATION');
|
|
65
|
+
this.name = 'ConfigValidationError';
|
|
66
|
+
this.errors = errors;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
54
69
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,IAAI,CAAS;IAEtB,YAAY,OAAe,EAAE,IAAY;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAgBD;;;;GAIG;AACH,MAAM,OAAO,QAAS,SAAQ,SAAS;IAC5B,YAAY,CAAe;IAC3B,UAAU,CAAU;IACpB,SAAS,CAAU;IAE5B,YACE,OAAe,EACf,YAA0B,EAC1B,UAAmB,EACnB,YAAqB,KAAK;QAE1B,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,QAAS,SAAQ,SAAS;IAC5B,UAAU,CAAS;IAE5B,YAAY,OAAe,EAAE,UAAkB;QAC7C,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,kBAAmB,SAAQ,SAAS;IAC/C;QACE,KAAK,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,SAAS;IACzC,MAAM,CAAW;IAE1B,YAAY,OAAe,EAAE,MAAgB;QAC3C,KAAK,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 用户可见字符串集中管理
|
|
3
|
+
*
|
|
4
|
+
* 所有面向用户的中文文案、错误提示、状态消息集中在此处,
|
|
5
|
+
* 便于一致性维护和未来可能的多语言支持。
|
|
6
|
+
*
|
|
7
|
+
* 命名规则:按模块组织,使用英文键名(便于 grep)。
|
|
8
|
+
*/
|
|
9
|
+
export declare const STRINGS: {
|
|
10
|
+
readonly agent: {
|
|
11
|
+
readonly contextTruncated: "\n[对话历史过长,已自动截断,正在重试...]\n";
|
|
12
|
+
readonly maxIterationsReached: "\n[已达到最大工具调用轮次,停止处理]";
|
|
13
|
+
readonly toolArgsParseFailed: (inputJson: string) => string;
|
|
14
|
+
};
|
|
15
|
+
readonly tools: {
|
|
16
|
+
readonly unknownTool: (name: string) => string;
|
|
17
|
+
readonly executionFailed: (name: string, msg: string) => string;
|
|
18
|
+
};
|
|
19
|
+
readonly config: {
|
|
20
|
+
readonly unsupportedProvider: (provider: string) => string;
|
|
21
|
+
readonly invalidProviderInModel: (modelId: string, provider: string, supported: string) => string;
|
|
22
|
+
readonly modelIdFormatError: (modelId: string) => string;
|
|
23
|
+
readonly modelIdMissingName: (modelId: string) => string;
|
|
24
|
+
readonly emptyConfig: "配置内容为空";
|
|
25
|
+
readonly invalidJsonObject: "配置文件内容不是有效的 JSON 对象";
|
|
26
|
+
readonly missingMcpUrl: "缺少必需字段 \"ones_mcp_url\"(ONES MCP 服务器地址)";
|
|
27
|
+
readonly invalidModelField: "\"model\" 字段必须是非空字符串(格式: \"provider/model_name\")";
|
|
28
|
+
readonly invalidProviderInProviders: (name: string, supported: string) => string;
|
|
29
|
+
readonly invalidProviderMode: (name: string) => string;
|
|
30
|
+
readonly invalidAgentField: (field: string) => string;
|
|
31
|
+
readonly llmMustBeObject: "\"llm\" 字段必须是对象";
|
|
32
|
+
readonly providersMustBeObject: "\"llm.providers\" 字段必须是对象";
|
|
33
|
+
readonly providerEntryMustBeObject: (name: string) => string;
|
|
34
|
+
readonly agentMustBeObject: "\"agent\" 字段必须是对象";
|
|
35
|
+
readonly missingLlmConfig: "缺少 LLM 配置:需要 \"model\" 字段(新格式)或 \"anthropic_api_key\"(旧格式)";
|
|
36
|
+
readonly readFailed: (msg: string) => string;
|
|
37
|
+
readonly parseFailed: (msg: string) => string;
|
|
38
|
+
readonly validationFailed: (count: number) => string;
|
|
39
|
+
readonly repairHint: (path: string) => string;
|
|
40
|
+
readonly cannotRead: (path: string) => string;
|
|
41
|
+
readonly fileNotExist: "配置文件不存在,请先运行: seno init";
|
|
42
|
+
readonly loadFailedRunInit: "配置文件加载失败,请先运行 seno init 初始化";
|
|
43
|
+
};
|
|
44
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 用户可见字符串集中管理
|
|
3
|
+
*
|
|
4
|
+
* 所有面向用户的中文文案、错误提示、状态消息集中在此处,
|
|
5
|
+
* 便于一致性维护和未来可能的多语言支持。
|
|
6
|
+
*
|
|
7
|
+
* 命名规则:按模块组织,使用英文键名(便于 grep)。
|
|
8
|
+
*/
|
|
9
|
+
export const STRINGS = {
|
|
10
|
+
agent: {
|
|
11
|
+
contextTruncated: '\n[对话历史过长,已自动截断,正在重试...]\n',
|
|
12
|
+
maxIterationsReached: '\n[已达到最大工具调用轮次,停止处理]',
|
|
13
|
+
toolArgsParseFailed: (inputJson) => `工具参数解析失败: ${inputJson}`,
|
|
14
|
+
},
|
|
15
|
+
tools: {
|
|
16
|
+
unknownTool: (name) => `未知工具: ${name}`,
|
|
17
|
+
executionFailed: (name, msg) => `工具执行失败 [${name}]: ${msg}`,
|
|
18
|
+
},
|
|
19
|
+
config: {
|
|
20
|
+
unsupportedProvider: (provider) => `不支持的 LLM Provider: "${provider}"`,
|
|
21
|
+
invalidProviderInModel: (modelId, provider, supported) => `model 字段 "${modelId}" 中的 provider "${provider}" 不在支持列表中,支持: ${supported}`,
|
|
22
|
+
modelIdFormatError: (modelId) => `模型 ID 格式错误: "${modelId}"`,
|
|
23
|
+
modelIdMissingName: (modelId) => `model 字段 "${modelId}" 缺少模型名称(provider/ 后为空)`,
|
|
24
|
+
emptyConfig: '配置内容为空',
|
|
25
|
+
invalidJsonObject: '配置文件内容不是有效的 JSON 对象',
|
|
26
|
+
missingMcpUrl: '缺少必需字段 "ones_mcp_url"(ONES MCP 服务器地址)',
|
|
27
|
+
invalidModelField: '"model" 字段必须是非空字符串(格式: "provider/model_name")',
|
|
28
|
+
invalidProviderInProviders: (name, supported) => `llm.providers 中包含未知的 provider: "${name}",支持: ${supported}`,
|
|
29
|
+
invalidProviderMode: (name) => `llm.providers.${name}.mode 必须是 "api_key" 或 "oauth"`,
|
|
30
|
+
invalidAgentField: (field) => `agent.${field} 必须是正整数`,
|
|
31
|
+
llmMustBeObject: '"llm" 字段必须是对象',
|
|
32
|
+
providersMustBeObject: '"llm.providers" 字段必须是对象',
|
|
33
|
+
providerEntryMustBeObject: (name) => `llm.providers.${name} 必须是对象`,
|
|
34
|
+
agentMustBeObject: '"agent" 字段必须是对象',
|
|
35
|
+
missingLlmConfig: '缺少 LLM 配置:需要 "model" 字段(新格式)或 "anthropic_api_key"(旧格式)',
|
|
36
|
+
readFailed: (msg) => `配置文件读取失败: ${msg}`,
|
|
37
|
+
parseFailed: (msg) => `配置文件 JSON 解析失败: ${msg}`,
|
|
38
|
+
validationFailed: (count) => `配置文件验证失败 (${count} 个错误)`,
|
|
39
|
+
repairHint: (path) => `${path} 不是有效的 JSON 文件,请检查语法或重新运行: seno init`,
|
|
40
|
+
cannotRead: (path) => `无法读取 ${path}`,
|
|
41
|
+
// loadConfig caller messages
|
|
42
|
+
fileNotExist: '配置文件不存在,请先运行: seno init',
|
|
43
|
+
loadFailedRunInit: '配置文件加载失败,请先运行 seno init 初始化',
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=strings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/i18n/strings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,KAAK,EAAE;QACL,gBAAgB,EAAE,4BAA4B;QAC9C,oBAAoB,EAAE,sBAAsB;QAC5C,mBAAmB,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,aAAa,SAAS,EAAE;KACrE;IAED,KAAK,EAAE;QACL,WAAW,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,SAAS,IAAI,EAAE;QAC9C,eAAe,EAAE,CAAC,IAAY,EAAE,GAAW,EAAE,EAAE,CAAC,WAAW,IAAI,MAAM,GAAG,EAAE;KAC3E;IAED,MAAM,EAAE;QACN,mBAAmB,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,uBAAuB,QAAQ,GAAG;QAC7E,sBAAsB,EAAE,CAAC,OAAe,EAAE,QAAgB,EAAE,SAAiB,EAAE,EAAE,CAC/E,aAAa,OAAO,kBAAkB,QAAQ,iBAAiB,SAAS,EAAE;QAC5E,kBAAkB,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,gBAAgB,OAAO,GAAG;QACnE,kBAAkB,EAAE,CAAC,OAAe,EAAE,EAAE,CACtC,aAAa,OAAO,yBAAyB;QAC/C,WAAW,EAAE,QAAQ;QACrB,iBAAiB,EAAE,qBAAqB;QACxC,aAAa,EAAE,uCAAuC;QACtD,iBAAiB,EAAE,+CAA+C;QAClE,0BAA0B,EAAE,CAAC,IAAY,EAAE,SAAiB,EAAE,EAAE,CAC9D,mCAAmC,IAAI,SAAS,SAAS,EAAE;QAC7D,mBAAmB,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,iBAAiB,IAAI,+BAA+B;QAC3F,iBAAiB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,SAAS,KAAK,SAAS;QAC7D,eAAe,EAAE,eAAe;QAChC,qBAAqB,EAAE,yBAAyB;QAChD,yBAAyB,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,iBAAiB,IAAI,QAAQ;QAC1E,iBAAiB,EAAE,iBAAiB;QACpC,gBAAgB,EAAE,wDAAwD;QAC1E,UAAU,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,aAAa,GAAG,EAAE;QAC/C,WAAW,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,mBAAmB,GAAG,EAAE;QACtD,gBAAgB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,aAAa,KAAK,OAAO;QAC9D,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,IAAI,sCAAsC;QAC3E,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,IAAI,EAAE;QAC5C,6BAA6B;QAC7B,YAAY,EAAE,yBAAyB;QACvC,iBAAiB,EAAE,6BAA6B;KACjD;CACO,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -17,20 +17,15 @@ import { startRepl } from './cli/repl.js';
|
|
|
17
17
|
import { buildSystemPrompt } from './prompts/system.js';
|
|
18
18
|
import { SessionState } from './agent/session.js';
|
|
19
19
|
import { logger } from './cli/logger.js';
|
|
20
|
+
import { ConfigValidationError } from './errors.js';
|
|
20
21
|
const __filename = fileURLToPath(import.meta.url);
|
|
21
22
|
const __dirname = dirname(__filename);
|
|
22
23
|
const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
|
|
23
24
|
const program = new Command();
|
|
24
|
-
program
|
|
25
|
-
.name('seno')
|
|
26
|
-
.description('ONES 企业内部 AI Agent CLI')
|
|
27
|
-
.version(pkg.version);
|
|
25
|
+
program.name('seno').description('ONES 企业内部 AI Agent CLI').version(pkg.version);
|
|
28
26
|
program.option('--debug', '启用 Debug 模式,输出详细日志');
|
|
29
27
|
// seno init — 首次初始化配置
|
|
30
|
-
program
|
|
31
|
-
.command('init')
|
|
32
|
-
.description('初始化 SENO 配置(~/.seno/)')
|
|
33
|
-
.action(initCommand);
|
|
28
|
+
program.command('init').description('初始化 SENO 配置(~/.seno/)').action(initCommand);
|
|
34
29
|
// 默认行为:无子命令时进入 REPL 对话模式
|
|
35
30
|
program.action(async (_options, command) => {
|
|
36
31
|
if (command.args.length > 0)
|
|
@@ -43,9 +38,25 @@ program.action(async (_options, command) => {
|
|
|
43
38
|
process.exit(1);
|
|
44
39
|
}
|
|
45
40
|
// 加载配置
|
|
46
|
-
|
|
41
|
+
let config;
|
|
42
|
+
try {
|
|
43
|
+
config = await loadConfig();
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (error instanceof ConfigValidationError) {
|
|
47
|
+
console.log(chalk.red(`\n 配置文件验证失败:`));
|
|
48
|
+
for (const err of error.errors) {
|
|
49
|
+
console.log(chalk.yellow(` • ${err}`));
|
|
50
|
+
}
|
|
51
|
+
console.log(chalk.gray('\n 请修复配置或重新运行: seno init\n'));
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.log(chalk.red(`\n 配置文件加载失败: ${error instanceof Error ? error.message : String(error)}\n`));
|
|
55
|
+
}
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
47
58
|
if (!config) {
|
|
48
|
-
console.log(chalk.red('\n
|
|
59
|
+
console.log(chalk.red('\n 配置文件不存在,请先运行: seno init\n'));
|
|
49
60
|
process.exit(1);
|
|
50
61
|
}
|
|
51
62
|
// 连接 MCP 服务器
|
|
@@ -141,20 +152,44 @@ program.action(async (_options, command) => {
|
|
|
141
152
|
systemPrompt,
|
|
142
153
|
chatOptions: { model: active.model },
|
|
143
154
|
session,
|
|
155
|
+
agentConfig: config.agent,
|
|
144
156
|
});
|
|
145
|
-
// 10.
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
157
|
+
// 10. 统一资源清理(防止重复执行)
|
|
158
|
+
let cleanupDone = false;
|
|
159
|
+
async function cleanup() {
|
|
160
|
+
if (cleanupDone)
|
|
161
|
+
return;
|
|
162
|
+
cleanupDone = true;
|
|
151
163
|
try {
|
|
152
164
|
await toolRegistry.cleanup();
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// 清理失败不阻塞退出
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
153
170
|
await mcpManager.disconnectAll();
|
|
154
171
|
}
|
|
155
172
|
catch {
|
|
156
173
|
// 清理失败不阻塞退出
|
|
157
174
|
}
|
|
175
|
+
// flush 异步日志缓冲区,确保数据落盘
|
|
176
|
+
logger.flushSync();
|
|
177
|
+
}
|
|
178
|
+
// 信号处理:Ctrl+C / kill → 优雅退出
|
|
179
|
+
const onSignal = async (signal) => {
|
|
180
|
+
logger.debug('system', `Received ${signal}, cleaning up...`);
|
|
181
|
+
await cleanup();
|
|
182
|
+
process.exit(0);
|
|
183
|
+
};
|
|
184
|
+
process.on('SIGINT', () => void onSignal('SIGINT'));
|
|
185
|
+
process.on('SIGTERM', () => void onSignal('SIGTERM'));
|
|
186
|
+
// 全局异常兜底
|
|
187
|
+
process.on('uncaughtException', async (error) => {
|
|
188
|
+
logger.error('system', `Uncaught exception: ${error.message}`, {
|
|
189
|
+
stack: error.stack,
|
|
190
|
+
});
|
|
191
|
+
printError(error, debug);
|
|
192
|
+
await cleanup();
|
|
158
193
|
process.exit(1);
|
|
159
194
|
});
|
|
160
195
|
process.on('unhandledRejection', (reason) => {
|
|
@@ -186,8 +221,7 @@ program.action(async (_options, command) => {
|
|
|
186
221
|
});
|
|
187
222
|
}
|
|
188
223
|
finally {
|
|
189
|
-
await
|
|
190
|
-
await mcpManager.disconnectAll();
|
|
224
|
+
await cleanup();
|
|
191
225
|
}
|
|
192
226
|
});
|
|
193
227
|
program.parse();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/anthropic.d.ts
CHANGED
|
@@ -15,13 +15,4 @@ export declare class AnthropicProvider implements LLMProvider {
|
|
|
15
15
|
* 使用 AsyncGenerator 模式,逐个 yield StreamEvent。
|
|
16
16
|
*/
|
|
17
17
|
chat(messages: Message[], tools: ToolDefinition[], options?: ChatOptions): AsyncGenerator<StreamEvent>;
|
|
18
|
-
/**
|
|
19
|
-
* 判断 API 错误是否可重试
|
|
20
|
-
* 429 Rate Limit、5xx Server Error、网络错误可重试
|
|
21
|
-
*/
|
|
22
|
-
private isRetryableError;
|
|
23
|
-
/**
|
|
24
|
-
* 将原始错误转换为 LLMError,提供用户友好的错误信息
|
|
25
|
-
*/
|
|
26
|
-
private classifyError;
|
|
27
18
|
}
|