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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-init.d.ts","sourceRoot":"","sources":["../../core/storage-init.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,KAAK,UAAU,EAA6B,MAAM,8BAA8B,CAAC;AAM1F,eAAO,IAAI,eAAe,EAAE,UAAU,GAAG,IAAW,CAAC;AAsBrD,wBAAgB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKpD;AAiCD,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG/E;AAkCD,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGtG;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAGzE"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage Initialization Module
|
|
3
|
+
*
|
|
4
|
+
* Purpose: Centralizes the StorageAPI singleton and lazy initialization, plus
|
|
5
|
+
* world/agent identifier resolution utilities.
|
|
6
|
+
*
|
|
7
|
+
* Key features:
|
|
8
|
+
* - Singleton storageWrappers with lazy initialization via ensureInitialization()
|
|
9
|
+
* - Dedup guard prevents multiple simultaneous initialization attempts
|
|
10
|
+
* - World identifier resolution (accepts ID or name, handles rename drift)
|
|
11
|
+
* - Agent identifier resolution (accepts ID or name within a world)
|
|
12
|
+
* - overrideStorageForTests() for in-memory test injection
|
|
13
|
+
*
|
|
14
|
+
* Notes:
|
|
15
|
+
* - Uses exported `let storageWrappers` so all ESM importers share the live
|
|
16
|
+
* binding — after initializeModules() runs once, every importer sees the
|
|
17
|
+
* non-null value without additional round-trips.
|
|
18
|
+
* - All resolution helpers are exported so queue-manager and message-edit-manager
|
|
19
|
+
* can use them without importing from managers.ts (which would form a static cycle).
|
|
20
|
+
*
|
|
21
|
+
* Recent Changes:
|
|
22
|
+
* - 2026-03-09: Extracted from managers.ts as part of god-module decomposition.
|
|
23
|
+
*/
|
|
24
|
+
import { createCategoryLogger, initializeLogger } from './logger.js';
|
|
25
|
+
import { createStorageWithWrappers } from './storage/storage-factory.js';
|
|
26
|
+
import * as utils from './utils.js';
|
|
27
|
+
const logger = createCategoryLogger('core.storage-init');
|
|
28
|
+
export let storageWrappers = null;
|
|
29
|
+
let moduleInitialization = null;
|
|
30
|
+
async function initializeModules() {
|
|
31
|
+
if (storageWrappers) {
|
|
32
|
+
return; // Already initialized
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
initializeLogger();
|
|
36
|
+
storageWrappers = await createStorageWithWrappers();
|
|
37
|
+
// Startup recovery: reset any 'sending' queue rows interrupted by an app crash/restart
|
|
38
|
+
const recovered = await storageWrappers.recoverSendingMessages?.();
|
|
39
|
+
if (recovered) {
|
|
40
|
+
logger.info('Queue startup recovery: reset interrupted messages to queued', { count: recovered });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
// Log error but don't throw - allows tests to proceed with mocked storage
|
|
45
|
+
logger.error('Failed to initialize storage', { error: error instanceof Error ? error.message : error });
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function ensureInitialization() {
|
|
50
|
+
if (!moduleInitialization) {
|
|
51
|
+
moduleInitialization = initializeModules();
|
|
52
|
+
}
|
|
53
|
+
return moduleInitialization;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolve a world identifier to the persisted world ID.
|
|
57
|
+
* Accepts either world ID or world name and supports historical rename drift.
|
|
58
|
+
*/
|
|
59
|
+
async function resolveWorldIdentifier(worldIdOrName) {
|
|
60
|
+
const normalizedInput = utils.toKebabCase(worldIdOrName);
|
|
61
|
+
if (!normalizedInput)
|
|
62
|
+
return null;
|
|
63
|
+
// Fast path: direct normalized ID lookup
|
|
64
|
+
const directWorld = await storageWrappers.loadWorld(normalizedInput);
|
|
65
|
+
if (directWorld?.id) {
|
|
66
|
+
return directWorld.id;
|
|
67
|
+
}
|
|
68
|
+
// Fallback: scan worlds and match by normalized ID or normalized name
|
|
69
|
+
const worlds = await storageWrappers.listWorlds();
|
|
70
|
+
const matched = worlds.find((world) => {
|
|
71
|
+
const storedId = String(world.id || '');
|
|
72
|
+
const storedName = String(world.name || '');
|
|
73
|
+
return (storedId === worldIdOrName ||
|
|
74
|
+
storedName === worldIdOrName ||
|
|
75
|
+
utils.toKebabCase(storedId) === normalizedInput ||
|
|
76
|
+
utils.toKebabCase(storedName) === normalizedInput);
|
|
77
|
+
});
|
|
78
|
+
return matched?.id || null;
|
|
79
|
+
}
|
|
80
|
+
export async function getResolvedWorldId(worldIdOrName) {
|
|
81
|
+
const resolved = await resolveWorldIdentifier(worldIdOrName);
|
|
82
|
+
return resolved || utils.toKebabCase(worldIdOrName);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Resolve an agent identifier to the persisted agent ID within a world.
|
|
86
|
+
* Accepts either agent ID or agent name and supports historical rename drift.
|
|
87
|
+
*/
|
|
88
|
+
async function resolveAgentIdentifier(worldIdOrName, agentIdOrName) {
|
|
89
|
+
const resolvedWorldId = await getResolvedWorldId(worldIdOrName);
|
|
90
|
+
const normalizedInput = utils.toKebabCase(agentIdOrName);
|
|
91
|
+
if (!normalizedInput)
|
|
92
|
+
return null;
|
|
93
|
+
// Fast path: direct normalized ID lookup
|
|
94
|
+
const directAgent = await storageWrappers.loadAgent(resolvedWorldId, normalizedInput);
|
|
95
|
+
if (directAgent?.id) {
|
|
96
|
+
return directAgent.id;
|
|
97
|
+
}
|
|
98
|
+
// Fallback: scan agents and match by normalized ID or normalized name
|
|
99
|
+
const agents = await storageWrappers.listAgents(resolvedWorldId);
|
|
100
|
+
const matched = agents.find((agent) => {
|
|
101
|
+
const storedId = String(agent.id || '');
|
|
102
|
+
const storedName = String(agent.name || '');
|
|
103
|
+
return (storedId === agentIdOrName ||
|
|
104
|
+
storedName === agentIdOrName ||
|
|
105
|
+
utils.toKebabCase(storedId) === normalizedInput ||
|
|
106
|
+
utils.toKebabCase(storedName) === normalizedInput);
|
|
107
|
+
});
|
|
108
|
+
return matched?.id || null;
|
|
109
|
+
}
|
|
110
|
+
export async function getResolvedAgentId(worldIdOrName, agentIdOrName) {
|
|
111
|
+
const resolved = await resolveAgentIdentifier(worldIdOrName, agentIdOrName);
|
|
112
|
+
return resolved || utils.toKebabCase(agentIdOrName);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Override storage for test injection.
|
|
116
|
+
* Replaces the singleton and resets the initialization guard so subsequent
|
|
117
|
+
* ensureInitialization() calls resolve immediately with the injected storage.
|
|
118
|
+
*/
|
|
119
|
+
export function overrideStorageForTests(wrappers) {
|
|
120
|
+
storageWrappers = wrappers;
|
|
121
|
+
moduleInitialization = wrappers ? Promise.resolve() : null;
|
|
122
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-init.js","sourceRoot":"","sources":["../../core/storage-init.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,12 @@
|
|
|
11
11
|
* - Uses world-id keyed runtime tracking with safe register/unregister semantics.
|
|
12
12
|
*
|
|
13
13
|
* Recent Changes:
|
|
14
|
+
* - 2026-03-10: Rebound the idle activity listener during standalone runtime startup so
|
|
15
|
+
* idle-only title generation still works when event persistence is unavailable.
|
|
16
|
+
* - 2026-03-04: Queue/runtime selection no longer relies on `world.currentChatId`.
|
|
17
|
+
* - `getActiveSubscribedWorld(worldId, preferredChatId)` now matches only by runtime chat membership.
|
|
18
|
+
* - Subscription startup no longer auto-resumes queue from runtime `currentChatId`.
|
|
19
|
+
* - 2026-02-28: Re-applied world-level message subscriptions during runtime refresh to preserve chat-title scheduling after session/world updates.
|
|
14
20
|
* - 2026-02-14: Added active runtime world tracking and `getActiveSubscribedWorld()` for core edit-message resubmission to publish on live emitters.
|
|
15
21
|
*/
|
|
16
22
|
import { World } from './types.js';
|
|
@@ -35,7 +41,8 @@ export interface WorldSubscription {
|
|
|
35
41
|
refresh: () => Promise<World>;
|
|
36
42
|
destroy: () => Promise<void>;
|
|
37
43
|
}
|
|
38
|
-
export declare function getActiveSubscribedWorld(worldIdentifier: string): World | null;
|
|
44
|
+
export declare function getActiveSubscribedWorld(worldIdentifier: string, preferredChatId?: string | null): World | null;
|
|
45
|
+
export declare function getActiveSubscribedWorlds(worldIdentifier: string): World[];
|
|
39
46
|
export declare function startWorld(world: World, client: ClientConnection): Promise<WorldSubscription>;
|
|
40
47
|
export declare function subscribeWorld(worldIdentifier: string, client: ClientConnection): Promise<WorldSubscription | null>;
|
|
41
48
|
export declare function setupWorldEventListeners(world: World, client: ClientConnection): Map<string, (...args: any[]) => void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../core/subscription.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../core/subscription.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAwB,KAAK,QAAQ,EAAwB,MAAM,aAAa,CAAC;AAUxF,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CAC5C;AAGD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAwBD,wBAAgB,wBAAwB,CAAC,eAAe,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAoB/G;AAED,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,KAAK,EAAE,CAY1E;AAGD,wBAAsB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsGnG;AAGD,wBAAsB,cAAc,CAClC,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAgHnC;AAGD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,CAiDtH;AAGD,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBtI"}
|
|
@@ -11,14 +11,19 @@
|
|
|
11
11
|
* - Uses world-id keyed runtime tracking with safe register/unregister semantics.
|
|
12
12
|
*
|
|
13
13
|
* Recent Changes:
|
|
14
|
+
* - 2026-03-10: Rebound the idle activity listener during standalone runtime startup so
|
|
15
|
+
* idle-only title generation still works when event persistence is unavailable.
|
|
16
|
+
* - 2026-03-04: Queue/runtime selection no longer relies on `world.currentChatId`.
|
|
17
|
+
* - `getActiveSubscribedWorld(worldId, preferredChatId)` now matches only by runtime chat membership.
|
|
18
|
+
* - Subscription startup no longer auto-resumes queue from runtime `currentChatId`.
|
|
19
|
+
* - 2026-02-28: Re-applied world-level message subscriptions during runtime refresh to preserve chat-title scheduling after session/world updates.
|
|
14
20
|
* - 2026-02-14: Added active runtime world tracking and `getActiveSubscribedWorld()` for core edit-message resubmission to publish on live emitters.
|
|
15
21
|
*/
|
|
16
|
-
import { getWorld } from './managers.js';
|
|
22
|
+
import { getWorld, recoverQueueSendingMessages } from './managers.js';
|
|
17
23
|
import { createCategoryLogger, addLogStreamCallback } from './logger.js';
|
|
18
|
-
import { subscribeAgentToMessages, subscribeWorldToMessages } from './events/index.js';
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
24
|
+
import { subscribeAgentToMessages, subscribeWorldToMessages, setupWorldActivityListener } from './events/index.js';
|
|
25
|
+
import { generateId, toKebabCase } from './utils.js';
|
|
26
|
+
import { getWorldRuntimeByKey, startWorldRuntime } from './world-registry.js';
|
|
22
27
|
// Create subscription category logger (part of core functionality)
|
|
23
28
|
const logger = createCategoryLogger('world.subscription');
|
|
24
29
|
const activeSubscribedWorlds = new Map();
|
|
@@ -42,18 +47,37 @@ function unregisterActiveSubscribedWorld(world) {
|
|
|
42
47
|
activeSubscribedWorlds.delete(worldId);
|
|
43
48
|
}
|
|
44
49
|
}
|
|
45
|
-
export function getActiveSubscribedWorld(worldIdentifier) {
|
|
50
|
+
export function getActiveSubscribedWorld(worldIdentifier, preferredChatId) {
|
|
46
51
|
const resolvedWorldId = toKebabCase(String(worldIdentifier || '').trim());
|
|
47
52
|
if (!resolvedWorldId)
|
|
48
53
|
return null;
|
|
49
54
|
const activeWorldSet = activeSubscribedWorlds.get(resolvedWorldId);
|
|
50
55
|
if (!activeWorldSet || activeWorldSet.size === 0)
|
|
51
56
|
return null;
|
|
57
|
+
const normalizedPreferredChatId = String(preferredChatId || '').trim();
|
|
58
|
+
if (normalizedPreferredChatId) {
|
|
59
|
+
for (const world of activeWorldSet.values()) {
|
|
60
|
+
if (world?.chats instanceof Map && world.chats.has(normalizedPreferredChatId)) {
|
|
61
|
+
return world;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
52
65
|
for (const world of activeWorldSet.values()) {
|
|
53
66
|
return world;
|
|
54
67
|
}
|
|
55
68
|
return null;
|
|
56
69
|
}
|
|
70
|
+
export function getActiveSubscribedWorlds(worldIdentifier) {
|
|
71
|
+
const resolvedWorldId = toKebabCase(String(worldIdentifier || '').trim());
|
|
72
|
+
if (!resolvedWorldId) {
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
const activeWorldSet = activeSubscribedWorlds.get(resolvedWorldId);
|
|
76
|
+
if (!activeWorldSet || activeWorldSet.size === 0) {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
return Array.from(activeWorldSet.values());
|
|
80
|
+
}
|
|
57
81
|
// Start world with event listeners - extracted from subscribeWorld
|
|
58
82
|
export async function startWorld(world, client) {
|
|
59
83
|
// Only set up forwarding listeners when the client actually wants them.
|
|
@@ -68,12 +92,22 @@ export async function startWorld(world, client) {
|
|
|
68
92
|
subscribeAgentToMessages(currentWorld, agent);
|
|
69
93
|
}
|
|
70
94
|
subscribeWorldToMessages(currentWorld);
|
|
95
|
+
setupWorldActivityListener(currentWorld);
|
|
71
96
|
// Helper function to destroy current world instance
|
|
72
97
|
const destroyCurrentWorld = async () => {
|
|
73
98
|
if (currentWorld) {
|
|
74
99
|
unregisterActiveSubscribedWorld(currentWorld);
|
|
75
100
|
// Clean up all event listeners
|
|
76
101
|
await cleanupWorldSubscription(currentWorld, worldEventListeners);
|
|
102
|
+
if (typeof currentWorld._worldMessagesUnsubscriber === 'function') {
|
|
103
|
+
currentWorld._worldMessagesUnsubscriber();
|
|
104
|
+
}
|
|
105
|
+
if (typeof currentWorld._activityListenerCleanup === 'function') {
|
|
106
|
+
currentWorld._activityListenerCleanup();
|
|
107
|
+
}
|
|
108
|
+
if (currentWorld._agentUnsubscribers instanceof Map) {
|
|
109
|
+
currentWorld._agentUnsubscribers.clear();
|
|
110
|
+
}
|
|
77
111
|
// Remove all listeners from the EventEmitter to prevent memory leaks
|
|
78
112
|
currentWorld.eventEmitter.removeAllListeners();
|
|
79
113
|
// Clear agents map references
|
|
@@ -121,6 +155,8 @@ export async function startWorld(world, client) {
|
|
|
121
155
|
for (const agent of currentWorld.agents.values()) {
|
|
122
156
|
subscribeAgentToMessages(currentWorld, agent);
|
|
123
157
|
}
|
|
158
|
+
subscribeWorldToMessages(currentWorld);
|
|
159
|
+
setupWorldActivityListener(currentWorld);
|
|
124
160
|
logger.debug('World subscription refreshed', {
|
|
125
161
|
worldId: currentWorld.id,
|
|
126
162
|
agentCount: currentWorld.agents.size
|
|
@@ -131,27 +167,94 @@ export async function startWorld(world, client) {
|
|
|
131
167
|
}
|
|
132
168
|
// World subscription management
|
|
133
169
|
export async function subscribeWorld(worldIdentifier, client) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
return null;
|
|
170
|
+
const worldId = toKebabCase(worldIdentifier);
|
|
171
|
+
const consumerId = `subscription-${generateId()}`;
|
|
172
|
+
let runtimeHandle = null;
|
|
173
|
+
let worldEventListeners = new Map();
|
|
174
|
+
let currentWorld = null;
|
|
175
|
+
function bindForwardingListeners(targetWorld) {
|
|
176
|
+
if (!client || (!client.onWorldEvent && !client.onLog)) {
|
|
177
|
+
return new Map();
|
|
143
178
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
179
|
+
return setupWorldEventListeners(targetWorld, client);
|
|
180
|
+
}
|
|
181
|
+
async function releaseRuntime() {
|
|
182
|
+
if (!runtimeHandle) {
|
|
183
|
+
return;
|
|
147
184
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
185
|
+
if (currentWorld) {
|
|
186
|
+
await cleanupWorldSubscription(currentWorld, worldEventListeners);
|
|
187
|
+
worldEventListeners = new Map();
|
|
188
|
+
}
|
|
189
|
+
await runtimeHandle.release();
|
|
190
|
+
runtimeHandle = null;
|
|
191
|
+
currentWorld = null;
|
|
192
|
+
}
|
|
193
|
+
try {
|
|
194
|
+
runtimeHandle = await startWorldRuntime({
|
|
195
|
+
worldId,
|
|
196
|
+
consumerId,
|
|
197
|
+
createRuntime: async () => {
|
|
198
|
+
await recoverQueueSendingMessages();
|
|
199
|
+
const loadedWorld = await getWorld(worldId);
|
|
200
|
+
if (!loadedWorld) {
|
|
201
|
+
throw new Error(`World not found: ${worldIdentifier}`);
|
|
202
|
+
}
|
|
203
|
+
// MCP servers will be started on-demand in getMCPToolsForWorld()
|
|
204
|
+
if (loadedWorld.mcpConfig) {
|
|
205
|
+
logger.debug(`World ${worldId} has MCP config - servers will start on-demand`);
|
|
206
|
+
}
|
|
207
|
+
// Base runtime setup uses minimal client; forwarding listeners are per-subscriber.
|
|
208
|
+
const runtimeSubscription = await startWorld(loadedWorld, { isOpen: true });
|
|
209
|
+
return {
|
|
210
|
+
world: runtimeSubscription.world,
|
|
211
|
+
stop: () => runtimeSubscription.unsubscribe(),
|
|
212
|
+
refresh: async () => {
|
|
213
|
+
return await runtimeSubscription.refresh();
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
currentWorld = runtimeHandle.world;
|
|
219
|
+
worldEventListeners = bindForwardingListeners(currentWorld);
|
|
220
|
+
return {
|
|
221
|
+
get world() {
|
|
222
|
+
if (!currentWorld) {
|
|
223
|
+
throw new Error('World subscription has been destroyed');
|
|
224
|
+
}
|
|
225
|
+
return currentWorld;
|
|
226
|
+
},
|
|
227
|
+
unsubscribe: async () => {
|
|
228
|
+
await releaseRuntime();
|
|
229
|
+
},
|
|
230
|
+
destroy: async () => {
|
|
231
|
+
await releaseRuntime();
|
|
232
|
+
},
|
|
233
|
+
refresh: async () => {
|
|
234
|
+
if (!runtimeHandle) {
|
|
235
|
+
throw new Error('World subscription has been destroyed');
|
|
236
|
+
}
|
|
237
|
+
const previousWorld = currentWorld;
|
|
238
|
+
if (previousWorld) {
|
|
239
|
+
await cleanupWorldSubscription(previousWorld, worldEventListeners);
|
|
240
|
+
worldEventListeners = new Map();
|
|
241
|
+
}
|
|
242
|
+
await runtimeHandle.refresh();
|
|
243
|
+
const refreshed = getWorldRuntimeByKey(runtimeHandle.runtimeKey);
|
|
244
|
+
if (!refreshed) {
|
|
245
|
+
throw new Error(`Failed to refresh world runtime: ${runtimeHandle.runtimeKey}`);
|
|
246
|
+
}
|
|
247
|
+
currentWorld = refreshed.world;
|
|
248
|
+
worldEventListeners = bindForwardingListeners(currentWorld);
|
|
249
|
+
return currentWorld;
|
|
250
|
+
}
|
|
251
|
+
};
|
|
153
252
|
}
|
|
154
253
|
catch (error) {
|
|
254
|
+
if (runtimeHandle) {
|
|
255
|
+
await runtimeHandle.release();
|
|
256
|
+
runtimeHandle = null;
|
|
257
|
+
}
|
|
155
258
|
logger.error('World subscription failed', {
|
|
156
259
|
worldIdentifier,
|
|
157
260
|
error: error instanceof Error ? error.message : error
|
|
@@ -212,6 +315,10 @@ export async function cleanupWorldSubscription(world, worldEventListeners) {
|
|
|
212
315
|
try {
|
|
213
316
|
// Remove all event listeners
|
|
214
317
|
for (const [eventType, listener] of worldEventListeners.entries()) {
|
|
318
|
+
if (eventType === 'logStream') {
|
|
319
|
+
listener();
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
215
322
|
world.eventEmitter.removeListener(eventType, listener);
|
|
216
323
|
}
|
|
217
324
|
worldEventListeners.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../core/subscription.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../core/subscription.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Approval Module - Shared HITL approval flow for built-in tools.
|
|
3
|
+
*
|
|
4
|
+
* Purpose:
|
|
5
|
+
* - Provide a reusable wrapper around HITL option prompts for tool-level approvals.
|
|
6
|
+
*
|
|
7
|
+
* Key Features:
|
|
8
|
+
* - Standardized approval result contract (`approved`, `reason`, `optionId`, `source`)
|
|
9
|
+
* - Configurable options/default and multiple approved option IDs
|
|
10
|
+
* - Deterministic deny/timeout handling for sensitive tool operations
|
|
11
|
+
* - Optional durable synthetic approval prompt/resolution message persistence
|
|
12
|
+
*
|
|
13
|
+
* Implementation Notes:
|
|
14
|
+
* - Delegates prompt transport/runtime behavior to `requestWorldOption`
|
|
15
|
+
* - Returns normalized results to reduce duplicated approval mapping logic in tools
|
|
16
|
+
* - When message context is available, persists canonical approval prompt/resolution artifacts
|
|
17
|
+
*
|
|
18
|
+
* Recent Changes:
|
|
19
|
+
* - 2026-03-12: Added optional durable approval prompt/resolution persistence with separate requestId vs owning toolCallId support.
|
|
20
|
+
* - 2026-02-28: Initial shared approval helper extracted for `load_skill`, `create_agent`, and `web_fetch`.
|
|
21
|
+
*/
|
|
22
|
+
import { type HitlOption } from './hitl.js';
|
|
23
|
+
import { type AgentMessage, type World } from './types.js';
|
|
24
|
+
export type ToolApprovalReason = 'approved' | 'user_denied' | 'timeout';
|
|
25
|
+
export type ToolApprovalResult = {
|
|
26
|
+
approved: boolean;
|
|
27
|
+
reason: ToolApprovalReason;
|
|
28
|
+
optionId: string;
|
|
29
|
+
source: 'user' | 'timeout';
|
|
30
|
+
};
|
|
31
|
+
export type ToolApprovalRequest = {
|
|
32
|
+
world: World;
|
|
33
|
+
chatId: string | null;
|
|
34
|
+
requestId?: string;
|
|
35
|
+
toolCallId?: string;
|
|
36
|
+
title: string;
|
|
37
|
+
message: string;
|
|
38
|
+
options: HitlOption[];
|
|
39
|
+
defaultOptionId: string;
|
|
40
|
+
approvedOptionIds: string[];
|
|
41
|
+
metadata?: Record<string, unknown>;
|
|
42
|
+
agentName?: string | null;
|
|
43
|
+
messages?: AgentMessage[];
|
|
44
|
+
};
|
|
45
|
+
export declare function requestToolApproval(request: ToolApprovalRequest): Promise<ToolApprovalResult>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-approval.d.ts","sourceRoot":"","sources":["../../core/tool-approval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAGhE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC;AAExE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B,CAAC;AAmMF,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAoDnG"}
|