@ai-setting/roy-agent-core 1.5.35 → 1.5.37

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 (41) hide show
  1. package/dist/config/index.js +3 -3
  2. package/dist/env/agent/index.js +3 -3
  3. package/dist/env/commands/index.js +3 -3
  4. package/dist/env/debug/index.js +3 -3
  5. package/dist/env/event-source/index.js +5 -9
  6. package/dist/env/hook/index.js +1 -1
  7. package/dist/env/index.js +11 -15
  8. package/dist/env/llm/index.js +3 -3
  9. package/dist/env/log-trace/index.js +3 -3
  10. package/dist/env/mcp/index.js +3 -3
  11. package/dist/env/memory/index.js +3 -3
  12. package/dist/env/prompt/index.js +3 -3
  13. package/dist/env/session/index.js +3 -3
  14. package/dist/env/skill/index.js +3 -3
  15. package/dist/env/task/delegate/index.js +2 -2
  16. package/dist/env/task/index.js +4 -4
  17. package/dist/env/tool/index.js +3 -3
  18. package/dist/env/workflow/index.js +3 -3
  19. package/dist/index.js +21 -25
  20. package/dist/shared/@ai-setting/{roy-agent-core-f7q2x5z6.js → roy-agent-core-0wdjp769.js} +1 -1
  21. package/dist/shared/@ai-setting/{roy-agent-core-vf215qfv.js → roy-agent-core-3prpabp8.js} +1 -1
  22. package/dist/shared/@ai-setting/{roy-agent-core-gjq1yk68.js → roy-agent-core-86gphny5.js} +7 -0
  23. package/dist/shared/@ai-setting/{roy-agent-core-zbkpc41z.js → roy-agent-core-97ma0pr5.js} +1 -1
  24. package/dist/shared/@ai-setting/{roy-agent-core-8jxva565.js → roy-agent-core-9mj7vzsm.js} +1 -1
  25. package/dist/shared/@ai-setting/{roy-agent-core-81w1963m.js → roy-agent-core-by55z88t.js} +1 -1
  26. package/dist/shared/@ai-setting/{roy-agent-core-vkz81f7v.js → roy-agent-core-c0d3dtjd.js} +2 -2
  27. package/dist/shared/@ai-setting/{roy-agent-core-b0x5dda6.js → roy-agent-core-c2wjwx16.js} +9 -1
  28. package/dist/shared/@ai-setting/{roy-agent-core-kkbwepqb.js → roy-agent-core-cefh9hjv.js} +1 -1
  29. package/dist/shared/@ai-setting/{roy-agent-core-pw7cv1px.js → roy-agent-core-e2vk2qh7.js} +1 -1
  30. package/dist/shared/@ai-setting/{roy-agent-core-g99pxzn5.js → roy-agent-core-fg1kxf70.js} +1 -1
  31. package/dist/shared/@ai-setting/{roy-agent-core-7nwwzxf6.js → roy-agent-core-gf2c2pxr.js} +1 -1
  32. package/dist/shared/@ai-setting/{roy-agent-core-vn2bc59q.js → roy-agent-core-hd1z20yq.js} +1 -1
  33. package/dist/shared/@ai-setting/{roy-agent-core-4wjywp3c.js → roy-agent-core-hkb529dw.js} +1 -1
  34. package/dist/shared/@ai-setting/{roy-agent-core-j1sr5pk9.js → roy-agent-core-j0ke54vy.js} +1 -1
  35. package/dist/shared/@ai-setting/{roy-agent-core-5ex3za0m.js → roy-agent-core-mx489p7f.js} +148 -287
  36. package/dist/shared/@ai-setting/{roy-agent-core-4txzpsbt.js → roy-agent-core-qdmt6nz7.js} +1 -1
  37. package/dist/shared/@ai-setting/{roy-agent-core-5wp5grzj.js → roy-agent-core-vqspcspb.js} +2 -2
  38. package/dist/shared/@ai-setting/{roy-agent-core-mrcxzpbg.js → roy-agent-core-wjd5kars.js} +2 -2
  39. package/dist/shared/@ai-setting/{roy-agent-core-avq1x4t7.js → roy-agent-core-xb4hvk1m.js} +2 -22
  40. package/dist/shared/@ai-setting/{roy-agent-core-gwc4h96n.js → roy-agent-core-xt3fx7m1.js} +3 -3
  41. package/package.json +1 -1
@@ -8,11 +8,11 @@ import {
8
8
  } from "./roy-agent-core-qxhq8ven.js";
9
9
  import {
10
10
  BaseComponent
11
- } from "./roy-agent-core-kkbwepqb.js";
11
+ } from "./roy-agent-core-cefh9hjv.js";
12
12
  import {
13
13
  LLMHookPoints,
14
14
  globalHookManager
15
- } from "./roy-agent-core-gjq1yk68.js";
15
+ } from "./roy-agent-core-86gphny5.js";
16
16
  import {
17
17
  TracedAs,
18
18
  init_decorator
@@ -10,7 +10,10 @@ import {
10
10
  } from "./roy-agent-core-qxhq8ven.js";
11
11
  import {
12
12
  BaseComponent
13
- } from "./roy-agent-core-kkbwepqb.js";
13
+ } from "./roy-agent-core-cefh9hjv.js";
14
+ import {
15
+ globalHookManager
16
+ } from "./roy-agent-core-86gphny5.js";
14
17
  import {
15
18
  SessionMessageConverter
16
19
  } from "./roy-agent-core-jfh9q2qh.js";
@@ -1009,6 +1012,11 @@ ${ctx.context.additionInfo}`
1009
1012
  });
1010
1013
  }
1011
1014
  }
1015
+ const metadata = {
1016
+ pluginEnabled: ctx.context?.pluginEnabled,
1017
+ envEvent: ctx.context?.envEvent
1018
+ };
1019
+ await globalHookManager.execute(point, ctx, metadata);
1012
1020
  }
1013
1021
  async handleHookAction(action, ctx) {
1014
1022
  switch (action.type) {
@@ -3,7 +3,7 @@ import {
3
3
  } from "./roy-agent-core-2dhd60aw.js";
4
4
  import {
5
5
  HookManager
6
- } from "./roy-agent-core-gjq1yk68.js";
6
+ } from "./roy-agent-core-86gphny5.js";
7
7
 
8
8
  // src/env/component.ts
9
9
  class BaseComponent {
@@ -15,7 +15,7 @@ import {
15
15
  } from "./roy-agent-core-0vbdz0x7.js";
16
16
  import {
17
17
  BaseComponent
18
- } from "./roy-agent-core-kkbwepqb.js";
18
+ } from "./roy-agent-core-cefh9hjv.js";
19
19
  import {
20
20
  createLogger,
21
21
  init_logger
@@ -4,7 +4,7 @@ import {
4
4
  } from "./roy-agent-core-rvv6ydff.js";
5
5
  import {
6
6
  BaseComponent
7
- } from "./roy-agent-core-kkbwepqb.js";
7
+ } from "./roy-agent-core-cefh9hjv.js";
8
8
  import {
9
9
  __require
10
10
  } from "./roy-agent-core-fs0mn2jk.js";
@@ -10,7 +10,7 @@ import {
10
10
  } from "./roy-agent-core-qxhq8ven.js";
11
11
  import {
12
12
  BaseComponent
13
- } from "./roy-agent-core-kkbwepqb.js";
13
+ } from "./roy-agent-core-cefh9hjv.js";
14
14
  import {
15
15
  createLogger,
16
16
  init_logger
@@ -7,7 +7,7 @@ import {
7
7
  } from "./roy-agent-core-qxhq8ven.js";
8
8
  import {
9
9
  BaseComponent
10
- } from "./roy-agent-core-kkbwepqb.js";
10
+ } from "./roy-agent-core-cefh9hjv.js";
11
11
  import {
12
12
  __require
13
13
  } from "./roy-agent-core-fs0mn2jk.js";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./roy-agent-core-qxhq8ven.js";
4
4
  import {
5
5
  BaseComponent
6
- } from "./roy-agent-core-kkbwepqb.js";
6
+ } from "./roy-agent-core-cefh9hjv.js";
7
7
  import {
8
8
  init_decorator
9
9
  } from "./roy-agent-core-zgypchmt.js";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./roy-agent-core-ctdhjv68.js";
5
5
  import {
6
6
  BaseComponent
7
- } from "./roy-agent-core-kkbwepqb.js";
7
+ } from "./roy-agent-core-cefh9hjv.js";
8
8
  import {
9
9
  TracedAs,
10
10
  init_decorator
@@ -3,7 +3,10 @@ import {
3
3
  } from "./roy-agent-core-qxhq8ven.js";
4
4
  import {
5
5
  BaseComponent
6
- } from "./roy-agent-core-kkbwepqb.js";
6
+ } from "./roy-agent-core-cefh9hjv.js";
7
+ import {
8
+ globalHookManager
9
+ } from "./roy-agent-core-86gphny5.js";
7
10
  import {
8
11
  createLogger,
9
12
  init_logger
@@ -28,101 +31,45 @@ function matchEventType(eventType, patterns) {
28
31
  }
29
32
  return false;
30
33
  }
31
- function formatEventMessage(sourceType, rawEvent, eventType) {
32
- const event = rawEvent;
33
- switch (sourceType) {
34
- case "lark-cli": {
35
- const larkEvent = event;
36
- const larkInnerEvent = larkEvent.event;
37
- const larkMessage = larkInnerEvent?.message || larkEvent.message;
38
- const larkSender = larkInnerEvent?.sender || larkEvent.sender;
39
- const senderId = larkSender?.sender_id;
40
- if (larkMessage) {
41
- const openId = senderId?.open_id || senderId?.user_id || senderId?.email || senderId?.union_id || "未知用户";
42
- let content = "无消息内容";
43
- if (larkMessage.content) {
44
- try {
45
- const contentObj = JSON.parse(larkMessage.content);
46
- content = contentObj.text || contentObj.content || larkMessage.content;
47
- } catch {
48
- content = larkMessage.content;
49
- }
50
- }
51
- return `[飞书消息] ${openId}: ${content}`;
52
- }
53
- return `[飞书事件] ${eventType || larkEvent.schema || "unknown"}`;
54
- }
55
- case "timer": {
56
- const timerMessage = event.payload?.message || event.message || "tick";
57
- return `[定时任务] ${timerMessage}`;
58
- }
59
- case "websocket":
60
- return `[WebSocket] ${JSON.stringify(rawEvent).substring(0, 200)}`;
61
- default:
62
- return `[${sourceType}] ${JSON.stringify(rawEvent).substring(0, 200)}`;
63
- }
64
- }
65
- function extractMetadata(sourceType, rawEvent, eventType) {
34
+ function extractMetadata(rawEvent, eventType) {
66
35
  const event = rawEvent;
67
36
  const metadata = {};
68
- switch (sourceType) {
69
- case "lark-cli": {
70
- const larkInnerEvent = event.event;
71
- const header = event.header;
72
- const message = larkInnerEvent?.message || event.message;
73
- const sender = larkInnerEvent?.sender || event.sender;
74
- const senderId = sender?.sender_id;
75
- if (header) {
76
- metadata.eventType = header.event_type;
77
- metadata.appId = header.app_id;
78
- metadata.tenantKey = header.tenant_key;
79
- }
80
- if (message) {
81
- metadata.chatId = message.chat_id;
82
- metadata.chatType = message.chat_type;
83
- metadata.messageId = message.message_id;
84
- metadata.messageType = message.message_type;
85
- }
86
- if (senderId) {
87
- metadata.senderId = senderId.open_id || senderId.user_id || senderId.union_id;
88
- }
89
- break;
90
- }
91
- case "timer":
92
- metadata.eventType = "timer.tick";
93
- break;
94
- case "websocket":
95
- metadata.eventType = eventType;
96
- break;
97
- default:
98
- metadata.eventType = eventType;
37
+ const larkInnerEvent = event.event;
38
+ const header = event.header;
39
+ const message = larkInnerEvent?.message || event.message;
40
+ const sender = larkInnerEvent?.sender || event.sender;
41
+ const senderId = sender?.sender_id;
42
+ if (header) {
43
+ metadata.eventType = header.event_type;
44
+ metadata.appId = header.app_id;
45
+ metadata.tenantKey = header.tenant_key;
46
+ }
47
+ if (message) {
48
+ metadata.chatId = message.chat_id;
49
+ metadata.chatType = message.chat_type;
50
+ metadata.messageId = message.message_id;
51
+ metadata.messageType = message.message_type;
52
+ }
53
+ if (senderId) {
54
+ metadata.senderId = senderId.open_id || senderId.user_id || senderId.union_id;
99
55
  }
100
56
  let recommendedAction;
101
- if (sourceType === "lark-cli" && eventType === "im.message.receive_v1") {
57
+ if (eventType === "im.message.receive_v1") {
102
58
  recommendedAction = {
103
- action: "处理飞书消息并回复",
59
+ action: '处理飞书消息并以机器人身份回复,比如lark-cli im +messages-reply --message-id "xxxxid" --as bot --text "回复内容"',
104
60
  replyTo: {
105
61
  appId: metadata.appId,
106
62
  chatId: metadata.chatId,
107
63
  messageId: metadata.messageId
108
64
  }
109
65
  };
110
- } else if (sourceType === "timer") {
111
- recommendedAction = { action: "执行定时任务" };
112
- } else if (sourceType === "websocket") {
113
- recommendedAction = { action: "处理 WebSocket 消息" };
114
- }
115
- let replyChannel;
116
- if (sourceType === "lark-cli") {
117
- replyChannel = {
118
- type: "lark-cli",
119
- appId: metadata.appId,
120
- chatId: metadata.chatId,
121
- messageId: metadata.messageId
122
- };
123
- } else if (sourceType === "websocket") {
124
- replyChannel = { type: "websocket" };
125
66
  }
67
+ const replyChannel = {
68
+ type: "lark-cli",
69
+ appId: metadata.appId,
70
+ chatId: metadata.chatId,
71
+ messageId: metadata.messageId
72
+ };
126
73
  return { metadata, replyChannel, recommendedAction };
127
74
  }
128
75
 
@@ -132,26 +79,35 @@ class LarkCliInstance {
132
79
  child;
133
80
  buffer = "";
134
81
  eventHandler;
82
+ loadedPlugins = [];
135
83
  constructor(config) {
136
84
  this.config = config;
137
85
  }
138
86
  async start() {
139
87
  if (this.status === "running")
140
88
  return;
141
- const command = this.config.command || "lark-cli event +subscribe";
142
- const isWindows = process.platform === "win32";
143
- const shell = isWindows ? "cmd.exe" : "sh";
144
- const shellArgs = isWindows ? ["/c", command] : ["-c", `exec ${command}`];
145
- this.child = spawn(shell, shellArgs, {
146
- stdio: ["ignore", "pipe", "pipe"],
147
- detached: false,
89
+ await this.loadPlugins();
90
+ const command = this.config.command || "lark-cli event consume im.message.receive_v1 --as bot";
91
+ this.child = spawn("exec " + command, [], {
92
+ shell: true,
93
+ stdio: ["pipe", "pipe", "pipe"],
148
94
  windowsHide: true
149
95
  });
96
+ let stdoutBuffer = "";
97
+ let stderrBuffer = "";
150
98
  this.child.stdout?.on("data", (data) => {
151
- this.processStream(data.toString());
99
+ const str = data.toString();
100
+ stdoutBuffer += str;
101
+ this.processStream(stdoutBuffer);
102
+ stdoutBuffer = "";
152
103
  });
153
104
  this.child.stderr?.on("data", (data) => {
154
105
  const output = data.toString();
106
+ if (!output.startsWith("[event]") && output.startsWith("{")) {
107
+ stderrBuffer += output;
108
+ this.processStream(stderrBuffer);
109
+ stderrBuffer = "";
110
+ }
155
111
  if (output.includes('"ok": false')) {
156
112
  this.status = "error";
157
113
  }
@@ -159,15 +115,37 @@ class LarkCliInstance {
159
115
  this.child.on("exit", (code) => {
160
116
  if (code !== 0 && code !== null) {
161
117
  this.status = "error";
118
+ } else {
119
+ this.status = "stopped";
162
120
  }
163
121
  });
122
+ this.child.on("error", (error) => {
123
+ console.error(`[LarkCliInstance] Process error: ${error.message}`);
124
+ this.status = "error";
125
+ });
164
126
  await new Promise((resolve) => setTimeout(resolve, 1000));
165
127
  this.status = "running";
166
128
  }
167
129
  async stop() {
168
130
  if (this.status === "stopped" || this.status === "created")
169
131
  return;
170
- this.child?.kill("SIGTERM");
132
+ this.unloadPlugins();
133
+ if (this.child && this.child.pid) {
134
+ try {
135
+ this.child.kill("SIGTERM");
136
+ await new Promise((resolve) => {
137
+ setTimeout(resolve, 5000);
138
+ });
139
+ if (!this.child?.killed) {
140
+ this.child.kill("SIGKILL");
141
+ }
142
+ } catch (error) {
143
+ console.error(`[LarkCliInstance] Error stopping process: ${error}`);
144
+ try {
145
+ this.child?.kill("SIGKILL");
146
+ } catch {}
147
+ }
148
+ }
171
149
  this.child = undefined;
172
150
  this.buffer = "";
173
151
  this.status = "stopped";
@@ -181,6 +159,54 @@ class LarkCliInstance {
181
159
  offEvent() {
182
160
  this.eventHandler = undefined;
183
161
  }
162
+ async loadPlugins() {
163
+ const plugins = this.config.handleRule?.plugins || [];
164
+ for (const pluginName of plugins) {
165
+ const plugin = await this.importPlugin(pluginName);
166
+ if (plugin) {
167
+ this.registerPluginHooks(plugin);
168
+ this.loadedPlugins.push({
169
+ name: pluginName,
170
+ hooks: plugin.hooks.map((h) => ({ point: h.point, name: `${pluginName}:${h.point}` }))
171
+ });
172
+ }
173
+ }
174
+ }
175
+ async importPlugin(name) {
176
+ const PLUGIN_PATHS = {
177
+ "task-tag": "@ai-setting/roy-agent-core/env/task/plugins/task-tag-plugin"
178
+ };
179
+ const path = PLUGIN_PATHS[name] || name;
180
+ try {
181
+ const module = await import(path);
182
+ const PluginClass = module.TaskPlugin || module.default;
183
+ return new PluginClass;
184
+ } catch (error) {
185
+ console.error(`[LarkCliInstance] Failed to load plugin ${name}:`, error);
186
+ return null;
187
+ }
188
+ }
189
+ registerPluginHooks(plugin) {
190
+ for (const hook of plugin.hooks) {
191
+ globalHookManager.register(hook.point, {
192
+ name: `${plugin.name}:${hook.point}`,
193
+ priority: hook.priority ?? 0,
194
+ pluginName: plugin.name,
195
+ sourceId: this.config.id,
196
+ execute: async (ctx) => {
197
+ await plugin.execute(ctx);
198
+ }
199
+ });
200
+ }
201
+ }
202
+ unloadPlugins() {
203
+ for (const plugin of this.loadedPlugins) {
204
+ for (const hook of plugin.hooks) {
205
+ globalHookManager.unregister(hook.point, `${plugin.name}:${hook.point}`);
206
+ }
207
+ }
208
+ this.loadedPlugins = [];
209
+ }
184
210
  processStream(data) {
185
211
  this.buffer += data;
186
212
  const lines = this.buffer.split(`
@@ -214,12 +240,21 @@ class LarkCliInstance {
214
240
  if (this.config.eventTypes?.length && !matchEventType(eventType, this.config.eventTypes)) {
215
241
  return;
216
242
  }
217
- const { metadata, replyChannel, recommendedAction } = extractMetadata("lark-cli", rawEvent, eventType);
218
- const message = formatEventMessage("lark-cli", rawEvent, eventType);
243
+ const { metadata, replyChannel, recommendedAction } = extractMetadata(rawEvent, eventType);
244
+ const message = JSON.stringify({
245
+ rawData,
246
+ recommendedAction
247
+ });
248
+ const timestamp = Date.now();
219
249
  const evt = {
220
- sourceId: this.config.id,
221
- type: eventType,
222
- timestamp: Date.now(),
250
+ id: `es-${this.config.id}-${timestamp}`,
251
+ type: "event-source.event.lark-cli",
252
+ timestamp,
253
+ metadata: {
254
+ source: "event-source",
255
+ sourceId: this.config.id,
256
+ sourceMessageType: eventType
257
+ },
223
258
  payload: {
224
259
  sourceId: this.config.id,
225
260
  sourceType: "lark-cli",
@@ -228,11 +263,13 @@ class LarkCliInstance {
228
263
  metadata,
229
264
  replyChannel,
230
265
  recommendedAction,
231
- timestamp: Date.now()
266
+ timestamp
232
267
  }
233
268
  };
234
269
  this.eventHandler?.(evt);
235
- } catch (error) {}
270
+ } catch (error) {
271
+ console.error(`[LarkCliInstance] Error handling event: ${error}`);
272
+ }
236
273
  }
237
274
  }
238
275
  var larkCliHandler = {
@@ -240,7 +277,7 @@ var larkCliHandler = {
240
277
  validateConfig(config) {
241
278
  const errors = [];
242
279
  if (!config.command) {
243
- errors.push("lark-cli command is required");
280
+ errors.push("command is optional, will use default: lark-cli event consume im.message.receive_v1 --as bot");
244
281
  }
245
282
  return errors;
246
283
  },
@@ -248,187 +285,8 @@ var larkCliHandler = {
248
285
  return new LarkCliInstance(config);
249
286
  }
250
287
  };
251
-
252
- class TimerInstance {
253
- config;
254
- status = "created";
255
- timer;
256
- eventHandler;
257
- constructor(config) {
258
- this.config = config;
259
- }
260
- async start() {
261
- if (this.status === "running")
262
- return;
263
- const interval = this.config.interval || 60000;
264
- const message = this.config.options?.message || `Timer event from ${this.config.name}`;
265
- this.timer = setInterval(() => {
266
- this.emitEvent(message);
267
- }, interval);
268
- this.emitEvent(message);
269
- this.status = "running";
270
- }
271
- async stop() {
272
- if (this.timer) {
273
- clearInterval(this.timer);
274
- this.timer = undefined;
275
- }
276
- this.status = "stopped";
277
- }
278
- getStatus() {
279
- return this.status;
280
- }
281
- onEvent(handler) {
282
- this.eventHandler = handler;
283
- }
284
- offEvent() {
285
- this.eventHandler = undefined;
286
- }
287
- emitEvent(message) {
288
- const rawEvent = {
289
- type: "timer.tick",
290
- payload: {
291
- message,
292
- timestamp: Date.now()
293
- }
294
- };
295
- const { metadata, recommendedAction } = extractMetadata("timer", rawEvent, "timer.tick");
296
- const evt = {
297
- sourceId: this.config.id,
298
- type: "timer.tick",
299
- timestamp: Date.now(),
300
- payload: {
301
- sourceId: this.config.id,
302
- sourceType: "timer",
303
- rawEvent,
304
- message: formatEventMessage("timer", rawEvent),
305
- metadata,
306
- recommendedAction,
307
- timestamp: Date.now()
308
- }
309
- };
310
- this.eventHandler?.(evt);
311
- }
312
- }
313
- var timerHandler = {
314
- type: "timer",
315
- validateConfig(config) {
316
- const errors = [];
317
- if (!config.interval || config.interval <= 0) {
318
- errors.push("Timer interval must be a positive number");
319
- }
320
- return errors;
321
- },
322
- createInstance(config) {
323
- return new TimerInstance(config);
324
- }
325
- };
326
-
327
- class WebSocketInstance {
328
- config;
329
- status = "created";
330
- ws;
331
- buffer = "";
332
- eventHandler;
333
- constructor(config) {
334
- this.config = config;
335
- }
336
- async start() {
337
- if (this.status === "running")
338
- return;
339
- const url = this.config.url;
340
- if (!url) {
341
- throw new Error("WebSocket URL is required");
342
- }
343
- const { WebSocket } = await import("ws");
344
- this.ws = new WebSocket(url, { headers: this.config.headers });
345
- this.ws.on("open", () => {
346
- this.status = "running";
347
- });
348
- this.ws.on("message", (data) => {
349
- this.processStream(data.toString());
350
- });
351
- this.ws.on("error", () => {
352
- this.status = "error";
353
- });
354
- this.ws.on("close", () => {
355
- this.status = "stopped";
356
- });
357
- await new Promise((resolve) => setTimeout(resolve, 5000));
358
- }
359
- async stop() {
360
- if (this.ws) {
361
- this.ws.close();
362
- this.ws = undefined;
363
- }
364
- this.buffer = "";
365
- this.status = "stopped";
366
- }
367
- getStatus() {
368
- return this.status;
369
- }
370
- onEvent(handler) {
371
- this.eventHandler = handler;
372
- }
373
- offEvent() {
374
- this.eventHandler = undefined;
375
- }
376
- processStream(data) {
377
- this.buffer += data;
378
- const lines = this.buffer.split(`
379
- `);
380
- this.buffer = lines.pop() || "";
381
- for (const line of lines) {
382
- if (line.trim()) {
383
- this.handleEvent(line);
384
- }
385
- }
386
- }
387
- handleEvent(rawData) {
388
- try {
389
- let rawEvent;
390
- try {
391
- rawEvent = JSON.parse(rawData);
392
- } catch {
393
- rawEvent = rawData;
394
- }
395
- const { metadata, replyChannel, recommendedAction } = extractMetadata("websocket", rawEvent);
396
- const evt = {
397
- sourceId: this.config.id,
398
- type: "websocket.message",
399
- timestamp: Date.now(),
400
- payload: {
401
- sourceId: this.config.id,
402
- sourceType: "websocket",
403
- rawEvent,
404
- message: formatEventMessage("websocket", rawEvent),
405
- metadata,
406
- replyChannel,
407
- recommendedAction,
408
- timestamp: Date.now()
409
- }
410
- };
411
- this.eventHandler?.(evt);
412
- } catch (error) {}
413
- }
414
- }
415
- var websocketHandler = {
416
- type: "websocket",
417
- validateConfig(config) {
418
- const errors = [];
419
- if (!config.url) {
420
- errors.push("WebSocket URL is required");
421
- }
422
- return errors;
423
- },
424
- createInstance(config) {
425
- return new WebSocketInstance(config);
426
- }
427
- };
428
288
  var builtInHandlers = [
429
- larkCliHandler,
430
- timerHandler,
431
- websocketHandler
289
+ larkCliHandler
432
290
  ];
433
291
  function getBuiltInHandler(type) {
434
292
  return builtInHandlers.find((h) => h.type === type);
@@ -515,6 +373,11 @@ class EventSourceComponent extends BaseComponent {
515
373
  this.handlers.clear();
516
374
  this.buffers.clear();
517
375
  }
376
+ createDefaultEventHandler(sourceId, sourceType) {
377
+ return (event) => {
378
+ this.getEnv()?.pushEnvEvent(event);
379
+ };
380
+ }
518
381
  registerBuiltInHandlers() {
519
382
  for (const handler of builtInHandlers) {
520
383
  if (!this.handlers.has(handler.type)) {
@@ -524,7 +387,7 @@ class EventSourceComponent extends BaseComponent {
524
387
  }
525
388
  }
526
389
  async executeInitHooks() {
527
- const { EventSourceInitHooks } = await import("./roy-agent-core-8jxva565.js");
390
+ const { EventSourceInitHooks } = await import("./roy-agent-core-9mj7vzsm.js");
528
391
  await EventSourceInitHooks.execute(this);
529
392
  }
530
393
  registerHandler(handler) {
@@ -713,10 +576,8 @@ class EventSourceComponent extends BaseComponent {
713
576
  }
714
577
  const instance = handler.createInstance(config);
715
578
  this.instances.set(id, instance);
716
- const eventHandler = this.eventHandlers.get(id);
717
- if (eventHandler) {
718
- instance.onEvent(eventHandler);
719
- }
579
+ const eventHandler = this.eventHandlers.get(id) ?? this.createDefaultEventHandler(id, config.type);
580
+ instance.onEvent(eventHandler);
720
581
  await instance.start();
721
582
  this.statuses.set(id, "running");
722
583
  this.getEnv()?.pushEnvEvent({
@@ -814,4 +675,4 @@ class EventSourceComponent extends BaseComponent {
814
675
  }
815
676
  }
816
677
 
817
- export { larkCliHandler, timerHandler, websocketHandler, builtInHandlers, getBuiltInHandler, EventSourceComponent };
678
+ export { larkCliHandler, builtInHandlers, getBuiltInHandler, EventSourceComponent };
@@ -6,7 +6,7 @@ import {
6
6
  } from "./roy-agent-core-qxhq8ven.js";
7
7
  import {
8
8
  BaseComponent
9
- } from "./roy-agent-core-kkbwepqb.js";
9
+ } from "./roy-agent-core-cefh9hjv.js";
10
10
  import {
11
11
  createLogger,
12
12
  init_logger
@@ -8,11 +8,11 @@ import {
8
8
  } from "./roy-agent-core-qxhq8ven.js";
9
9
  import {
10
10
  BaseComponent
11
- } from "./roy-agent-core-kkbwepqb.js";
11
+ } from "./roy-agent-core-cefh9hjv.js";
12
12
  import {
13
13
  ToolHookPoints,
14
14
  globalHookManager
15
- } from "./roy-agent-core-gjq1yk68.js";
15
+ } from "./roy-agent-core-86gphny5.js";
16
16
  import {
17
17
  createLogger,
18
18
  init_logger