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.
Files changed (263) hide show
  1. package/README.md +90 -17
  2. package/dist/cli/commands.d.ts +7 -1
  3. package/dist/cli/commands.js +27 -10
  4. package/dist/cli/hitl.d.ts +4 -1
  5. package/dist/cli/hitl.js +55 -20
  6. package/dist/cli/index.js +249 -97
  7. package/dist/cli/system-events.d.ts +27 -0
  8. package/dist/cli/system-events.js +63 -0
  9. package/dist/core/activity-tracker.d.ts +26 -0
  10. package/dist/core/activity-tracker.d.ts.map +1 -1
  11. package/dist/core/activity-tracker.js +21 -4
  12. package/dist/core/activity-tracker.js.map +1 -1
  13. package/dist/core/anthropic-direct.d.ts +2 -0
  14. package/dist/core/anthropic-direct.d.ts.map +1 -1
  15. package/dist/core/anthropic-direct.js +43 -1
  16. package/dist/core/anthropic-direct.js.map +1 -1
  17. package/dist/core/chat-constants.d.ts +12 -0
  18. package/dist/core/chat-constants.d.ts.map +1 -1
  19. package/dist/core/chat-constants.js +5 -0
  20. package/dist/core/chat-constants.js.map +1 -1
  21. package/dist/core/create-agent-tool.d.ts +5 -0
  22. package/dist/core/create-agent-tool.d.ts.map +1 -1
  23. package/dist/core/create-agent-tool.js +57 -34
  24. package/dist/core/create-agent-tool.js.map +1 -1
  25. package/dist/core/events/index.d.ts +5 -2
  26. package/dist/core/events/index.d.ts.map +1 -1
  27. package/dist/core/events/index.js +5 -2
  28. package/dist/core/events/index.js.map +1 -1
  29. package/dist/core/events/memory-manager.d.ts +26 -1
  30. package/dist/core/events/memory-manager.d.ts.map +1 -1
  31. package/dist/core/events/memory-manager.js +877 -72
  32. package/dist/core/events/memory-manager.js.map +1 -1
  33. package/dist/core/events/orchestrator.d.ts +8 -0
  34. package/dist/core/events/orchestrator.d.ts.map +1 -1
  35. package/dist/core/events/orchestrator.js +203 -36
  36. package/dist/core/events/orchestrator.js.map +1 -1
  37. package/dist/core/events/persistence.d.ts +21 -14
  38. package/dist/core/events/persistence.d.ts.map +1 -1
  39. package/dist/core/events/persistence.js +100 -35
  40. package/dist/core/events/persistence.js.map +1 -1
  41. package/dist/core/events/publishers.d.ts +13 -7
  42. package/dist/core/events/publishers.d.ts.map +1 -1
  43. package/dist/core/events/publishers.js +53 -37
  44. package/dist/core/events/publishers.js.map +1 -1
  45. package/dist/core/events/subscribers.d.ts +17 -14
  46. package/dist/core/events/subscribers.d.ts.map +1 -1
  47. package/dist/core/events/subscribers.js +61 -148
  48. package/dist/core/events/subscribers.js.map +1 -1
  49. package/dist/core/events/title-scheduler.d.ts +27 -0
  50. package/dist/core/events/title-scheduler.d.ts.map +1 -0
  51. package/dist/core/events/title-scheduler.js +135 -0
  52. package/dist/core/events/title-scheduler.js.map +1 -0
  53. package/dist/core/events/tool-bridge-logging.d.ts +4 -1
  54. package/dist/core/events/tool-bridge-logging.d.ts.map +1 -1
  55. package/dist/core/events/tool-bridge-logging.js +112 -13
  56. package/dist/core/events/tool-bridge-logging.js.map +1 -1
  57. package/dist/core/events-metadata.d.ts.map +1 -1
  58. package/dist/core/events-metadata.js +8 -4
  59. package/dist/core/events-metadata.js.map +1 -1
  60. package/dist/core/export.d.ts +1 -1
  61. package/dist/core/export.d.ts.map +1 -1
  62. package/dist/core/export.js +2 -15
  63. package/dist/core/export.js.map +1 -1
  64. package/dist/core/feature-path-logging.d.ts +50 -0
  65. package/dist/core/feature-path-logging.d.ts.map +1 -0
  66. package/dist/core/feature-path-logging.js +130 -0
  67. package/dist/core/feature-path-logging.js.map +1 -0
  68. package/dist/core/file-tools.d.ts +57 -1
  69. package/dist/core/file-tools.d.ts.map +1 -1
  70. package/dist/core/file-tools.js +329 -29
  71. package/dist/core/file-tools.js.map +1 -1
  72. package/dist/core/google-direct.d.ts +6 -1
  73. package/dist/core/google-direct.d.ts.map +1 -1
  74. package/dist/core/google-direct.js +76 -7
  75. package/dist/core/google-direct.js.map +1 -1
  76. package/dist/core/heartbeat.d.ts +34 -0
  77. package/dist/core/heartbeat.d.ts.map +1 -0
  78. package/dist/core/heartbeat.js +153 -0
  79. package/dist/core/heartbeat.js.map +1 -0
  80. package/dist/core/hitl-tool.d.ts +6 -12
  81. package/dist/core/hitl-tool.d.ts.map +1 -1
  82. package/dist/core/hitl-tool.js +66 -88
  83. package/dist/core/hitl-tool.js.map +1 -1
  84. package/dist/core/hitl.d.ts +61 -4
  85. package/dist/core/hitl.d.ts.map +1 -1
  86. package/dist/core/hitl.js +324 -60
  87. package/dist/core/hitl.js.map +1 -1
  88. package/dist/core/index.d.ts +11 -7
  89. package/dist/core/index.d.ts.map +1 -1
  90. package/dist/core/index.js +10 -6
  91. package/dist/core/index.js.map +1 -1
  92. package/dist/core/llm-manager.d.ts +15 -0
  93. package/dist/core/llm-manager.d.ts.map +1 -1
  94. package/dist/core/llm-manager.js +325 -40
  95. package/dist/core/llm-manager.js.map +1 -1
  96. package/dist/core/load-skill-tool.d.ts +36 -3
  97. package/dist/core/load-skill-tool.d.ts.map +1 -1
  98. package/dist/core/load-skill-tool.js +807 -93
  99. package/dist/core/load-skill-tool.js.map +1 -1
  100. package/dist/core/logger.d.ts +14 -0
  101. package/dist/core/logger.d.ts.map +1 -1
  102. package/dist/core/logger.js +15 -0
  103. package/dist/core/logger.js.map +1 -1
  104. package/dist/core/managers.d.ts +18 -50
  105. package/dist/core/managers.d.ts.map +1 -1
  106. package/dist/core/managers.js +340 -502
  107. package/dist/core/managers.js.map +1 -1
  108. package/dist/core/mcp-server-registry.d.ts +16 -1
  109. package/dist/core/mcp-server-registry.d.ts.map +1 -1
  110. package/dist/core/mcp-server-registry.js +162 -12
  111. package/dist/core/mcp-server-registry.js.map +1 -1
  112. package/dist/core/message-cutoff.d.ts +29 -0
  113. package/dist/core/message-cutoff.d.ts.map +1 -0
  114. package/dist/core/message-cutoff.js +63 -0
  115. package/dist/core/message-cutoff.js.map +1 -0
  116. package/dist/core/message-edit-manager.d.ts +54 -0
  117. package/dist/core/message-edit-manager.d.ts.map +1 -0
  118. package/dist/core/message-edit-manager.js +602 -0
  119. package/dist/core/message-edit-manager.js.map +1 -0
  120. package/dist/core/message-prep.d.ts +2 -0
  121. package/dist/core/message-prep.d.ts.map +1 -1
  122. package/dist/core/message-prep.js +39 -12
  123. package/dist/core/message-prep.js.map +1 -1
  124. package/dist/core/message-processing-control.d.ts +1 -0
  125. package/dist/core/message-processing-control.d.ts.map +1 -1
  126. package/dist/core/message-processing-control.js +23 -6
  127. package/dist/core/message-processing-control.js.map +1 -1
  128. package/dist/core/openai-direct.d.ts +9 -3
  129. package/dist/core/openai-direct.d.ts.map +1 -1
  130. package/dist/core/openai-direct.js +267 -33
  131. package/dist/core/openai-direct.js.map +1 -1
  132. package/dist/core/optional-tracers/opik-runtime.d.ts +32 -0
  133. package/dist/core/optional-tracers/opik-runtime.d.ts.map +1 -0
  134. package/dist/core/optional-tracers/opik-runtime.js +141 -0
  135. package/dist/core/optional-tracers/opik-runtime.js.map +1 -0
  136. package/dist/core/queue-manager.d.ts +84 -0
  137. package/dist/core/queue-manager.d.ts.map +1 -0
  138. package/dist/core/queue-manager.js +814 -0
  139. package/dist/core/queue-manager.js.map +1 -0
  140. package/dist/core/reasoning-controls.d.ts +30 -0
  141. package/dist/core/reasoning-controls.d.ts.map +1 -0
  142. package/dist/core/reasoning-controls.js +118 -0
  143. package/dist/core/reasoning-controls.js.map +1 -0
  144. package/dist/core/reliability-config.d.ts +82 -0
  145. package/dist/core/reliability-config.d.ts.map +1 -0
  146. package/dist/core/reliability-config.js +106 -0
  147. package/dist/core/reliability-config.js.map +1 -0
  148. package/dist/core/reliability-runtime.d.ts +53 -0
  149. package/dist/core/reliability-runtime.d.ts.map +1 -0
  150. package/dist/core/reliability-runtime.js +92 -0
  151. package/dist/core/reliability-runtime.js.map +1 -0
  152. package/dist/core/security/guardrails.d.ts +21 -0
  153. package/dist/core/security/guardrails.d.ts.map +1 -0
  154. package/dist/core/security/guardrails.js +111 -0
  155. package/dist/core/security/guardrails.js.map +1 -0
  156. package/dist/core/send-message-tool.d.ts +79 -0
  157. package/dist/core/send-message-tool.d.ts.map +1 -0
  158. package/dist/core/send-message-tool.js +222 -0
  159. package/dist/core/send-message-tool.js.map +1 -0
  160. package/dist/core/shell-cmd-tool.d.ts +82 -1
  161. package/dist/core/shell-cmd-tool.d.ts.map +1 -1
  162. package/dist/core/shell-cmd-tool.js +854 -42
  163. package/dist/core/shell-cmd-tool.js.map +1 -1
  164. package/dist/core/skill-registry.d.ts +2 -0
  165. package/dist/core/skill-registry.d.ts.map +1 -1
  166. package/dist/core/skill-registry.js +52 -2
  167. package/dist/core/skill-registry.js.map +1 -1
  168. package/dist/core/storage/eventStorage/fileEventStorage.d.ts +5 -0
  169. package/dist/core/storage/eventStorage/fileEventStorage.d.ts.map +1 -1
  170. package/dist/core/storage/eventStorage/fileEventStorage.js +61 -0
  171. package/dist/core/storage/eventStorage/fileEventStorage.js.map +1 -1
  172. package/dist/core/storage/eventStorage/memoryEventStorage.d.ts +5 -0
  173. package/dist/core/storage/eventStorage/memoryEventStorage.d.ts.map +1 -1
  174. package/dist/core/storage/eventStorage/memoryEventStorage.js +34 -0
  175. package/dist/core/storage/eventStorage/memoryEventStorage.js.map +1 -1
  176. package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts +1 -0
  177. package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts.map +1 -1
  178. package/dist/core/storage/eventStorage/sqliteEventStorage.js +19 -2
  179. package/dist/core/storage/eventStorage/sqliteEventStorage.js.map +1 -1
  180. package/dist/core/storage/eventStorage/types.d.ts +6 -0
  181. package/dist/core/storage/eventStorage/types.d.ts.map +1 -1
  182. package/dist/core/storage/eventStorage/types.js +1 -0
  183. package/dist/core/storage/eventStorage/types.js.map +1 -1
  184. package/dist/core/storage/eventStorage/validation.d.ts.map +1 -1
  185. package/dist/core/storage/eventStorage/validation.js +2 -1
  186. package/dist/core/storage/eventStorage/validation.js.map +1 -1
  187. package/dist/core/storage/github-world-import.d.ts +84 -0
  188. package/dist/core/storage/github-world-import.d.ts.map +1 -0
  189. package/dist/core/storage/github-world-import.js +365 -0
  190. package/dist/core/storage/github-world-import.js.map +1 -0
  191. package/dist/core/storage/memory-storage.d.ts +19 -8
  192. package/dist/core/storage/memory-storage.d.ts.map +1 -1
  193. package/dist/core/storage/memory-storage.js +147 -49
  194. package/dist/core/storage/memory-storage.js.map +1 -1
  195. package/dist/core/storage/queue-storage.d.ts +1 -0
  196. package/dist/core/storage/queue-storage.d.ts.map +1 -1
  197. package/dist/core/storage/queue-storage.js +3 -2
  198. package/dist/core/storage/queue-storage.js.map +1 -1
  199. package/dist/core/storage/sqlite-storage.d.ts +14 -9
  200. package/dist/core/storage/sqlite-storage.d.ts.map +1 -1
  201. package/dist/core/storage/sqlite-storage.js +131 -154
  202. package/dist/core/storage/sqlite-storage.js.map +1 -1
  203. package/dist/core/storage/storage-factory.d.ts +3 -0
  204. package/dist/core/storage/storage-factory.d.ts.map +1 -1
  205. package/dist/core/storage/storage-factory.js +175 -89
  206. package/dist/core/storage/storage-factory.js.map +1 -1
  207. package/dist/core/storage/world-storage.d.ts +1 -1
  208. package/dist/core/storage/world-storage.d.ts.map +1 -1
  209. package/dist/core/storage/world-storage.js +5 -1
  210. package/dist/core/storage/world-storage.js.map +1 -1
  211. package/dist/core/storage-init.d.ts +11 -0
  212. package/dist/core/storage-init.d.ts.map +1 -0
  213. package/dist/core/storage-init.js +122 -0
  214. package/dist/core/storage-init.js.map +1 -0
  215. package/dist/core/subscription.d.ts +8 -1
  216. package/dist/core/subscription.d.ts.map +1 -1
  217. package/dist/core/subscription.js +130 -23
  218. package/dist/core/subscription.js.map +1 -1
  219. package/dist/core/tool-approval.d.ts +45 -0
  220. package/dist/core/tool-approval.d.ts.map +1 -0
  221. package/dist/core/tool-approval.js +223 -0
  222. package/dist/core/tool-approval.js.map +1 -0
  223. package/dist/core/tool-execution-envelope.d.ts +87 -0
  224. package/dist/core/tool-execution-envelope.d.ts.map +1 -0
  225. package/dist/core/tool-execution-envelope.js +168 -0
  226. package/dist/core/tool-execution-envelope.js.map +1 -0
  227. package/dist/core/tool-utils.d.ts +7 -2
  228. package/dist/core/tool-utils.d.ts.map +1 -1
  229. package/dist/core/tool-utils.js +81 -17
  230. package/dist/core/tool-utils.js.map +1 -1
  231. package/dist/core/types.d.ts +67 -19
  232. package/dist/core/types.d.ts.map +1 -1
  233. package/dist/core/types.js +3 -0
  234. package/dist/core/types.js.map +1 -1
  235. package/dist/core/utils.d.ts +7 -0
  236. package/dist/core/utils.d.ts.map +1 -1
  237. package/dist/core/utils.js +71 -21
  238. package/dist/core/utils.js.map +1 -1
  239. package/dist/core/web-fetch-tool.d.ts +72 -0
  240. package/dist/core/web-fetch-tool.d.ts.map +1 -0
  241. package/dist/core/web-fetch-tool.js +491 -0
  242. package/dist/core/web-fetch-tool.js.map +1 -0
  243. package/dist/core/world-registry.d.ts +84 -0
  244. package/dist/core/world-registry.d.ts.map +1 -0
  245. package/dist/core/world-registry.js +247 -0
  246. package/dist/core/world-registry.js.map +1 -0
  247. package/dist/public/assets/index-Be-1xtV-.js +104 -0
  248. package/dist/public/assets/index-tsDdiXDU.css +1 -0
  249. package/dist/public/index.html +2 -2
  250. package/dist/public/mcp-sandbox-proxy.html +148 -0
  251. package/dist/server/api.js +260 -18
  252. package/dist/server/error-response.d.ts +27 -0
  253. package/dist/server/error-response.js +77 -0
  254. package/dist/server/index.d.ts +2 -1
  255. package/dist/server/index.js +6 -2
  256. package/dist/server/sse-handler.d.ts +11 -1
  257. package/dist/server/sse-handler.js +194 -34
  258. package/migrations/0015_add_message_queue.sql +36 -0
  259. package/migrations/0016_add_world_heartbeat.sql +13 -0
  260. package/migrations/0017_add_title_provenance.sql +7 -0
  261. package/package.json +31 -10
  262. package/dist/public/assets/index-BW41BxMy.css +0 -1
  263. 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;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAwB,KAAK,QAAQ,EAAwB,MAAM,aAAa,CAAC;AAYxF,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,GAAG,KAAK,GAAG,IAAI,CAW9E;AAGD,wBAAsB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwFnG;AAGD,wBAAsB,cAAc,CAClC,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAmCnC;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,CAetI"}
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
- function toKebabCase(name) {
20
- return name.toLowerCase().replace(/[^a-z0-9]/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');
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
- try {
135
- // Load world using core manager (convert to kebab-case internally)
136
- const worldId = toKebabCase(worldIdentifier);
137
- const currentWorld = await getWorld(worldId);
138
- if (!currentWorld) {
139
- if (client.onError) {
140
- client.onError(`World not found: ${worldIdentifier}`);
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
- // MCP servers will be started on-demand in getMCPToolsForWorld()
145
- if (currentWorld.mcpConfig) {
146
- logger.debug(`World ${worldId} has MCP config - servers will start on-demand`);
179
+ return setupWorldEventListeners(targetWorld, client);
180
+ }
181
+ async function releaseRuntime() {
182
+ if (!runtimeHandle) {
183
+ return;
147
184
  }
148
- // Use startWorld function to create the subscription
149
- const subscription = await startWorld(currentWorld, client);
150
- // MCP servers use connection pooling and will be cleaned up automatically
151
- // when the Express app shuts down
152
- return subscription;
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"}