agent-world 0.11.1 → 0.12.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 (267) hide show
  1. package/README.md +17 -7
  2. package/dist/cli/commands.d.ts +109 -0
  3. package/dist/cli/commands.js +2024 -0
  4. package/dist/cli/display.d.ts +124 -0
  5. package/dist/cli/display.js +381 -0
  6. package/dist/cli/hitl.d.ts +33 -0
  7. package/dist/cli/hitl.js +81 -0
  8. package/dist/cli/index.d.ts +2 -0
  9. package/dist/cli/stream.d.ts +41 -0
  10. package/dist/cli/stream.js +222 -0
  11. package/dist/core/activity-tracker.d.ts +16 -0
  12. package/dist/core/activity-tracker.d.ts.map +1 -0
  13. package/dist/core/activity-tracker.js +91 -0
  14. package/dist/core/activity-tracker.js.map +1 -0
  15. package/dist/core/ai-commands.d.ts +16 -0
  16. package/dist/core/ai-commands.d.ts.map +1 -0
  17. package/dist/core/ai-commands.js +24 -0
  18. package/dist/core/ai-commands.js.map +1 -0
  19. package/dist/core/ai-sdk-patch.d.ts +24 -0
  20. package/dist/core/ai-sdk-patch.d.ts.map +1 -0
  21. package/dist/core/ai-sdk-patch.js +169 -0
  22. package/dist/core/ai-sdk-patch.js.map +1 -0
  23. package/dist/core/anthropic-direct.d.ts +52 -0
  24. package/dist/core/anthropic-direct.d.ts.map +1 -0
  25. package/dist/core/anthropic-direct.js +301 -0
  26. package/dist/core/anthropic-direct.js.map +1 -0
  27. package/dist/core/approval-cache.d.ts +104 -0
  28. package/dist/core/approval-cache.d.ts.map +1 -0
  29. package/dist/core/approval-cache.js +150 -0
  30. package/dist/core/approval-cache.js.map +1 -0
  31. package/dist/core/chat-constants.d.ts +20 -0
  32. package/dist/core/chat-constants.d.ts.map +1 -0
  33. package/dist/core/chat-constants.js +22 -0
  34. package/dist/core/chat-constants.js.map +1 -0
  35. package/dist/core/create-agent-tool.d.ts +66 -0
  36. package/dist/core/create-agent-tool.d.ts.map +1 -0
  37. package/dist/core/create-agent-tool.js +212 -0
  38. package/dist/core/create-agent-tool.js.map +1 -0
  39. package/dist/core/events/approval-checker.d.ts +61 -0
  40. package/dist/core/events/approval-checker.d.ts.map +1 -0
  41. package/dist/core/events/approval-checker.js +226 -0
  42. package/dist/core/events/approval-checker.js.map +1 -0
  43. package/dist/core/events/index.d.ts +25 -0
  44. package/dist/core/events/index.d.ts.map +1 -0
  45. package/dist/core/events/index.js +30 -0
  46. package/dist/core/events/index.js.map +1 -0
  47. package/dist/core/events/memory-manager.d.ts +73 -0
  48. package/dist/core/events/memory-manager.d.ts.map +1 -0
  49. package/dist/core/events/memory-manager.js +1218 -0
  50. package/dist/core/events/memory-manager.js.map +1 -0
  51. package/dist/core/events/mention-logic.d.ts +39 -0
  52. package/dist/core/events/mention-logic.d.ts.map +1 -0
  53. package/dist/core/events/mention-logic.js +163 -0
  54. package/dist/core/events/mention-logic.js.map +1 -0
  55. package/dist/core/events/orchestrator.d.ts +69 -0
  56. package/dist/core/events/orchestrator.d.ts.map +1 -0
  57. package/dist/core/events/orchestrator.js +883 -0
  58. package/dist/core/events/orchestrator.js.map +1 -0
  59. package/dist/core/events/persistence.d.ts +41 -0
  60. package/dist/core/events/persistence.d.ts.map +1 -0
  61. package/dist/core/events/persistence.js +296 -0
  62. package/dist/core/events/persistence.js.map +1 -0
  63. package/dist/core/events/publishers.d.ts +81 -0
  64. package/dist/core/events/publishers.d.ts.map +1 -0
  65. package/dist/core/events/publishers.js +272 -0
  66. package/dist/core/events/publishers.js.map +1 -0
  67. package/dist/core/events/subscribers.d.ts +45 -0
  68. package/dist/core/events/subscribers.d.ts.map +1 -0
  69. package/dist/core/events/subscribers.js +288 -0
  70. package/dist/core/events/subscribers.js.map +1 -0
  71. package/dist/core/events/tool-bridge-logging.d.ts +28 -0
  72. package/dist/core/events/tool-bridge-logging.d.ts.map +1 -0
  73. package/dist/core/events/tool-bridge-logging.js +94 -0
  74. package/dist/core/events/tool-bridge-logging.js.map +1 -0
  75. package/dist/core/events-metadata.d.ts +72 -0
  76. package/dist/core/events-metadata.d.ts.map +1 -0
  77. package/dist/core/events-metadata.js +167 -0
  78. package/dist/core/events-metadata.js.map +1 -0
  79. package/dist/core/events.d.ts +186 -0
  80. package/dist/core/events.d.ts.map +1 -0
  81. package/dist/core/events.js +1248 -0
  82. package/dist/core/events.js.map +1 -0
  83. package/dist/core/export.d.ts +106 -0
  84. package/dist/core/export.d.ts.map +1 -0
  85. package/dist/core/export.js +705 -0
  86. package/dist/core/export.js.map +1 -0
  87. package/dist/core/file-tools.d.ts +114 -0
  88. package/dist/core/file-tools.d.ts.map +1 -0
  89. package/dist/core/file-tools.js +370 -0
  90. package/dist/core/file-tools.js.map +1 -0
  91. package/dist/core/google-direct.d.ts +58 -0
  92. package/dist/core/google-direct.d.ts.map +1 -0
  93. package/dist/core/google-direct.js +298 -0
  94. package/dist/core/google-direct.js.map +1 -0
  95. package/dist/core/hitl.d.ts +54 -0
  96. package/dist/core/hitl.d.ts.map +1 -0
  97. package/dist/core/hitl.js +153 -0
  98. package/dist/core/hitl.js.map +1 -0
  99. package/dist/core/index.d.ts +59 -0
  100. package/dist/core/index.d.ts.map +1 -0
  101. package/dist/core/index.js +70 -0
  102. package/dist/core/index.js.map +1 -0
  103. package/dist/core/llm-config.d.ts +128 -0
  104. package/dist/core/llm-config.d.ts.map +1 -0
  105. package/dist/core/llm-config.js +164 -0
  106. package/dist/core/llm-config.js.map +1 -0
  107. package/dist/core/llm-manager.d.ts +163 -0
  108. package/dist/core/llm-manager.d.ts.map +1 -0
  109. package/dist/core/llm-manager.js +669 -0
  110. package/dist/core/llm-manager.js.map +1 -0
  111. package/dist/core/load-skill-tool.d.ts +55 -0
  112. package/dist/core/load-skill-tool.d.ts.map +1 -0
  113. package/dist/core/load-skill-tool.js +468 -0
  114. package/dist/core/load-skill-tool.js.map +1 -0
  115. package/dist/core/logger.d.ts +88 -0
  116. package/dist/core/logger.d.ts.map +1 -0
  117. package/dist/core/logger.js +358 -0
  118. package/dist/core/logger.js.map +1 -0
  119. package/dist/core/managers.d.ts +131 -0
  120. package/dist/core/managers.d.ts.map +1 -0
  121. package/dist/core/managers.js +1223 -0
  122. package/dist/core/managers.js.map +1 -0
  123. package/dist/core/mcp-server-registry.d.ts +304 -0
  124. package/dist/core/mcp-server-registry.d.ts.map +1 -0
  125. package/dist/core/mcp-server-registry.js +1769 -0
  126. package/dist/core/mcp-server-registry.js.map +1 -0
  127. package/dist/core/mcp-tools.d.ts +56 -0
  128. package/dist/core/mcp-tools.d.ts.map +1 -0
  129. package/dist/core/mcp-tools.js +186 -0
  130. package/dist/core/mcp-tools.js.map +1 -0
  131. package/dist/core/message-prep.d.ts +81 -0
  132. package/dist/core/message-prep.d.ts.map +1 -0
  133. package/dist/core/message-prep.js +223 -0
  134. package/dist/core/message-prep.js.map +1 -0
  135. package/dist/core/message-processing-control.d.ts +54 -0
  136. package/dist/core/message-processing-control.d.ts.map +1 -0
  137. package/dist/core/message-processing-control.js +139 -0
  138. package/dist/core/message-processing-control.js.map +1 -0
  139. package/dist/core/openai-direct.d.ts +80 -0
  140. package/dist/core/openai-direct.d.ts.map +1 -0
  141. package/dist/core/openai-direct.js +374 -0
  142. package/dist/core/openai-direct.js.map +1 -0
  143. package/dist/core/shell-cmd-tool.d.ts +235 -0
  144. package/dist/core/shell-cmd-tool.d.ts.map +1 -0
  145. package/dist/core/shell-cmd-tool.js +1157 -0
  146. package/dist/core/shell-cmd-tool.js.map +1 -0
  147. package/dist/core/shell-process-registry.d.ts +88 -0
  148. package/dist/core/shell-process-registry.d.ts.map +1 -0
  149. package/dist/core/shell-process-registry.js +309 -0
  150. package/dist/core/shell-process-registry.js.map +1 -0
  151. package/dist/core/skill-registry.d.ts +75 -0
  152. package/dist/core/skill-registry.d.ts.map +1 -0
  153. package/dist/core/skill-registry.js +369 -0
  154. package/dist/core/skill-registry.js.map +1 -0
  155. package/dist/core/skill-script-runner.d.ts +89 -0
  156. package/dist/core/skill-script-runner.d.ts.map +1 -0
  157. package/dist/core/skill-script-runner.js +274 -0
  158. package/dist/core/skill-script-runner.js.map +1 -0
  159. package/dist/core/skill-selector.d.ts +65 -0
  160. package/dist/core/skill-selector.d.ts.map +1 -0
  161. package/dist/core/skill-selector.js +190 -0
  162. package/dist/core/skill-selector.js.map +1 -0
  163. package/dist/core/skill-settings.d.ts +20 -0
  164. package/dist/core/skill-settings.d.ts.map +1 -0
  165. package/dist/core/skill-settings.js +40 -0
  166. package/dist/core/skill-settings.js.map +1 -0
  167. package/dist/core/storage/agent-storage.d.ts +134 -0
  168. package/dist/core/storage/agent-storage.d.ts.map +1 -0
  169. package/dist/core/storage/agent-storage.js +498 -0
  170. package/dist/core/storage/agent-storage.js.map +1 -0
  171. package/dist/core/storage/eventStorage/fileEventStorage.d.ts +100 -0
  172. package/dist/core/storage/eventStorage/fileEventStorage.d.ts.map +1 -0
  173. package/dist/core/storage/eventStorage/fileEventStorage.js +494 -0
  174. package/dist/core/storage/eventStorage/fileEventStorage.js.map +1 -0
  175. package/dist/core/storage/eventStorage/index.d.ts +31 -0
  176. package/dist/core/storage/eventStorage/index.d.ts.map +1 -0
  177. package/dist/core/storage/eventStorage/index.js +31 -0
  178. package/dist/core/storage/eventStorage/index.js.map +1 -0
  179. package/dist/core/storage/eventStorage/memoryEventStorage.d.ts +87 -0
  180. package/dist/core/storage/eventStorage/memoryEventStorage.d.ts.map +1 -0
  181. package/dist/core/storage/eventStorage/memoryEventStorage.js +244 -0
  182. package/dist/core/storage/eventStorage/memoryEventStorage.js.map +1 -0
  183. package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts +45 -0
  184. package/dist/core/storage/eventStorage/sqliteEventStorage.d.ts.map +1 -0
  185. package/dist/core/storage/eventStorage/sqliteEventStorage.js +301 -0
  186. package/dist/core/storage/eventStorage/sqliteEventStorage.js.map +1 -0
  187. package/dist/core/storage/eventStorage/types.d.ts +142 -0
  188. package/dist/core/storage/eventStorage/types.d.ts.map +1 -0
  189. package/dist/core/storage/eventStorage/types.js +43 -0
  190. package/dist/core/storage/eventStorage/types.js.map +1 -0
  191. package/dist/core/storage/eventStorage/validation.d.ts +30 -0
  192. package/dist/core/storage/eventStorage/validation.d.ts.map +1 -0
  193. package/dist/core/storage/eventStorage/validation.js +68 -0
  194. package/dist/core/storage/eventStorage/validation.js.map +1 -0
  195. package/dist/core/storage/legacy-migrations.d.ts +45 -0
  196. package/dist/core/storage/legacy-migrations.d.ts.map +1 -0
  197. package/dist/core/storage/legacy-migrations.js +295 -0
  198. package/dist/core/storage/legacy-migrations.js.map +1 -0
  199. package/dist/core/storage/memory-storage.d.ts +105 -0
  200. package/dist/core/storage/memory-storage.d.ts.map +1 -0
  201. package/dist/core/storage/memory-storage.js +415 -0
  202. package/dist/core/storage/memory-storage.js.map +1 -0
  203. package/dist/core/storage/migration-runner.d.ts +96 -0
  204. package/dist/core/storage/migration-runner.d.ts.map +1 -0
  205. package/dist/core/storage/migration-runner.js +306 -0
  206. package/dist/core/storage/migration-runner.js.map +1 -0
  207. package/dist/core/storage/queue-storage.d.ts +147 -0
  208. package/dist/core/storage/queue-storage.d.ts.map +1 -0
  209. package/dist/core/storage/queue-storage.js +290 -0
  210. package/dist/core/storage/queue-storage.js.map +1 -0
  211. package/dist/core/storage/skill-storage.d.ts +136 -0
  212. package/dist/core/storage/skill-storage.d.ts.map +1 -0
  213. package/dist/core/storage/skill-storage.js +474 -0
  214. package/dist/core/storage/skill-storage.js.map +1 -0
  215. package/dist/core/storage/sqlite-schema.d.ts +95 -0
  216. package/dist/core/storage/sqlite-schema.d.ts.map +1 -0
  217. package/dist/core/storage/sqlite-schema.js +156 -0
  218. package/dist/core/storage/sqlite-schema.js.map +1 -0
  219. package/dist/core/storage/sqlite-storage.d.ts +146 -0
  220. package/dist/core/storage/sqlite-storage.d.ts.map +1 -0
  221. package/dist/core/storage/sqlite-storage.js +709 -0
  222. package/dist/core/storage/sqlite-storage.js.map +1 -0
  223. package/dist/core/storage/storage-factory.d.ts +61 -0
  224. package/dist/core/storage/storage-factory.d.ts.map +1 -0
  225. package/dist/core/storage/storage-factory.js +794 -0
  226. package/dist/core/storage/storage-factory.js.map +1 -0
  227. package/dist/core/storage/validation.d.ts +36 -0
  228. package/dist/core/storage/validation.d.ts.map +1 -0
  229. package/dist/core/storage/validation.js +79 -0
  230. package/dist/core/storage/validation.js.map +1 -0
  231. package/dist/core/storage/world-storage.d.ts +114 -0
  232. package/dist/core/storage/world-storage.d.ts.map +1 -0
  233. package/dist/core/storage/world-storage.js +378 -0
  234. package/dist/core/storage/world-storage.js.map +1 -0
  235. package/dist/core/subscription.d.ts +43 -0
  236. package/dist/core/subscription.d.ts.map +1 -0
  237. package/dist/core/subscription.js +227 -0
  238. package/dist/core/subscription.js.map +1 -0
  239. package/dist/core/tool-utils.d.ts +80 -0
  240. package/dist/core/tool-utils.d.ts.map +1 -0
  241. package/dist/core/tool-utils.js +273 -0
  242. package/dist/core/tool-utils.js.map +1 -0
  243. package/dist/core/types.d.ts +595 -0
  244. package/dist/core/types.d.ts.map +1 -0
  245. package/dist/core/types.js +158 -0
  246. package/dist/core/types.js.map +1 -0
  247. package/dist/core/utils.d.ts +138 -0
  248. package/dist/core/utils.d.ts.map +1 -0
  249. package/dist/core/utils.js +478 -0
  250. package/dist/core/utils.js.map +1 -0
  251. package/dist/core/world-class.d.ts +43 -0
  252. package/dist/core/world-class.d.ts.map +1 -0
  253. package/dist/core/world-class.js +90 -0
  254. package/dist/core/world-class.js.map +1 -0
  255. package/dist/index.d.ts +18 -0
  256. package/dist/public/assets/agent-sprites-DJFgj-zP.png +0 -0
  257. package/dist/public/assets/border-KHK37r8y.svg +83 -0
  258. package/dist/public/assets/index-C9kPXL6G.css +1 -0
  259. package/dist/public/assets/index-DOQEHGWt.js +96 -0
  260. package/dist/public/index.html +21 -0
  261. package/dist/server/api.d.ts +2 -0
  262. package/dist/server/api.js +1124 -0
  263. package/dist/server/index.d.ts +29 -0
  264. package/dist/server/sse-handler.d.ts +62 -0
  265. package/dist/server/sse-handler.js +234 -0
  266. package/package.json +15 -3
  267. package/scripts/launch-electron.js +0 -58
@@ -0,0 +1,290 @@
1
+ /**
2
+ * Queue Storage - In-Memory Message Queue Implementation
3
+ *
4
+ * Purpose: Simple in-memory message queue for async processing
5
+ *
6
+ * Features:
7
+ * - FIFO per-world message queuing
8
+ * - Per-world locking (one message processing at a time)
9
+ * - Automatic retry on failure
10
+ * - Basic statistics tracking
11
+ *
12
+ * Implementation:
13
+ * - In-memory queues with Map-based storage
14
+ * - Simple locking via processing state tracking
15
+ * - Auto-retry when marking failed (up to maxRetries)
16
+ *
17
+ * Queue Message Lifecycle:
18
+ * 1. pending: Message enqueued, waiting in queue
19
+ * 2. processing: Message dequeued and being processed
20
+ * 3. completed: Processing finished successfully
21
+ * 4. failed: Processing failed after max retries
22
+ *
23
+ * Note: Data is NOT persisted - queue cleared on restart
24
+ * For production with persistence, use external MQ system (Redis, RabbitMQ, etc)
25
+ *
26
+ * Changes:
27
+ * - 2025-11-01: Replace SQL implementation with in-memory version
28
+ * - Reduced from 716 lines to 453 lines (242 lines of actual code)
29
+ * - Removed: SQL transactions, heartbeat monitoring, stuck detection, priority ordering
30
+ * - Kept: Core queue operations, per-world locking, auto-retry, statistics
31
+ * - All 31 unit tests pass with in-memory implementation
32
+ */
33
+ /**
34
+ * Generate UUID v4
35
+ */
36
+ function generateUUID() {
37
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
38
+ const r = (Math.random() * 16) | 0;
39
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
40
+ return v.toString(16);
41
+ });
42
+ }
43
+ /**
44
+ * In-Memory Queue Storage Implementation
45
+ */
46
+ export function createMemoryQueueStorage() {
47
+ // Per-world pending message queues
48
+ const queues = new Map();
49
+ // Currently processing messages (one per world)
50
+ const processing = new Map();
51
+ // Completed/failed messages (for stats)
52
+ const completed = new Map();
53
+ const failed = new Map();
54
+ /**
55
+ * Enqueue a message for processing
56
+ */
57
+ async function enqueue(message) {
58
+ const queueMessage = {
59
+ id: generateUUID(),
60
+ worldId: message.worldId,
61
+ messageId: message.messageId,
62
+ content: message.content,
63
+ sender: message.sender,
64
+ chatId: message.chatId ?? null,
65
+ status: 'pending',
66
+ priority: message.priority,
67
+ createdAt: new Date(),
68
+ retryCount: 0,
69
+ maxRetries: message.maxRetries,
70
+ timeoutSeconds: message.timeoutSeconds
71
+ };
72
+ const queue = queues.get(message.worldId) || [];
73
+ queue.push(queueMessage);
74
+ queues.set(message.worldId, queue);
75
+ return queueMessage;
76
+ }
77
+ /**
78
+ * Dequeue the next pending message for a specific world
79
+ * Returns null if world is already processing or no pending messages
80
+ */
81
+ async function dequeue(worldId) {
82
+ // Check if world is already processing
83
+ if (processing.has(worldId)) {
84
+ return null;
85
+ }
86
+ // Get queue for this world
87
+ const queue = queues.get(worldId);
88
+ if (!queue || queue.length === 0) {
89
+ return null;
90
+ }
91
+ // Dequeue first message (FIFO)
92
+ const message = queue.shift();
93
+ message.status = 'processing';
94
+ message.processedAt = new Date();
95
+ message.heartbeatAt = new Date();
96
+ // Mark as processing
97
+ processing.set(worldId, message);
98
+ // Update queue
99
+ if (queue.length === 0) {
100
+ queues.delete(worldId);
101
+ }
102
+ return message;
103
+ }
104
+ /**
105
+ * Update heartbeat timestamp (no-op for simple implementation)
106
+ */
107
+ async function updateHeartbeat(messageId) {
108
+ // Find processing message and update heartbeat
109
+ for (const [, message] of processing) {
110
+ if (message.messageId === messageId) {
111
+ message.heartbeatAt = new Date();
112
+ return;
113
+ }
114
+ }
115
+ }
116
+ /**
117
+ * Mark a message as completed successfully
118
+ */
119
+ async function markCompleted(messageId) {
120
+ // Find and remove from processing
121
+ for (const [worldId, message] of processing) {
122
+ if (message.id === messageId) {
123
+ message.status = 'completed';
124
+ message.completedAt = new Date();
125
+ processing.delete(worldId);
126
+ completed.set(message.id, message);
127
+ return;
128
+ }
129
+ }
130
+ } /**
131
+ * Mark a message as failed with error details
132
+ * Automatically retries if retryCount < maxRetries
133
+ */
134
+ async function markFailed(messageId, error) {
135
+ // Find message in processing
136
+ for (const [worldId, message] of processing) {
137
+ if (message.id === messageId) {
138
+ message.error = error;
139
+ message.retryCount++;
140
+ if (message.retryCount < message.maxRetries) {
141
+ // Retry: reset to pending and re-enqueue
142
+ message.status = 'pending';
143
+ message.processedAt = undefined;
144
+ message.heartbeatAt = undefined;
145
+ processing.delete(worldId);
146
+ const queue = queues.get(worldId) || [];
147
+ queue.push(message);
148
+ queues.set(worldId, queue);
149
+ }
150
+ else {
151
+ // Max retries reached: mark as failed
152
+ message.status = 'failed';
153
+ message.completedAt = new Date();
154
+ processing.delete(worldId);
155
+ failed.set(message.id, message);
156
+ }
157
+ return;
158
+ }
159
+ }
160
+ }
161
+ /**
162
+ * Retry a failed message (reset to pending)
163
+ */
164
+ async function retryMessage(messageId) {
165
+ // Find in failed messages
166
+ for (const [id, message] of failed) {
167
+ if (message.messageId === messageId && message.retryCount < message.maxRetries) {
168
+ message.status = 'pending';
169
+ message.retryCount++;
170
+ message.processedAt = undefined;
171
+ message.heartbeatAt = undefined;
172
+ message.completedAt = undefined;
173
+ failed.delete(id);
174
+ const queue = queues.get(message.worldId) || [];
175
+ queue.push(message);
176
+ queues.set(message.worldId, queue);
177
+ return true;
178
+ }
179
+ }
180
+ return false;
181
+ }
182
+ /**
183
+ * Get queue depth for a world
184
+ */
185
+ async function getQueueDepth(worldId) {
186
+ const queue = queues.get(worldId);
187
+ return queue ? queue.length : 0;
188
+ }
189
+ /**
190
+ * Get queue statistics
191
+ */
192
+ async function getQueueStats(worldId) {
193
+ const worldIds = worldId ? [worldId] : [
194
+ ...new Set([
195
+ ...queues.keys(),
196
+ ...Array.from(processing.values()).map(m => m.worldId),
197
+ ...Array.from(completed.values()).map(m => m.worldId),
198
+ ...Array.from(failed.values()).map(m => m.worldId)
199
+ ])
200
+ ];
201
+ return worldIds.map(wid => {
202
+ const queue = queues.get(wid) || [];
203
+ const proc = Array.from(processing.values()).filter(m => m.worldId === wid);
204
+ const comp = Array.from(completed.values()).filter(m => m.worldId === wid);
205
+ const fail = Array.from(failed.values()).filter(m => m.worldId === wid);
206
+ const oldestPending = queue.length > 0 ? queue[0].createdAt : undefined;
207
+ const processingTimes = comp
208
+ .filter(m => m.processedAt && m.completedAt)
209
+ .map(m => m.completedAt.getTime() - m.processedAt.getTime());
210
+ const avgProcessingTime = processingTimes.length > 0
211
+ ? processingTimes.reduce((a, b) => a + b, 0) / processingTimes.length
212
+ : undefined;
213
+ return {
214
+ worldId: wid,
215
+ pending: queue.length,
216
+ processing: proc.length,
217
+ completed: comp.length,
218
+ failed: fail.length,
219
+ oldestPending,
220
+ avgProcessingTime
221
+ };
222
+ });
223
+ }
224
+ /**
225
+ * Detect stuck messages (not implemented for simple version)
226
+ */
227
+ async function detectStuckMessages() {
228
+ return 0;
229
+ }
230
+ /**
231
+ * Cleanup old messages
232
+ */
233
+ async function cleanup(olderThan) {
234
+ let count = 0;
235
+ const threshold = olderThan.getTime();
236
+ // Cleanup completed messages
237
+ for (const [id, message] of completed) {
238
+ if (message.completedAt && message.completedAt.getTime() < threshold) {
239
+ completed.delete(id);
240
+ count++;
241
+ }
242
+ }
243
+ // Cleanup failed messages
244
+ for (const [id, message] of failed) {
245
+ if (message.completedAt && message.completedAt.getTime() < threshold) {
246
+ failed.delete(id);
247
+ count++;
248
+ }
249
+ }
250
+ return count;
251
+ }
252
+ /**
253
+ * Get message by ID
254
+ */
255
+ async function getMessage(messageId) {
256
+ // Check all storage locations
257
+ for (const queue of queues.values()) {
258
+ const msg = queue.find(m => m.messageId === messageId);
259
+ if (msg)
260
+ return msg;
261
+ }
262
+ for (const msg of processing.values()) {
263
+ if (msg.messageId === messageId)
264
+ return msg;
265
+ }
266
+ for (const msg of completed.values()) {
267
+ if (msg.messageId === messageId)
268
+ return msg;
269
+ }
270
+ for (const msg of failed.values()) {
271
+ if (msg.messageId === messageId)
272
+ return msg;
273
+ }
274
+ return null;
275
+ }
276
+ return {
277
+ enqueue,
278
+ dequeue,
279
+ updateHeartbeat,
280
+ markCompleted,
281
+ markFailed,
282
+ retryMessage,
283
+ getQueueDepth,
284
+ getQueueStats,
285
+ detectStuckMessages,
286
+ cleanup,
287
+ getMessage
288
+ };
289
+ }
290
+ //# sourceMappingURL=queue-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-storage.js","sourceRoot":"","sources":["../../../core/storage/queue-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Skill Storage Module - File I/O Operations for World-Level Agent Skills
3
+ *
4
+ * Purpose:
5
+ * File-based storage for world-scoped skills following the Anthropic Agent Skills Protocol.
6
+ * Each skill is a directory under `{world-dir}/skills/{skill-name}/` containing a `SKILL.md`
7
+ * file with YAML frontmatter metadata and markdown body instructions.
8
+ *
9
+ * Features:
10
+ * - SKILL.md parsing with YAML frontmatter extraction and validation
11
+ * - Skill CRUD operations (import, read, list, delete, export)
12
+ * - `.meta.json` write-time cache for fast metadata listing
13
+ * - Cache fallback to SKILL.md parsing when cache is missing or corrupt
14
+ * - Path traversal protection using resolve + startsWith guards
15
+ * - Duplicate skill rejection via `skillExists()` check before import
16
+ * - Content size and line-count validation with warnings
17
+ *
18
+ * Notes:
19
+ * - Follows `agent-storage.ts` pattern: standalone module with explicit `rootPath`
20
+ * - Uses `fs/promises` for all I/O, pure functions, no classes
21
+ * - Skills are NOT tool calls — they follow the Anthropic Agent Skills Protocol
22
+ * as a content/instruction protocol (app reads SKILL.md, injects into user message)
23
+ * - Skill metadata limits: name max 64 chars (kebab-case), description max 256 chars
24
+ *
25
+ * Recent Changes:
26
+ * - 2026-02-09: Initial implementation for world-level skills system
27
+ */
28
+ import type { SkillMetadata, SkillData, WorldSkill, SkillValidationResult } from '../types.js';
29
+ /**
30
+ * Get the skills root directory for a world.
31
+ */
32
+ export declare function getSkillsDir(rootPath: string, worldId: string): string;
33
+ /**
34
+ * Get the directory path for a specific skill.
35
+ */
36
+ export declare function getSkillDir(rootPath: string, worldId: string, skillName: string): string;
37
+ /**
38
+ * Get the SKILL.md file path for a specific skill.
39
+ */
40
+ export declare function getSkillFilePath(rootPath: string, worldId: string, skillName: string): string;
41
+ /**
42
+ * Ensure the skills root directory exists.
43
+ */
44
+ export declare function ensureSkillsDirectory(rootPath: string, worldId: string): Promise<void>;
45
+ /**
46
+ * Ensure a specific skill directory exists.
47
+ */
48
+ export declare function ensureSkillDirectory(rootPath: string, worldId: string, skillName: string): Promise<void>;
49
+ /**
50
+ * Parse SKILL.md content into metadata (YAML frontmatter) and body content.
51
+ * Supports standard YAML frontmatter delimited by `---` lines.
52
+ *
53
+ * @param raw - Raw file content of SKILL.md
54
+ * @returns Parsed SkillData with metadata and content
55
+ * @throws Error if frontmatter is missing or malformed
56
+ */
57
+ export declare function parseSkillFile(raw: string): SkillData;
58
+ /**
59
+ * Extract just the metadata from a SKILL.md file (without body content).
60
+ */
61
+ export declare function extractSkillMetadata(raw: string): SkillMetadata;
62
+ /**
63
+ * Validate skill metadata against protocol constraints.
64
+ */
65
+ export declare function validateSkillMetadata(metadata: SkillMetadata): SkillValidationResult;
66
+ /**
67
+ * Validate skill content (SKILL.md body) for size and line count.
68
+ */
69
+ export declare function validateSkillContent(content: string): SkillValidationResult;
70
+ /**
71
+ * Check if a skill exists in a world.
72
+ */
73
+ export declare function skillExists(rootPath: string, worldId: string, skillName: string): Promise<boolean>;
74
+ /**
75
+ * Save a SKILL.md file for a skill.
76
+ */
77
+ export declare function saveSkillFile(rootPath: string, worldId: string, skillName: string, content: string): Promise<void>;
78
+ /**
79
+ * Load a SKILL.md file content for a skill.
80
+ */
81
+ export declare function loadSkillFile(rootPath: string, worldId: string, skillName: string): Promise<string>;
82
+ /**
83
+ * Delete a skill directory and all its contents.
84
+ */
85
+ export declare function deleteSkillFolder(rootPath: string, worldId: string, skillName: string): Promise<boolean>;
86
+ /**
87
+ * List all skill folder names in a world's skills directory.
88
+ */
89
+ export declare function listSkillFolders(rootPath: string, worldId: string): Promise<string[]>;
90
+ /**
91
+ * Get a full WorldSkill object for a specific skill.
92
+ */
93
+ export declare function getWorldSkill(rootPath: string, worldId: string, skillName: string): Promise<WorldSkill | null>;
94
+ /**
95
+ * Get just the metadata for a specific skill.
96
+ */
97
+ export declare function getWorldSkillMetadata(rootPath: string, worldId: string, skillName: string): Promise<SkillMetadata | null>;
98
+ /**
99
+ * List all WorldSkill objects in a world.
100
+ */
101
+ export declare function listWorldSkills(rootPath: string, worldId: string): Promise<WorldSkill[]>;
102
+ /**
103
+ * List skill metadata for all skills in a world.
104
+ * Uses `.meta.json` cache for fast listing; falls back to SKILL.md parsing.
105
+ */
106
+ export declare function listWorldSkillsMetadata(rootPath: string, worldId: string): Promise<SkillMetadata[]>;
107
+ /**
108
+ * Import a skill into a world from raw SKILL.md content.
109
+ * Validates metadata, rejects duplicates, and regenerates cache.
110
+ *
111
+ * @throws {DuplicateSkillError} if skill with same name already exists
112
+ * @throws {Error} if content is invalid
113
+ */
114
+ export declare function importWorldSkill(rootPath: string, worldId: string, skillContent: string): Promise<WorldSkill>;
115
+ /**
116
+ * Export a skill's SKILL.md content as a raw string.
117
+ */
118
+ export declare function exportWorldSkill(rootPath: string, worldId: string, skillName: string): Promise<string | null>;
119
+ /**
120
+ * Delete a skill from a world and regenerate the metadata cache.
121
+ */
122
+ export declare function deleteWorldSkill(rootPath: string, worldId: string, skillName: string): Promise<boolean>;
123
+ /**
124
+ * Get total size (in bytes) of all SKILL.md files in a world.
125
+ */
126
+ export declare function getWorldSkillsSize(rootPath: string, worldId: string): Promise<number>;
127
+ /**
128
+ * Regenerate the `.meta.json` metadata cache from all SKILL.md files.
129
+ */
130
+ export declare function regenerateMetaCache(rootPath: string, worldId: string): Promise<void>;
131
+ /**
132
+ * Load the `.meta.json` metadata cache.
133
+ * Returns null if cache is missing or corrupt.
134
+ */
135
+ export declare function loadMetaCache(rootPath: string, worldId: string): Promise<SkillMetadata[] | null>;
136
+ //# sourceMappingURL=skill-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-storage.d.ts","sourceRoot":"","sources":["../../../core/storage/skill-storage.ts"],"names":[],"mappings":"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"}