claude-flow-novice 2.0.3 → 2.0.5

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 (228) hide show
  1. package/dist/src/cli/commands/swarm.js +1 -1
  2. package/dist/src/cli/main.js +1 -1
  3. package/dist/src/coordination/byzantine-memory-channels.js +25 -1
  4. package/dist/src/index.js +384 -35
  5. package/dist/src/utils/error-handler.js +2 -36
  6. package/dist/src/web/api/apm-routes.js +353 -0
  7. package/dist/src/web/api/config/api-config.js +184 -0
  8. package/dist/src/web/api/middleware/auth.js +203 -0
  9. package/dist/src/web/api/middleware/cache.js +273 -0
  10. package/dist/src/web/api/middleware/error-handler.js +257 -0
  11. package/dist/src/web/api/middleware/request-logger.js +215 -0
  12. package/dist/src/web/api/middleware/validation.js +323 -0
  13. package/dist/src/web/api/routes/events.js +463 -0
  14. package/dist/src/web/api/routes/hierarchy.js +300 -0
  15. package/dist/src/web/api/routes/index.js +12 -0
  16. package/dist/src/web/api/routes/metrics.js +559 -0
  17. package/dist/src/web/api/routes/parallel-status.js +359 -0
  18. package/dist/src/web/api/routes/status.js +448 -0
  19. package/dist/src/web/api/server.js +462 -0
  20. package/dist/src/web/dashboard/hooks/useWebSocket.js +383 -0
  21. package/dist/src/web/dashboard/index.js +85 -0
  22. package/dist/src/web/dashboard/realtime/CustomSyncManager.js +439 -0
  23. package/dist/src/web/dashboard/realtime/NativeWebSocketManager.js +323 -0
  24. package/dist/src/web/dashboard/realtime/PerformanceBenchmark.js +527 -0
  25. package/dist/src/web/dashboard/realtime/RealtimeCommunicationManager.js +474 -0
  26. package/dist/src/web/dashboard/realtime/RealtimeServer.js +666 -0
  27. package/dist/src/web/dashboard/realtime/SSEManager.js +426 -0
  28. package/dist/src/web/dashboard/types.js +4 -0
  29. package/dist/src/web/messaging/agent-status-tracker.js +453 -0
  30. package/dist/src/web/messaging/human-intervention-system.js +305 -0
  31. package/dist/src/web/messaging/message-filter.js +302 -0
  32. package/dist/src/web/messaging/swarm-message-router.js +324 -0
  33. package/dist/src/web/messaging/transparency-logger.js +421 -0
  34. package/dist/src/web/portal-server.js +460 -0
  35. package/dist/src/web/server.js +322 -0
  36. package/dist/src/web/websocket/apm-websocket-handler.js +453 -0
  37. package/dist/src/web/websocket/websocket-manager.js +780 -0
  38. package/package.json +6 -4
  39. package/dist/src/cli/minimal-main.js +0 -22
  40. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/documentSymbols/browser/documentSymbols.js +0 -23
  41. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +0 -57
  42. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +0 -401
  43. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +0 -181
  44. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution.js +0 -44
  45. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +0 -157
  46. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/edit.js +0 -71
  47. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/editorState/browser/editorState.js +0 -112
  48. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findController.js +0 -990
  49. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findDecorations.js +0 -296
  50. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findModel.js +0 -488
  51. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findOptionsWidget.js +0 -138
  52. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findState.js +0 -243
  53. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findWidget.js +0 -1177
  54. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/folding.js +0 -1093
  55. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +0 -133
  56. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingModel.js +0 -538
  57. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingRanges.js +0 -351
  58. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +0 -49
  59. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/format.js +0 -360
  60. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/formatActions.js +0 -263
  61. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/formattingEdit.js +0 -54
  62. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture.js +0 -149
  63. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/hover/browser/contentHover.js +0 -874
  64. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/inlineCompletions/browser/commandIds.js +0 -7
  65. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/inlineCompletions/browser/commands.js +0 -199
  66. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/linesOperations/browser/copyLinesCommand.js +0 -70
  67. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/quickAccess/browser/commandsQuickAccess.js +0 -26
  68. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js +0 -153
  69. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +0 -33
  70. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.js +0 -354
  71. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/smartSelect/browser/bracketSelections.js +0 -146
  72. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/suggest/browser/completionModel.js +0 -224
  73. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +0 -119
  74. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/edcore.main.js +0 -14
  75. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.all.js +0 -63
  76. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.api.js +0 -55
  77. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.main.js +0 -7
  78. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.worker.js +0 -25
  79. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/standalone/browser/colorizer.js +0 -118
  80. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/language/css/css.worker.js +0 -36869
  81. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/language/css/cssMode.js +0 -2035
  82. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/accessibility/browser/accessibilityService.js +0 -88
  83. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/accessibility/common/accessibility.js +0 -9
  84. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/action/common/action.js +0 -7
  85. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/action/common/actionCommonCategories.js +0 -13
  86. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/browser/actionList.js +0 -276
  87. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/browser/actionWidget.js +0 -248
  88. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/common/actionWidget.js +0 -5
  89. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actions/common/actions.js +0 -409
  90. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/audioCues/browser/audioCueService.js +0 -176
  91. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/clipboard/browser/clipboardService.js +0 -141
  92. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/clipboard/common/clipboardService.js +0 -6
  93. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/commands/common/commands.js +0 -80
  94. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configuration.js +0 -86
  95. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurationModels.js +0 -554
  96. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurationRegistry.js +0 -317
  97. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurations.js +0 -41
  98. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/browser/contextKeyService.js +0 -432
  99. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/common/contextkey.js +0 -1547
  100. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/common/contextkeys.js +0 -18
  101. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextMenuHandler.js +0 -124
  102. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextMenuService.js +0 -101
  103. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextView.js +0 -7
  104. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextViewService.js +0 -72
  105. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/dialogs/common/dialogs.js +0 -2
  106. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/dnd/browser/dnd.js +0 -36
  107. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/editor/common/editor.js +0 -17
  108. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/environment/common/environment.js +0 -2
  109. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/extensions/common/extensions.js +0 -47
  110. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/files/common/files.js +0 -9
  111. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +0 -105
  112. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/instantiation/common/descriptors.js +0 -11
  113. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/instantiation/common/extensions.js +0 -15
  114. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/keybinding/common/abstractKeybindingService.js +0 -277
  115. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/keybinding/common/baseResolvedKeybinding.js +0 -53
  116. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +0 -354
  117. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/theme/browser/defaultStyles.js +0 -162
  118. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/theme/common/colorRegistry.js +0 -482
  119. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/abap/abap.js +0 -10
  120. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/apex/apex.js +0 -10
  121. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/azcli/azcli.js +0 -10
  122. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/bat/bat.js +0 -10
  123. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/bicep/bicep.js +0 -11
  124. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cameligo/cameligo.js +0 -10
  125. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/clojure/clojure.js +0 -10
  126. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/coffee/coffee.js +0 -10
  127. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cpp/cpp.js +0 -10
  128. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/csharp/csharp.js +0 -10
  129. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/csp/csp.js +0 -10
  130. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/css/css.js +0 -12
  131. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cypher/cypher.js +0 -10
  132. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/dart/dart.js +0 -10
  133. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/dockerfile/dockerfile.js +0 -10
  134. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/ecl/ecl.js +0 -10
  135. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/elixir/elixir.js +0 -10
  136. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/flow9/flow9.js +0 -10
  137. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.js +0 -745
  138. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.de.js +0 -31
  139. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.es.js +0 -31
  140. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.fr.js +0 -29
  141. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.it.js +0 -29
  142. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ja.js +0 -31
  143. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.js +0 -29
  144. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ko.js +0 -29
  145. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ru.js +0 -31
  146. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.zh-cn.js +0 -31
  147. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.zh-tw.js +0 -29
  148. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/language/css/cssMode.js +0 -13
  149. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/language/css/cssWorker.js +0 -81
  150. package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/cli.js +0 -64
  151. package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/example.js +0 -36
  152. package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/index.js +0 -205
  153. package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/test.js +0 -260
  154. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.browser.js +0 -34
  155. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.js +0 -35
  156. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.native.js +0 -26
  157. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/index.browser.js +0 -34
  158. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/index.js +0 -45
  159. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/nanoid.js +0 -1
  160. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/non-secure/index.js +0 -21
  161. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/url-alphabet/index.js +0 -3
  162. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/bin/nodemon.js +0 -16
  163. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/cli/index.js +0 -49
  164. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/cli/parse.js +0 -230
  165. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/command.js +0 -43
  166. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/defaults.js +0 -34
  167. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/exec.js +0 -234
  168. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/index.js +0 -93
  169. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/load.js +0 -225
  170. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/help/index.js +0 -27
  171. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/index.js +0 -1
  172. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/index.js +0 -4
  173. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/match.js +0 -287
  174. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/run.js +0 -562
  175. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/signals.js +0 -34
  176. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/watch.js +0 -244
  177. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/nodemon.js +0 -317
  178. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/add.js +0 -89
  179. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/index.js +0 -53
  180. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/parse.js +0 -43
  181. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/spawn.js +0 -74
  182. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/bus.js +0 -44
  183. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/clone.js +0 -40
  184. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/colour.js +0 -26
  185. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/index.js +0 -103
  186. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/log.js +0 -82
  187. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/merge.js +0 -47
  188. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/version.js +0 -100
  189. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/brace-expansion/index.js +0 -201
  190. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/has-flag/index.js +0 -8
  191. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/minimatch/minimatch.js +0 -947
  192. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/supports-color/browser.js +0 -5
  193. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/supports-color/index.js +0 -131
  194. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/bin/pidtree.js +0 -128
  195. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/index.js +0 -49
  196. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/bin.js +0 -61
  197. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/get.js +0 -45
  198. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/pidtree.js +0 -104
  199. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/ps.js +0 -47
  200. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/wmic.js +0 -49
  201. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/doc.js +0 -1270
  202. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/acorn.js +0 -15
  203. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/angular.js +0 -2
  204. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/babel.js +0 -15
  205. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/estree.js +0 -36
  206. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/flow.js +0 -19
  207. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/glimmer.js +0 -29
  208. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/graphql.js +0 -29
  209. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/html.js +0 -22
  210. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/markdown.js +0 -63
  211. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/meriyah.js +0 -4
  212. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/postcss.js +0 -54
  213. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/typescript.js +0 -20
  214. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/yaml.js +0 -160
  215. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/standalone.js +0 -34
  216. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/bin/react-scripts.js +0 -58
  217. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/env.js +0 -112
  218. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/getHttpsConfig.js +0 -74
  219. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/babelTransform.js +0 -37
  220. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/cssTransform.js +0 -22
  221. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/fileTransform.js +0 -40
  222. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/modules.js +0 -142
  223. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/paths.js +0 -153
  224. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpack/persistentCache/createEnvironmentHash.js +0 -9
  225. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpack.config.js +0 -796
  226. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpackDevServer.config.js +0 -135
  227. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/scripts/build.js +0 -225
  228. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/scripts/eject.js +0 -340
@@ -0,0 +1,559 @@
1
+ /**
2
+ * Metrics API Routes
3
+ *
4
+ * REST API endpoints for transparency system metrics and performance data
5
+ *
6
+ * @module web/api/routes/metrics
7
+ */ import { Router } from "express";
8
+ import { asyncHandler } from "../middleware/error-handler.js";
9
+ import { validationMiddleware, commonSchemas } from "../middleware/validation.js";
10
+ /**
11
+ * Create metrics routes
12
+ */ export function metricsRoutes(transparencySystem, logger) {
13
+ const router = Router();
14
+ /**
15
+ * GET /api/v1/metrics
16
+ * Get current transparency metrics
17
+ */ router.get('/', asyncHandler(async (req, res)=>{
18
+ logger.info('Getting current transparency metrics');
19
+ const metrics = await transparencySystem.getTransparencyMetrics();
20
+ res.json({
21
+ data: metrics,
22
+ meta: {
23
+ timestamp: new Date().toISOString()
24
+ }
25
+ });
26
+ }));
27
+ /**
28
+ * GET /api/v1/metrics/agent/:agentId
29
+ * Get performance metrics for specific agent
30
+ */ router.get('/agent/:agentId', validationMiddleware({
31
+ params: commonSchemas.agentIdParam
32
+ }), asyncHandler(async (req, res)=>{
33
+ const { agentId } = req.params;
34
+ logger.info(`Getting metrics for agent ${agentId}`);
35
+ try {
36
+ const metrics = await transparencySystem.getAgentPerformanceMetrics(agentId);
37
+ res.json({
38
+ data: metrics,
39
+ meta: {
40
+ agentId,
41
+ timestamp: new Date().toISOString()
42
+ }
43
+ });
44
+ } catch (error) {
45
+ res.status(404).json({
46
+ error: 'NOT_FOUND',
47
+ message: `Agent ${agentId} not found`,
48
+ timestamp: new Date().toISOString()
49
+ });
50
+ }
51
+ }));
52
+ /**
53
+ * GET /api/v1/metrics/tokens
54
+ * Get token usage metrics
55
+ */ router.get('/tokens', validationMiddleware({
56
+ query: {
57
+ ...commonSchemas.dateRange,
58
+ groupBy: {
59
+ type: 'string',
60
+ enum: [
61
+ 'agent',
62
+ 'type',
63
+ 'level',
64
+ 'hour'
65
+ ],
66
+ default: 'agent',
67
+ description: 'Group metrics by field'
68
+ }
69
+ }
70
+ }), asyncHandler(async (req, res)=>{
71
+ const { startDate, endDate, groupBy = 'agent' } = req.query;
72
+ logger.info('Getting token usage metrics', {
73
+ startDate,
74
+ endDate,
75
+ groupBy
76
+ });
77
+ const metrics = await transparencySystem.getTransparencyMetrics();
78
+ const hierarchy = await transparencySystem.getAgentHierarchy();
79
+ // Calculate token metrics based on grouping
80
+ const tokenMetrics = calculateTokenMetrics(hierarchy, groupBy);
81
+ res.json({
82
+ data: {
83
+ summary: {
84
+ totalConsumed: metrics.totalTokensConsumed,
85
+ totalSaved: metrics.totalTokensSaved,
86
+ averagePerAgent: hierarchy.length > 0 ? metrics.totalTokensConsumed / hierarchy.length : 0
87
+ },
88
+ breakdown: tokenMetrics
89
+ },
90
+ meta: {
91
+ groupBy,
92
+ dateRange: {
93
+ startDate,
94
+ endDate
95
+ },
96
+ timestamp: new Date().toISOString()
97
+ }
98
+ });
99
+ }));
100
+ /**
101
+ * GET /api/v1/metrics/performance
102
+ * Get performance metrics
103
+ */ router.get('/performance', validationMiddleware({
104
+ query: {
105
+ metric: {
106
+ type: 'string',
107
+ enum: [
108
+ 'execution_time',
109
+ 'memory_usage',
110
+ 'cpu_usage',
111
+ 'token_rate'
112
+ ],
113
+ description: 'Performance metric to analyze'
114
+ },
115
+ percentile: {
116
+ type: 'integer',
117
+ minimum: 0,
118
+ maximum: 100,
119
+ default: 95,
120
+ description: 'Percentile for statistical analysis'
121
+ }
122
+ }
123
+ }), asyncHandler(async (req, res)=>{
124
+ const { metric, percentile = 95 } = req.query;
125
+ logger.info('Getting performance metrics', {
126
+ metric,
127
+ percentile
128
+ });
129
+ const metrics = await transparencySystem.getTransparencyMetrics();
130
+ const statuses = await transparencySystem.getAllAgentStatuses();
131
+ const performanceMetrics = calculatePerformanceMetrics(statuses, metric, percentile);
132
+ res.json({
133
+ data: performanceMetrics,
134
+ meta: {
135
+ metric,
136
+ percentile,
137
+ timestamp: new Date().toISOString()
138
+ }
139
+ });
140
+ }));
141
+ /**
142
+ * GET /api/v1/metrics/hierarchy
143
+ * Get hierarchy analytics
144
+ */ router.get('/hierarchy', asyncHandler(async (req, res)=>{
145
+ logger.info('Getting hierarchy analytics');
146
+ const analytics = await transparencySystem.getHierarchyAnalytics();
147
+ res.json({
148
+ data: analytics,
149
+ meta: {
150
+ timestamp: new Date().toISOString()
151
+ }
152
+ });
153
+ }));
154
+ /**
155
+ * GET /api/v1/metrics/events
156
+ * Get event stream metrics
157
+ */ router.get('/events', validationMiddleware({
158
+ query: {
159
+ ...commonSchemas.dateRange,
160
+ eventType: {
161
+ type: 'string',
162
+ description: 'Filter by specific event type'
163
+ }
164
+ }
165
+ }), asyncHandler(async (req, res)=>{
166
+ const { startDate, endDate, eventType } = req.query;
167
+ logger.info('Getting event stream metrics', {
168
+ startDate,
169
+ endDate,
170
+ eventType
171
+ });
172
+ const start = startDate ? new Date(startDate) : new Date(Date.now() - 60 * 60 * 1000); // Default to last hour
173
+ const end = endDate ? new Date(endDate) : new Date();
174
+ const events = await transparencySystem.getEventsInTimeRange(start, end, 10000);
175
+ const eventMetrics = calculateEventMetrics(events, eventType);
176
+ res.json({
177
+ data: eventMetrics,
178
+ meta: {
179
+ dateRange: {
180
+ startDate: start,
181
+ endDate: end
182
+ },
183
+ eventType,
184
+ timestamp: new Date().toISOString()
185
+ }
186
+ });
187
+ }));
188
+ /**
189
+ * GET /api/v1/metrics/efficiency
190
+ * Get efficiency and resource utilization metrics
191
+ */ router.get('/efficiency', validationMiddleware({
192
+ query: {
193
+ timeWindow: {
194
+ type: 'integer',
195
+ minimum: 1,
196
+ maximum: 1440,
197
+ default: 60,
198
+ description: 'Time window in minutes'
199
+ }
200
+ }
201
+ }), asyncHandler(async (req, res)=>{
202
+ const { timeWindow = 60 } = req.query;
203
+ logger.info('Getting efficiency metrics', {
204
+ timeWindow
205
+ });
206
+ const metrics = await transparencySystem.getTransparencyMetrics();
207
+ const statuses = await transparencySystem.getAllAgentStatuses();
208
+ const efficiencyMetrics = calculateEfficiencyMetrics(statuses, metrics, timeWindow);
209
+ res.json({
210
+ data: efficiencyMetrics,
211
+ meta: {
212
+ timeWindowMinutes: timeWindow,
213
+ timestamp: new Date().toISOString()
214
+ }
215
+ });
216
+ }));
217
+ /**
218
+ * GET /api/v1/metrics/trends
219
+ * Get metric trends over time
220
+ */ router.get('/trends', validationMiddleware({
221
+ query: {
222
+ metric: {
223
+ type: 'string',
224
+ enum: [
225
+ 'agent_count',
226
+ 'token_usage',
227
+ 'error_rate',
228
+ 'performance'
229
+ ],
230
+ description: 'Metric to track trends for'
231
+ },
232
+ timeWindow: {
233
+ type: 'integer',
234
+ minimum: 60,
235
+ maximum: 1440,
236
+ default: 360,
237
+ description: 'Time window in minutes'
238
+ },
239
+ interval: {
240
+ type: 'integer',
241
+ minimum: 1,
242
+ maximum: 60,
243
+ default: 10,
244
+ description: 'Interval in minutes for data points'
245
+ }
246
+ }
247
+ }), asyncHandler(async (req, res)=>{
248
+ const { metric, timeWindow = 360, interval = 10 } = req.query;
249
+ logger.info('Getting metric trends', {
250
+ metric,
251
+ timeWindow,
252
+ interval
253
+ });
254
+ // For now, return mock trend data
255
+ // In a real implementation, you'd query historical data from a time-series database
256
+ const trendData = generateMockTrendData(metric, timeWindow, interval);
257
+ res.json({
258
+ data: trendData,
259
+ meta: {
260
+ metric,
261
+ timeWindowMinutes: timeWindow,
262
+ intervalMinutes: interval,
263
+ timestamp: new Date().toISOString()
264
+ }
265
+ });
266
+ }));
267
+ /**
268
+ * GET /api/v1/metrics/alerts
269
+ * Get current performance alerts
270
+ */ router.get('/alerts', validationMiddleware({
271
+ query: {
272
+ severity: {
273
+ type: 'string',
274
+ enum: [
275
+ 'warning',
276
+ 'critical'
277
+ ],
278
+ description: 'Alert severity filter'
279
+ },
280
+ active: {
281
+ type: 'boolean',
282
+ default: true,
283
+ description: 'Only show active alerts'
284
+ }
285
+ }
286
+ }), asyncHandler(async (req, res)=>{
287
+ const { severity, active = true } = req.query;
288
+ logger.info('Getting performance alerts', {
289
+ severity,
290
+ active
291
+ });
292
+ const alerts = await generatePerformanceAlerts(transparencySystem, severity);
293
+ res.json({
294
+ data: alerts,
295
+ meta: {
296
+ severity,
297
+ active,
298
+ count: alerts.length,
299
+ timestamp: new Date().toISOString()
300
+ }
301
+ });
302
+ }));
303
+ return router;
304
+ }
305
+ /**
306
+ * Calculate token usage metrics by grouping
307
+ */ function calculateTokenMetrics(hierarchy, groupBy) {
308
+ const breakdown = {};
309
+ hierarchy.forEach((agent)=>{
310
+ let key;
311
+ switch(groupBy){
312
+ case 'agent':
313
+ key = agent.agentId;
314
+ break;
315
+ case 'type':
316
+ key = agent.type;
317
+ break;
318
+ case 'level':
319
+ key = `Level ${agent.level}`;
320
+ break;
321
+ default:
322
+ key = 'unknown';
323
+ }
324
+ if (!breakdown[key]) {
325
+ breakdown[key] = {
326
+ totalUsed: 0,
327
+ totalBudget: 0,
328
+ count: 0,
329
+ averageUsed: 0,
330
+ utilizationRate: 0
331
+ };
332
+ }
333
+ breakdown[key].totalUsed += agent.tokensUsed;
334
+ breakdown[key].totalBudget += agent.tokenBudget;
335
+ breakdown[key].count++;
336
+ });
337
+ // Calculate averages and utilization rates
338
+ Object.keys(breakdown).forEach((key)=>{
339
+ const data = breakdown[key];
340
+ data.averageUsed = data.count > 0 ? data.totalUsed / data.count : 0;
341
+ data.utilizationRate = data.totalBudget > 0 ? data.totalUsed / data.totalBudget * 100 : 0;
342
+ });
343
+ return breakdown;
344
+ }
345
+ /**
346
+ * Calculate performance metrics for agents
347
+ */ function calculatePerformanceMetrics(statuses, metric, percentile) {
348
+ const values = [];
349
+ statuses.forEach((status)=>{
350
+ let value;
351
+ switch(metric){
352
+ case 'execution_time':
353
+ // This would come from agent performance data
354
+ value = Math.random() * 10000; // Mock data
355
+ break;
356
+ case 'memory_usage':
357
+ value = status.memoryUsage;
358
+ break;
359
+ case 'cpu_usage':
360
+ value = status.cpuUsage;
361
+ break;
362
+ case 'token_rate':
363
+ value = status.tokenUsageRate;
364
+ break;
365
+ default:
366
+ value = 0;
367
+ }
368
+ values.push(value);
369
+ });
370
+ values.sort((a, b)=>a - b);
371
+ const stats = {
372
+ count: values.length,
373
+ min: values.length > 0 ? values[0] : 0,
374
+ max: values.length > 0 ? values[values.length - 1] : 0,
375
+ mean: values.length > 0 ? values.reduce((sum, val)=>sum + val, 0) / values.length : 0,
376
+ median: values.length > 0 ? values[Math.floor(values.length / 2)] : 0,
377
+ percentile: values.length > 0 ? values[Math.floor(values.length * percentile / 100)] : 0,
378
+ unit: getMetricUnit(metric)
379
+ };
380
+ return stats;
381
+ }
382
+ /**
383
+ * Calculate event metrics
384
+ */ function calculateEventMetrics(events, eventType) {
385
+ let filteredEvents = events;
386
+ if (eventType) {
387
+ filteredEvents = events.filter((event)=>event.eventType === eventType);
388
+ }
389
+ const eventsByType = {};
390
+ const eventsByHour = {};
391
+ filteredEvents.forEach((event)=>{
392
+ // Count by type
393
+ eventsByType[event.eventType] = (eventsByType[event.eventType] || 0) + 1;
394
+ // Count by hour
395
+ const hour = event.timestamp.getHours();
396
+ const hourKey = `${hour.toString().padStart(2, '0')}:00`;
397
+ eventsByHour[hourKey] = (eventsByHour[hourKey] || 0) + 1;
398
+ });
399
+ return {
400
+ totalEvents: filteredEvents.length,
401
+ eventsByType,
402
+ eventsByHour,
403
+ averageEventsPerHour: Object.values(eventsByHour).reduce((sum, count)=>sum + count, 0) / Object.keys(eventsByHour).length
404
+ };
405
+ }
406
+ /**
407
+ * Calculate efficiency metrics
408
+ */ function calculateEfficiencyMetrics(statuses, metrics, timeWindowMinutes) {
409
+ const activeAgents = statuses.filter((status)=>!status.isPaused && status.state !== 'terminated');
410
+ const pausedAgents = statuses.filter((status)=>status.isPaused);
411
+ const efficiency = {
412
+ agentEfficiency: {
413
+ total: statuses.length,
414
+ active: activeAgents.length,
415
+ paused: pausedAgents.length,
416
+ efficiencyRate: statuses.length > 0 ? activeAgents.length / statuses.length * 100 : 0
417
+ },
418
+ tokenEfficiency: {
419
+ totalConsumed: metrics.totalTokensConsumed,
420
+ totalSaved: metrics.totalTokensSaved,
421
+ savingsRate: metrics.totalTokensConsumed > 0 ? metrics.totalTokensSaved / metrics.totalTokensConsumed * 100 : 0
422
+ },
423
+ performanceEfficiency: {
424
+ averageExecutionTime: metrics.averageExecutionTimeMs,
425
+ failureRate: metrics.failureRate,
426
+ dependencyResolutionRate: metrics.dependencyResolutionRate
427
+ },
428
+ resourceUtilization: {
429
+ memoryUtilization: calculateResourceUtilization(statuses, 'memoryUsage'),
430
+ cpuUtilization: calculateResourceUtilization(statuses, 'cpuUsage'),
431
+ tokenUtilization: calculateResourceUtilization(statuses, 'tokensUsed')
432
+ }
433
+ };
434
+ return efficiency;
435
+ }
436
+ /**
437
+ * Generate mock trend data
438
+ */ function generateMockTrendData(metric, timeWindowMinutes, intervalMinutes) {
439
+ const dataPoints = [];
440
+ const now = new Date();
441
+ const intervals = Math.floor(timeWindowMinutes / intervalMinutes);
442
+ for(let i = intervals; i >= 0; i--){
443
+ const timestamp = new Date(now.getTime() - i * intervalMinutes * 60 * 1000);
444
+ let value;
445
+ switch(metric){
446
+ case 'agent_count':
447
+ value = 50 + Math.floor(Math.random() * 20);
448
+ break;
449
+ case 'token_usage':
450
+ value = 1000 + Math.floor(Math.random() * 500);
451
+ break;
452
+ case 'error_rate':
453
+ value = Math.random() * 10;
454
+ break;
455
+ case 'performance':
456
+ value = 70 + Math.random() * 30;
457
+ break;
458
+ default:
459
+ value = Math.random() * 100;
460
+ }
461
+ dataPoints.push({
462
+ timestamp: timestamp.toISOString(),
463
+ value
464
+ });
465
+ }
466
+ return {
467
+ metric,
468
+ dataPoints,
469
+ trend: calculateTrend(dataPoints)
470
+ };
471
+ }
472
+ /**
473
+ * Generate performance alerts
474
+ */ async function generatePerformanceAlerts(transparencySystem, severity) {
475
+ const alerts = [];
476
+ const statuses = await transparencySystem.getAllAgentStatuses();
477
+ const metrics = await transparencySystem.getTransparencyMetrics();
478
+ // Check for high token usage
479
+ statuses.forEach((status)=>{
480
+ if (status.tokenUsageRate > 100) {
481
+ alerts.push({
482
+ id: `high-token-usage-${status.agentId}`,
483
+ agentId: status.agentId,
484
+ type: 'performance',
485
+ severity: 'warning',
486
+ title: 'High Token Usage Rate',
487
+ description: `Agent ${status.agentId} has high token usage rate: ${status.tokenUsageRate.toFixed(2)} tokens/sec`,
488
+ timestamp: new Date().toISOString(),
489
+ value: status.tokenUsageRate,
490
+ threshold: 100
491
+ });
492
+ }
493
+ if (status.memoryUsage > 500 * 1024 * 1024) {
494
+ alerts.push({
495
+ id: `high-memory-usage-${status.agentId}`,
496
+ agentId: status.agentId,
497
+ type: 'performance',
498
+ severity: 'critical',
499
+ title: 'High Memory Usage',
500
+ description: `Agent ${status.agentId} has high memory usage: ${(status.memoryUsage / 1024 / 1024).toFixed(2)} MB`,
501
+ timestamp: new Date().toISOString(),
502
+ value: status.memoryUsage,
503
+ threshold: 500 * 1024 * 1024
504
+ });
505
+ }
506
+ if (status.recentErrors && status.recentErrors.length > 5) {
507
+ alerts.push({
508
+ id: `multiple-errors-${status.agentId}`,
509
+ agentId: status.agentId,
510
+ type: 'error',
511
+ severity: 'warning',
512
+ title: 'Multiple Recent Errors',
513
+ description: `Agent ${status.agentId} has ${status.recentErrors.length} recent errors`,
514
+ timestamp: new Date().toISOString(),
515
+ value: status.recentErrors.length,
516
+ threshold: 5
517
+ });
518
+ }
519
+ });
520
+ // Filter by severity if specified
521
+ if (severity) {
522
+ return alerts.filter((alert)=>alert.severity === severity);
523
+ }
524
+ return alerts;
525
+ }
526
+ /**
527
+ * Get metric unit
528
+ */ function getMetricUnit(metric) {
529
+ switch(metric){
530
+ case 'execution_time':
531
+ return 'ms';
532
+ case 'memory_usage':
533
+ return 'bytes';
534
+ case 'cpu_usage':
535
+ return '%';
536
+ case 'token_rate':
537
+ return 'tokens/sec';
538
+ default:
539
+ return 'unknown';
540
+ }
541
+ }
542
+ /**
543
+ * Calculate resource utilization
544
+ */ function calculateResourceUtilization(statuses, field) {
545
+ if (statuses.length === 0) return 0;
546
+ const total = statuses.reduce((sum, status)=>sum + (status[field] || 0), 0);
547
+ return total / statuses.length;
548
+ }
549
+ /**
550
+ * Calculate trend from data points
551
+ */ function calculateTrend(dataPoints) {
552
+ if (dataPoints.length < 2) return 'stable';
553
+ const firstValue = dataPoints[0].value;
554
+ const lastValue = dataPoints[dataPoints.length - 1].value;
555
+ const change = (lastValue - firstValue) / firstValue * 100;
556
+ if (change > 5) return 'increasing';
557
+ if (change < -5) return 'decreasing';
558
+ return 'stable';
559
+ }