agent-world 0.12.3 → 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 +105 -17
- package/dist/cli/commands.d.ts +7 -1
- package/dist/cli/commands.js +27 -10
- package/dist/cli/hitl.d.ts +9 -2
- package/dist/cli/hitl.js +61 -20
- package/dist/cli/index.js +250 -96
- package/dist/cli/system-events.d.ts +27 -0
- package/dist/cli/system-events.js +63 -0
- package/dist/core/activity-tracker.d.ts +38 -2
- package/dist/core/activity-tracker.d.ts.map +1 -1
- package/dist/core/activity-tracker.js +62 -9
- 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 +28 -25
- package/dist/core/create-agent-tool.d.ts.map +1 -1
- package/dist/core/create-agent-tool.js +264 -141
- 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 +214 -38
- 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 -61
- package/dist/core/events/persistence.js.map +1 -1
- package/dist/core/events/publishers.d.ts +13 -16
- package/dist/core/events/publishers.d.ts.map +1 -1
- package/dist/core/events/publishers.js +54 -55
- 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 +68 -147
- 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 +73 -0
- package/dist/core/hitl-tool.d.ts.map +1 -0
- package/dist/core/hitl-tool.js +284 -0
- package/dist/core/hitl-tool.js.map +1 -0
- package/dist/core/hitl.d.ts +85 -8
- package/dist/core/hitl.d.ts.map +1 -1
- package/dist/core/hitl.js +375 -61
- package/dist/core/hitl.js.map +1 -1
- package/dist/core/index.d.ts +12 -7
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +11 -6
- package/dist/core/index.js.map +1 -1
- package/dist/core/llm-manager.d.ts +17 -0
- package/dist/core/llm-manager.d.ts.map +1 -1
- package/dist/core/llm-manager.js +335 -43
- 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 +41 -52
- package/dist/core/managers.d.ts.map +1 -1
- package/dist/core/managers.js +422 -533
- package/dist/core/managers.js.map +1 -1
- package/dist/core/mcp-server-registry.d.ts +19 -2
- package/dist/core/mcp-server-registry.d.ts.map +1 -1
- package/dist/core/mcp-server-registry.js +168 -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 +9 -2
- package/dist/core/tool-utils.d.ts.map +1 -1
- package/dist/core/tool-utils.js +122 -28
- package/dist/core/tool-utils.js.map +1 -1
- package/dist/core/types.d.ts +69 -36
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +3 -2
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils.d.ts +16 -0
- package/dist/core/utils.d.ts.map +1 -1
- package/dist/core/utils.js +99 -24
- 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 +288 -58
- 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 +13 -2
- package/dist/server/sse-handler.js +194 -26
- 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-BO20H4xt.js +0 -96
- package/dist/public/assets/index-ETY7W5_S.css +0 -1
|
@@ -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
|
|
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,32 +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
|
|
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
|
-
import { EventType } from '../types.js';
|
|
29
35
|
import { createCategoryLogger } from '../logger.js';
|
|
30
36
|
import { calculateOwnerAgentIds, calculateRecipientAgentId, calculateMessageDirection, calculateIsMemoryOnly, calculateIsCrossAgentMessage } from '../events-metadata.js';
|
|
37
|
+
import { runIdleTitleUpdate, clearWorldTitleTimers } from './title-scheduler.js';
|
|
31
38
|
const loggerPublish = createCategoryLogger('publish');
|
|
32
39
|
/**
|
|
33
40
|
* Setup automatic event persistence listeners on World event emitter.
|
|
@@ -64,13 +71,22 @@ export function setupEventPersistence(world) {
|
|
|
64
71
|
});
|
|
65
72
|
}
|
|
66
73
|
};
|
|
67
|
-
//
|
|
68
|
-
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
|
+
}
|
|
69
85
|
loggerPublish.debug('Message event received for persistence', {
|
|
70
86
|
worldId: world.id,
|
|
71
87
|
messageId: event.messageId,
|
|
72
88
|
sender: event.sender,
|
|
73
|
-
chatId:
|
|
89
|
+
chatId: targetChatId
|
|
74
90
|
});
|
|
75
91
|
// Calculate enhanced metadata using helper functions
|
|
76
92
|
const ownerAgentIds = calculateOwnerAgentIds(world, event);
|
|
@@ -78,7 +94,8 @@ export function setupEventPersistence(world) {
|
|
|
78
94
|
const messageDirection = calculateMessageDirection(world, event);
|
|
79
95
|
const isMemoryOnly = calculateIsMemoryOnly(world, event);
|
|
80
96
|
const isCrossAgentMessage = calculateIsCrossAgentMessage(world, event);
|
|
81
|
-
const
|
|
97
|
+
const normalizedSender = String(event.sender || '').trim().toLowerCase();
|
|
98
|
+
const isHumanMessage = normalizedSender === 'human' || normalizedSender === 'world' || normalizedSender === 'user';
|
|
82
99
|
// Calculate thread metadata (requires loading messages for accurate depth calculation)
|
|
83
100
|
// For now, use simplified version - can enhance later with full message history
|
|
84
101
|
const threadMetadata = event.replyToMessageId
|
|
@@ -90,7 +107,7 @@ export function setupEventPersistence(world) {
|
|
|
90
107
|
const eventData = {
|
|
91
108
|
id: event.messageId,
|
|
92
109
|
worldId: world.id,
|
|
93
|
-
chatId:
|
|
110
|
+
chatId: targetChatId,
|
|
94
111
|
type: 'message',
|
|
95
112
|
payload: {
|
|
96
113
|
content: event.content,
|
|
@@ -134,7 +151,7 @@ export function setupEventPersistence(world) {
|
|
|
134
151
|
},
|
|
135
152
|
createdAt: event.timestamp
|
|
136
153
|
};
|
|
137
|
-
|
|
154
|
+
await persistEvent(eventData);
|
|
138
155
|
};
|
|
139
156
|
// SSE event handler - persist only start and end events, skip chunk events
|
|
140
157
|
// Chunk events are for UI streaming only (high frequency, transient)
|
|
@@ -144,12 +161,21 @@ export function setupEventPersistence(world) {
|
|
|
144
161
|
if (event.type === 'chunk') {
|
|
145
162
|
return;
|
|
146
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
|
+
}
|
|
147
174
|
// Persist start/end events for metadata tracking
|
|
148
|
-
// Use event.chatId for concurrency-safe routing (falls back to null for broadcast)
|
|
149
175
|
const eventData = {
|
|
150
176
|
id: `${event.messageId}-sse-${event.type}`,
|
|
151
177
|
worldId: world.id,
|
|
152
|
-
chatId:
|
|
178
|
+
chatId: targetChatId,
|
|
153
179
|
type: 'sse',
|
|
154
180
|
payload: {
|
|
155
181
|
agentName: event.agentName,
|
|
@@ -167,12 +193,13 @@ export function setupEventPersistence(world) {
|
|
|
167
193
|
};
|
|
168
194
|
return persistEvent(eventData);
|
|
169
195
|
};
|
|
170
|
-
//
|
|
196
|
+
// Combined world-channel handler: persistence + idle title generation
|
|
171
197
|
// Handles WorldToolEvent (tool execution) and WorldActivityEventPayload (activity tracking)
|
|
172
|
-
const toolHandler = (event) => {
|
|
198
|
+
const toolHandler = async (event) => {
|
|
173
199
|
// Check event type category
|
|
174
200
|
const isActivityEvent = event.type && ['response-start', 'response-end', 'idle'].includes(event.type);
|
|
175
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() : '';
|
|
176
203
|
// OPTIMIZATION: Skip tool-progress events (high frequency status updates)
|
|
177
204
|
// Keep tool-start (marks beginning), tool-result (final result), tool-error (failures)
|
|
178
205
|
if (event.type === 'tool-progress') {
|
|
@@ -180,6 +207,15 @@ export function setupEventPersistence(world) {
|
|
|
180
207
|
}
|
|
181
208
|
// Validate required fields for tool events only
|
|
182
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
|
+
}
|
|
183
219
|
if (!event.messageId) {
|
|
184
220
|
loggerPublish.error('Tool event missing required messageId', {
|
|
185
221
|
worldId: world.id,
|
|
@@ -197,6 +233,15 @@ export function setupEventPersistence(world) {
|
|
|
197
233
|
return; // Skip persistence for invalid events
|
|
198
234
|
}
|
|
199
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
|
+
}
|
|
200
245
|
// Generate unique ID for tool events by combining messageId with tool type
|
|
201
246
|
// This prevents duplicate ID conflicts when multiple tool events (tool-start, tool-result, tool-error)
|
|
202
247
|
// share the same messageId
|
|
@@ -206,9 +251,7 @@ export function setupEventPersistence(world) {
|
|
|
206
251
|
const eventData = {
|
|
207
252
|
id: eventId,
|
|
208
253
|
worldId: world.id,
|
|
209
|
-
|
|
210
|
-
// Tool events use chatId from event for concurrency-safe routing
|
|
211
|
-
chatId: isActivityEvent ? null : (event.chatId || null),
|
|
254
|
+
chatId: targetChatId,
|
|
212
255
|
type: isActivityEvent ? 'world' : 'tool',
|
|
213
256
|
payload: isActivityEvent ? {
|
|
214
257
|
activityType: event.type,
|
|
@@ -236,14 +279,26 @@ export function setupEventPersistence(world) {
|
|
|
236
279
|
},
|
|
237
280
|
createdAt: isActivityEvent ? new Date(event.timestamp) : new Date()
|
|
238
281
|
};
|
|
239
|
-
|
|
282
|
+
await persistEvent(eventData);
|
|
283
|
+
// Idle title generation runs after persisting the activity event
|
|
284
|
+
if (isActivityEvent) {
|
|
285
|
+
await runIdleTitleUpdate(world, event);
|
|
286
|
+
}
|
|
240
287
|
};
|
|
241
288
|
// System event persistence
|
|
242
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
|
+
}
|
|
243
298
|
const eventData = {
|
|
244
299
|
id: event.messageId,
|
|
245
300
|
worldId: world.id,
|
|
246
|
-
chatId:
|
|
301
|
+
chatId: targetChatId,
|
|
247
302
|
type: 'system',
|
|
248
303
|
payload: event.content,
|
|
249
304
|
meta: {},
|
|
@@ -251,45 +306,29 @@ export function setupEventPersistence(world) {
|
|
|
251
306
|
};
|
|
252
307
|
return persistEvent(eventData);
|
|
253
308
|
};
|
|
254
|
-
//
|
|
255
|
-
const crudHandler = (event) => {
|
|
256
|
-
const eventData = {
|
|
257
|
-
id: `crud-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
258
|
-
worldId: world.id,
|
|
259
|
-
chatId: event.chatId || null,
|
|
260
|
-
type: 'crud',
|
|
261
|
-
payload: {
|
|
262
|
-
operation: event.operation,
|
|
263
|
-
entityType: event.entityType,
|
|
264
|
-
entityId: event.entityId,
|
|
265
|
-
entityData: event.entityData,
|
|
266
|
-
timestamp: event.timestamp
|
|
267
|
-
},
|
|
268
|
-
meta: {
|
|
269
|
-
operation: event.operation,
|
|
270
|
-
entityType: event.entityType,
|
|
271
|
-
entityId: event.entityId
|
|
272
|
-
},
|
|
273
|
-
createdAt: event.timestamp
|
|
274
|
-
};
|
|
275
|
-
return persistEvent(eventData);
|
|
276
|
-
};
|
|
277
|
-
// Attach listeners
|
|
309
|
+
// Attach listeners — one per channel; this is the sole world-level infrastructure subscriber
|
|
278
310
|
world.eventEmitter.on('message', messageHandler);
|
|
279
311
|
world.eventEmitter.on('sse', sseHandler);
|
|
280
312
|
world.eventEmitter.on('world', toolHandler);
|
|
281
313
|
world.eventEmitter.on('system', systemHandler);
|
|
282
|
-
|
|
283
|
-
loggerPublish.debug('Event persistence setup complete', {
|
|
284
|
-
worldId: world.id
|
|
285
|
-
});
|
|
286
|
-
// Return cleanup function
|
|
287
|
-
return () => {
|
|
314
|
+
const cleanup = () => {
|
|
288
315
|
world.eventEmitter.off('message', messageHandler);
|
|
289
316
|
world.eventEmitter.off('sse', sseHandler);
|
|
290
317
|
world.eventEmitter.off('world', toolHandler);
|
|
291
318
|
world.eventEmitter.off('system', systemHandler);
|
|
292
|
-
world.
|
|
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;
|
|
293
323
|
loggerPublish.debug('Event persistence listeners cleaned up', { worldId: world.id });
|
|
294
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;
|
|
295
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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"}
|
|
@@ -6,13 +6,14 @@
|
|
|
6
6
|
* - Message publishing with chat session management
|
|
7
7
|
* - SSE event publishing for streaming
|
|
8
8
|
* - Tool event publishing for agent behaviors
|
|
9
|
-
* - CRUD event publishing for configuration changes
|
|
10
9
|
*
|
|
11
10
|
* Implementation Notes:
|
|
12
11
|
* - Uses parseMessageContent to preserve enhanced tool-result protocol support
|
|
13
12
|
* - Emits events synchronously through world-scoped EventEmitter channels
|
|
14
13
|
*
|
|
15
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.
|
|
16
17
|
* - 2026-02-13: Added optional explicit `chatId` override for `publishEvent` to preserve session context across async flows.
|
|
17
18
|
* - 2026-02-13: Added chat-scoped tool-event propagation (`chatId`) so realtime tool updates remain session-isolated.
|
|
18
19
|
* - 2026-02-11: Fixed publishSSE to include toolName and stream fields for tool-stream events
|
|
@@ -33,35 +34,27 @@ export declare function isStreamingEnabled(): boolean;
|
|
|
33
34
|
* - Agent IDs remain unchanged.
|
|
34
35
|
*/
|
|
35
36
|
export declare function normalizeSender(sender: string): string;
|
|
36
|
-
/**
|
|
37
|
-
* Publish CRUD event for agent, chat, or world configuration changes
|
|
38
|
-
* Allows subscribed clients to receive real-time updates for all CRUD operations
|
|
39
|
-
*
|
|
40
|
-
* Note: CRUD events are entity-level by default (`chatId: null`), but chat-scoped
|
|
41
|
-
* CRUD updates can pass an explicit `chatId` when downstream consumers need context.
|
|
42
|
-
*/
|
|
43
|
-
export declare function publishCRUDEvent(world: World, operation: 'create' | 'update' | 'delete', entityType: 'agent' | 'chat' | 'world', entityId: string, entityData?: any, chatId?: string | null): void;
|
|
44
37
|
/**
|
|
45
38
|
* Publish event to a specific channel using World.eventEmitter
|
|
46
39
|
*/
|
|
47
|
-
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;
|
|
48
41
|
/**
|
|
49
42
|
* Message publishing using World.eventEmitter with chat session management
|
|
50
43
|
* Parses enhanced string protocol and automatically prepends @mention if agentId detected
|
|
51
44
|
* Returns the messageEvent so callers can access the generated messageId
|
|
52
45
|
*
|
|
53
|
-
* @param chatId -
|
|
46
|
+
* @param chatId - Explicit chat ID for concurrency-safe routing
|
|
54
47
|
* @param replyToMessageId - Optional parent message ID for threading
|
|
55
48
|
*/
|
|
56
|
-
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;
|
|
57
50
|
/**
|
|
58
51
|
* Message publishing with pre-generated messageId
|
|
59
52
|
* Used when messageId needs to be known before publishing (e.g., for agent responses)
|
|
60
53
|
*
|
|
61
|
-
* @param chatId -
|
|
54
|
+
* @param chatId - Explicit chat ID for concurrency-safe routing
|
|
62
55
|
* @param replyToMessageId - Optional parent message ID for threading
|
|
63
56
|
*/
|
|
64
|
-
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;
|
|
65
58
|
/**
|
|
66
59
|
* Subscribe to message events
|
|
67
60
|
*/
|
|
@@ -69,11 +62,15 @@ export declare function subscribeToMessages(world: World, handler: (event: World
|
|
|
69
62
|
/**
|
|
70
63
|
* SSE events using World.eventEmitter (for LLM streaming)
|
|
71
64
|
*/
|
|
72
|
-
export declare function publishSSE(world: World, data: Partial<WorldSSEEvent>
|
|
65
|
+
export declare function publishSSE(world: World, data: Partial<WorldSSEEvent> & {
|
|
66
|
+
chatId: string;
|
|
67
|
+
}): void;
|
|
73
68
|
/**
|
|
74
69
|
* Tool events using World.eventEmitter (for agent behavioral events)
|
|
75
70
|
*/
|
|
76
|
-
export declare function publishToolEvent(world: World, data: Partial<WorldToolEvent>
|
|
71
|
+
export declare function publishToolEvent(world: World, data: Partial<WorldToolEvent> & {
|
|
72
|
+
chatId: string;
|
|
73
|
+
}): void;
|
|
77
74
|
/**
|
|
78
75
|
* SSE subscription using World.eventEmitter
|
|
79
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"}
|