@agent-relay/dashboard-server 2.0.83-beta.0 → 2.0.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -23
- package/dist/index.js.map +1 -1
- package/dist/lib/attachment-storage.d.ts +10 -0
- package/dist/lib/attachment-storage.d.ts.map +1 -0
- package/dist/lib/attachment-storage.js +53 -0
- package/dist/lib/attachment-storage.js.map +1 -0
- package/dist/lib/broadcast.d.ts +18 -0
- package/dist/lib/broadcast.d.ts.map +1 -0
- package/dist/lib/broadcast.js +118 -0
- package/dist/lib/broadcast.js.map +1 -0
- package/dist/lib/channel-state.d.ts +32 -0
- package/dist/lib/channel-state.d.ts.map +1 -0
- package/dist/lib/channel-state.js +146 -0
- package/dist/lib/channel-state.js.map +1 -0
- package/dist/lib/cli-auth.d.ts +40 -0
- package/dist/lib/cli-auth.d.ts.map +1 -0
- package/dist/lib/cli-auth.js +144 -0
- package/dist/lib/cli-auth.js.map +1 -0
- package/dist/lib/cloud-persistence.d.ts +6 -0
- package/dist/lib/cloud-persistence.d.ts.map +1 -0
- package/dist/lib/cloud-persistence.js +130 -0
- package/dist/lib/cloud-persistence.js.map +1 -0
- package/dist/lib/data-assembly.d.ts +136 -0
- package/dist/lib/data-assembly.d.ts.map +1 -0
- package/dist/lib/data-assembly.js +550 -0
- package/dist/lib/data-assembly.js.map +1 -0
- package/dist/lib/file-search.d.ts +8 -0
- package/dist/lib/file-search.d.ts.map +1 -0
- package/dist/lib/file-search.js +90 -0
- package/dist/lib/file-search.js.map +1 -0
- package/dist/lib/identity.d.ts +54 -0
- package/dist/lib/identity.d.ts.map +1 -0
- package/dist/lib/identity.js +124 -0
- package/dist/lib/identity.js.map +1 -0
- package/dist/lib/log-line-cleaner.d.ts +20 -0
- package/dist/lib/log-line-cleaner.d.ts.map +1 -0
- package/dist/lib/log-line-cleaner.js +117 -0
- package/dist/lib/log-line-cleaner.js.map +1 -0
- package/dist/lib/log-reader.d.ts +14 -0
- package/dist/lib/log-reader.d.ts.map +1 -0
- package/dist/lib/log-reader.js +80 -0
- package/dist/lib/log-reader.js.map +1 -0
- package/dist/lib/message-id.d.ts +30 -0
- package/dist/lib/message-id.d.ts.map +1 -0
- package/dist/lib/message-id.js +50 -0
- package/dist/lib/message-id.js.map +1 -0
- package/dist/lib/process-metrics.d.ts +11 -0
- package/dist/lib/process-metrics.d.ts.map +1 -0
- package/dist/lib/process-metrics.js +252 -0
- package/dist/lib/process-metrics.js.map +1 -0
- package/dist/lib/proxy-route-table.d.ts +16 -0
- package/dist/lib/proxy-route-table.d.ts.map +1 -0
- package/dist/lib/proxy-route-table.js +73 -0
- package/dist/lib/proxy-route-table.js.map +1 -0
- package/dist/lib/send-strategy.d.ts +62 -0
- package/dist/lib/send-strategy.d.ts.map +1 -0
- package/dist/lib/send-strategy.js +136 -0
- package/dist/lib/send-strategy.js.map +1 -0
- package/dist/lib/server-state.d.ts +115 -0
- package/dist/lib/server-state.d.ts.map +1 -0
- package/dist/lib/server-state.js +138 -0
- package/dist/lib/server-state.js.map +1 -0
- package/dist/lib/spawned-agents.d.ts +35 -0
- package/dist/lib/spawned-agents.d.ts.map +1 -0
- package/dist/lib/spawned-agents.js +340 -0
- package/dist/lib/spawned-agents.js.map +1 -0
- package/dist/lib/types.d.ts +123 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +12 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils.d.ts +71 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +332 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/websocket-runtime.d.ts +17 -0
- package/dist/lib/websocket-runtime.d.ts.map +1 -0
- package/dist/lib/websocket-runtime.js +76 -0
- package/dist/lib/websocket-runtime.js.map +1 -0
- package/dist/mocks/fixtures.d.ts +2 -2
- package/dist/mocks/fixtures.js +1 -1
- package/dist/mocks/routes.d.ts.map +1 -1
- package/dist/mocks/routes.js +30 -3
- package/dist/mocks/routes.js.map +1 -1
- package/dist/mocks/types.d.ts +1 -1
- package/dist/mocks/types.js +1 -1
- package/dist/proxy-server.d.ts +7 -33
- package/dist/proxy-server.d.ts.map +1 -1
- package/dist/proxy-server.js +353 -201
- package/dist/proxy-server.js.map +1 -1
- package/dist/relaycast-provider-helpers.d.ts +41 -0
- package/dist/relaycast-provider-helpers.d.ts.map +1 -0
- package/dist/relaycast-provider-helpers.js +285 -0
- package/dist/relaycast-provider-helpers.js.map +1 -0
- package/dist/relaycast-provider-types.d.ts +117 -0
- package/dist/relaycast-provider-types.d.ts.map +1 -0
- package/dist/relaycast-provider-types.js +6 -0
- package/dist/relaycast-provider-types.js.map +1 -0
- package/dist/relaycast-provider.d.ts +48 -0
- package/dist/relaycast-provider.d.ts.map +1 -0
- package/dist/relaycast-provider.js +293 -0
- package/dist/relaycast-provider.js.map +1 -0
- package/dist/routes/agents.d.ts +7 -0
- package/dist/routes/agents.d.ts.map +1 -0
- package/dist/routes/agents.js +180 -0
- package/dist/routes/agents.js.map +1 -0
- package/dist/routes/auth.d.ts +45 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/auth.js +261 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/broker-proxy.d.ts +7 -0
- package/dist/routes/broker-proxy.d.ts.map +1 -0
- package/dist/routes/broker-proxy.js +114 -0
- package/dist/routes/broker-proxy.js.map +1 -0
- package/dist/routes/channels-integrated.d.ts +84 -0
- package/dist/routes/channels-integrated.d.ts.map +1 -0
- package/dist/routes/channels-integrated.js +644 -0
- package/dist/routes/channels-integrated.js.map +1 -0
- package/dist/routes/channels.d.ts +7 -0
- package/dist/routes/channels.d.ts.map +1 -0
- package/dist/routes/channels.js +457 -0
- package/dist/routes/channels.js.map +1 -0
- package/dist/routes/data.d.ts +7 -0
- package/dist/routes/data.d.ts.map +1 -0
- package/dist/routes/data.js +108 -0
- package/dist/routes/data.js.map +1 -0
- package/dist/routes/decisions.d.ts +31 -0
- package/dist/routes/decisions.d.ts.map +1 -0
- package/dist/routes/decisions.js +109 -0
- package/dist/routes/decisions.js.map +1 -0
- package/dist/routes/fleet.d.ts +24 -0
- package/dist/routes/fleet.d.ts.map +1 -0
- package/dist/routes/fleet.js +131 -0
- package/dist/routes/fleet.js.map +1 -0
- package/dist/routes/health.d.ts +7 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +55 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/history-relaycast.d.ts +8 -0
- package/dist/routes/history-relaycast.d.ts.map +1 -0
- package/dist/routes/history-relaycast.js +165 -0
- package/dist/routes/history-relaycast.js.map +1 -0
- package/dist/routes/history.d.ts +13 -0
- package/dist/routes/history.d.ts.map +1 -0
- package/dist/routes/history.js +205 -0
- package/dist/routes/history.js.map +1 -0
- package/dist/routes/messaging.d.ts +34 -0
- package/dist/routes/messaging.d.ts.map +1 -0
- package/dist/routes/messaging.js +306 -0
- package/dist/routes/messaging.js.map +1 -0
- package/dist/routes/metrics.d.ts +26 -0
- package/dist/routes/metrics.d.ts.map +1 -0
- package/dist/routes/metrics.js +276 -0
- package/dist/routes/metrics.js.map +1 -0
- package/dist/routes/reactions.d.ts +9 -0
- package/dist/routes/reactions.d.ts.map +1 -0
- package/dist/routes/reactions.js +76 -0
- package/dist/routes/reactions.js.map +1 -0
- package/dist/routes/relay-config.d.ts +4 -0
- package/dist/routes/relay-config.d.ts.map +1 -0
- package/dist/routes/relay-config.js +81 -0
- package/dist/routes/relay-config.js.map +1 -0
- package/dist/routes/settings.d.ts +6 -0
- package/dist/routes/settings.d.ts.map +1 -0
- package/dist/routes/settings.js +119 -0
- package/dist/routes/settings.js.map +1 -0
- package/dist/routes/spawn.d.ts +74 -0
- package/dist/routes/spawn.d.ts.map +1 -0
- package/dist/routes/spawn.js +520 -0
- package/dist/routes/spawn.js.map +1 -0
- package/dist/routes/system.d.ts +21 -0
- package/dist/routes/system.d.ts.map +1 -0
- package/dist/routes/system.js +186 -0
- package/dist/routes/system.js.map +1 -0
- package/dist/routes/tasks.d.ts +27 -0
- package/dist/routes/tasks.d.ts.map +1 -0
- package/dist/routes/tasks.js +103 -0
- package/dist/routes/tasks.js.map +1 -0
- package/dist/routes/thread-replies.d.ts +7 -0
- package/dist/routes/thread-replies.d.ts.map +1 -0
- package/dist/routes/thread-replies.js +178 -0
- package/dist/routes/thread-replies.js.map +1 -0
- package/dist/routes/ui.d.ts +6 -0
- package/dist/routes/ui.d.ts.map +1 -0
- package/dist/routes/ui.js +114 -0
- package/dist/routes/ui.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +304 -6152
- package/dist/server.js.map +1 -1
- package/dist/services/broker-spawn-reader.d.ts +1 -1
- package/dist/services/broker-spawn-reader.d.ts.map +1 -1
- package/dist/services/broker-spawn-reader.js +3 -2
- package/dist/services/broker-spawn-reader.js.map +1 -1
- package/dist/services/health-worker-manager.d.ts +9 -60
- package/dist/services/health-worker-manager.d.ts.map +1 -1
- package/dist/services/health-worker-manager.js +18 -148
- package/dist/services/health-worker-manager.js.map +1 -1
- package/dist/services/index.d.ts +3 -3
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -3
- package/dist/services/index.js.map +1 -1
- package/dist/services/metrics.d.ts +11 -104
- package/dist/services/metrics.d.ts.map +1 -1
- package/dist/services/metrics.js +21 -190
- package/dist/services/metrics.js.map +1 -1
- package/dist/services/needs-attention.d.ts +21 -22
- package/dist/services/needs-attention.d.ts.map +1 -1
- package/dist/services/needs-attention.js +46 -71
- package/dist/services/needs-attention.js.map +1 -1
- package/dist/services/user-bridge.d.ts +0 -3
- package/dist/services/user-bridge.d.ts.map +1 -1
- package/dist/services/user-bridge.js +0 -5
- package/dist/services/user-bridge.js.map +1 -1
- package/dist/start.d.ts +4 -4
- package/dist/start.js +97 -89
- package/dist/start.js.map +1 -1
- package/dist/types/index.d.ts +11 -21
- package/dist/types/index.d.ts.map +1 -1
- package/dist/websocket/bridge.d.ts +12 -0
- package/dist/websocket/bridge.d.ts.map +1 -0
- package/dist/websocket/bridge.js +33 -0
- package/dist/websocket/bridge.js.map +1 -0
- package/dist/websocket/logs.d.ts +30 -0
- package/dist/websocket/logs.d.ts.map +1 -0
- package/dist/websocket/logs.js +577 -0
- package/dist/websocket/logs.js.map +1 -0
- package/dist/websocket/main.d.ts +15 -0
- package/dist/websocket/main.d.ts.map +1 -0
- package/dist/websocket/main.js +84 -0
- package/dist/websocket/main.js.map +1 -0
- package/dist/websocket/mock.d.ts +6 -0
- package/dist/websocket/mock.d.ts.map +1 -0
- package/dist/websocket/mock.js +49 -0
- package/dist/websocket/mock.js.map +1 -0
- package/dist/websocket/presence.d.ts +74 -0
- package/dist/websocket/presence.d.ts.map +1 -0
- package/dist/websocket/presence.js +330 -0
- package/dist/websocket/presence.js.map +1 -0
- package/dist/websocket/proxy.d.ts +6 -0
- package/dist/websocket/proxy.d.ts.map +1 -0
- package/dist/websocket/proxy.js +39 -0
- package/dist/websocket/proxy.js.map +1 -0
- package/dist/websocket/standalone.d.ts +17 -0
- package/dist/websocket/standalone.d.ts.map +1 -0
- package/dist/websocket/standalone.js +268 -0
- package/dist/websocket/standalone.js.map +1 -0
- package/out/404.html +1 -1
- package/out/_next/static/{TnAI-TAQ4-bNJRL3Ln3NB → 49XhcS8k_e8607S7KBMwA}/_buildManifest.js +1 -1
- package/out/_next/static/chunks/1028-53c5a7e2453505f8.js +1 -0
- package/out/_next/static/chunks/1528-78b17000a7e10bc6.js +2 -0
- package/out/_next/static/chunks/1695-4a5d33ba715e09b4.js +1 -0
- package/out/_next/static/chunks/1705-36c2180d00a4a569.js +1 -0
- package/out/_next/static/chunks/1dd3208c-e1f87c7b3dc1a820.js +1 -0
- package/out/_next/static/chunks/3663-47290254b8f6f5dd.js +1 -0
- package/out/_next/static/chunks/3677-4b225baf4801d9b9.js +73 -0
- package/out/_next/static/chunks/5118-de1c8f968feab8e2.js +1 -0
- package/out/_next/static/chunks/5888-15cbe97c90ed5fae.js +1 -0
- package/out/_next/static/chunks/6773-a45343a98df3abb5.js +1 -0
- package/out/_next/static/chunks/6940-b824612b605e79b3.js +9 -0
- package/out/_next/static/chunks/7894-f4a15249082a680d.js +1 -0
- package/out/_next/static/chunks/9175-b3617c1e5cbfed0e.js +1 -0
- package/out/_next/static/chunks/9372-1a804b8d08c7a236.js +1 -0
- package/out/_next/static/chunks/{ab6c8a12-0a58072fbb505134.js → ab6c8a12-91438a812d94ecf0.js} +1 -1
- package/out/_next/static/chunks/app/_not-found/page-8e8842f82d204726.js +1 -0
- package/out/_next/static/chunks/app/about/page-b78577a7da8fa459.js +1 -0
- package/out/_next/static/chunks/app/app/[[...slug]]/page-3dffd65b6344f53e.js +1 -0
- package/out/_next/static/chunks/app/app/onboarding/page-b89be9aa6264a5e1.js +1 -0
- package/out/_next/static/chunks/app/blog/go-to-bed-wake-up-to-a-finished-product/page-fbd00893ef69e499.js +1 -0
- package/out/_next/static/chunks/app/blog/let-them-cook-multi-agent-orchestration/page-de2ea13649d0b6d3.js +1 -0
- package/out/_next/static/chunks/app/blog/page-a08e263c57a156fa.js +1 -0
- package/out/_next/static/chunks/app/careers/page-02228e1d6969b232.js +1 -0
- package/out/_next/static/chunks/app/changelog/page-1b5c1d79efc6e53a.js +1 -0
- package/out/_next/static/chunks/app/cloud/link/page-99654edffffb3af2.js +1 -0
- package/out/_next/static/chunks/app/complete-profile/page-59d146e5ddeafc5c.js +1 -0
- package/out/_next/static/chunks/app/connect-repos/page-995e16a976a6632c.js +1 -0
- package/out/_next/static/chunks/app/contact/page-273396a5ad57bcee.js +1 -0
- package/out/_next/static/chunks/app/dev/cli-tools/page-a71b80dcb2d5fc8d.js +1 -0
- package/out/_next/static/chunks/app/dev/log-viewer/page-46a6151ae1be0796.js +1 -0
- package/out/_next/static/chunks/app/docs/page-7c7cb603b24b7c40.js +1 -0
- package/out/_next/static/chunks/app/history/page-0c5cab1dab4e8886.js +1 -0
- package/out/_next/static/chunks/app/layout-96d72ba8ef8a43a0.js +1 -0
- package/out/_next/static/chunks/app/login/page-0ccbab34213df842.js +1 -0
- package/out/_next/static/chunks/app/metrics/page-8616272aeab9c8b0.js +1 -0
- package/out/_next/static/chunks/app/page-09ce10603ad9a251.js +1 -0
- package/out/_next/static/chunks/app/pricing/page-91c975079120c941.js +1 -0
- package/out/_next/static/chunks/app/privacy/{page-c21d51ac2dee3a88.js → page-a49ab271cc686644.js} +1 -1
- package/out/_next/static/chunks/app/providers/{page-59114505f4353512.js → page-d775d6eb5bc29e96.js} +1 -1
- package/out/_next/static/chunks/app/providers/setup/[provider]/page-ec4ef3cd80de807e.js +1 -0
- package/out/_next/static/chunks/app/security/page-d9da9bd9191e8f95.js +1 -0
- package/out/_next/static/chunks/app/signup/page-930eca0bf5fd299d.js +1 -0
- package/out/_next/static/chunks/app/terms/page-3e4827620b98613c.js +1 -0
- package/out/_next/static/chunks/framework-648e1ae7da590300.js +1 -0
- package/out/_next/static/chunks/{main-acb1b24265295d6a.js → main-2b1990080c292d92.js} +1 -1
- package/out/_next/static/chunks/main-app-9f6b7ff9e754a8f5.js +1 -0
- package/out/_next/static/chunks/pages/_app-a077b72e02273ab1.js +1 -0
- package/out/_next/static/chunks/pages/_error-84001666436a04e4.js +1 -0
- package/out/_next/static/chunks/{webpack-dd93b81e2659669c.js → webpack-7586035f1585f2db.js} +1 -1
- package/out/_next/static/css/eb9fc69d1e3d2bed.css +1 -0
- package/out/about.html +2 -2
- package/out/about.txt +2 -2
- package/out/app/onboarding.html +1 -1
- package/out/app/onboarding.txt +2 -2
- package/out/app.html +1 -1
- package/out/app.txt +2 -2
- package/out/blog/go-to-bed-wake-up-to-a-finished-product.html +3 -3
- package/out/blog/go-to-bed-wake-up-to-a-finished-product.txt +1 -1
- package/out/blog/let-them-cook-multi-agent-orchestration.html +2 -2
- package/out/blog/let-them-cook-multi-agent-orchestration.txt +2 -2
- package/out/blog.html +2 -2
- package/out/blog.txt +1 -1
- package/out/careers.html +2 -2
- package/out/careers.txt +2 -2
- package/out/changelog.html +2 -2
- package/out/changelog.txt +2 -2
- package/out/cloud/link.html +1 -1
- package/out/cloud/link.txt +2 -2
- package/out/complete-profile.html +2 -2
- package/out/complete-profile.txt +2 -2
- package/out/connect-repos.html +1 -1
- package/out/connect-repos.txt +2 -2
- package/out/contact.html +2 -2
- package/out/contact.txt +2 -2
- package/out/dev/cli-tools.html +1 -0
- package/out/dev/cli-tools.txt +7 -0
- package/out/dev/log-viewer.html +23 -0
- package/out/dev/log-viewer.txt +7 -0
- package/out/docs.html +2 -2
- package/out/docs.txt +2 -2
- package/out/history.html +1 -1
- package/out/history.txt +2 -2
- package/out/index.html +1 -1
- package/out/index.txt +2 -2
- package/out/login.html +2 -2
- package/out/login.txt +2 -2
- package/out/metrics.html +1 -1
- package/out/metrics.txt +2 -2
- package/out/pricing.html +2 -2
- package/out/pricing.txt +2 -2
- package/out/privacy.html +2 -2
- package/out/privacy.txt +2 -2
- package/out/providers/setup/claude.html +1 -1
- package/out/providers/setup/claude.txt +2 -2
- package/out/providers/setup/codex.html +1 -1
- package/out/providers/setup/codex.txt +2 -2
- package/out/providers/setup/cursor.html +1 -1
- package/out/providers/setup/cursor.txt +2 -2
- package/out/providers.html +1 -1
- package/out/providers.txt +2 -2
- package/out/security.html +2 -2
- package/out/security.txt +2 -2
- package/out/signup.html +2 -2
- package/out/signup.txt +2 -2
- package/out/terms.html +2 -2
- package/out/terms.txt +2 -2
- package/package.json +10 -11
- package/out/_next/static/chunks/11-9a2993a37266dcb3.js +0 -9
- package/out/_next/static/chunks/118-ae2b650136a5a5fc.js +0 -1
- package/out/_next/static/chunks/1dd3208c-40ab0fc0f60392b8.js +0 -1
- package/out/_next/static/chunks/202-fc0763dd7488e58f.js +0 -1
- package/out/_next/static/chunks/259-83b77fa1b91ba5aa.js +0 -1
- package/out/_next/static/chunks/407-0c82986cf79c8ecb.js +0 -1
- package/out/_next/static/chunks/528-f5f676996d613c25.js +0 -2
- package/out/_next/static/chunks/663-ddb04081febc3678.js +0 -1
- package/out/_next/static/chunks/687-88b6b139a6bb0e2e.js +0 -1
- package/out/_next/static/chunks/695-51d25b1988644374.js +0 -1
- package/out/_next/static/chunks/773-54a2641043c81e55.js +0 -1
- package/out/_next/static/chunks/app/_not-found/page-6da9b72091e5b511.js +0 -1
- package/out/_next/static/chunks/app/about/page-fff7c6457683f243.js +0 -1
- package/out/_next/static/chunks/app/app/[[...slug]]/page-f7eca1b66fb4249b.js +0 -1
- package/out/_next/static/chunks/app/app/onboarding/page-129abc5da2e67971.js +0 -1
- package/out/_next/static/chunks/app/blog/go-to-bed-wake-up-to-a-finished-product/page-5d5f28fd126b692f.js +0 -1
- package/out/_next/static/chunks/app/blog/let-them-cook-multi-agent-orchestration/page-b194f207fbd91862.js +0 -1
- package/out/_next/static/chunks/app/blog/page-b9bd9d8703fca76a.js +0 -1
- package/out/_next/static/chunks/app/careers/page-a4bd8d5f4de8f4eb.js +0 -1
- package/out/_next/static/chunks/app/changelog/page-9a1f6ad1743d63c5.js +0 -1
- package/out/_next/static/chunks/app/cloud/link/page-0844c5699b027c3b.js +0 -1
- package/out/_next/static/chunks/app/complete-profile/page-39ed5a67916beb87.js +0 -1
- package/out/_next/static/chunks/app/connect-repos/page-297eddee0c39f2a3.js +0 -1
- package/out/_next/static/chunks/app/contact/page-3c1dd8690217fade.js +0 -1
- package/out/_next/static/chunks/app/docs/page-1875e981f2c3fd13.js +0 -1
- package/out/_next/static/chunks/app/history/page-2d5c5695c9e8b40c.js +0 -1
- package/out/_next/static/chunks/app/layout-0a4b99656da25511.js +0 -1
- package/out/_next/static/chunks/app/login/page-f69c076f5a6fc520.js +0 -1
- package/out/_next/static/chunks/app/metrics/page-bebbee055669a17e.js +0 -1
- package/out/_next/static/chunks/app/page-0ee604f7070d14c0.js +0 -1
- package/out/_next/static/chunks/app/pricing/page-eeae7d594af333b6.js +0 -1
- package/out/_next/static/chunks/app/providers/setup/[provider]/page-daf9b3e05e77ae19.js +0 -1
- package/out/_next/static/chunks/app/security/page-cd562730fe84a0a2.js +0 -1
- package/out/_next/static/chunks/app/signup/page-c242ca08101a84ff.js +0 -1
- package/out/_next/static/chunks/app/terms/page-c7001720e7941dc6.js +0 -1
- package/out/_next/static/chunks/framework-3664cab31236a9fa.js +0 -1
- package/out/_next/static/chunks/main-app-7f73a939a312a228.js +0 -1
- package/out/_next/static/chunks/pages/_app-10a93ab5b7c32eb3.js +0 -1
- package/out/_next/static/chunks/pages/_error-2d792b2a41857be4.js +0 -1
- package/out/_next/static/css/8968d98ed4c4d33f.css +0 -1
- /package/out/_next/static/{TnAI-TAQ4-bNJRL3Ln3NB → 49XhcS8k_e8607S7KBMwA}/_ssgManifest.js +0 -0
|
@@ -1,62 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* Manages the health check worker thread, sending periodic stats updates
|
|
5
|
-
* and handling worker lifecycle.
|
|
6
|
-
*/
|
|
7
|
-
export interface HealthWorkerConfig {
|
|
8
|
-
/** Port for health check server (default: main port + 1) */
|
|
9
|
-
port: number;
|
|
10
|
-
/** Interval for sending stats updates (default: 5000ms) */
|
|
11
|
-
statsInterval?: number;
|
|
1
|
+
export interface BrokerHealthProxyRequest {
|
|
2
|
+
workspaceId?: string;
|
|
3
|
+
authorization?: string;
|
|
12
4
|
}
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
export declare class HealthWorkerManager {
|
|
21
|
-
private worker;
|
|
22
|
-
private statsInterval;
|
|
23
|
-
private config;
|
|
24
|
-
private statsProvider;
|
|
25
|
-
private ready;
|
|
26
|
-
constructor(config: HealthWorkerConfig, statsProvider: HealthStatsProvider);
|
|
27
|
-
/**
|
|
28
|
-
* Start the health worker thread
|
|
29
|
-
*/
|
|
30
|
-
start(): Promise<void>;
|
|
31
|
-
/**
|
|
32
|
-
* Stop the health worker thread
|
|
33
|
-
*/
|
|
34
|
-
stop(): Promise<void>;
|
|
35
|
-
/**
|
|
36
|
-
* Check if worker is ready
|
|
37
|
-
*/
|
|
38
|
-
isReady(): boolean;
|
|
39
|
-
/**
|
|
40
|
-
* Get the port the health worker is listening on
|
|
41
|
-
*/
|
|
42
|
-
getPort(): number;
|
|
43
|
-
/**
|
|
44
|
-
* Start periodic stats updates to worker
|
|
45
|
-
*/
|
|
46
|
-
private startStatsUpdates;
|
|
47
|
-
/**
|
|
48
|
-
* Stop stats updates
|
|
49
|
-
*/
|
|
50
|
-
private stopStatsUpdates;
|
|
51
|
-
/**
|
|
52
|
-
* Send current stats to worker
|
|
53
|
-
*/
|
|
54
|
-
private sendStats;
|
|
55
|
-
}
|
|
56
|
-
/** Default health port offset from main port */
|
|
57
|
-
export declare const HEALTH_PORT_OFFSET = 1;
|
|
58
|
-
/**
|
|
59
|
-
* Calculate health port from main port
|
|
60
|
-
*/
|
|
61
|
-
export declare function getHealthPort(mainPort: number): number;
|
|
5
|
+
export declare function fetchBrokerHealth(opts?: {
|
|
6
|
+
env?: NodeJS.ProcessEnv;
|
|
7
|
+
request?: BrokerHealthProxyRequest;
|
|
8
|
+
query?: URLSearchParams;
|
|
9
|
+
fetchImpl?: typeof fetch;
|
|
10
|
+
}): Promise<Response>;
|
|
62
11
|
//# sourceMappingURL=health-worker-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health-worker-manager.d.ts","sourceRoot":"","sources":["../../src/services/health-worker-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"health-worker-manager.d.ts","sourceRoot":"","sources":["../../src/services/health-worker-manager.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,wBAAwB;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAUD,wBAAsB,iBAAiB,CAAC,IAAI,GAAE;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACrB,GAAG,OAAO,CAAC,QAAQ,CAAC,CASzB"}
|
|
@@ -1,151 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const __dirname = path.dirname(__filename);
|
|
12
|
-
// Detect if running from a Bun bundled binary (virtual filesystem)
|
|
13
|
-
const IS_BUNDLED = __dirname.startsWith('/$bunfs/');
|
|
14
|
-
export class HealthWorkerManager {
|
|
15
|
-
worker = null;
|
|
16
|
-
statsInterval = null;
|
|
17
|
-
config;
|
|
18
|
-
statsProvider;
|
|
19
|
-
ready = false;
|
|
20
|
-
constructor(config, statsProvider) {
|
|
21
|
-
this.config = {
|
|
22
|
-
statsInterval: 5000,
|
|
23
|
-
...config,
|
|
24
|
-
};
|
|
25
|
-
this.statsProvider = statsProvider;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Start the health worker thread
|
|
29
|
-
*/
|
|
30
|
-
async start() {
|
|
31
|
-
// Worker threads don't work in Bun bundled binaries - the worker file
|
|
32
|
-
// isn't accessible from the virtual filesystem. Fall back to main thread.
|
|
33
|
-
if (IS_BUNDLED) {
|
|
34
|
-
throw new Error('Worker threads not supported in bundled binary');
|
|
35
|
-
}
|
|
36
|
-
if (this.worker) {
|
|
37
|
-
console.warn('[health-manager] Worker already running');
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
return new Promise((resolve, reject) => {
|
|
41
|
-
// Worker script path - handle both dev (src) and prod (dist)
|
|
42
|
-
const workerPath = path.join(__dirname, 'health-worker.js');
|
|
43
|
-
this.worker = new Worker(workerPath, {
|
|
44
|
-
workerData: { port: this.config.port },
|
|
45
|
-
});
|
|
46
|
-
this.worker.on('message', (msg) => {
|
|
47
|
-
if (msg.type === 'ready') {
|
|
48
|
-
this.ready = true;
|
|
49
|
-
console.log(`[health-manager] Worker ready on port ${msg.port}`);
|
|
50
|
-
this.startStatsUpdates();
|
|
51
|
-
resolve();
|
|
52
|
-
}
|
|
53
|
-
else if (msg.type === 'error') {
|
|
54
|
-
console.error('[health-manager] Worker error:', msg.error);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
this.worker.on('error', (err) => {
|
|
58
|
-
console.error('[health-manager] Worker thread error:', err);
|
|
59
|
-
if (!this.ready) {
|
|
60
|
-
reject(err);
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
this.worker.on('exit', (code) => {
|
|
64
|
-
console.log(`[health-manager] Worker exited with code ${code}`);
|
|
65
|
-
this.ready = false;
|
|
66
|
-
this.worker = null;
|
|
67
|
-
this.stopStatsUpdates();
|
|
68
|
-
});
|
|
69
|
-
// Timeout for worker startup
|
|
70
|
-
setTimeout(() => {
|
|
71
|
-
if (!this.ready) {
|
|
72
|
-
reject(new Error('Health worker startup timeout'));
|
|
73
|
-
}
|
|
74
|
-
}, 10000);
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Stop the health worker thread
|
|
79
|
-
*/
|
|
80
|
-
async stop() {
|
|
81
|
-
this.stopStatsUpdates();
|
|
82
|
-
if (this.worker) {
|
|
83
|
-
await this.worker.terminate();
|
|
84
|
-
this.worker = null;
|
|
85
|
-
this.ready = false;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Check if worker is ready
|
|
90
|
-
*/
|
|
91
|
-
isReady() {
|
|
92
|
-
return this.ready;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Get the port the health worker is listening on
|
|
96
|
-
*/
|
|
97
|
-
getPort() {
|
|
98
|
-
return this.config.port;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Start periodic stats updates to worker
|
|
102
|
-
*/
|
|
103
|
-
startStatsUpdates() {
|
|
104
|
-
if (this.statsInterval)
|
|
105
|
-
return;
|
|
106
|
-
// Send initial stats
|
|
107
|
-
this.sendStats();
|
|
108
|
-
// Send periodic updates
|
|
109
|
-
this.statsInterval = setInterval(() => {
|
|
110
|
-
this.sendStats();
|
|
111
|
-
}, this.config.statsInterval);
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Stop stats updates
|
|
115
|
-
*/
|
|
116
|
-
stopStatsUpdates() {
|
|
117
|
-
if (this.statsInterval) {
|
|
118
|
-
clearInterval(this.statsInterval);
|
|
119
|
-
this.statsInterval = null;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Send current stats to worker
|
|
124
|
-
*/
|
|
125
|
-
sendStats() {
|
|
126
|
-
if (!this.worker || !this.ready)
|
|
127
|
-
return;
|
|
128
|
-
try {
|
|
129
|
-
const stats = {
|
|
130
|
-
uptime: this.statsProvider.getUptime(),
|
|
131
|
-
memoryMB: this.statsProvider.getMemoryMB(),
|
|
132
|
-
relayConnected: this.statsProvider.getRelayConnected(),
|
|
133
|
-
agentCount: this.statsProvider.getAgentCount(),
|
|
134
|
-
status: this.statsProvider.getStatus(),
|
|
135
|
-
};
|
|
136
|
-
this.worker.postMessage(stats);
|
|
137
|
-
}
|
|
138
|
-
catch (err) {
|
|
139
|
-
console.error('[health-manager] Failed to send stats:', err);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
1
|
+
import { buildDashboardProxyUrl, getDashboardProxyRoute } from '../lib/proxy-route-table.js';
|
|
2
|
+
function buildHeaders(request) {
|
|
3
|
+
if (!request)
|
|
4
|
+
return undefined;
|
|
5
|
+
const headers = {};
|
|
6
|
+
if (request.authorization)
|
|
7
|
+
headers.authorization = request.authorization;
|
|
8
|
+
if (request.workspaceId)
|
|
9
|
+
headers['x-workspace-id'] = request.workspaceId;
|
|
10
|
+
return Object.keys(headers).length > 0 ? headers : undefined;
|
|
142
11
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
12
|
+
export async function fetchBrokerHealth(opts = {}) {
|
|
13
|
+
const route = getDashboardProxyRoute('brokerHealth');
|
|
14
|
+
const url = buildDashboardProxyUrl(route, { env: opts.env, query: opts.query });
|
|
15
|
+
const fetchImpl = opts.fetchImpl ?? fetch;
|
|
16
|
+
return fetchImpl(url, {
|
|
17
|
+
method: route.method,
|
|
18
|
+
headers: buildHeaders(opts.request),
|
|
19
|
+
});
|
|
150
20
|
}
|
|
151
21
|
//# sourceMappingURL=health-worker-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health-worker-manager.js","sourceRoot":"","sources":["../../src/services/health-worker-manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"health-worker-manager.js","sourceRoot":"","sources":["../../src/services/health-worker-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAO7F,SAAS,YAAY,CAAC,OAAkC;IACtD,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,OAAO,CAAC,aAAa;QAAE,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IACzE,IAAI,OAAO,CAAC,WAAW;QAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IACzE,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAKpC,EAAE;IACJ,MAAM,KAAK,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,sBAAsB,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAE1C,OAAO,SAAS,CAAC,GAAG,EAAE;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;KACpC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Re-exports all service modules for the dashboard server.
|
|
5
5
|
*/
|
|
6
6
|
export { UserBridge, type IRelayClient } from './user-bridge.js';
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
7
|
+
export { fetchCloudNeedsAttention, parseNeedsAttentionAgents, type NeedsAttentionProxyRequest, type NeedsAttentionPayload, } from './needs-attention.js';
|
|
8
|
+
export { fetchCloudMetrics, type MetricsProxyRequest } from './metrics.js';
|
|
9
|
+
export { fetchBrokerHealth, type BrokerHealthProxyRequest } from './health-worker-manager.js';
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/services/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Re-exports all service modules for the dashboard server.
|
|
5
5
|
*/
|
|
6
6
|
export { UserBridge } from './user-bridge.js';
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
7
|
+
export { fetchCloudNeedsAttention, parseNeedsAttentionAgents, } from './needs-attention.js';
|
|
8
|
+
export { fetchCloudMetrics } from './metrics.js';
|
|
9
|
+
export { fetchBrokerHealth } from './health-worker-manager.js';
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAC;AACjE,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAG1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAA4B,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAiC,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,105 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
uptimeSeconds: number;
|
|
13
|
-
}
|
|
14
|
-
export interface ThroughputMetrics {
|
|
15
|
-
messagesLastMinute: number;
|
|
16
|
-
messagesLastHour: number;
|
|
17
|
-
messagesLast24Hours: number;
|
|
18
|
-
avgMessagesPerMinute: number;
|
|
19
|
-
}
|
|
20
|
-
export interface SessionMetrics {
|
|
21
|
-
totalSessions: number;
|
|
22
|
-
activeSessions: number;
|
|
23
|
-
closedByAgent: number;
|
|
24
|
-
closedByDisconnect: number;
|
|
25
|
-
closedByError: number;
|
|
26
|
-
errorRate: number;
|
|
27
|
-
recentSessions: Array<{
|
|
28
|
-
id: string;
|
|
29
|
-
agentName: string;
|
|
30
|
-
startedAt: string;
|
|
31
|
-
endedAt?: string;
|
|
32
|
-
closedBy?: 'agent' | 'disconnect' | 'error';
|
|
33
|
-
messageCount: number;
|
|
34
|
-
}>;
|
|
35
|
-
}
|
|
36
|
-
export interface SystemMetrics {
|
|
37
|
-
totalAgents: number;
|
|
38
|
-
onlineAgents: number;
|
|
39
|
-
offlineAgents: number;
|
|
40
|
-
totalMessages: number;
|
|
41
|
-
throughput: ThroughputMetrics;
|
|
42
|
-
sessions: SessionMetrics;
|
|
43
|
-
agents: AgentMetrics[];
|
|
44
|
-
timestamp: string;
|
|
45
|
-
}
|
|
46
|
-
export interface PrometheusMetric {
|
|
47
|
-
name: string;
|
|
48
|
-
help: string;
|
|
49
|
-
type: 'counter' | 'gauge' | 'histogram';
|
|
50
|
-
values: Array<{
|
|
51
|
-
labels: Record<string, string>;
|
|
52
|
-
value: number;
|
|
53
|
-
}>;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Compute agent-level metrics from registry data
|
|
57
|
-
*/
|
|
58
|
-
export declare function computeAgentMetrics(agents: Array<{
|
|
59
|
-
name: string;
|
|
60
|
-
messagesSent: number;
|
|
61
|
-
messagesReceived: number;
|
|
62
|
-
firstSeen: string;
|
|
63
|
-
lastSeen: string;
|
|
64
|
-
}>): AgentMetrics[];
|
|
65
|
-
/**
|
|
66
|
-
* Compute throughput metrics from message history
|
|
67
|
-
*/
|
|
68
|
-
export declare function computeThroughputMetrics(messages: Array<{
|
|
69
|
-
timestamp: string;
|
|
70
|
-
}>): ThroughputMetrics;
|
|
71
|
-
/**
|
|
72
|
-
* Compute session lifecycle metrics from session history
|
|
73
|
-
*/
|
|
74
|
-
export declare function computeSessionMetrics(sessions: Array<{
|
|
75
|
-
id: string;
|
|
76
|
-
agentName: string;
|
|
77
|
-
startedAt: number;
|
|
78
|
-
endedAt?: number;
|
|
79
|
-
closedBy?: 'agent' | 'disconnect' | 'error';
|
|
80
|
-
messageCount: number;
|
|
81
|
-
}>): SessionMetrics;
|
|
82
|
-
/**
|
|
83
|
-
* Compute full system metrics
|
|
84
|
-
*/
|
|
85
|
-
export declare function computeSystemMetrics(agents: Array<{
|
|
86
|
-
name: string;
|
|
87
|
-
messagesSent: number;
|
|
88
|
-
messagesReceived: number;
|
|
89
|
-
firstSeen: string;
|
|
90
|
-
lastSeen: string;
|
|
91
|
-
}>, messages: Array<{
|
|
92
|
-
timestamp: string;
|
|
93
|
-
}>, sessions?: Array<{
|
|
94
|
-
id: string;
|
|
95
|
-
agentName: string;
|
|
96
|
-
startedAt: number;
|
|
97
|
-
endedAt?: number;
|
|
98
|
-
closedBy?: 'agent' | 'disconnect' | 'error';
|
|
99
|
-
messageCount: number;
|
|
100
|
-
}>): SystemMetrics;
|
|
101
|
-
/**
|
|
102
|
-
* Format metrics in Prometheus exposition format
|
|
103
|
-
*/
|
|
104
|
-
export declare function formatPrometheusMetrics(metrics: SystemMetrics): string;
|
|
1
|
+
export interface MetricsProxyRequest {
|
|
2
|
+
workspaceId?: string;
|
|
3
|
+
authorization?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function fetchCloudMetrics(opts?: {
|
|
6
|
+
env?: NodeJS.ProcessEnv;
|
|
7
|
+
request?: MetricsProxyRequest;
|
|
8
|
+
query?: URLSearchParams;
|
|
9
|
+
upstreamPath?: string;
|
|
10
|
+
fetchImpl?: typeof fetch;
|
|
11
|
+
}): Promise<Response>;
|
|
105
12
|
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/services/metrics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/services/metrics.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAUD,wBAAsB,iBAAiB,CAAC,IAAI,GAAE;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACrB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAYzB"}
|
package/dist/services/metrics.js
CHANGED
|
@@ -1,193 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export function computeAgentMetrics(agents) {
|
|
12
|
-
const now = Date.now();
|
|
13
|
-
return agents.map((agent) => {
|
|
14
|
-
const lastSeenTime = new Date(agent.lastSeen).getTime();
|
|
15
|
-
const firstSeenTime = new Date(agent.firstSeen).getTime();
|
|
16
|
-
const isOnline = now - lastSeenTime < OFFLINE_THRESHOLD_MS;
|
|
17
|
-
const uptimeSeconds = Math.floor((now - firstSeenTime) / 1000);
|
|
18
|
-
return {
|
|
19
|
-
name: agent.name,
|
|
20
|
-
messagesSent: agent.messagesSent,
|
|
21
|
-
messagesReceived: agent.messagesReceived,
|
|
22
|
-
firstSeen: agent.firstSeen,
|
|
23
|
-
lastSeen: agent.lastSeen,
|
|
24
|
-
isOnline,
|
|
25
|
-
uptimeSeconds,
|
|
26
|
-
};
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Compute throughput metrics from message history
|
|
31
|
-
*/
|
|
32
|
-
export function computeThroughputMetrics(messages) {
|
|
33
|
-
const now = Date.now();
|
|
34
|
-
const oneMinuteAgo = now - 60 * 1000;
|
|
35
|
-
const oneHourAgo = now - 60 * 60 * 1000;
|
|
36
|
-
const oneDayAgo = now - 24 * 60 * 60 * 1000;
|
|
37
|
-
let lastMinute = 0;
|
|
38
|
-
let lastHour = 0;
|
|
39
|
-
let last24Hours = 0;
|
|
40
|
-
for (const msg of messages) {
|
|
41
|
-
const ts = new Date(msg.timestamp).getTime();
|
|
42
|
-
if (ts >= oneMinuteAgo)
|
|
43
|
-
lastMinute++;
|
|
44
|
-
if (ts >= oneHourAgo)
|
|
45
|
-
lastHour++;
|
|
46
|
-
if (ts >= oneDayAgo)
|
|
47
|
-
last24Hours++;
|
|
48
|
-
}
|
|
49
|
-
// Calculate average messages per minute over the last hour
|
|
50
|
-
const avgMessagesPerMinute = lastHour / 60;
|
|
51
|
-
return {
|
|
52
|
-
messagesLastMinute: lastMinute,
|
|
53
|
-
messagesLastHour: lastHour,
|
|
54
|
-
messagesLast24Hours: last24Hours,
|
|
55
|
-
avgMessagesPerMinute: Math.round(avgMessagesPerMinute * 100) / 100,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Compute session lifecycle metrics from session history
|
|
60
|
-
*/
|
|
61
|
-
export function computeSessionMetrics(sessions) {
|
|
62
|
-
let activeSessions = 0;
|
|
63
|
-
let closedByAgent = 0;
|
|
64
|
-
let closedByDisconnect = 0;
|
|
65
|
-
let closedByError = 0;
|
|
66
|
-
for (const session of sessions) {
|
|
67
|
-
if (!session.endedAt) {
|
|
68
|
-
activeSessions++;
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
switch (session.closedBy) {
|
|
72
|
-
case 'agent':
|
|
73
|
-
closedByAgent++;
|
|
74
|
-
break;
|
|
75
|
-
case 'disconnect':
|
|
76
|
-
closedByDisconnect++;
|
|
77
|
-
break;
|
|
78
|
-
case 'error':
|
|
79
|
-
closedByError++;
|
|
80
|
-
break;
|
|
81
|
-
default:
|
|
82
|
-
// Ended but no closedBy - treat as disconnect
|
|
83
|
-
closedByDisconnect++;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
const closedSessions = closedByAgent + closedByDisconnect + closedByError;
|
|
88
|
-
const errorRate = closedSessions > 0 ? (closedByError / closedSessions) * 100 : 0;
|
|
89
|
-
// Format recent sessions for display (most recent 10)
|
|
90
|
-
const recentSessions = sessions
|
|
91
|
-
.slice(0, 10)
|
|
92
|
-
.map((s) => ({
|
|
93
|
-
id: s.id,
|
|
94
|
-
agentName: s.agentName,
|
|
95
|
-
startedAt: new Date(s.startedAt).toISOString(),
|
|
96
|
-
endedAt: s.endedAt ? new Date(s.endedAt).toISOString() : undefined,
|
|
97
|
-
closedBy: s.closedBy,
|
|
98
|
-
messageCount: s.messageCount,
|
|
99
|
-
}));
|
|
100
|
-
return {
|
|
101
|
-
totalSessions: sessions.length,
|
|
102
|
-
activeSessions,
|
|
103
|
-
closedByAgent,
|
|
104
|
-
closedByDisconnect,
|
|
105
|
-
closedByError,
|
|
106
|
-
errorRate: Math.round(errorRate * 100) / 100,
|
|
107
|
-
recentSessions,
|
|
108
|
-
};
|
|
1
|
+
import { buildDashboardProxyUrl, getDashboardProxyRoute } from '../lib/proxy-route-table.js';
|
|
2
|
+
function buildHeaders(request) {
|
|
3
|
+
if (!request)
|
|
4
|
+
return undefined;
|
|
5
|
+
const headers = {};
|
|
6
|
+
if (request.authorization)
|
|
7
|
+
headers.authorization = request.authorization;
|
|
8
|
+
if (request.workspaceId)
|
|
9
|
+
headers['x-workspace-id'] = request.workspaceId;
|
|
10
|
+
return Object.keys(headers).length > 0 ? headers : undefined;
|
|
109
11
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
const
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
onlineAgents,
|
|
122
|
-
offlineAgents: agents.length - onlineAgents,
|
|
123
|
-
totalMessages: Math.round(totalMessages),
|
|
124
|
-
throughput,
|
|
125
|
-
sessions: sessionMetrics,
|
|
126
|
-
agents: agentMetrics,
|
|
127
|
-
timestamp: new Date().toISOString(),
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Format metrics in Prometheus exposition format
|
|
132
|
-
*/
|
|
133
|
-
export function formatPrometheusMetrics(metrics) {
|
|
134
|
-
const lines = [];
|
|
135
|
-
// Agent counts
|
|
136
|
-
lines.push('# HELP agent_relay_agents_total Total number of registered agents');
|
|
137
|
-
lines.push('# TYPE agent_relay_agents_total gauge');
|
|
138
|
-
lines.push(`agent_relay_agents_total ${metrics.totalAgents}`);
|
|
139
|
-
lines.push('# HELP agent_relay_agents_online Number of online agents');
|
|
140
|
-
lines.push('# TYPE agent_relay_agents_online gauge');
|
|
141
|
-
lines.push(`agent_relay_agents_online ${metrics.onlineAgents}`);
|
|
142
|
-
// Message throughput
|
|
143
|
-
lines.push('# HELP agent_relay_messages_total Total messages processed');
|
|
144
|
-
lines.push('# TYPE agent_relay_messages_total counter');
|
|
145
|
-
lines.push(`agent_relay_messages_total ${metrics.totalMessages}`);
|
|
146
|
-
lines.push('# HELP agent_relay_messages_last_minute Messages in last minute');
|
|
147
|
-
lines.push('# TYPE agent_relay_messages_last_minute gauge');
|
|
148
|
-
lines.push(`agent_relay_messages_last_minute ${metrics.throughput.messagesLastMinute}`);
|
|
149
|
-
lines.push('# HELP agent_relay_messages_last_hour Messages in last hour');
|
|
150
|
-
lines.push('# TYPE agent_relay_messages_last_hour gauge');
|
|
151
|
-
lines.push(`agent_relay_messages_last_hour ${metrics.throughput.messagesLastHour}`);
|
|
152
|
-
lines.push('# HELP agent_relay_messages_avg_per_minute Average messages per minute');
|
|
153
|
-
lines.push('# TYPE agent_relay_messages_avg_per_minute gauge');
|
|
154
|
-
lines.push(`agent_relay_messages_avg_per_minute ${metrics.throughput.avgMessagesPerMinute}`);
|
|
155
|
-
// Per-agent metrics
|
|
156
|
-
lines.push('# HELP agent_relay_agent_messages_sent Messages sent by agent');
|
|
157
|
-
lines.push('# TYPE agent_relay_agent_messages_sent counter');
|
|
158
|
-
for (const agent of metrics.agents) {
|
|
159
|
-
lines.push(`agent_relay_agent_messages_sent{agent="${agent.name}"} ${agent.messagesSent}`);
|
|
160
|
-
}
|
|
161
|
-
lines.push('# HELP agent_relay_agent_messages_received Messages received by agent');
|
|
162
|
-
lines.push('# TYPE agent_relay_agent_messages_received counter');
|
|
163
|
-
for (const agent of metrics.agents) {
|
|
164
|
-
lines.push(`agent_relay_agent_messages_received{agent="${agent.name}"} ${agent.messagesReceived}`);
|
|
165
|
-
}
|
|
166
|
-
lines.push('# HELP agent_relay_agent_online Agent online status (1=online, 0=offline)');
|
|
167
|
-
lines.push('# TYPE agent_relay_agent_online gauge');
|
|
168
|
-
for (const agent of metrics.agents) {
|
|
169
|
-
lines.push(`agent_relay_agent_online{agent="${agent.name}"} ${agent.isOnline ? 1 : 0}`);
|
|
170
|
-
}
|
|
171
|
-
lines.push('# HELP agent_relay_agent_uptime_seconds Agent uptime in seconds');
|
|
172
|
-
lines.push('# TYPE agent_relay_agent_uptime_seconds gauge');
|
|
173
|
-
for (const agent of metrics.agents) {
|
|
174
|
-
lines.push(`agent_relay_agent_uptime_seconds{agent="${agent.name}"} ${agent.uptimeSeconds}`);
|
|
175
|
-
}
|
|
176
|
-
// Session lifecycle metrics
|
|
177
|
-
lines.push('# HELP agent_relay_sessions_total Total number of sessions');
|
|
178
|
-
lines.push('# TYPE agent_relay_sessions_total counter');
|
|
179
|
-
lines.push(`agent_relay_sessions_total ${metrics.sessions.totalSessions}`);
|
|
180
|
-
lines.push('# HELP agent_relay_sessions_active Number of active sessions');
|
|
181
|
-
lines.push('# TYPE agent_relay_sessions_active gauge');
|
|
182
|
-
lines.push(`agent_relay_sessions_active ${metrics.sessions.activeSessions}`);
|
|
183
|
-
lines.push('# HELP agent_relay_sessions_closed_total Sessions closed by type');
|
|
184
|
-
lines.push('# TYPE agent_relay_sessions_closed_total counter');
|
|
185
|
-
lines.push(`agent_relay_sessions_closed_total{closed_by="agent"} ${metrics.sessions.closedByAgent}`);
|
|
186
|
-
lines.push(`agent_relay_sessions_closed_total{closed_by="disconnect"} ${metrics.sessions.closedByDisconnect}`);
|
|
187
|
-
lines.push(`agent_relay_sessions_closed_total{closed_by="error"} ${metrics.sessions.closedByError}`);
|
|
188
|
-
lines.push('# HELP agent_relay_sessions_error_rate Percentage of sessions closed by error');
|
|
189
|
-
lines.push('# TYPE agent_relay_sessions_error_rate gauge');
|
|
190
|
-
lines.push(`agent_relay_sessions_error_rate ${metrics.sessions.errorRate}`);
|
|
191
|
-
return lines.join('\n') + '\n';
|
|
12
|
+
export async function fetchCloudMetrics(opts = {}) {
|
|
13
|
+
const route = getDashboardProxyRoute('cloudMetrics');
|
|
14
|
+
const effectiveRoute = opts.upstreamPath
|
|
15
|
+
? { ...route, upstreamPath: opts.upstreamPath }
|
|
16
|
+
: route;
|
|
17
|
+
const url = buildDashboardProxyUrl(effectiveRoute, { env: opts.env, query: opts.query });
|
|
18
|
+
const fetchImpl = opts.fetchImpl ?? fetch;
|
|
19
|
+
return fetchImpl(url, {
|
|
20
|
+
method: route.method,
|
|
21
|
+
headers: buildHeaders(opts.request),
|
|
22
|
+
});
|
|
192
23
|
}
|
|
193
24
|
//# sourceMappingURL=metrics.js.map
|