opencode-channels 0.1.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.
Files changed (121) hide show
  1. package/README.md +187 -0
  2. package/bin/cli.js +24 -0
  3. package/bin/cli.ts +62 -0
  4. package/dist/bot/auto-binding.d.ts +6 -0
  5. package/dist/bot/auto-binding.d.ts.map +1 -0
  6. package/dist/bot/auto-binding.js +81 -0
  7. package/dist/bot/auto-binding.js.map +1 -0
  8. package/dist/bot/commands/agents.d.ts +9 -0
  9. package/dist/bot/commands/agents.d.ts.map +1 -0
  10. package/dist/bot/commands/agents.js +53 -0
  11. package/dist/bot/commands/agents.js.map +1 -0
  12. package/dist/bot/commands/base.d.ts +4 -0
  13. package/dist/bot/commands/base.d.ts.map +1 -0
  14. package/dist/bot/commands/base.js +241 -0
  15. package/dist/bot/commands/base.js.map +1 -0
  16. package/dist/bot/commands/dynamic.d.ts +8 -0
  17. package/dist/bot/commands/dynamic.d.ts.map +1 -0
  18. package/dist/bot/commands/dynamic.js +82 -0
  19. package/dist/bot/commands/dynamic.js.map +1 -0
  20. package/dist/bot/commands/index.d.ts +15 -0
  21. package/dist/bot/commands/index.d.ts.map +1 -0
  22. package/dist/bot/commands/index.js +25 -0
  23. package/dist/bot/commands/index.js.map +1 -0
  24. package/dist/bot/commands/models.d.ts +7 -0
  25. package/dist/bot/commands/models.d.ts.map +1 -0
  26. package/dist/bot/commands/models.js +60 -0
  27. package/dist/bot/commands/models.js.map +1 -0
  28. package/dist/bot/commands/sdk-commands.d.ts +5 -0
  29. package/dist/bot/commands/sdk-commands.d.ts.map +1 -0
  30. package/dist/bot/commands/sdk-commands.js +135 -0
  31. package/dist/bot/commands/sdk-commands.js.map +1 -0
  32. package/dist/bot/handlers/callback.d.ts +3 -0
  33. package/dist/bot/handlers/callback.d.ts.map +1 -0
  34. package/dist/bot/handlers/callback.js +52 -0
  35. package/dist/bot/handlers/callback.js.map +1 -0
  36. package/dist/bot/handlers/file.d.ts +3 -0
  37. package/dist/bot/handlers/file.d.ts.map +1 -0
  38. package/dist/bot/handlers/file.js +121 -0
  39. package/dist/bot/handlers/file.js.map +1 -0
  40. package/dist/bot/handlers/group.d.ts +3 -0
  41. package/dist/bot/handlers/group.d.ts.map +1 -0
  42. package/dist/bot/handlers/group.js +41 -0
  43. package/dist/bot/handlers/group.js.map +1 -0
  44. package/dist/bot/handlers/index.d.ts +4 -0
  45. package/dist/bot/handlers/index.d.ts.map +1 -0
  46. package/dist/bot/handlers/index.js +13 -0
  47. package/dist/bot/handlers/index.js.map +1 -0
  48. package/dist/bot/handlers/message.d.ts +15 -0
  49. package/dist/bot/handlers/message.d.ts.map +1 -0
  50. package/dist/bot/handlers/message.js +183 -0
  51. package/dist/bot/handlers/message.js.map +1 -0
  52. package/dist/bot/handlers/topic.d.ts +3 -0
  53. package/dist/bot/handlers/topic.d.ts.map +1 -0
  54. package/dist/bot/handlers/topic.js +43 -0
  55. package/dist/bot/handlers/topic.js.map +1 -0
  56. package/dist/bot/index.d.ts +5 -0
  57. package/dist/bot/index.d.ts.map +1 -0
  58. package/dist/bot/index.js +66 -0
  59. package/dist/bot/index.js.map +1 -0
  60. package/dist/cli/daemon.d.ts +6 -0
  61. package/dist/cli/daemon.d.ts.map +1 -0
  62. package/dist/cli/daemon.js +255 -0
  63. package/dist/cli/daemon.js.map +1 -0
  64. package/dist/cli/init.d.ts +19 -0
  65. package/dist/cli/init.d.ts.map +1 -0
  66. package/dist/cli/init.js +235 -0
  67. package/dist/cli/init.js.map +1 -0
  68. package/dist/cli/logs.d.ts +6 -0
  69. package/dist/cli/logs.d.ts.map +1 -0
  70. package/dist/cli/logs.js +42 -0
  71. package/dist/cli/logs.js.map +1 -0
  72. package/dist/cli/start.d.ts +4 -0
  73. package/dist/cli/start.d.ts.map +1 -0
  74. package/dist/cli/start.js +254 -0
  75. package/dist/cli/start.js.map +1 -0
  76. package/dist/plugin/index.d.ts +4 -0
  77. package/dist/plugin/index.d.ts.map +1 -0
  78. package/dist/plugin/index.js +73 -0
  79. package/dist/plugin/index.js.map +1 -0
  80. package/dist/server/api.d.ts +3 -0
  81. package/dist/server/api.d.ts.map +1 -0
  82. package/dist/server/api.js +30 -0
  83. package/dist/server/api.js.map +1 -0
  84. package/dist/server/events.d.ts +18 -0
  85. package/dist/server/events.d.ts.map +1 -0
  86. package/dist/server/events.js +131 -0
  87. package/dist/server/events.js.map +1 -0
  88. package/dist/server/filters.d.ts +19 -0
  89. package/dist/server/filters.d.ts.map +1 -0
  90. package/dist/server/filters.js +149 -0
  91. package/dist/server/filters.js.map +1 -0
  92. package/dist/server/index.d.ts +4 -0
  93. package/dist/server/index.d.ts.map +1 -0
  94. package/dist/server/index.js +10 -0
  95. package/dist/server/index.js.map +1 -0
  96. package/dist/server/sdk.d.ts +36 -0
  97. package/dist/server/sdk.d.ts.map +1 -0
  98. package/dist/server/sdk.js +485 -0
  99. package/dist/server/sdk.js.map +1 -0
  100. package/dist/shared/config.d.ts +34 -0
  101. package/dist/shared/config.d.ts.map +1 -0
  102. package/dist/shared/config.js +163 -0
  103. package/dist/shared/config.js.map +1 -0
  104. package/dist/shared/logger.d.ts +5 -0
  105. package/dist/shared/logger.d.ts.map +1 -0
  106. package/dist/shared/logger.js +114 -0
  107. package/dist/shared/logger.js.map +1 -0
  108. package/dist/shared/mapping.d.ts +90 -0
  109. package/dist/shared/mapping.d.ts.map +1 -0
  110. package/dist/shared/mapping.js +234 -0
  111. package/dist/shared/mapping.js.map +1 -0
  112. package/dist/shared/message-queue.d.ts +64 -0
  113. package/dist/shared/message-queue.d.ts.map +1 -0
  114. package/dist/shared/message-queue.js +138 -0
  115. package/dist/shared/message-queue.js.map +1 -0
  116. package/dist/shared/types.d.ts +284 -0
  117. package/dist/shared/types.d.ts.map +1 -0
  118. package/dist/shared/types.js +7 -0
  119. package/dist/shared/types.js.map +1 -0
  120. package/index.js +1 -0
  121. package/package.json +71 -0
@@ -0,0 +1,485 @@
1
+ import { createOpencodeClient } from '@opencode-ai/sdk/v2/client';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { filterVisibleAgents, findMatchingAgent } from './filters.js';
5
+ const PROMPT_TIMEOUT_MS = 5 * 60 * 1000;
6
+ const sessionLocks = new Map();
7
+ function withSessionLock(sessionId, fn) {
8
+ const prev = sessionLocks.get(sessionId) ?? Promise.resolve();
9
+ const next = prev.then(fn, fn);
10
+ sessionLocks.set(sessionId, next);
11
+ next.finally(() => {
12
+ if (sessionLocks.get(sessionId) === next) {
13
+ sessionLocks.delete(sessionId);
14
+ }
15
+ });
16
+ return next;
17
+ }
18
+ let _client = null;
19
+ export function initSDK() {
20
+ if (_client)
21
+ return _client;
22
+ const baseUrl = process.env.OPENCODE_SERVER_URL || 'http://127.0.0.1:3838';
23
+ const config = { baseUrl };
24
+ console.log('[SDK] 初始化 SDK,配置:', JSON.stringify({ baseUrl: config.baseUrl }));
25
+ _client = createOpencodeClient(config);
26
+ return _client;
27
+ }
28
+ /** 重置 SDK 客户端(用于测试或重连) */
29
+ export function resetSDK() {
30
+ _client = null;
31
+ }
32
+ export async function getAgents(projectPath) {
33
+ try {
34
+ const sdk = initSDK();
35
+ console.log('[SDK] 调用 sdk.app.agents,项目路径:', projectPath);
36
+ const result = await sdk.app.agents({
37
+ directory: projectPath,
38
+ });
39
+ console.log('[SDK] agents 响应:', JSON.stringify(result).substring(0, 200));
40
+ if (!result.data || !Array.isArray(result.data)) {
41
+ console.error('[SDK] agents 返回数据格式错误:', typeof result.data, result.data);
42
+ return [];
43
+ }
44
+ console.log('[SDK] agents 原始数据:', JSON.stringify(result.data.map((a) => ({ name: a.name, mode: a.mode, hidden: a.hidden, builtIn: a.builtIn }))));
45
+ const filtered = filterVisibleAgents(result.data);
46
+ console.log(`[SDK] 筛选后 agents: ${filtered.map((a) => a.name).join(', ')} (${filtered.length}/${result.data.length})`);
47
+ return filtered;
48
+ }
49
+ catch (error) {
50
+ const errorMessage = error instanceof Error ? error.message : String(error);
51
+ console.error('[SDK] getAgents 失败:', errorMessage);
52
+ throw error;
53
+ }
54
+ }
55
+ function parseJsonc(content) {
56
+ try {
57
+ const withoutComments = content.replace(/\/\/.*$/gm, '');
58
+ const withoutTrailingCommas = withoutComments.replace(/,\s*([}\]])/g, '$1');
59
+ return JSON.parse(withoutTrailingCommas);
60
+ }
61
+ catch (error) {
62
+ const errorMessage = error instanceof Error ? error.message : String(error);
63
+ console.warn(`[SDK] parseJsonc 解析失败,返回空配置: ${errorMessage}`);
64
+ return {};
65
+ }
66
+ }
67
+ function loadProjectConfig(projectPath) {
68
+ const configPath = path.join(projectPath, '.opencode', 'opencode.jsonc');
69
+ if (!fs.existsSync(configPath)) {
70
+ return {};
71
+ }
72
+ const content = fs.readFileSync(configPath, 'utf-8');
73
+ return parseJsonc(content);
74
+ }
75
+ function saveProjectConfig(projectPath, config) {
76
+ const configDir = path.join(projectPath, '.opencode');
77
+ const configPath = path.join(configDir, 'opencode.jsonc');
78
+ if (!fs.existsSync(configDir)) {
79
+ fs.mkdirSync(configDir, { recursive: true });
80
+ }
81
+ const content = JSON.stringify(config, null, 2);
82
+ fs.writeFileSync(configPath, content, 'utf-8');
83
+ }
84
+ function parseModelId(model) {
85
+ if (!model) {
86
+ return undefined;
87
+ }
88
+ const [providerID, modelID] = model.split('/');
89
+ if (!providerID || !modelID) {
90
+ return undefined;
91
+ }
92
+ return { providerID, modelID };
93
+ }
94
+ export function extractTextFromParts(parts) {
95
+ if (!parts || parts.length === 0)
96
+ return '';
97
+ const textParts = parts.filter((p) => p.type === 'text' && typeof p.text === 'string');
98
+ return textParts.map((p) => p.text).join('\n');
99
+ }
100
+ async function withTimeout(promise, timeoutMs, timeoutMessage) {
101
+ let timeoutId;
102
+ const timeoutPromise = new Promise((_, reject) => {
103
+ timeoutId = setTimeout(() => {
104
+ reject(new Error(timeoutMessage));
105
+ }, timeoutMs);
106
+ });
107
+ try {
108
+ return await Promise.race([promise, timeoutPromise]);
109
+ }
110
+ finally {
111
+ if (timeoutId) {
112
+ clearTimeout(timeoutId);
113
+ }
114
+ }
115
+ }
116
+ export async function createSession(projectPath, title) {
117
+ try {
118
+ const sdk = initSDK();
119
+ console.log(`[SDK] 创建会话: ${title} (项目: ${projectPath})`);
120
+ const result = await sdk.session.create({
121
+ directory: projectPath,
122
+ title: title,
123
+ });
124
+ if (!result.data) {
125
+ throw new Error('SDK 返回数据为空');
126
+ }
127
+ const sessionId = result.data.id;
128
+ console.log(`[SDK] 会话创建成功: ${sessionId}`);
129
+ return sessionId;
130
+ }
131
+ catch (error) {
132
+ const errorMessage = error instanceof Error ? error.message : String(error);
133
+ console.error(`[SDK] 创建会话失败: ${errorMessage}`);
134
+ throw new Error(`创建 OpenCode 会话失败: ${errorMessage}`);
135
+ }
136
+ }
137
+ export async function createSessionWithInfo(projectPath, title) {
138
+ const sessionId = await createSession(projectPath, title);
139
+ let agent;
140
+ let modelId;
141
+ try {
142
+ const config = loadProjectConfig(projectPath);
143
+ agent = typeof config.default_agent === 'string' ? config.default_agent : undefined;
144
+ modelId = typeof config.model === 'string' ? config.model : undefined;
145
+ }
146
+ catch (error) {
147
+ const errorMessage = error instanceof Error ? error.message : String(error);
148
+ console.warn(`[SDK] 读取项目配置失败,使用默认值: ${errorMessage}`);
149
+ }
150
+ return { sessionId, agent, modelId };
151
+ }
152
+ export async function getProviders(projectPath) {
153
+ try {
154
+ const sdk = initSDK();
155
+ console.log('[SDK] 调用 sdk.config.providers,项目路径:', projectPath);
156
+ const result = await sdk.config.providers({
157
+ directory: projectPath,
158
+ });
159
+ console.log('[SDK] providers 响应:', JSON.stringify(result).substring(0, 200));
160
+ const providers = result.data?.providers ?? [];
161
+ if (!Array.isArray(providers)) {
162
+ console.error('[SDK] providers 返回数据格式错误:', typeof providers, providers);
163
+ return [];
164
+ }
165
+ return providers.map((provider) => {
166
+ const models = provider.models ?? {};
167
+ return {
168
+ id: provider.id,
169
+ name: provider.name ?? provider.id,
170
+ models: Object.entries(models).map(([modelKey, model]) => {
171
+ const m = model;
172
+ return {
173
+ id: m.id ?? modelKey,
174
+ name: (m.name ?? modelKey).replace('(latest)', '').trim(),
175
+ family: m.family,
176
+ release_date: m.release_date,
177
+ };
178
+ }),
179
+ };
180
+ });
181
+ }
182
+ catch (error) {
183
+ const errorMessage = error instanceof Error ? error.message : String(error);
184
+ console.error('[SDK] getProviders 失败:', errorMessage);
185
+ throw error;
186
+ }
187
+ }
188
+ export async function updateConfig(projectPath, updates) {
189
+ try {
190
+ const config = loadProjectConfig(projectPath);
191
+ if (updates.agent) {
192
+ config.default_agent = updates.agent;
193
+ }
194
+ if (updates.model) {
195
+ config.model = updates.model;
196
+ }
197
+ saveProjectConfig(projectPath, config);
198
+ const sdk = initSDK();
199
+ const body = config;
200
+ await sdk.config.update({
201
+ directory: projectPath,
202
+ config: body,
203
+ });
204
+ return true;
205
+ }
206
+ catch (error) {
207
+ const errorMessage = error instanceof Error ? error.message : String(error);
208
+ console.error(`[SDK] 更新配置失败: ${errorMessage}`);
209
+ return false;
210
+ }
211
+ }
212
+ export function sendMessage(sessionId, message, agent, projectPath, model, noReply = false) {
213
+ return withSessionLock(sessionId, () => sendMessageInternal(sessionId, message, agent, projectPath, model, noReply));
214
+ }
215
+ async function sendMessageInternal(sessionId, message, agent, projectPath, model, noReply = false) {
216
+ try {
217
+ const sdk = initSDK();
218
+ const promptParams = {
219
+ sessionID: sessionId,
220
+ parts: [{ type: 'text', text: message }],
221
+ };
222
+ if (projectPath) {
223
+ promptParams.directory = projectPath;
224
+ }
225
+ if (noReply) {
226
+ promptParams.noReply = true;
227
+ }
228
+ if (agent) {
229
+ promptParams.agent = agent;
230
+ }
231
+ const parsedModel = parseModelId(model);
232
+ if (parsedModel) {
233
+ promptParams.model = parsedModel;
234
+ }
235
+ console.log(`[SDK] 发送消息到会话 ${sessionId}: ${message.substring(0, 50)}...`);
236
+ let result = await withTimeout(sdk.session.prompt(promptParams), PROMPT_TIMEOUT_MS, '请求超时 (5分钟)');
237
+ if (result.error) {
238
+ const errName = result.error?.name ?? 'UnknownError';
239
+ const errMsg = result.error?.data?.message ?? JSON.stringify(result.error);
240
+ throw new Error(`OpenCode Server 错误 [${errName}]: ${errMsg}`);
241
+ }
242
+ const hasContent = result.data?.info && result.data?.parts?.length > 0;
243
+ if (!hasContent) {
244
+ if (agent || parsedModel) {
245
+ console.log(`[SDK] agent="${agent}", model="${model}" 返回空响应,去掉 agent/model 重试`);
246
+ const retryParams = {
247
+ sessionID: sessionId,
248
+ parts: [{ type: 'text', text: message }],
249
+ };
250
+ if (projectPath) {
251
+ retryParams.directory = projectPath;
252
+ }
253
+ if (noReply) {
254
+ retryParams.noReply = true;
255
+ }
256
+ result = await withTimeout(sdk.session.prompt(retryParams), PROMPT_TIMEOUT_MS, '请求超时 (5分钟)');
257
+ }
258
+ if (!result.data?.info || !result.data?.parts) {
259
+ throw new Error('OpenCode Server 返回空数据');
260
+ }
261
+ }
262
+ if (!result.data?.info || !result.data?.parts) {
263
+ throw new Error('OpenCode Server 返回空数据');
264
+ }
265
+ const data = result.data;
266
+ const text = extractTextFromParts(data.parts);
267
+ const modelId = data.info?.modelID;
268
+ const providerId = data.info?.providerID;
269
+ const respAgent = data.info?.agent ?? agent ?? 'assistant';
270
+ const modelName = modelId && providerId ? `${providerId}/${modelId}` : modelId;
271
+ console.log(`[SDK] 提取文本长度: ${text.length}, agent: ${respAgent}, model: ${modelName}`);
272
+ return { text, agent: respAgent, modelId: modelName };
273
+ }
274
+ catch (error) {
275
+ const errorMessage = error instanceof Error ? error.message : String(error);
276
+ console.error(`[SDK] 发送消息失败: ${errorMessage}`);
277
+ throw new Error(`发送消息到 OpenCode 会话失败: ${errorMessage}`);
278
+ }
279
+ }
280
+ export async function sendMessageAsync(sessionId, message, agent, projectPath, model) {
281
+ const sdk = initSDK();
282
+ const promptParams = {
283
+ sessionID: sessionId,
284
+ parts: [{ type: 'text', text: message }],
285
+ };
286
+ if (projectPath)
287
+ promptParams.directory = projectPath;
288
+ // 验证 agent 是否存在,不存在则不传递(避免 OpenCode Server 静默忽略请求)
289
+ if (agent && projectPath) {
290
+ try {
291
+ const agents = await getAgents(projectPath);
292
+ const matchedAgent = findMatchingAgent(agents, agent);
293
+ if (matchedAgent) {
294
+ promptParams.agent = matchedAgent.name;
295
+ console.log(`[SDK] 使用 agent: ${matchedAgent.name} (匹配自: ${agent})`);
296
+ }
297
+ else {
298
+ console.warn(`[SDK] agent "${agent}" 不存在,将使用默认 agent`);
299
+ }
300
+ }
301
+ catch (error) {
302
+ console.warn(`[SDK] 验证 agent 失败,将使用默认 agent:`, error);
303
+ }
304
+ }
305
+ else if (agent) {
306
+ promptParams.agent = agent;
307
+ }
308
+ const parsedModel = parseModelId(model);
309
+ if (parsedModel)
310
+ promptParams.model = parsedModel;
311
+ console.log(`[SDK] 异步发送消息到会话 ${sessionId}: ${message.substring(0, 50)}...`);
312
+ console.log(`[SDK] promptParams: ${JSON.stringify(promptParams)}`);
313
+ try {
314
+ const result = await sdk.session.promptAsync(promptParams);
315
+ console.log(`[SDK] promptAsync 响应状态: ${result.response.status}`);
316
+ }
317
+ catch (error) {
318
+ console.error(`[SDK] promptAsync 失败:`, error);
319
+ throw error;
320
+ }
321
+ }
322
+ export async function replyPermission(requestId, reply, projectPath) {
323
+ const sdk = initSDK();
324
+ console.log(`[SDK] 回复权限请求 ${requestId}: ${reply}`);
325
+ await sdk.permission.reply({
326
+ requestID: requestId,
327
+ reply,
328
+ ...(projectPath ? { directory: projectPath } : {}),
329
+ });
330
+ }
331
+ export async function replyQuestion(requestId, answers, projectPath) {
332
+ const sdk = initSDK();
333
+ console.log(`[SDK] 回复问题 ${requestId}`);
334
+ await sdk.question.reply({
335
+ requestID: requestId,
336
+ answers,
337
+ ...(projectPath ? { directory: projectPath } : {}),
338
+ });
339
+ }
340
+ export async function getLatestAssistantMessage(sessionId, projectPath) {
341
+ try {
342
+ const sdk = initSDK();
343
+ const params = {
344
+ sessionID: sessionId,
345
+ limit: 5,
346
+ };
347
+ if (projectPath) {
348
+ params.directory = projectPath;
349
+ }
350
+ console.log(`[SDK] 获取会话消息: ${sessionId}`);
351
+ const result = await sdk.session.messages(params);
352
+ if (!result.data || !Array.isArray(result.data)) {
353
+ console.log('[SDK] 未找到消息数据');
354
+ return null;
355
+ }
356
+ for (let i = result.data.length - 1; i >= 0; i--) {
357
+ const msg = result.data[i];
358
+ if (msg.info.role === 'assistant' && msg.parts && msg.parts.length > 0) {
359
+ const text = extractTextFromParts(msg.parts);
360
+ if (text) {
361
+ const agent = msg.info.agent ?? 'assistant';
362
+ const modelId = msg.info.modelID;
363
+ const providerId = msg.info.providerID;
364
+ const modelName = modelId && providerId ? `${providerId}/${modelId}` : modelId;
365
+ console.log(`[SDK] 找到最新 AI 消息: agent=${agent}, model=${modelName}, 长度=${text.length}`);
366
+ return { text, agent, modelId: modelName };
367
+ }
368
+ }
369
+ }
370
+ console.log('[SDK] 未找到 assistant 消息');
371
+ return null;
372
+ }
373
+ catch (error) {
374
+ const errorMessage = error instanceof Error ? error.message : String(error);
375
+ console.error(`[SDK] 获取最新消息失败: ${errorMessage}`);
376
+ return null;
377
+ }
378
+ }
379
+ export async function getCommands(projectPath) {
380
+ try {
381
+ const sdk = initSDK();
382
+ console.log('[SDK] 调用 sdk.command.list,项目路径:', projectPath);
383
+ const result = await sdk.command.list({
384
+ directory: projectPath,
385
+ });
386
+ console.log('[SDK] commands 响应:', JSON.stringify(result).substring(0, 200));
387
+ if (!result.data || !Array.isArray(result.data)) {
388
+ console.error('[SDK] commands 返回数据格式错误:', typeof result.data, result.data);
389
+ return [];
390
+ }
391
+ console.log(`[SDK] 获取到 ${result.data.length} 个 commands`);
392
+ return result.data;
393
+ }
394
+ catch (error) {
395
+ const errorMessage = error instanceof Error ? error.message : String(error);
396
+ console.error('[SDK] getCommands 失败:', errorMessage);
397
+ throw error;
398
+ }
399
+ }
400
+ export async function executeCommand(sessionId, commandName, args, projectPath, agent, model) {
401
+ try {
402
+ const sdk = initSDK();
403
+ const params = {
404
+ sessionID: sessionId,
405
+ command: commandName,
406
+ arguments: args,
407
+ };
408
+ if (projectPath) {
409
+ params.directory = projectPath;
410
+ }
411
+ if (agent && projectPath) {
412
+ try {
413
+ const agents = await getAgents(projectPath);
414
+ const matchedAgent = findMatchingAgent(agents, agent);
415
+ if (matchedAgent) {
416
+ params.agent = matchedAgent.name;
417
+ console.log(`[SDK] 使用 agent: ${matchedAgent.name} (匹配自: ${agent})`);
418
+ }
419
+ else {
420
+ console.warn(`[SDK] agent "${agent}" 不存在,将使用默认 agent`);
421
+ }
422
+ }
423
+ catch (error) {
424
+ console.warn(`[SDK] 验证 agent 失败,将使用默认 agent:`, error);
425
+ }
426
+ }
427
+ else if (agent) {
428
+ params.agent = agent;
429
+ }
430
+ if (model) {
431
+ params.model = model;
432
+ }
433
+ console.log(`[SDK] 执行指令: ${commandName}, 参数: ${args}`);
434
+ console.log(`[SDK] session.command 参数:`, JSON.stringify(params, null, 2));
435
+ const result = await sdk.session.command(params);
436
+ console.log(`[SDK] 指令执行成功,返回结果:`, JSON.stringify(result, null, 2));
437
+ if (!result.data) {
438
+ if (result.error) {
439
+ const errorMsg = result.error?.data?.message || JSON.stringify(result.error);
440
+ throw new Error(`指令执行失败: ${errorMsg}`);
441
+ }
442
+ console.warn(`[SDK] 警告: result.data 为空`);
443
+ return { text: '', agent: 'assistant', modelId: undefined };
444
+ }
445
+ const text = extractTextFromParts(result.data.parts || []);
446
+ const resultAgent = result.data.info?.agent ?? 'assistant';
447
+ const modelId = result.data.info?.modelID;
448
+ const providerId = result.data.info?.providerID;
449
+ const modelName = modelId && providerId ? `${providerId}/${modelId}` : modelId;
450
+ return { text, agent: resultAgent, modelId: modelName };
451
+ }
452
+ catch (error) {
453
+ const errorMessage = error instanceof Error ? error.message : String(error);
454
+ console.error(`[SDK] 执行指令失败: ${errorMessage}`);
455
+ throw new Error(`执行指令失败: ${errorMessage}`);
456
+ }
457
+ }
458
+ export async function compactSession(sessionId, projectPath, model) {
459
+ try {
460
+ const sdk = initSDK();
461
+ const parsedModel = model ? parseModelId(model) : { providerID: 'anthropic', modelID: 'claude-sonnet-4-6' };
462
+ if (!parsedModel) {
463
+ throw new Error('Invalid model format');
464
+ }
465
+ const params = {
466
+ sessionID: sessionId,
467
+ providerID: parsedModel.providerID,
468
+ modelID: parsedModel.modelID,
469
+ };
470
+ if (projectPath) {
471
+ params.directory = projectPath;
472
+ }
473
+ console.log(`[SDK] 压缩会话: ${sessionId}`);
474
+ console.log(`[SDK] summarize 参数:`, JSON.stringify(params, null, 2));
475
+ const result = await sdk.session.summarize(params);
476
+ console.log(`[SDK] 会话压缩成功:`, result.data);
477
+ return result.data ?? false;
478
+ }
479
+ catch (error) {
480
+ const errorMessage = error instanceof Error ? error.message : String(error);
481
+ console.error(`[SDK] 会话压缩失败: ${errorMessage}`);
482
+ throw new Error(`会话压缩失败: ${errorMessage}`);
483
+ }
484
+ }
485
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/server/sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * OpenCode Channels 配置管理
3
+ *
4
+ * 负责配置文件的读取、保存和验证
5
+ */
6
+ import type { Config } from './types.js';
7
+ /**
8
+ * 确保配置目录存在
9
+ */
10
+ export declare function ensureConfigDir(): void;
11
+ /**
12
+ * 获取默认配置
13
+ */
14
+ export declare function getDefaultConfig(): Config;
15
+ /**
16
+ * 验证配置对象
17
+ * @param config 待验证的配置对象
18
+ * @returns 是否有效
19
+ * @throws 如果配置无效,抛出详细错误
20
+ */
21
+ export declare function validateConfig(config: unknown): config is Config;
22
+ /**
23
+ * 加载配置文件
24
+ * @returns 配置对象,如果文件不存在返回 null
25
+ * @throws 如果文件格式错误或验证失败
26
+ */
27
+ export declare function loadConfig(): Config | null;
28
+ /**
29
+ * 保存配置文件
30
+ * @param config 配置对象
31
+ * @throws 如果保存失败
32
+ */
33
+ export declare function saveConfig(config: Config): void;
34
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/shared/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAQzC;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAQtC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAoBzC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,MAAM,CA2DhE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAyB1C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAmB/C"}