claude-flow-novice 1.6.1 → 1.6.2

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 (244) hide show
  1. package/.claude/agents/cfn-loop/product-owner.md +54 -4
  2. package/.claude/commands/cfn-claude-sync.md +303 -0
  3. package/.claude/commands/cfn-loop-epic.md +290 -0
  4. package/.claude/commands/cfn-loop-single.md +168 -0
  5. package/.claude/commands/cfn-loop-sprints.md +384 -0
  6. package/.claude/commands/cfn-loop.md +180 -0
  7. package/.claude/commands/metrics-summary.md +58 -0
  8. package/.claude/commands/parse-epic.md +357 -0
  9. package/.claude/settings.json +4 -4
  10. package/.claude/settings.local.json +9 -2
  11. package/.claude-flow-novice/.claude/agents/cfn-loop/product-owner.md +792 -0
  12. package/.claude-flow-novice/dist/mcp/server.js +21 -2
  13. package/.claude-flow-novice/dist/src/api/claude-client.js +138 -3
  14. package/.claude-flow-novice/dist/src/api/claude-client.js.map +1 -1
  15. package/.claude-flow-novice/dist/src/cfn-loop/phase-orchestrator-example.js +1 -1
  16. package/.claude-flow-novice/dist/src/cfn-loop/scope-control.js +247 -0
  17. package/.claude-flow-novice/dist/src/cfn-loop/scope-control.js.map +1 -0
  18. package/.claude-flow-novice/dist/src/cli/commands/swarm.js +32 -15
  19. package/.claude-flow-novice/dist/src/cli/commands/swarm.js.map +1 -1
  20. package/.claude-flow-novice/dist/src/cli/commands/transparency.js +455 -0
  21. package/.claude-flow-novice/dist/src/cli/commands/transparency.js.map +1 -0
  22. package/.claude-flow-novice/dist/src/cli/simple-commands/init/templates/CLAUDE.md +129 -13
  23. package/.claude-flow-novice/dist/src/components/visualizations/index.js +9 -0
  24. package/.claude-flow-novice/dist/src/components/visualizations/index.js.map +1 -0
  25. package/.claude-flow-novice/dist/src/coordination/adapters/v1-coordinator-adapter.js +462 -0
  26. package/.claude-flow-novice/dist/src/coordination/adapters/v1-coordinator-adapter.js.map +1 -0
  27. package/.claude-flow-novice/dist/src/coordination/config-translator.js +248 -0
  28. package/.claude-flow-novice/dist/src/coordination/config-translator.js.map +1 -0
  29. package/.claude-flow-novice/dist/src/coordination/coordination-toggle.js +287 -0
  30. package/.claude-flow-novice/dist/src/coordination/coordination-toggle.js.map +1 -0
  31. package/.claude-flow-novice/dist/src/coordination/distributed-consensus.js +68 -9
  32. package/.claude-flow-novice/dist/src/coordination/distributed-consensus.js.map +1 -1
  33. package/.claude-flow-novice/dist/src/coordination/feature-flags.js +166 -0
  34. package/.claude-flow-novice/dist/src/coordination/feature-flags.js.map +1 -0
  35. package/.claude-flow-novice/dist/src/coordination/queen-agent.js +18 -4
  36. package/.claude-flow-novice/dist/src/coordination/queen-agent.js.map +1 -1
  37. package/.claude-flow-novice/dist/src/coordination/role-assignment.js +6 -110
  38. package/.claude-flow-novice/dist/src/coordination/role-assignment.js.map +1 -1
  39. package/.claude-flow-novice/dist/src/coordination/v2/cache/artifact-cache-optimizer.js +632 -0
  40. package/.claude-flow-novice/dist/src/coordination/v2/cache/artifact-cache-optimizer.js.map +1 -0
  41. package/.claude-flow-novice/dist/src/coordination/v2/cache/index.js +11 -0
  42. package/.claude-flow-novice/dist/src/coordination/v2/cache/index.js.map +1 -0
  43. package/.claude-flow-novice/dist/src/coordination/v2/checkpoints/checkpoint-compressor.js +318 -0
  44. package/.claude-flow-novice/dist/src/coordination/v2/checkpoints/checkpoint-compressor.js.map +1 -0
  45. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.example.js +364 -0
  46. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.example.js.map +1 -0
  47. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.js +492 -0
  48. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.js.map +1 -0
  49. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/hierarchical-coordinator.js +786 -0
  50. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/hierarchical-coordinator.js.map +1 -0
  51. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/index.js +16 -0
  52. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/index.js.map +1 -0
  53. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/parent-child-manager.js +342 -0
  54. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/parent-child-manager.js.map +1 -0
  55. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/swarm-coordinator-v2.js +601 -0
  56. package/.claude-flow-novice/dist/src/coordination/v2/coordinators/swarm-coordinator-v2.js.map +1 -0
  57. package/.claude-flow-novice/dist/src/coordination/v2/core/help-request-metrics.js +211 -0
  58. package/.claude-flow-novice/dist/src/coordination/v2/core/help-request-metrics.js.map +1 -0
  59. package/.claude-flow-novice/dist/src/coordination/v2/core/index.js +1 -0
  60. package/.claude-flow-novice/dist/src/coordination/v2/core/index.js.map +1 -1
  61. package/.claude-flow-novice/dist/src/coordination/v2/core/message-broker.js +365 -6
  62. package/.claude-flow-novice/dist/src/coordination/v2/core/message-broker.js.map +1 -1
  63. package/.claude-flow-novice/dist/src/coordination/v2/core/resource-manager-safe.js +478 -0
  64. package/.claude-flow-novice/dist/src/coordination/v2/core/resource-manager-safe.js.map +1 -0
  65. package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine-config.js +5 -2
  66. package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine-config.js.map +1 -1
  67. package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine.js +189 -0
  68. package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine.js.map +1 -1
  69. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/deadlock-detector.js +424 -0
  70. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/deadlock-detector.js.map +1 -0
  71. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/index.js +9 -0
  72. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/index.js.map +1 -0
  73. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/resource-manager.js +669 -0
  74. package/.claude-flow-novice/dist/src/coordination/v2/deadlock/resource-manager.js.map +1 -0
  75. package/.claude-flow-novice/dist/src/coordination/v2/dependency/artifact-storage.js +451 -0
  76. package/.claude-flow-novice/dist/src/coordination/v2/dependency/artifact-storage.js.map +1 -0
  77. package/.claude-flow-novice/dist/src/coordination/v2/dependency/cycle-detector.js +271 -0
  78. package/.claude-flow-novice/dist/src/coordination/v2/dependency/cycle-detector.js.map +1 -0
  79. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-graph.js +335 -0
  80. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-graph.js.map +1 -0
  81. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-manager.js +439 -0
  82. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-manager.js.map +1 -0
  83. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-request.js +92 -0
  84. package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-request.js.map +1 -0
  85. package/.claude-flow-novice/dist/src/coordination/v2/dependency/index.js +21 -0
  86. package/.claude-flow-novice/dist/src/coordination/v2/dependency/index.js.map +1 -0
  87. package/.claude-flow-novice/dist/src/coordination/v2/dependency/topological-sort.js +223 -0
  88. package/.claude-flow-novice/dist/src/coordination/v2/dependency/topological-sort.js.map +1 -0
  89. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-coordinator.js +436 -0
  90. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-coordinator.js.map +1 -0
  91. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-matcher.js +278 -0
  92. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-matcher.js.map +1 -0
  93. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request-handler.js +317 -0
  94. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request-handler.js.map +1 -0
  95. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request.js +273 -0
  96. package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request.js.map +1 -0
  97. package/.claude-flow-novice/dist/src/coordination/v2/help-system/index.js +15 -0
  98. package/.claude-flow-novice/dist/src/coordination/v2/help-system/index.js.map +1 -0
  99. package/.claude-flow-novice/dist/src/coordination/v2/help-system/waiting-agent-pool.js +512 -0
  100. package/.claude-flow-novice/dist/src/coordination/v2/help-system/waiting-agent-pool.js.map +1 -0
  101. package/.claude-flow-novice/dist/src/coordination/v2/index.js +6 -0
  102. package/.claude-flow-novice/dist/src/coordination/v2/index.js.map +1 -1
  103. package/.claude-flow-novice/dist/src/coordination/v2/integration/help-deadlock-integration.js +557 -0
  104. package/.claude-flow-novice/dist/src/coordination/v2/integration/help-deadlock-integration.js.map +1 -0
  105. package/.claude-flow-novice/dist/src/coordination/v2/integration/index.js +14 -0
  106. package/.claude-flow-novice/dist/src/coordination/v2/integration/index.js.map +1 -0
  107. package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.example.js +212 -0
  108. package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.example.js.map +1 -0
  109. package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.js +552 -0
  110. package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.js.map +1 -0
  111. package/.claude-flow-novice/dist/src/coordination/v2/memory/dependency-storage.js +367 -0
  112. package/.claude-flow-novice/dist/src/coordination/v2/memory/dependency-storage.js.map +1 -0
  113. package/.claude-flow-novice/dist/src/coordination/v2/memory/index.js +1 -0
  114. package/.claude-flow-novice/dist/src/coordination/v2/memory/index.js.map +1 -1
  115. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channel.js +371 -0
  116. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channel.js.map +1 -0
  117. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/dependency-channel.js +355 -0
  118. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/dependency-channel.js.map +1 -0
  119. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/help-channel.js +424 -0
  120. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/help-channel.js.map +1 -0
  121. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/index.js +16 -0
  122. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/index.js.map +1 -0
  123. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/state-channel.js +295 -0
  124. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/state-channel.js.map +1 -0
  125. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/task-channel.js +411 -0
  126. package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/task-channel.js.map +1 -0
  127. package/.claude-flow-novice/dist/src/coordination/v2/messaging/index.js +14 -0
  128. package/.claude-flow-novice/dist/src/coordination/v2/messaging/index.js.map +1 -0
  129. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-bus.js +387 -0
  130. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-bus.js.map +1 -0
  131. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-persistence.js +589 -0
  132. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-persistence.js.map +1 -0
  133. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-router.js +444 -0
  134. package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-router.js.map +1 -0
  135. package/.claude-flow-novice/dist/src/coordination/v2/sdk/checkpoint-manager.js +29 -8
  136. package/.claude-flow-novice/dist/src/coordination/v2/sdk/checkpoint-manager.js.map +1 -1
  137. package/.claude-flow-novice/dist/src/coordination/v2/sdk/help-coordinator.js +470 -0
  138. package/.claude-flow-novice/dist/src/coordination/v2/sdk/help-coordinator.js.map +1 -0
  139. package/.claude-flow-novice/dist/src/coordination/v2/sdk/hierarchical-background-integration.js +450 -0
  140. package/.claude-flow-novice/dist/src/coordination/v2/sdk/hierarchical-background-integration.js.map +1 -0
  141. package/.claude-flow-novice/dist/src/coordination/v2/sdk/index.js +5 -0
  142. package/.claude-flow-novice/dist/src/coordination/v2/sdk/index.js.map +1 -1
  143. package/.claude-flow-novice/dist/src/coordination/v2/sdk/multi-level-control.js +545 -0
  144. package/.claude-flow-novice/dist/src/coordination/v2/sdk/multi-level-control.js.map +1 -0
  145. package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-controller.js +44 -0
  146. package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-controller.js.map +1 -1
  147. package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-message-integration.js +415 -0
  148. package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-message-integration.js.map +1 -0
  149. package/.claude-flow-novice/dist/src/coordination/v2/sdk/session-pool-optimizer.js +615 -0
  150. package/.claude-flow-novice/dist/src/coordination/v2/sdk/session-pool-optimizer.js.map +1 -0
  151. package/.claude-flow-novice/dist/src/coordination/v2/security/payload-validator.js +259 -0
  152. package/.claude-flow-novice/dist/src/coordination/v2/security/payload-validator.js.map +1 -0
  153. package/.claude-flow-novice/dist/src/coordination/v2/transparency/index.js +17 -0
  154. package/.claude-flow-novice/dist/src/coordination/v2/transparency/index.js.map +1 -0
  155. package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-integration.js +357 -0
  156. package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-integration.js.map +1 -0
  157. package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-system.js +679 -0
  158. package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-system.js.map +1 -0
  159. package/.claude-flow-novice/dist/src/core/agent-manager.js +30 -0
  160. package/.claude-flow-novice/dist/src/core/agent-manager.js.map +1 -1
  161. package/.claude-flow-novice/dist/src/mcp/server.js +21 -2
  162. package/.claude-flow-novice/dist/src/mcp/server.js.map +1 -1
  163. package/.claude-flow-novice/dist/src/observability/metrics-counter.js +268 -0
  164. package/.claude-flow-novice/dist/src/observability/metrics-counter.js.map +1 -0
  165. package/.claude-flow-novice/dist/src/observability/metrics-storage.js +265 -0
  166. package/.claude-flow-novice/dist/src/observability/metrics-storage.js.map +1 -0
  167. package/.claude-flow-novice/dist/src/observability/telemetry.js +26 -0
  168. package/.claude-flow-novice/dist/src/observability/telemetry.js.map +1 -1
  169. package/.claude-flow-novice/dist/src/providers/tiered-router.js +64 -10
  170. package/.claude-flow-novice/dist/src/providers/tiered-router.js.map +1 -1
  171. package/.claude-flow-novice/dist/src/providers/zai-provider.js +196 -97
  172. package/.claude-flow-novice/dist/src/providers/zai-provider.js.map +1 -1
  173. package/.claude-flow-novice/dist/src/slash-commands/cfn-claude-sync.js +533 -0
  174. package/.claude-flow-novice/dist/src/slash-commands/index.js +5 -0
  175. package/.claude-flow-novice/dist/src/slash-commands/metrics-summary-class.js +74 -0
  176. package/.claude-flow-novice/dist/src/slash-commands/metrics-summary.js +335 -0
  177. package/.claude-flow-novice/dist/src/slash-commands/register-all-commands.js +12 -0
  178. package/.claude-flow-novice/dist/src/verification/checkpoint-compression-demo.js +96 -0
  179. package/.claude-flow-novice/dist/src/verification/checkpoint-compression-demo.js.map +1 -0
  180. package/.claude-flow-novice/dist/src/verification/checkpoint-compression.js +406 -0
  181. package/.claude-flow-novice/dist/src/verification/checkpoint-compression.js.map +1 -0
  182. package/.claude-flow-novice/dist/src/verification/checkpoint-manager.js +35 -5
  183. package/.claude-flow-novice/dist/src/verification/checkpoint-manager.js.map +1 -1
  184. package/.claude-flow-novice/dist/src/web/api/config/api-config.js +186 -0
  185. package/.claude-flow-novice/dist/src/web/api/config/api-config.js.map +1 -0
  186. package/.claude-flow-novice/dist/src/web/api/middleware/auth.js +205 -0
  187. package/.claude-flow-novice/dist/src/web/api/middleware/auth.js.map +1 -0
  188. package/.claude-flow-novice/dist/src/web/api/middleware/cache.js +262 -0
  189. package/.claude-flow-novice/dist/src/web/api/middleware/cache.js.map +1 -0
  190. package/.claude-flow-novice/dist/src/web/api/middleware/error-handler.js +250 -0
  191. package/.claude-flow-novice/dist/src/web/api/middleware/error-handler.js.map +1 -0
  192. package/.claude-flow-novice/dist/src/web/api/middleware/request-logger.js +217 -0
  193. package/.claude-flow-novice/dist/src/web/api/middleware/request-logger.js.map +1 -0
  194. package/.claude-flow-novice/dist/src/web/api/middleware/validation.js +325 -0
  195. package/.claude-flow-novice/dist/src/web/api/middleware/validation.js.map +1 -0
  196. package/.claude-flow-novice/dist/src/web/api/routes/events.js +465 -0
  197. package/.claude-flow-novice/dist/src/web/api/routes/events.js.map +1 -0
  198. package/.claude-flow-novice/dist/src/web/api/routes/hierarchy.js +302 -0
  199. package/.claude-flow-novice/dist/src/web/api/routes/hierarchy.js.map +1 -0
  200. package/.claude-flow-novice/dist/src/web/api/routes/index.js +14 -0
  201. package/.claude-flow-novice/dist/src/web/api/routes/index.js.map +1 -0
  202. package/.claude-flow-novice/dist/src/web/api/routes/metrics.js +561 -0
  203. package/.claude-flow-novice/dist/src/web/api/routes/metrics.js.map +1 -0
  204. package/.claude-flow-novice/dist/src/web/api/routes/status.js +450 -0
  205. package/.claude-flow-novice/dist/src/web/api/routes/status.js.map +1 -0
  206. package/.claude-flow-novice/dist/src/web/api/server.js +451 -0
  207. package/.claude-flow-novice/dist/src/web/api/server.js.map +1 -0
  208. package/.claude-flow-novice/dist/src/web/dashboard/hooks/useWebSocket.js +385 -0
  209. package/.claude-flow-novice/dist/src/web/dashboard/hooks/useWebSocket.js.map +1 -0
  210. package/.claude-flow-novice/dist/src/web/dashboard/index.js +87 -0
  211. package/.claude-flow-novice/dist/src/web/dashboard/index.js.map +1 -0
  212. package/.claude-flow-novice/dist/src/web/dashboard/types.js +6 -0
  213. package/.claude-flow-novice/dist/src/web/dashboard/types.js.map +1 -0
  214. package/.claude-flow-novice/metrics.db +0 -0
  215. package/.claude-flow-novice/metrics.db-shm +0 -0
  216. package/.claude-flow-novice/metrics.db-wal +0 -0
  217. package/CLAUDE.md +29 -0
  218. package/README.md +27 -0
  219. package/config/hooks/post-edit-pipeline.js +36 -2
  220. package/examples/metrics-counter-demo.ts +106 -0
  221. package/examples/persistent-metrics-demo.ts +83 -0
  222. package/examples/phase-5-multi-level-control.ts +282 -0
  223. package/examples/session-pool-optimizer-example.ts +311 -0
  224. package/package.json +15 -3
  225. package/scripts/check-routing-stats.cjs +122 -0
  226. package/scripts/pre-publish-validation.cjs +212 -0
  227. package/scripts/test-provider-routing.cjs +228 -0
  228. package/scripts/test-routing-telemetry.cjs +147 -0
  229. package/scripts/test-zai-10k.cjs +81 -0
  230. package/scripts/test-zai-api.cjs +191 -0
  231. package/scripts/test-zai-diagnostic.cjs +151 -0
  232. package/scripts/test-zai-final.cjs +128 -0
  233. package/scripts/test-zai-with-env.cjs +85 -0
  234. package/scripts/validate-coordination-cli.js +69 -0
  235. package/scripts/validate-coordination-toggle-integration.cjs +501 -0
  236. package/src/cli/simple-commands/init/templates/CLAUDE.md +29 -0
  237. package/src/observability/metrics-counter.ts +347 -0
  238. package/src/observability/metrics-storage.ts +356 -0
  239. package/src/observability/telemetry.ts +658 -0
  240. package/src/slash-commands/cfn-claude-sync.js +533 -0
  241. package/src/slash-commands/index.js +5 -0
  242. package/src/slash-commands/metrics-summary-class.js +74 -0
  243. package/src/slash-commands/metrics-summary.js +335 -0
  244. package/src/slash-commands/register-all-commands.js +12 -0
@@ -0,0 +1,465 @@
1
+ /**
2
+ * Events API Routes
3
+ *
4
+ * REST API endpoints for agent lifecycle events and event streaming
5
+ *
6
+ * @module web/api/routes/events
7
+ */ import { Router } from 'express';
8
+ import { asyncHandler } from '../middleware/error-handler.js';
9
+ import { validationMiddleware, commonSchemas } from '../middleware/validation.js';
10
+ /**
11
+ * Create events routes
12
+ */ export function eventsRoutes(transparencySystem, logger) {
13
+ const router = Router();
14
+ /**
15
+ * GET /api/v1/events
16
+ * Get recent agent lifecycle events
17
+ */ router.get('/', validationMiddleware({
18
+ query: {
19
+ ...commonSchemas.pagination,
20
+ ...commonSchemas.eventTypeFilter,
21
+ ...commonSchemas.dateRange,
22
+ limit: {
23
+ type: 'integer',
24
+ minimum: 1,
25
+ maximum: 1000,
26
+ default: 100,
27
+ description: 'Maximum number of events to return'
28
+ }
29
+ }
30
+ }), asyncHandler(async (req, res)=>{
31
+ const { limit = 100, eventType, startDate, endDate, page = 1, pageSize = 50 } = req.query;
32
+ logger.info('Getting recent events', {
33
+ limit,
34
+ eventType,
35
+ startDate,
36
+ endDate
37
+ });
38
+ let events;
39
+ if (startDate || endDate) {
40
+ const start = startDate ? new Date(startDate) : new Date(0);
41
+ const end = endDate ? new Date(endDate) : new Date();
42
+ events = await transparencySystem.getEventsInTimeRange(start, end, limit);
43
+ } else {
44
+ events = await transparencySystem.getRecentEvents(limit, eventType);
45
+ }
46
+ // Apply event type filter if not already applied
47
+ if (eventType && startDate) {
48
+ events = events.filter((event)=>event.eventType === eventType);
49
+ }
50
+ // Apply pagination
51
+ const startIndex = (page - 1) * pageSize;
52
+ const endIndex = startIndex + pageSize;
53
+ const paginatedEvents = events.slice(startIndex, endIndex);
54
+ res.json({
55
+ data: paginatedEvents,
56
+ pagination: {
57
+ page,
58
+ pageSize,
59
+ total: events.length,
60
+ pages: Math.ceil(events.length / pageSize)
61
+ },
62
+ meta: {
63
+ filters: {
64
+ eventType,
65
+ startDate,
66
+ endDate
67
+ },
68
+ timestamp: new Date().toISOString()
69
+ }
70
+ });
71
+ }));
72
+ /**
73
+ * GET /api/v1/events/agent/:agentId
74
+ * Get events for specific agent
75
+ */ router.get('/agent/:agentId', validationMiddleware({
76
+ params: commonSchemas.agentIdParam,
77
+ query: {
78
+ ...commonSchemas.eventTypeFilter,
79
+ ...commonSchemas.pagination,
80
+ limit: {
81
+ type: 'integer',
82
+ minimum: 1,
83
+ maximum: 500,
84
+ default: 50,
85
+ description: 'Maximum number of events to return'
86
+ }
87
+ }
88
+ }), asyncHandler(async (req, res)=>{
89
+ const { agentId } = req.params;
90
+ const { limit = 50, eventType, page = 1, pageSize = 20 } = req.query;
91
+ logger.info(`Getting events for agent ${agentId}`, {
92
+ limit,
93
+ eventType
94
+ });
95
+ let events = await transparencySystem.getAgentEvents(agentId, limit);
96
+ // Apply event type filter
97
+ if (eventType) {
98
+ events = events.filter((event)=>event.eventType === eventType);
99
+ }
100
+ // Apply pagination
101
+ const startIndex = (page - 1) * pageSize;
102
+ const endIndex = startIndex + pageSize;
103
+ const paginatedEvents = events.slice(startIndex, endIndex);
104
+ res.json({
105
+ data: paginatedEvents,
106
+ pagination: {
107
+ page,
108
+ pageSize,
109
+ total: events.length,
110
+ pages: Math.ceil(events.length / pageSize)
111
+ },
112
+ meta: {
113
+ agentId,
114
+ filters: {
115
+ eventType
116
+ },
117
+ timestamp: new Date().toISOString()
118
+ }
119
+ });
120
+ }));
121
+ /**
122
+ * GET /api/v1/events/types
123
+ * Get available event types
124
+ */ router.get('/types', asyncHandler(async (req, res)=>{
125
+ logger.info('Getting available event types');
126
+ const eventTypes = [
127
+ {
128
+ type: 'spawned',
129
+ description: 'Agent was created and initialized',
130
+ category: 'lifecycle'
131
+ },
132
+ {
133
+ type: 'paused',
134
+ description: 'Agent execution was paused',
135
+ category: 'state'
136
+ },
137
+ {
138
+ type: 'resumed',
139
+ description: 'Agent execution was resumed',
140
+ category: 'state'
141
+ },
142
+ {
143
+ type: 'terminated',
144
+ description: 'Agent was terminated',
145
+ category: 'lifecycle'
146
+ },
147
+ {
148
+ type: 'checkpoint_created',
149
+ description: 'Agent created a checkpoint',
150
+ category: 'persistence'
151
+ },
152
+ {
153
+ type: 'checkpoint_restored',
154
+ description: 'Agent restored from a checkpoint',
155
+ category: 'persistence'
156
+ },
157
+ {
158
+ type: 'state_changed',
159
+ description: 'Agent state changed',
160
+ category: 'state'
161
+ },
162
+ {
163
+ type: 'task_assigned',
164
+ description: 'Task was assigned to agent',
165
+ category: 'task'
166
+ },
167
+ {
168
+ type: 'task_completed',
169
+ description: 'Agent completed its task',
170
+ category: 'task'
171
+ },
172
+ {
173
+ type: 'error_occurred',
174
+ description: 'Agent encountered an error',
175
+ category: 'error'
176
+ }
177
+ ];
178
+ res.json({
179
+ data: eventTypes,
180
+ meta: {
181
+ timestamp: new Date().toISOString()
182
+ }
183
+ });
184
+ }));
185
+ /**
186
+ * GET /api/v1/events/stats
187
+ * Get event statistics
188
+ */ router.get('/stats', validationMiddleware({
189
+ query: {
190
+ ...commonSchemas.dateRange,
191
+ groupBy: {
192
+ type: 'string',
193
+ enum: [
194
+ 'type',
195
+ 'agent',
196
+ 'level',
197
+ 'hour',
198
+ 'day'
199
+ ],
200
+ default: 'type',
201
+ description: 'Group statistics by field'
202
+ }
203
+ }
204
+ }), asyncHandler(async (req, res)=>{
205
+ const { startDate, endDate, groupBy = 'type' } = req.query;
206
+ logger.info('Getting event statistics', {
207
+ startDate,
208
+ endDate,
209
+ groupBy
210
+ });
211
+ const start = startDate ? new Date(startDate) : new Date(Date.now() - 24 * 60 * 60 * 1000); // Default to last 24 hours
212
+ const end = endDate ? new Date(endDate) : new Date();
213
+ const events = await transparencySystem.getEventsInTimeRange(start, end, 10000);
214
+ const stats = calculateEventStats(events, groupBy);
215
+ res.json({
216
+ data: stats,
217
+ meta: {
218
+ dateRange: {
219
+ startDate: start,
220
+ endDate: end
221
+ },
222
+ groupBy,
223
+ totalEvents: events.length,
224
+ timestamp: new Date().toISOString()
225
+ }
226
+ });
227
+ }));
228
+ /**
229
+ * GET /api/v1/events/recent
230
+ * Get most recent events across all agents
231
+ */ router.get('/recent', validationMiddleware({
232
+ query: {
233
+ limit: {
234
+ type: 'integer',
235
+ minimum: 1,
236
+ maximum: 100,
237
+ default: 20,
238
+ description: 'Number of recent events to return'
239
+ },
240
+ severity: {
241
+ type: 'string',
242
+ enum: [
243
+ 'info',
244
+ 'warning',
245
+ 'error',
246
+ 'critical'
247
+ ],
248
+ description: 'Filter by severity level'
249
+ }
250
+ }
251
+ }), asyncHandler(async (req, res)=>{
252
+ const { limit = 20, severity } = req.query;
253
+ logger.info('Getting recent events', {
254
+ limit,
255
+ severity
256
+ });
257
+ let events = await transparencySystem.getRecentEvents(limit * 2); // Get more to filter
258
+ // Filter by severity if specified
259
+ if (severity) {
260
+ events = events.filter((event)=>getEventSeverity(event) === severity);
261
+ }
262
+ // Sort by timestamp (most recent first) and limit
263
+ events.sort((a, b)=>b.timestamp.getTime() - a.timestamp.getTime());
264
+ const limitedEvents = events.slice(0, limit);
265
+ res.json({
266
+ data: limitedEvents,
267
+ meta: {
268
+ limit,
269
+ severity,
270
+ totalEvents: events.length,
271
+ timestamp: new Date().toISOString()
272
+ }
273
+ });
274
+ }));
275
+ /**
276
+ * GET /api/v1/events/errors
277
+ * Get recent error events
278
+ */ router.get('/errors', validationMiddleware({
279
+ query: {
280
+ ...commonSchemas.pagination,
281
+ limit: {
282
+ type: 'integer',
283
+ minimum: 1,
284
+ maximum: 100,
285
+ default: 50,
286
+ description: 'Maximum number of error events to return'
287
+ },
288
+ severity: {
289
+ type: 'string',
290
+ enum: [
291
+ 'error',
292
+ 'critical'
293
+ ],
294
+ default: 'error',
295
+ description: 'Error severity filter'
296
+ }
297
+ }
298
+ }), asyncHandler(async (req, res)=>{
299
+ const { limit = 50, severity = 'error', page = 1, pageSize = 20 } = req.query;
300
+ logger.info('Getting error events', {
301
+ limit,
302
+ severity
303
+ });
304
+ const allEvents = await transparencySystem.getRecentEvents(1000);
305
+ const errorEvents = allEvents.filter((event)=>{
306
+ const eventSeverity = getEventSeverity(event);
307
+ return eventSeverity === 'error' || eventSeverity === 'critical';
308
+ });
309
+ // Sort by timestamp (most recent first)
310
+ errorEvents.sort((a, b)=>b.timestamp.getTime() - a.timestamp.getTime());
311
+ // Apply pagination
312
+ const startIndex = (page - 1) * pageSize;
313
+ const endIndex = startIndex + pageSize;
314
+ const paginatedEvents = errorEvents.slice(startIndex, endIndex);
315
+ res.json({
316
+ data: paginatedEvents,
317
+ pagination: {
318
+ page,
319
+ pageSize,
320
+ total: errorEvents.length,
321
+ pages: Math.ceil(errorEvents.length / pageSize)
322
+ },
323
+ meta: {
324
+ limit,
325
+ severity,
326
+ timestamp: new Date().toISOString()
327
+ }
328
+ });
329
+ }));
330
+ /**
331
+ * GET /api/v1/events/performance
332
+ * Get performance-related events
333
+ */ router.get('/performance', validationMiddleware({
334
+ query: {
335
+ ...commonSchemas.pagination,
336
+ metricType: {
337
+ type: 'string',
338
+ enum: [
339
+ 'token_usage',
340
+ 'execution_time',
341
+ 'memory',
342
+ 'pause_resume'
343
+ ],
344
+ description: 'Performance metric type'
345
+ }
346
+ }
347
+ }), asyncHandler(async (req, res)=>{
348
+ const { metricType, page = 1, pageSize = 20 } = req.query;
349
+ logger.info('Getting performance events', {
350
+ metricType
351
+ });
352
+ const allEvents = await transparencySystem.getRecentEvents(1000);
353
+ const performanceEvents = allEvents.filter((event)=>{
354
+ return event.eventType === 'checkpoint_created' || event.eventType === 'checkpoint_restored' || event.eventType === 'paused' || event.eventType === 'resumed' || event.performanceImpact && (event.performanceImpact.duration || event.performanceImpact.memoryDelta || event.performanceImpact.tokenCost);
355
+ });
356
+ // Filter by metric type if specified
357
+ let filteredEvents = performanceEvents;
358
+ if (metricType) {
359
+ filteredEvents = performanceEvents.filter((event)=>{
360
+ switch(metricType){
361
+ case 'token_usage':
362
+ return event.performanceImpact?.tokenCost;
363
+ case 'execution_time':
364
+ return event.performanceImpact?.duration;
365
+ case 'memory':
366
+ return event.performanceImpact?.memoryDelta;
367
+ case 'pause_resume':
368
+ return event.eventType === 'paused' || event.eventType === 'resumed';
369
+ default:
370
+ return true;
371
+ }
372
+ });
373
+ }
374
+ // Sort by timestamp (most recent first)
375
+ filteredEvents.sort((a, b)=>b.timestamp.getTime() - a.timestamp.getTime());
376
+ // Apply pagination
377
+ const startIndex = (page - 1) * pageSize;
378
+ const endIndex = startIndex + pageSize;
379
+ const paginatedEvents = filteredEvents.slice(startIndex, endIndex);
380
+ res.json({
381
+ data: paginatedEvents,
382
+ pagination: {
383
+ page,
384
+ pageSize,
385
+ total: filteredEvents.length,
386
+ pages: Math.ceil(filteredEvents.length / pageSize)
387
+ },
388
+ meta: {
389
+ metricType,
390
+ timestamp: new Date().toISOString()
391
+ }
392
+ });
393
+ }));
394
+ return router;
395
+ }
396
+ /**
397
+ * Calculate event statistics grouped by specified field
398
+ */ function calculateEventStats(events, groupBy) {
399
+ const stats = {
400
+ totalEvents: events.length,
401
+ groups: {},
402
+ timeRange: {
403
+ earliest: events.length > 0 ? events[events.length - 1].timestamp : null,
404
+ latest: events.length > 0 ? events[0].timestamp : null
405
+ }
406
+ };
407
+ switch(groupBy){
408
+ case 'type':
409
+ events.forEach((event)=>{
410
+ stats.groups[event.eventType] = (stats.groups[event.eventType] || 0) + 1;
411
+ });
412
+ break;
413
+ case 'agent':
414
+ events.forEach((event)=>{
415
+ stats.groups[event.agentId] = (stats.groups[event.agentId] || 0) + 1;
416
+ });
417
+ break;
418
+ case 'level':
419
+ events.forEach((event)=>{
420
+ const level = `Level ${event.level}`;
421
+ stats.groups[level] = (stats.groups[level] || 0) + 1;
422
+ });
423
+ break;
424
+ case 'hour':
425
+ events.forEach((event)=>{
426
+ const hour = event.timestamp.getHours();
427
+ const hourKey = `${hour.toString().padStart(2, '0')}:00`;
428
+ stats.groups[hourKey] = (stats.groups[hourKey] || 0) + 1;
429
+ });
430
+ break;
431
+ case 'day':
432
+ events.forEach((event)=>{
433
+ const day = event.timestamp.toLocaleDateString();
434
+ stats.groups[day] = (stats.groups[day] || 0) + 1;
435
+ });
436
+ break;
437
+ }
438
+ return stats;
439
+ }
440
+ /**
441
+ * Get event severity based on event type and data
442
+ */ function getEventSeverity(event) {
443
+ switch(event.eventType){
444
+ case 'error_occurred':
445
+ return event.eventData.errorMessage ? 'critical' : 'error';
446
+ case 'terminated':
447
+ return 'warning';
448
+ case 'spawned':
449
+ case 'task_completed':
450
+ return 'info';
451
+ case 'paused':
452
+ case 'resumed':
453
+ case 'state_changed':
454
+ return 'info';
455
+ case 'checkpoint_created':
456
+ case 'checkpoint_restored':
457
+ return 'info';
458
+ case 'task_assigned':
459
+ return 'info';
460
+ default:
461
+ return 'info';
462
+ }
463
+ }
464
+
465
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/web/api/routes/events.ts"],"names":["Router","asyncHandler","validationMiddleware","commonSchemas","eventsRoutes","transparencySystem","logger","router","get","query","pagination","eventTypeFilter","dateRange","limit","type","minimum","maximum","default","description","req","res","eventType","startDate","endDate","page","pageSize","info","events","start","Date","end","getEventsInTimeRange","getRecentEvents","filter","event","startIndex","endIndex","paginatedEvents","slice","json","data","total","length","pages","Math","ceil","meta","filters","timestamp","toISOString","params","agentIdParam","agentId","getAgentEvents","eventTypes","category","groupBy","enum","now","stats","calculateEventStats","totalEvents","severity","getEventSeverity","sort","a","b","getTime","limitedEvents","allEvents","errorEvents","eventSeverity","metricType","performanceEvents","performanceImpact","duration","memoryDelta","tokenCost","filteredEvents","groups","timeRange","earliest","latest","forEach","level","hour","getHours","hourKey","toString","padStart","day","toLocaleDateString","eventData","errorMessage"],"mappings":"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"}