agent-world 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -17
- package/dist/cli/commands.d.ts +7 -1
- package/dist/cli/commands.js +27 -10
- package/dist/cli/hitl.d.ts +4 -1
- package/dist/cli/hitl.js +55 -20
- package/dist/cli/index.js +249 -97
- package/dist/cli/system-events.d.ts +27 -0
- package/dist/cli/system-events.js +63 -0
- package/dist/core/activity-tracker.d.ts +26 -0
- package/dist/core/activity-tracker.d.ts.map +1 -1
- package/dist/core/activity-tracker.js +21 -4
- package/dist/core/activity-tracker.js.map +1 -1
- package/dist/core/anthropic-direct.d.ts +2 -0
- package/dist/core/anthropic-direct.d.ts.map +1 -1
- package/dist/core/anthropic-direct.js +43 -1
- package/dist/core/anthropic-direct.js.map +1 -1
- package/dist/core/chat-constants.d.ts +12 -0
- package/dist/core/chat-constants.d.ts.map +1 -1
- package/dist/core/chat-constants.js +5 -0
- package/dist/core/chat-constants.js.map +1 -1
- package/dist/core/create-agent-tool.d.ts +5 -0
- package/dist/core/create-agent-tool.d.ts.map +1 -1
- package/dist/core/create-agent-tool.js +57 -34
- package/dist/core/create-agent-tool.js.map +1 -1
- package/dist/core/events/index.d.ts +5 -2
- package/dist/core/events/index.d.ts.map +1 -1
- package/dist/core/events/index.js +5 -2
- package/dist/core/events/index.js.map +1 -1
- package/dist/core/events/memory-manager.d.ts +26 -1
- package/dist/core/events/memory-manager.d.ts.map +1 -1
- package/dist/core/events/memory-manager.js +877 -72
- package/dist/core/events/memory-manager.js.map +1 -1
- package/dist/core/events/orchestrator.d.ts +8 -0
- package/dist/core/events/orchestrator.d.ts.map +1 -1
- package/dist/core/events/orchestrator.js +203 -36
- package/dist/core/events/orchestrator.js.map +1 -1
- package/dist/core/events/persistence.d.ts +21 -14
- package/dist/core/events/persistence.d.ts.map +1 -1
- package/dist/core/events/persistence.js +100 -35
- package/dist/core/events/persistence.js.map +1 -1
- package/dist/core/events/publishers.d.ts +13 -7
- package/dist/core/events/publishers.d.ts.map +1 -1
- package/dist/core/events/publishers.js +53 -37
- package/dist/core/events/publishers.js.map +1 -1
- package/dist/core/events/subscribers.d.ts +17 -14
- package/dist/core/events/subscribers.d.ts.map +1 -1
- package/dist/core/events/subscribers.js +61 -148
- package/dist/core/events/subscribers.js.map +1 -1
- package/dist/core/events/title-scheduler.d.ts +27 -0
- package/dist/core/events/title-scheduler.d.ts.map +1 -0
- package/dist/core/events/title-scheduler.js +135 -0
- package/dist/core/events/title-scheduler.js.map +1 -0
- package/dist/core/events/tool-bridge-logging.d.ts +4 -1
- package/dist/core/events/tool-bridge-logging.d.ts.map +1 -1
- package/dist/core/events/tool-bridge-logging.js +112 -13
- package/dist/core/events/tool-bridge-logging.js.map +1 -1
- package/dist/core/events-metadata.d.ts.map +1 -1
- package/dist/core/events-metadata.js +8 -4
- package/dist/core/events-metadata.js.map +1 -1
- package/dist/core/export.d.ts +1 -1
- package/dist/core/export.d.ts.map +1 -1
- package/dist/core/export.js +2 -15
- package/dist/core/export.js.map +1 -1
- package/dist/core/feature-path-logging.d.ts +50 -0
- package/dist/core/feature-path-logging.d.ts.map +1 -0
- package/dist/core/feature-path-logging.js +130 -0
- package/dist/core/feature-path-logging.js.map +1 -0
- package/dist/core/file-tools.d.ts +57 -1
- package/dist/core/file-tools.d.ts.map +1 -1
- package/dist/core/file-tools.js +329 -29
- package/dist/core/file-tools.js.map +1 -1
- package/dist/core/google-direct.d.ts +6 -1
- package/dist/core/google-direct.d.ts.map +1 -1
- package/dist/core/google-direct.js +76 -7
- package/dist/core/google-direct.js.map +1 -1
- package/dist/core/heartbeat.d.ts +34 -0
- package/dist/core/heartbeat.d.ts.map +1 -0
- package/dist/core/heartbeat.js +153 -0
- package/dist/core/heartbeat.js.map +1 -0
- package/dist/core/hitl-tool.d.ts +6 -12
- package/dist/core/hitl-tool.d.ts.map +1 -1
- package/dist/core/hitl-tool.js +66 -88
- package/dist/core/hitl-tool.js.map +1 -1
- package/dist/core/hitl.d.ts +61 -4
- package/dist/core/hitl.d.ts.map +1 -1
- package/dist/core/hitl.js +324 -60
- package/dist/core/hitl.js.map +1 -1
- package/dist/core/index.d.ts +11 -7
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +10 -6
- package/dist/core/index.js.map +1 -1
- package/dist/core/llm-manager.d.ts +15 -0
- package/dist/core/llm-manager.d.ts.map +1 -1
- package/dist/core/llm-manager.js +325 -40
- package/dist/core/llm-manager.js.map +1 -1
- package/dist/core/load-skill-tool.d.ts +36 -3
- package/dist/core/load-skill-tool.d.ts.map +1 -1
- package/dist/core/load-skill-tool.js +807 -93
- package/dist/core/load-skill-tool.js.map +1 -1
- package/dist/core/logger.d.ts +14 -0
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +15 -0
- package/dist/core/logger.js.map +1 -1
- package/dist/core/managers.d.ts +18 -50
- package/dist/core/managers.d.ts.map +1 -1
- package/dist/core/managers.js +340 -502
- package/dist/core/managers.js.map +1 -1
- package/dist/core/mcp-server-registry.d.ts +16 -1
- package/dist/core/mcp-server-registry.d.ts.map +1 -1
- package/dist/core/mcp-server-registry.js +162 -12
- package/dist/core/mcp-server-registry.js.map +1 -1
- package/dist/core/message-cutoff.d.ts +29 -0
- package/dist/core/message-cutoff.d.ts.map +1 -0
- package/dist/core/message-cutoff.js +63 -0
- package/dist/core/message-cutoff.js.map +1 -0
- package/dist/core/message-edit-manager.d.ts +54 -0
- package/dist/core/message-edit-manager.d.ts.map +1 -0
- package/dist/core/message-edit-manager.js +602 -0
- package/dist/core/message-edit-manager.js.map +1 -0
- package/dist/core/message-prep.d.ts +2 -0
- package/dist/core/message-prep.d.ts.map +1 -1
- package/dist/core/message-prep.js +39 -12
- package/dist/core/message-prep.js.map +1 -1
- package/dist/core/message-processing-control.d.ts +1 -0
- package/dist/core/message-processing-control.d.ts.map +1 -1
- package/dist/core/message-processing-control.js +23 -6
- package/dist/core/message-processing-control.js.map +1 -1
- package/dist/core/openai-direct.d.ts +9 -3
- package/dist/core/openai-direct.d.ts.map +1 -1
- package/dist/core/openai-direct.js +267 -33
- package/dist/core/openai-direct.js.map +1 -1
- package/dist/core/optional-tracers/opik-runtime.d.ts +32 -0
- package/dist/core/optional-tracers/opik-runtime.d.ts.map +1 -0
- package/dist/core/optional-tracers/opik-runtime.js +141 -0
- package/dist/core/optional-tracers/opik-runtime.js.map +1 -0
- package/dist/core/queue-manager.d.ts +84 -0
- package/dist/core/queue-manager.d.ts.map +1 -0
- package/dist/core/queue-manager.js +814 -0
- package/dist/core/queue-manager.js.map +1 -0
- package/dist/core/reasoning-controls.d.ts +30 -0
- package/dist/core/reasoning-controls.d.ts.map +1 -0
- package/dist/core/reasoning-controls.js +118 -0
- package/dist/core/reasoning-controls.js.map +1 -0
- package/dist/core/reliability-config.d.ts +82 -0
- package/dist/core/reliability-config.d.ts.map +1 -0
- package/dist/core/reliability-config.js +106 -0
- package/dist/core/reliability-config.js.map +1 -0
- package/dist/core/reliability-runtime.d.ts +53 -0
- package/dist/core/reliability-runtime.d.ts.map +1 -0
- package/dist/core/reliability-runtime.js +92 -0
- package/dist/core/reliability-runtime.js.map +1 -0
- package/dist/core/security/guardrails.d.ts +21 -0
- package/dist/core/security/guardrails.d.ts.map +1 -0
- package/dist/core/security/guardrails.js +111 -0
- package/dist/core/security/guardrails.js.map +1 -0
- package/dist/core/send-message-tool.d.ts +79 -0
- package/dist/core/send-message-tool.d.ts.map +1 -0
- package/dist/core/send-message-tool.js +222 -0
- package/dist/core/send-message-tool.js.map +1 -0
- package/dist/core/shell-cmd-tool.d.ts +82 -1
- package/dist/core/shell-cmd-tool.d.ts.map +1 -1
- package/dist/core/shell-cmd-tool.js +854 -42
- package/dist/core/shell-cmd-tool.js.map +1 -1
- package/dist/core/skill-registry.d.ts +2 -0
- package/dist/core/skill-registry.d.ts.map +1 -1
- package/dist/core/skill-registry.js +52 -2
- package/dist/core/skill-registry.js.map +1 -1
- package/dist/core/storage/eventStorage/fileEventStorage.d.ts +5 -0
- package/dist/core/storage/eventStorage/fileEventStorage.d.ts.map +1 -1
- package/dist/core/storage/eventStorage/fileEventStorage.js +61 -0
- package/dist/core/storage/eventStorage/fileEventStorage.js.map +1 -1
- package/dist/core/storage/eventStorage/memoryEventStorage.d.ts +5 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.d.ts.map +1 -1
- package/dist/core/storage/eventStorage/memoryEventStorage.js +34 -0
- package/dist/core/storage/eventStorage/memoryEventStorage.js.map +1 -1
- package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts +1 -0
- package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts.map +1 -1
- package/dist/core/storage/eventStorage/sqliteEventStorage.js +19 -2
- package/dist/core/storage/eventStorage/sqliteEventStorage.js.map +1 -1
- package/dist/core/storage/eventStorage/types.d.ts +6 -0
- package/dist/core/storage/eventStorage/types.d.ts.map +1 -1
- package/dist/core/storage/eventStorage/types.js +1 -0
- package/dist/core/storage/eventStorage/types.js.map +1 -1
- package/dist/core/storage/eventStorage/validation.d.ts.map +1 -1
- package/dist/core/storage/eventStorage/validation.js +2 -1
- package/dist/core/storage/eventStorage/validation.js.map +1 -1
- package/dist/core/storage/github-world-import.d.ts +84 -0
- package/dist/core/storage/github-world-import.d.ts.map +1 -0
- package/dist/core/storage/github-world-import.js +365 -0
- package/dist/core/storage/github-world-import.js.map +1 -0
- package/dist/core/storage/memory-storage.d.ts +19 -8
- package/dist/core/storage/memory-storage.d.ts.map +1 -1
- package/dist/core/storage/memory-storage.js +147 -49
- package/dist/core/storage/memory-storage.js.map +1 -1
- package/dist/core/storage/queue-storage.d.ts +1 -0
- package/dist/core/storage/queue-storage.d.ts.map +1 -1
- package/dist/core/storage/queue-storage.js +3 -2
- package/dist/core/storage/queue-storage.js.map +1 -1
- package/dist/core/storage/sqlite-storage.d.ts +14 -9
- package/dist/core/storage/sqlite-storage.d.ts.map +1 -1
- package/dist/core/storage/sqlite-storage.js +131 -154
- package/dist/core/storage/sqlite-storage.js.map +1 -1
- package/dist/core/storage/storage-factory.d.ts +3 -0
- package/dist/core/storage/storage-factory.d.ts.map +1 -1
- package/dist/core/storage/storage-factory.js +175 -89
- package/dist/core/storage/storage-factory.js.map +1 -1
- package/dist/core/storage/world-storage.d.ts +1 -1
- package/dist/core/storage/world-storage.d.ts.map +1 -1
- package/dist/core/storage/world-storage.js +5 -1
- package/dist/core/storage/world-storage.js.map +1 -1
- package/dist/core/storage-init.d.ts +11 -0
- package/dist/core/storage-init.d.ts.map +1 -0
- package/dist/core/storage-init.js +122 -0
- package/dist/core/storage-init.js.map +1 -0
- package/dist/core/subscription.d.ts +8 -1
- package/dist/core/subscription.d.ts.map +1 -1
- package/dist/core/subscription.js +130 -23
- package/dist/core/subscription.js.map +1 -1
- package/dist/core/tool-approval.d.ts +45 -0
- package/dist/core/tool-approval.d.ts.map +1 -0
- package/dist/core/tool-approval.js +223 -0
- package/dist/core/tool-approval.js.map +1 -0
- package/dist/core/tool-execution-envelope.d.ts +87 -0
- package/dist/core/tool-execution-envelope.d.ts.map +1 -0
- package/dist/core/tool-execution-envelope.js +168 -0
- package/dist/core/tool-execution-envelope.js.map +1 -0
- package/dist/core/tool-utils.d.ts +7 -2
- package/dist/core/tool-utils.d.ts.map +1 -1
- package/dist/core/tool-utils.js +81 -17
- package/dist/core/tool-utils.js.map +1 -1
- package/dist/core/types.d.ts +67 -19
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils.d.ts +7 -0
- package/dist/core/utils.d.ts.map +1 -1
- package/dist/core/utils.js +71 -21
- package/dist/core/utils.js.map +1 -1
- package/dist/core/web-fetch-tool.d.ts +72 -0
- package/dist/core/web-fetch-tool.d.ts.map +1 -0
- package/dist/core/web-fetch-tool.js +491 -0
- package/dist/core/web-fetch-tool.js.map +1 -0
- package/dist/core/world-registry.d.ts +84 -0
- package/dist/core/world-registry.d.ts.map +1 -0
- package/dist/core/world-registry.js +247 -0
- package/dist/core/world-registry.js.map +1 -0
- package/dist/public/assets/index-Be-1xtV-.js +104 -0
- package/dist/public/assets/index-tsDdiXDU.css +1 -0
- package/dist/public/index.html +2 -2
- package/dist/public/mcp-sandbox-proxy.html +148 -0
- package/dist/server/api.js +260 -18
- package/dist/server/error-response.d.ts +27 -0
- package/dist/server/error-response.js +77 -0
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.js +6 -2
- package/dist/server/sse-handler.d.ts +11 -1
- package/dist/server/sse-handler.js +194 -34
- package/migrations/0015_add_message_queue.sql +36 -0
- package/migrations/0016_add_world_heartbeat.sql +13 -0
- package/migrations/0017_add_title_provenance.sql +7 -0
- package/package.json +31 -10
- package/dist/public/assets/index-BW41BxMy.css +0 -1
- package/dist/public/assets/index-kO6UJFwK.js +0 -96
|
@@ -2,28 +2,35 @@
|
|
|
2
2
|
* Events Persistence Module
|
|
3
3
|
*
|
|
4
4
|
* Handles automatic event persistence to storage with metadata enrichment.
|
|
5
|
-
*
|
|
5
|
+
* Also owns the single world-level listener per event channel (message, sse, world, system),
|
|
6
|
+
* combining persistence with title-scheduling and activity-title logic in one handler each.
|
|
6
7
|
*
|
|
7
8
|
* Features:
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
10
|
-
* -
|
|
11
|
-
* - System event persistence
|
|
12
|
-
* -
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* - Environment-based disable flag
|
|
16
|
-
* - Uses world.eventStorage directly (no separate storage instance)
|
|
9
|
+
* - One combined `message` handler: persistence only.
|
|
10
|
+
* - One combined `world` handler: persistence + idle title generation.
|
|
11
|
+
* - SSE event persistence (start/end only, skips chunks).
|
|
12
|
+
* - System event persistence.
|
|
13
|
+
* - Sets world._worldMessagesUnsubscriber and world._activityListenerCleanup so downstream
|
|
14
|
+
* idempotent wrappers (subscribeWorldToMessages, setupWorldActivityListener) don't add
|
|
15
|
+
* duplicate listeners.
|
|
17
16
|
*
|
|
18
17
|
* Dependencies (Layer 4):
|
|
19
18
|
* - types.ts (Layer 1)
|
|
20
|
-
* -
|
|
19
|
+
* - chat-constants.ts
|
|
20
|
+
* - events-metadata.ts
|
|
21
|
+
* - title-scheduler.ts (Layer 4)
|
|
21
22
|
* - logger.ts
|
|
22
|
-
* - storage (runtime)
|
|
23
23
|
*
|
|
24
24
|
* Changes:
|
|
25
|
-
* -
|
|
26
|
-
*
|
|
25
|
+
* - 2026-03-10: Removed human-message debounce title scheduling; idle activity is now the
|
|
26
|
+
* sole automatic trigger path.
|
|
27
|
+
* - 2026-03-06: Required explicit `chatId` on persisted message/SSE/tool/activity/system events; unscoped events are now rejected instead of inheriting `world.currentChatId`.
|
|
28
|
+
* - 2026-03-03: Combined world-level listeners to eliminate MaxListenersExceededWarning;
|
|
29
|
+
* title-scheduling and idle-activity logic moved here from subscribers.ts (Layer 6) via
|
|
30
|
+
* title-scheduler.ts (Layer 4) to respect module layering.
|
|
31
|
+
* - 2026-02-26: Removed legacy replay-only HITL system-event filter.
|
|
32
|
+
* - 2025-11-09: Fixed event persistence - use world.eventStorage directly.
|
|
33
|
+
* - 2025-01-09: Extracted from events.ts for modular architecture.
|
|
27
34
|
*/
|
|
28
35
|
import type { World } from '../types.js';
|
|
29
36
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../core/events/persistence.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../core/events/persistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EACV,KAAK,EAIN,MAAM,aAAa,CAAC;AAgBrB;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,IAAI,CA+T9D"}
|
|
@@ -2,31 +2,39 @@
|
|
|
2
2
|
* Events Persistence Module
|
|
3
3
|
*
|
|
4
4
|
* Handles automatic event persistence to storage with metadata enrichment.
|
|
5
|
-
*
|
|
5
|
+
* Also owns the single world-level listener per event channel (message, sse, world, system),
|
|
6
|
+
* combining persistence with title-scheduling and activity-title logic in one handler each.
|
|
6
7
|
*
|
|
7
8
|
* Features:
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
10
|
-
* -
|
|
11
|
-
* - System event persistence
|
|
12
|
-
* -
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* - Environment-based disable flag
|
|
16
|
-
* - Uses world.eventStorage directly (no separate storage instance)
|
|
9
|
+
* - One combined `message` handler: persistence only.
|
|
10
|
+
* - One combined `world` handler: persistence + idle title generation.
|
|
11
|
+
* - SSE event persistence (start/end only, skips chunks).
|
|
12
|
+
* - System event persistence.
|
|
13
|
+
* - Sets world._worldMessagesUnsubscriber and world._activityListenerCleanup so downstream
|
|
14
|
+
* idempotent wrappers (subscribeWorldToMessages, setupWorldActivityListener) don't add
|
|
15
|
+
* duplicate listeners.
|
|
17
16
|
*
|
|
18
17
|
* Dependencies (Layer 4):
|
|
19
18
|
* - types.ts (Layer 1)
|
|
20
|
-
* -
|
|
19
|
+
* - chat-constants.ts
|
|
20
|
+
* - events-metadata.ts
|
|
21
|
+
* - title-scheduler.ts (Layer 4)
|
|
21
22
|
* - logger.ts
|
|
22
|
-
* - storage (runtime)
|
|
23
23
|
*
|
|
24
24
|
* Changes:
|
|
25
|
-
* -
|
|
26
|
-
*
|
|
25
|
+
* - 2026-03-10: Removed human-message debounce title scheduling; idle activity is now the
|
|
26
|
+
* sole automatic trigger path.
|
|
27
|
+
* - 2026-03-06: Required explicit `chatId` on persisted message/SSE/tool/activity/system events; unscoped events are now rejected instead of inheriting `world.currentChatId`.
|
|
28
|
+
* - 2026-03-03: Combined world-level listeners to eliminate MaxListenersExceededWarning;
|
|
29
|
+
* title-scheduling and idle-activity logic moved here from subscribers.ts (Layer 6) via
|
|
30
|
+
* title-scheduler.ts (Layer 4) to respect module layering.
|
|
31
|
+
* - 2026-02-26: Removed legacy replay-only HITL system-event filter.
|
|
32
|
+
* - 2025-11-09: Fixed event persistence - use world.eventStorage directly.
|
|
33
|
+
* - 2025-01-09: Extracted from events.ts for modular architecture.
|
|
27
34
|
*/
|
|
28
35
|
import { createCategoryLogger } from '../logger.js';
|
|
29
36
|
import { calculateOwnerAgentIds, calculateRecipientAgentId, calculateMessageDirection, calculateIsMemoryOnly, calculateIsCrossAgentMessage } from '../events-metadata.js';
|
|
37
|
+
import { runIdleTitleUpdate, clearWorldTitleTimers } from './title-scheduler.js';
|
|
30
38
|
const loggerPublish = createCategoryLogger('publish');
|
|
31
39
|
/**
|
|
32
40
|
* Setup automatic event persistence listeners on World event emitter.
|
|
@@ -63,13 +71,22 @@ export function setupEventPersistence(world) {
|
|
|
63
71
|
});
|
|
64
72
|
}
|
|
65
73
|
};
|
|
66
|
-
//
|
|
67
|
-
const messageHandler = (event) => {
|
|
74
|
+
// Combined message handler: persistence only
|
|
75
|
+
const messageHandler = async (event) => {
|
|
76
|
+
const targetChatId = typeof event.chatId === 'string' ? event.chatId.trim() : '';
|
|
77
|
+
if (!targetChatId) {
|
|
78
|
+
loggerPublish.error('Message event missing required chatId', {
|
|
79
|
+
worldId: world.id,
|
|
80
|
+
messageId: event.messageId,
|
|
81
|
+
sender: event.sender,
|
|
82
|
+
});
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
68
85
|
loggerPublish.debug('Message event received for persistence', {
|
|
69
86
|
worldId: world.id,
|
|
70
87
|
messageId: event.messageId,
|
|
71
88
|
sender: event.sender,
|
|
72
|
-
chatId:
|
|
89
|
+
chatId: targetChatId
|
|
73
90
|
});
|
|
74
91
|
// Calculate enhanced metadata using helper functions
|
|
75
92
|
const ownerAgentIds = calculateOwnerAgentIds(world, event);
|
|
@@ -77,7 +94,8 @@ export function setupEventPersistence(world) {
|
|
|
77
94
|
const messageDirection = calculateMessageDirection(world, event);
|
|
78
95
|
const isMemoryOnly = calculateIsMemoryOnly(world, event);
|
|
79
96
|
const isCrossAgentMessage = calculateIsCrossAgentMessage(world, event);
|
|
80
|
-
const
|
|
97
|
+
const normalizedSender = String(event.sender || '').trim().toLowerCase();
|
|
98
|
+
const isHumanMessage = normalizedSender === 'human' || normalizedSender === 'world' || normalizedSender === 'user';
|
|
81
99
|
// Calculate thread metadata (requires loading messages for accurate depth calculation)
|
|
82
100
|
// For now, use simplified version - can enhance later with full message history
|
|
83
101
|
const threadMetadata = event.replyToMessageId
|
|
@@ -89,7 +107,7 @@ export function setupEventPersistence(world) {
|
|
|
89
107
|
const eventData = {
|
|
90
108
|
id: event.messageId,
|
|
91
109
|
worldId: world.id,
|
|
92
|
-
chatId:
|
|
110
|
+
chatId: targetChatId,
|
|
93
111
|
type: 'message',
|
|
94
112
|
payload: {
|
|
95
113
|
content: event.content,
|
|
@@ -133,7 +151,7 @@ export function setupEventPersistence(world) {
|
|
|
133
151
|
},
|
|
134
152
|
createdAt: event.timestamp
|
|
135
153
|
};
|
|
136
|
-
|
|
154
|
+
await persistEvent(eventData);
|
|
137
155
|
};
|
|
138
156
|
// SSE event handler - persist only start and end events, skip chunk events
|
|
139
157
|
// Chunk events are for UI streaming only (high frequency, transient)
|
|
@@ -143,12 +161,21 @@ export function setupEventPersistence(world) {
|
|
|
143
161
|
if (event.type === 'chunk') {
|
|
144
162
|
return;
|
|
145
163
|
}
|
|
164
|
+
const targetChatId = typeof event.chatId === 'string' ? event.chatId.trim() : '';
|
|
165
|
+
if (!targetChatId) {
|
|
166
|
+
loggerPublish.error('SSE event missing required chatId', {
|
|
167
|
+
worldId: world.id,
|
|
168
|
+
eventType: event.type,
|
|
169
|
+
messageId: event.messageId,
|
|
170
|
+
agentName: event.agentName,
|
|
171
|
+
});
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
146
174
|
// Persist start/end events for metadata tracking
|
|
147
|
-
// Use event.chatId for concurrency-safe routing (falls back to null for broadcast)
|
|
148
175
|
const eventData = {
|
|
149
176
|
id: `${event.messageId}-sse-${event.type}`,
|
|
150
177
|
worldId: world.id,
|
|
151
|
-
chatId:
|
|
178
|
+
chatId: targetChatId,
|
|
152
179
|
type: 'sse',
|
|
153
180
|
payload: {
|
|
154
181
|
agentName: event.agentName,
|
|
@@ -166,12 +193,13 @@ export function setupEventPersistence(world) {
|
|
|
166
193
|
};
|
|
167
194
|
return persistEvent(eventData);
|
|
168
195
|
};
|
|
169
|
-
//
|
|
196
|
+
// Combined world-channel handler: persistence + idle title generation
|
|
170
197
|
// Handles WorldToolEvent (tool execution) and WorldActivityEventPayload (activity tracking)
|
|
171
|
-
const toolHandler = (event) => {
|
|
198
|
+
const toolHandler = async (event) => {
|
|
172
199
|
// Check event type category
|
|
173
200
|
const isActivityEvent = event.type && ['response-start', 'response-end', 'idle'].includes(event.type);
|
|
174
201
|
const isToolEvent = event.type && ['tool-start', 'tool-result', 'tool-error', 'tool-progress'].includes(event.type);
|
|
202
|
+
const targetChatId = typeof event?.chatId === 'string' ? event.chatId.trim() : '';
|
|
175
203
|
// OPTIMIZATION: Skip tool-progress events (high frequency status updates)
|
|
176
204
|
// Keep tool-start (marks beginning), tool-result (final result), tool-error (failures)
|
|
177
205
|
if (event.type === 'tool-progress') {
|
|
@@ -179,6 +207,15 @@ export function setupEventPersistence(world) {
|
|
|
179
207
|
}
|
|
180
208
|
// Validate required fields for tool events only
|
|
181
209
|
if (isToolEvent) {
|
|
210
|
+
if (!targetChatId) {
|
|
211
|
+
loggerPublish.error('Tool event missing required chatId', {
|
|
212
|
+
worldId: world.id,
|
|
213
|
+
eventType: event.type,
|
|
214
|
+
messageId: event.messageId,
|
|
215
|
+
agentName: event.agentName,
|
|
216
|
+
});
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
182
219
|
if (!event.messageId) {
|
|
183
220
|
loggerPublish.error('Tool event missing required messageId', {
|
|
184
221
|
worldId: world.id,
|
|
@@ -196,6 +233,15 @@ export function setupEventPersistence(world) {
|
|
|
196
233
|
return; // Skip persistence for invalid events
|
|
197
234
|
}
|
|
198
235
|
}
|
|
236
|
+
if (isActivityEvent && !targetChatId) {
|
|
237
|
+
loggerPublish.error('Activity event missing required chatId', {
|
|
238
|
+
worldId: world.id,
|
|
239
|
+
eventType: event.type,
|
|
240
|
+
messageId: event.messageId,
|
|
241
|
+
source: event.source,
|
|
242
|
+
});
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
199
245
|
// Generate unique ID for tool events by combining messageId with tool type
|
|
200
246
|
// This prevents duplicate ID conflicts when multiple tool events (tool-start, tool-result, tool-error)
|
|
201
247
|
// share the same messageId
|
|
@@ -205,9 +251,7 @@ export function setupEventPersistence(world) {
|
|
|
205
251
|
const eventData = {
|
|
206
252
|
id: eventId,
|
|
207
253
|
worldId: world.id,
|
|
208
|
-
|
|
209
|
-
// Tool events use chatId from event for concurrency-safe routing
|
|
210
|
-
chatId: isActivityEvent ? null : (event.chatId || null),
|
|
254
|
+
chatId: targetChatId,
|
|
211
255
|
type: isActivityEvent ? 'world' : 'tool',
|
|
212
256
|
payload: isActivityEvent ? {
|
|
213
257
|
activityType: event.type,
|
|
@@ -235,14 +279,26 @@ export function setupEventPersistence(world) {
|
|
|
235
279
|
},
|
|
236
280
|
createdAt: isActivityEvent ? new Date(event.timestamp) : new Date()
|
|
237
281
|
};
|
|
238
|
-
|
|
282
|
+
await persistEvent(eventData);
|
|
283
|
+
// Idle title generation runs after persisting the activity event
|
|
284
|
+
if (isActivityEvent) {
|
|
285
|
+
await runIdleTitleUpdate(world, event);
|
|
286
|
+
}
|
|
239
287
|
};
|
|
240
288
|
// System event persistence
|
|
241
289
|
const systemHandler = (event) => {
|
|
290
|
+
const targetChatId = typeof event.chatId === 'string' ? event.chatId.trim() : '';
|
|
291
|
+
if (!targetChatId) {
|
|
292
|
+
loggerPublish.error('System event missing required chatId', {
|
|
293
|
+
worldId: world.id,
|
|
294
|
+
messageId: event.messageId,
|
|
295
|
+
});
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
242
298
|
const eventData = {
|
|
243
299
|
id: event.messageId,
|
|
244
300
|
worldId: world.id,
|
|
245
|
-
chatId:
|
|
301
|
+
chatId: targetChatId,
|
|
246
302
|
type: 'system',
|
|
247
303
|
payload: event.content,
|
|
248
304
|
meta: {},
|
|
@@ -250,20 +306,29 @@ export function setupEventPersistence(world) {
|
|
|
250
306
|
};
|
|
251
307
|
return persistEvent(eventData);
|
|
252
308
|
};
|
|
253
|
-
// Attach listeners
|
|
309
|
+
// Attach listeners — one per channel; this is the sole world-level infrastructure subscriber
|
|
254
310
|
world.eventEmitter.on('message', messageHandler);
|
|
255
311
|
world.eventEmitter.on('sse', sseHandler);
|
|
256
312
|
world.eventEmitter.on('world', toolHandler);
|
|
257
313
|
world.eventEmitter.on('system', systemHandler);
|
|
258
|
-
|
|
259
|
-
worldId: world.id
|
|
260
|
-
});
|
|
261
|
-
// Return cleanup function
|
|
262
|
-
return () => {
|
|
314
|
+
const cleanup = () => {
|
|
263
315
|
world.eventEmitter.off('message', messageHandler);
|
|
264
316
|
world.eventEmitter.off('sse', sseHandler);
|
|
265
317
|
world.eventEmitter.off('world', toolHandler);
|
|
266
318
|
world.eventEmitter.off('system', systemHandler);
|
|
319
|
+
clearWorldTitleTimers(world.id);
|
|
320
|
+
// Clear idempotent handles so downstream wrappers can re-register if needed after cleanup
|
|
321
|
+
world._worldMessagesUnsubscriber = undefined;
|
|
322
|
+
world._activityListenerCleanup = undefined;
|
|
267
323
|
loggerPublish.debug('Event persistence listeners cleaned up', { worldId: world.id });
|
|
268
324
|
};
|
|
325
|
+
// Store cleanup ref in all three slots so the idempotent wrappers
|
|
326
|
+
// (subscribeWorldToMessages, setupWorldActivityListener) short-circuit instead of
|
|
327
|
+
// adding duplicate listeners on the same world.
|
|
328
|
+
world._worldMessagesUnsubscriber = cleanup;
|
|
329
|
+
world._activityListenerCleanup = cleanup;
|
|
330
|
+
loggerPublish.debug('Event persistence setup complete', {
|
|
331
|
+
worldId: world.id
|
|
332
|
+
});
|
|
333
|
+
return cleanup;
|
|
269
334
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../core/events/persistence.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../core/events/persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
* - Emits events synchronously through world-scoped EventEmitter channels
|
|
13
13
|
*
|
|
14
14
|
* Recent Changes:
|
|
15
|
+
* - 2026-03-13: Preserved optional SSE `reasoningContent` so reasoning tokens survive world-scoped event publication.
|
|
16
|
+
* - 2026-03-06: Required explicit `chatId` for message/system/SSE/tool publication; removed `world.currentChatId` fallback from event emitters.
|
|
15
17
|
* - 2026-02-13: Added optional explicit `chatId` override for `publishEvent` to preserve session context across async flows.
|
|
16
18
|
* - 2026-02-13: Added chat-scoped tool-event propagation (`chatId`) so realtime tool updates remain session-isolated.
|
|
17
19
|
* - 2026-02-11: Fixed publishSSE to include toolName and stream fields for tool-stream events
|
|
@@ -35,24 +37,24 @@ export declare function normalizeSender(sender: string): string;
|
|
|
35
37
|
/**
|
|
36
38
|
* Publish event to a specific channel using World.eventEmitter
|
|
37
39
|
*/
|
|
38
|
-
export declare function publishEvent(world: World, type: string, content: any, chatId
|
|
40
|
+
export declare function publishEvent(world: World, type: string, content: any, chatId: string): void;
|
|
39
41
|
/**
|
|
40
42
|
* Message publishing using World.eventEmitter with chat session management
|
|
41
43
|
* Parses enhanced string protocol and automatically prepends @mention if agentId detected
|
|
42
44
|
* Returns the messageEvent so callers can access the generated messageId
|
|
43
45
|
*
|
|
44
|
-
* @param chatId -
|
|
46
|
+
* @param chatId - Explicit chat ID for concurrency-safe routing
|
|
45
47
|
* @param replyToMessageId - Optional parent message ID for threading
|
|
46
48
|
*/
|
|
47
|
-
export declare function publishMessage(world: World, content: string, sender: string, chatId
|
|
49
|
+
export declare function publishMessage(world: World, content: string, sender: string, chatId: string, replyToMessageId?: string): WorldMessageEvent;
|
|
48
50
|
/**
|
|
49
51
|
* Message publishing with pre-generated messageId
|
|
50
52
|
* Used when messageId needs to be known before publishing (e.g., for agent responses)
|
|
51
53
|
*
|
|
52
|
-
* @param chatId -
|
|
54
|
+
* @param chatId - Explicit chat ID for concurrency-safe routing
|
|
53
55
|
* @param replyToMessageId - Optional parent message ID for threading
|
|
54
56
|
*/
|
|
55
|
-
export declare function publishMessageWithId(world: World, content: string, sender: string, messageId: string, chatId
|
|
57
|
+
export declare function publishMessageWithId(world: World, content: string, sender: string, messageId: string, chatId: string, replyToMessageId?: string): WorldMessageEvent;
|
|
56
58
|
/**
|
|
57
59
|
* Subscribe to message events
|
|
58
60
|
*/
|
|
@@ -60,11 +62,15 @@ export declare function subscribeToMessages(world: World, handler: (event: World
|
|
|
60
62
|
/**
|
|
61
63
|
* SSE events using World.eventEmitter (for LLM streaming)
|
|
62
64
|
*/
|
|
63
|
-
export declare function publishSSE(world: World, data: Partial<WorldSSEEvent>
|
|
65
|
+
export declare function publishSSE(world: World, data: Partial<WorldSSEEvent> & {
|
|
66
|
+
chatId: string;
|
|
67
|
+
}): void;
|
|
64
68
|
/**
|
|
65
69
|
* Tool events using World.eventEmitter (for agent behavioral events)
|
|
66
70
|
*/
|
|
67
|
-
export declare function publishToolEvent(world: World, data: Partial<WorldToolEvent>
|
|
71
|
+
export declare function publishToolEvent(world: World, data: Partial<WorldToolEvent> & {
|
|
72
|
+
chatId: string;
|
|
73
|
+
}): void;
|
|
68
74
|
/**
|
|
69
75
|
* SSE subscription using World.eventEmitter
|
|
70
76
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishers.d.ts","sourceRoot":"","sources":["../../../core/events/publishers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"publishers.d.ts","sourceRoot":"","sources":["../../../core/events/publishers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAExD,MAAM,aAAa,CAAC;AAUrB,wBAAgB,eAAe,IAAI,IAAI,CAAmC;AAC1E,wBAAgB,gBAAgB,IAAI,IAAI,CAAoC;AAC5E,wBAAgB,kBAAkB,IAAI,OAAO,CAAmC;AAEhF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAStD;AAgDD;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAS3F;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAwE1I;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAWnK;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAC1D,MAAM,IAAI,CA6BZ;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAiBhG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUvG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GACtC,MAAM,IAAI,CAGZ"}
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
* - Emits events synchronously through world-scoped EventEmitter channels
|
|
13
13
|
*
|
|
14
14
|
* Recent Changes:
|
|
15
|
+
* - 2026-03-13: Preserved optional SSE `reasoningContent` so reasoning tokens survive world-scoped event publication.
|
|
16
|
+
* - 2026-03-06: Required explicit `chatId` for message/system/SSE/tool publication; removed `world.currentChatId` fallback from event emitters.
|
|
15
17
|
* - 2026-02-13: Added optional explicit `chatId` override for `publishEvent` to preserve session context across async flows.
|
|
16
18
|
* - 2026-02-13: Added chat-scoped tool-event propagation (`chatId`) so realtime tool updates remain session-isolated.
|
|
17
19
|
* - 2026-02-11: Fixed publishSSE to include toolName and stream fields for tool-stream events
|
|
@@ -50,20 +52,47 @@ export function normalizeSender(sender) {
|
|
|
50
52
|
return 'world';
|
|
51
53
|
return trimmed;
|
|
52
54
|
}
|
|
53
|
-
function resolveRequiredChatId(
|
|
55
|
+
function resolveRequiredChatId(chatId, callsite) {
|
|
54
56
|
const explicitChatId = typeof chatId === 'string' ? chatId.trim() : '';
|
|
55
57
|
if (explicitChatId)
|
|
56
58
|
return explicitChatId;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
throw new Error(`${callsite}: explicit chatId is required.`);
|
|
60
|
+
}
|
|
61
|
+
function buildWorldMessageEvent(params) {
|
|
62
|
+
const normalizedSender = normalizeSender(params.sender);
|
|
63
|
+
const { message: parsedMsg } = parseMessageContent(params.content, 'user');
|
|
64
|
+
let role;
|
|
65
|
+
if (parsedMsg.role === 'tool') {
|
|
66
|
+
role = 'tool';
|
|
67
|
+
}
|
|
68
|
+
else if (normalizedSender === 'human' || normalizedSender.startsWith('user')) {
|
|
69
|
+
role = 'user';
|
|
70
|
+
}
|
|
71
|
+
else if (normalizedSender === 'system' || normalizedSender === 'world') {
|
|
72
|
+
role = normalizedSender;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
role = parsedMsg.role === 'assistant' ? 'assistant' : 'assistant';
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
content: params.content,
|
|
79
|
+
sender: normalizedSender,
|
|
80
|
+
timestamp: new Date(),
|
|
81
|
+
messageId: params.messageId,
|
|
82
|
+
chatId: params.chatId,
|
|
83
|
+
replyToMessageId: params.replyToMessageId,
|
|
84
|
+
...(role ? { role } : {}),
|
|
85
|
+
...(Array.isArray(parsedMsg.tool_calls) ? { tool_calls: parsedMsg.tool_calls } : {}),
|
|
86
|
+
...(typeof parsedMsg.tool_call_id === 'string' && parsedMsg.tool_call_id.trim()
|
|
87
|
+
? { tool_call_id: parsedMsg.tool_call_id.trim() }
|
|
88
|
+
: {}),
|
|
89
|
+
};
|
|
61
90
|
}
|
|
62
91
|
/**
|
|
63
92
|
* Publish event to a specific channel using World.eventEmitter
|
|
64
93
|
*/
|
|
65
94
|
export function publishEvent(world, type, content, chatId) {
|
|
66
|
-
const targetChatId = chatId
|
|
95
|
+
const targetChatId = resolveRequiredChatId(chatId, 'publishEvent');
|
|
67
96
|
const event = {
|
|
68
97
|
content,
|
|
69
98
|
timestamp: new Date(),
|
|
@@ -77,12 +106,12 @@ export function publishEvent(world, type, content, chatId) {
|
|
|
77
106
|
* Parses enhanced string protocol and automatically prepends @mention if agentId detected
|
|
78
107
|
* Returns the messageEvent so callers can access the generated messageId
|
|
79
108
|
*
|
|
80
|
-
* @param chatId -
|
|
109
|
+
* @param chatId - Explicit chat ID for concurrency-safe routing
|
|
81
110
|
* @param replyToMessageId - Optional parent message ID for threading
|
|
82
111
|
*/
|
|
83
112
|
export function publishMessage(world, content, sender, chatId, replyToMessageId) {
|
|
84
113
|
const messageId = generateId();
|
|
85
|
-
const targetChatId = resolveRequiredChatId(
|
|
114
|
+
const targetChatId = resolveRequiredChatId(chatId, 'publishMessage');
|
|
86
115
|
const normalizedSender = normalizeSender(sender);
|
|
87
116
|
loggerMemory.debug('[publishMessage] ENTRY', {
|
|
88
117
|
sender,
|
|
@@ -117,31 +146,17 @@ export function publishMessage(world, content, sender, chatId, replyToMessageId)
|
|
|
117
146
|
messageId
|
|
118
147
|
});
|
|
119
148
|
}
|
|
120
|
-
|
|
121
|
-
let role;
|
|
122
|
-
if (parsedMsg.role === 'tool') {
|
|
123
|
-
role = 'tool';
|
|
124
|
-
}
|
|
125
|
-
else if (normalizedSender === 'human' || normalizedSender.startsWith('user')) {
|
|
126
|
-
role = 'user';
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
// Agent senders get role 'assistant'
|
|
130
|
-
role = 'assistant';
|
|
131
|
-
}
|
|
132
|
-
const messageEvent = {
|
|
149
|
+
const messageEvent = buildWorldMessageEvent({
|
|
133
150
|
content: finalContent,
|
|
134
151
|
sender: normalizedSender,
|
|
135
|
-
role,
|
|
136
|
-
timestamp: new Date(),
|
|
137
152
|
messageId,
|
|
138
153
|
chatId: targetChatId,
|
|
139
|
-
replyToMessageId
|
|
140
|
-
};
|
|
154
|
+
replyToMessageId,
|
|
155
|
+
});
|
|
141
156
|
loggerMemory.debug('[publishMessage] Generated messageId', {
|
|
142
157
|
messageId,
|
|
143
158
|
sender: normalizedSender,
|
|
144
|
-
role,
|
|
159
|
+
role: messageEvent.role,
|
|
145
160
|
worldId: world.id,
|
|
146
161
|
chatId: targetChatId,
|
|
147
162
|
hasAgentId: !!targetAgentId,
|
|
@@ -150,7 +165,7 @@ export function publishMessage(world, content, sender, chatId, replyToMessageId)
|
|
|
150
165
|
loggerMemory.debug('[publishMessage] Emitting message event', {
|
|
151
166
|
messageId,
|
|
152
167
|
sender: normalizedSender,
|
|
153
|
-
role,
|
|
168
|
+
role: messageEvent.role,
|
|
154
169
|
chatId: targetChatId,
|
|
155
170
|
contentPreview: finalContent.substring(0, 100)
|
|
156
171
|
});
|
|
@@ -162,20 +177,18 @@ export function publishMessage(world, content, sender, chatId, replyToMessageId)
|
|
|
162
177
|
* Message publishing with pre-generated messageId
|
|
163
178
|
* Used when messageId needs to be known before publishing (e.g., for agent responses)
|
|
164
179
|
*
|
|
165
|
-
* @param chatId -
|
|
180
|
+
* @param chatId - Explicit chat ID for concurrency-safe routing
|
|
166
181
|
* @param replyToMessageId - Optional parent message ID for threading
|
|
167
182
|
*/
|
|
168
183
|
export function publishMessageWithId(world, content, sender, messageId, chatId, replyToMessageId) {
|
|
169
|
-
const targetChatId = resolveRequiredChatId(
|
|
170
|
-
const
|
|
171
|
-
const messageEvent = {
|
|
184
|
+
const targetChatId = resolveRequiredChatId(chatId, 'publishMessageWithId');
|
|
185
|
+
const messageEvent = buildWorldMessageEvent({
|
|
172
186
|
content,
|
|
173
|
-
sender
|
|
174
|
-
timestamp: new Date(),
|
|
187
|
+
sender,
|
|
175
188
|
messageId,
|
|
176
189
|
chatId: targetChatId,
|
|
177
|
-
replyToMessageId
|
|
178
|
-
};
|
|
190
|
+
replyToMessageId,
|
|
191
|
+
});
|
|
179
192
|
world.eventEmitter.emit('message', messageEvent);
|
|
180
193
|
return messageEvent;
|
|
181
194
|
}
|
|
@@ -217,13 +230,15 @@ export function subscribeToMessages(world, handler) {
|
|
|
217
230
|
* SSE events using World.eventEmitter (for LLM streaming)
|
|
218
231
|
*/
|
|
219
232
|
export function publishSSE(world, data) {
|
|
233
|
+
const targetChatId = resolveRequiredChatId(data.chatId, 'publishSSE');
|
|
220
234
|
const sseEvent = {
|
|
221
235
|
agentName: data.agentName,
|
|
222
236
|
type: data.type,
|
|
223
237
|
content: data.content,
|
|
238
|
+
reasoningContent: data.reasoningContent,
|
|
224
239
|
error: data.error,
|
|
225
240
|
messageId: data.messageId || generateId(),
|
|
226
|
-
chatId:
|
|
241
|
+
chatId: targetChatId,
|
|
227
242
|
usage: data.usage,
|
|
228
243
|
logEvent: data.logEvent,
|
|
229
244
|
tool_calls: data.tool_calls,
|
|
@@ -236,11 +251,12 @@ export function publishSSE(world, data) {
|
|
|
236
251
|
* Tool events using World.eventEmitter (for agent behavioral events)
|
|
237
252
|
*/
|
|
238
253
|
export function publishToolEvent(world, data) {
|
|
254
|
+
const targetChatId = resolveRequiredChatId(data.chatId, 'publishToolEvent');
|
|
239
255
|
const toolEvent = {
|
|
240
256
|
agentName: data.agentName,
|
|
241
257
|
type: data.type,
|
|
242
258
|
messageId: data.messageId || generateId(),
|
|
243
|
-
chatId:
|
|
259
|
+
chatId: targetChatId,
|
|
244
260
|
toolExecution: data.toolExecution
|
|
245
261
|
};
|
|
246
262
|
world.eventEmitter.emit('world', toolEvent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishers.js","sourceRoot":"","sources":["../../../core/events/publishers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"publishers.js","sourceRoot":"","sources":["../../../core/events/publishers.ts"],"names":[],"mappings":"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"}
|