@adonis-agora/telescope 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +6 -0
- package/dist/configure.js.map +1 -1
- package/dist/providers/telescope_ai_provider.d.ts +9 -1
- package/dist/providers/telescope_ai_provider.d.ts.map +1 -1
- package/dist/providers/telescope_ai_provider.js +22 -2
- package/dist/providers/telescope_ai_provider.js.map +1 -1
- package/dist/providers/telescope_alerts_provider.d.ts +1 -0
- package/dist/providers/telescope_alerts_provider.d.ts.map +1 -1
- package/dist/providers/telescope_alerts_provider.js +37 -1
- package/dist/providers/telescope_alerts_provider.js.map +1 -1
- package/dist/providers/telescope_mcp_provider.d.ts +26 -0
- package/dist/providers/telescope_mcp_provider.d.ts.map +1 -0
- package/dist/providers/telescope_mcp_provider.js +114 -0
- package/dist/providers/telescope_mcp_provider.js.map +1 -0
- package/dist/providers/telescope_provider.d.ts +8 -0
- package/dist/providers/telescope_provider.d.ts.map +1 -1
- package/dist/providers/telescope_provider.js +56 -1
- package/dist/providers/telescope_provider.js.map +1 -1
- package/dist/providers/telescope_ui_provider.d.ts +2 -0
- package/dist/providers/telescope_ui_provider.d.ts.map +1 -1
- package/dist/providers/telescope_ui_provider.js +106 -22
- package/dist/providers/telescope_ui_provider.js.map +1 -1
- package/dist/providers/telescope_watchers_provider.d.ts +13 -2
- package/dist/providers/telescope_watchers_provider.d.ts.map +1 -1
- package/dist/providers/telescope_watchers_provider.js +57 -7
- package/dist/providers/telescope_watchers_provider.js.map +1 -1
- package/dist/src/ai/define_config.d.ts +39 -7
- package/dist/src/ai/define_config.d.ts.map +1 -1
- package/dist/src/ai/define_config.js +14 -4
- package/dist/src/ai/define_config.js.map +1 -1
- package/dist/src/ai/diagnosis_coordinator.d.ts +106 -0
- package/dist/src/ai/diagnosis_coordinator.d.ts.map +1 -0
- package/dist/src/ai/diagnosis_coordinator.js +143 -0
- package/dist/src/ai/diagnosis_coordinator.js.map +1 -0
- package/dist/src/ai/factory.d.ts +8 -5
- package/dist/src/ai/factory.d.ts.map +1 -1
- package/dist/src/ai/factory.js +20 -8
- package/dist/src/ai/factory.js.map +1 -1
- package/dist/src/ai/index.d.ts +3 -1
- package/dist/src/ai/index.d.ts.map +1 -1
- package/dist/src/ai/index.js +3 -1
- package/dist/src/ai/index.js.map +1 -1
- package/dist/src/alerts/alert_rule.d.ts +79 -11
- package/dist/src/alerts/alert_rule.d.ts.map +1 -1
- package/dist/src/alerts/alerter.d.ts +11 -1
- package/dist/src/alerts/alerter.d.ts.map +1 -1
- package/dist/src/alerts/alerter.js +21 -1
- package/dist/src/alerts/alerter.js.map +1 -1
- package/dist/src/alerts/alerter_service.d.ts +103 -0
- package/dist/src/alerts/alerter_service.d.ts.map +1 -0
- package/dist/src/alerts/alerter_service.js +215 -0
- package/dist/src/alerts/alerter_service.js.map +1 -0
- package/dist/src/alerts/index.d.ts +4 -2
- package/dist/src/alerts/index.d.ts.map +1 -1
- package/dist/src/alerts/index.js +4 -2
- package/dist/src/alerts/index.js.map +1 -1
- package/dist/src/alerts/slack_format.d.ts.map +1 -1
- package/dist/src/alerts/slack_format.js +35 -2
- package/dist/src/alerts/slack_format.js.map +1 -1
- package/dist/src/client_errors/config.d.ts +66 -0
- package/dist/src/client_errors/config.d.ts.map +1 -0
- package/dist/src/client_errors/config.js +17 -0
- package/dist/src/client_errors/config.js.map +1 -0
- package/dist/src/client_errors/index.d.ts +5 -0
- package/dist/src/client_errors/index.d.ts.map +1 -0
- package/dist/src/client_errors/index.js +5 -0
- package/dist/src/client_errors/index.js.map +1 -0
- package/dist/src/client_errors/ingestor.d.ts +87 -0
- package/dist/src/client_errors/ingestor.d.ts.map +1 -0
- package/dist/src/client_errors/ingestor.js +135 -0
- package/dist/src/client_errors/ingestor.js.map +1 -0
- package/dist/src/client_errors/rate_limiter.d.ts +53 -0
- package/dist/src/client_errors/rate_limiter.d.ts.map +1 -0
- package/dist/src/client_errors/rate_limiter.js +83 -0
- package/dist/src/client_errors/rate_limiter.js.map +1 -0
- package/dist/src/client_errors/validation.d.ts +62 -0
- package/dist/src/client_errors/validation.d.ts.map +1 -0
- package/dist/src/client_errors/validation.js +109 -0
- package/dist/src/client_errors/validation.js.map +1 -0
- package/dist/src/define_config.d.ts +120 -0
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js +41 -0
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/entry.d.ts +20 -0
- package/dist/src/entry.d.ts.map +1 -1
- package/dist/src/entry.js +20 -0
- package/dist/src/entry.js.map +1 -1
- package/dist/src/index.d.ts +16 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +15 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/define_config.d.ts +57 -0
- package/dist/src/mcp/define_config.d.ts.map +1 -0
- package/dist/src/mcp/define_config.js +35 -0
- package/dist/src/mcp/define_config.js.map +1 -0
- package/dist/src/mcp/index.d.ts +7 -0
- package/dist/src/mcp/index.d.ts.map +1 -0
- package/dist/src/mcp/index.js +7 -0
- package/dist/src/mcp/index.js.map +1 -0
- package/dist/src/mcp/server.d.ts +89 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +279 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/metrics/pulse.d.ts +158 -0
- package/dist/src/metrics/pulse.d.ts.map +1 -0
- package/dist/src/metrics/pulse.js +414 -0
- package/dist/src/metrics/pulse.js.map +1 -0
- package/dist/src/overload_guard.d.ts +77 -0
- package/dist/src/overload_guard.d.ts.map +1 -0
- package/dist/src/overload_guard.js +134 -0
- package/dist/src/overload_guard.js.map +1 -0
- package/dist/src/pruner.d.ts +93 -0
- package/dist/src/pruner.d.ts.map +1 -0
- package/dist/src/pruner.js +120 -0
- package/dist/src/pruner.js.map +1 -0
- package/dist/src/registry.d.ts +26 -0
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +19 -0
- package/dist/src/registry.js.map +1 -1
- package/dist/src/service.d.ts +16 -1
- package/dist/src/service.d.ts.map +1 -1
- package/dist/src/service.js +19 -1
- package/dist/src/service.js.map +1 -1
- package/dist/src/telescope_middleware.d.ts.map +1 -1
- package/dist/src/telescope_middleware.js +3 -1
- package/dist/src/telescope_middleware.js.map +1 -1
- package/dist/src/ui/api.d.ts +9 -1
- package/dist/src/ui/api.d.ts.map +1 -1
- package/dist/src/ui/api.js +23 -1
- package/dist/src/ui/api.js.map +1 -1
- package/dist/src/ui/auth.d.ts +112 -0
- package/dist/src/ui/auth.d.ts.map +1 -0
- package/dist/src/ui/auth.js +130 -0
- package/dist/src/ui/auth.js.map +1 -0
- package/dist/src/ui/dashboard_auth.d.ts +34 -0
- package/dist/src/ui/dashboard_auth.d.ts.map +1 -0
- package/dist/src/ui/dashboard_auth.js +57 -0
- package/dist/src/ui/dashboard_auth.js.map +1 -0
- package/dist/src/ui/define_config.d.ts +15 -0
- package/dist/src/ui/define_config.d.ts.map +1 -1
- package/dist/src/ui/define_config.js +4 -0
- package/dist/src/ui/define_config.js.map +1 -1
- package/dist/src/ui/index.d.ts +7 -1
- package/dist/src/ui/index.d.ts.map +1 -1
- package/dist/src/ui/index.js +6 -1
- package/dist/src/ui/index.js.map +1 -1
- package/dist/src/ui/login_page.d.ts +23 -0
- package/dist/src/ui/login_page.d.ts.map +1 -0
- package/dist/src/ui/login_page.js +170 -0
- package/dist/src/ui/login_page.js.map +1 -0
- package/dist/src/ui/session_cookie.d.ts +42 -0
- package/dist/src/ui/session_cookie.d.ts.map +1 -0
- package/dist/src/ui/session_cookie.js +97 -0
- package/dist/src/ui/session_cookie.js.map +1 -0
- package/dist/src/watchers/define_config.d.ts +115 -12
- package/dist/src/watchers/define_config.d.ts.map +1 -1
- package/dist/src/watchers/define_config.js +48 -11
- package/dist/src/watchers/define_config.js.map +1 -1
- package/dist/src/watchers/http_client_watcher.d.ts +91 -31
- package/dist/src/watchers/http_client_watcher.d.ts.map +1 -1
- package/dist/src/watchers/http_client_watcher.js +161 -53
- package/dist/src/watchers/http_client_watcher.js.map +1 -1
- package/dist/src/watchers/index.d.ts +9 -5
- package/dist/src/watchers/index.d.ts.map +1 -1
- package/dist/src/watchers/index.js +6 -2
- package/dist/src/watchers/index.js.map +1 -1
- package/dist/src/watchers/lucid_query_watcher.d.ts +20 -2
- package/dist/src/watchers/lucid_query_watcher.d.ts.map +1 -1
- package/dist/src/watchers/lucid_query_watcher.js +44 -10
- package/dist/src/watchers/lucid_query_watcher.js.map +1 -1
- package/dist/src/watchers/profiling_watcher.d.ts +144 -0
- package/dist/src/watchers/profiling_watcher.d.ts.map +1 -0
- package/dist/src/watchers/profiling_watcher.js +231 -0
- package/dist/src/watchers/profiling_watcher.js.map +1 -0
- package/dist/src/watchers/query_family_hash.d.ts +7 -2
- package/dist/src/watchers/query_family_hash.d.ts.map +1 -1
- package/dist/src/watchers/query_family_hash.js +8 -3
- package/dist/src/watchers/query_family_hash.js.map +1 -1
- package/dist/src/watchers/record.d.ts.map +1 -1
- package/dist/src/watchers/record.js +4 -0
- package/dist/src/watchers/record.js.map +1 -1
- package/dist/src/watchers/schedule_watcher.d.ts +143 -0
- package/dist/src/watchers/schedule_watcher.d.ts.map +1 -0
- package/dist/src/watchers/schedule_watcher.js +195 -0
- package/dist/src/watchers/schedule_watcher.js.map +1 -0
- package/dist/stubs/config/telescope.stub +0 -65
- package/dist/stubs/config/telescope_ai.stub +0 -36
- package/dist/stubs/config/telescope_alerts.stub +0 -47
- package/dist/stubs/config/telescope_mcp.stub +0 -0
- package/dist/stubs/config/telescope_ui.stub +0 -53
- package/dist/stubs/config/telescope_watchers.stub +0 -41
- package/dist/stubs/database/migrations/create_telescope_entries_table.stub +2 -2
- package/package.json +12 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# @adonis-agora/telescope
|
|
2
2
|
|
|
3
|
+
## 0.5.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Entry pruner, event-loop overload guard, client-error ingestion; Pulse health rollup; alerter pipeline; outgoing HTTP-client watcher; MCP server endpoint; AI diagnosis coordinator; Lucid query watcher; observability UI dashboard (@adonis-agora/telescope-ui); dashboard session auth (login screen); profiling + schedule watchers.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Export the `configure` hook from the package root so `node ace configure @adonis-agora/telescope` resolves it, and de-backtick the config stub comments that broke the tempura stub renderer.
|
|
12
|
+
|
|
3
13
|
## 0.3.3
|
|
4
14
|
|
|
5
15
|
### Patch Changes
|
package/dist/configure.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../configure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../configure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mCAAmC,CAAC;AA0C/D;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,SAAS,iBAwCjD"}
|
package/dist/configure.js
CHANGED
|
@@ -28,6 +28,12 @@ const FEATURES = [
|
|
|
28
28
|
provider: '@adonis-agora/telescope/alerts_provider',
|
|
29
29
|
configStub: 'config/telescope_alerts.stub',
|
|
30
30
|
},
|
|
31
|
+
{
|
|
32
|
+
name: 'mcp',
|
|
33
|
+
message: 'MCP — expose telemetry to a coding agent over the Model Context Protocol',
|
|
34
|
+
provider: '@adonis-agora/telescope/mcp_provider',
|
|
35
|
+
configStub: 'config/telescope_mcp.stub',
|
|
36
|
+
},
|
|
31
37
|
];
|
|
32
38
|
/**
|
|
33
39
|
* `node ace configure @adonis-agora/telescope` — auto-wires the package:
|
package/dist/configure.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../configure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;GAGG;AACH,MAAM,QAAQ,GAAG;IACf;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,sEAAsE;QAC/E,QAAQ,EAAE,2CAA2C;QACrD,UAAU,EAAE,gCAAgC;KAC7C;IACD;QACE,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,6CAA6C;QACtD,QAAQ,EAAE,qCAAqC;QAC/C,UAAU,EAAE,0BAA0B;KACvC;IACD;QACE,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,yCAAyC;QAClD,QAAQ,EAAE,qCAAqC;QAC/C,UAAU,EAAE,0BAA0B;KACvC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,2DAA2D;QACpE,QAAQ,EAAE,yCAAyC;QACnD,UAAU,EAAE,8BAA8B;KAC3C;CACO,CAAC;AAIX;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAkB;IAChD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;IAEhD,WAAW;IACX,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,EAAE;QAC1C,EAAE,IAAI,EAAE,8CAA8C,EAAE;KACzD,CAAC,CAAC;IAEH,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,uBAAuB,EAAE,EAAE,CAAC,CAAC;IACrE,MAAM,QAAQ,CAAC,aAAa,CAC1B,SAAS,EACT,yDAAyD,EACzD,EAAE,CACH,CAAC;IAEF,wDAAwD;IACxD,IAAI,QAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CACtC,kDAAkD,EAClD,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAC9E,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,kFAAkF;QAClF,yEAAyE;QACzE,QAAQ,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,SAAS;QAE/C,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;YACrC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QACH,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../configure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;GAGG;AACH,MAAM,QAAQ,GAAG;IACf;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,sEAAsE;QAC/E,QAAQ,EAAE,2CAA2C;QACrD,UAAU,EAAE,gCAAgC;KAC7C;IACD;QACE,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,6CAA6C;QACtD,QAAQ,EAAE,qCAAqC;QAC/C,UAAU,EAAE,0BAA0B;KACvC;IACD;QACE,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,yCAAyC;QAClD,QAAQ,EAAE,qCAAqC;QAC/C,UAAU,EAAE,0BAA0B;KACvC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,2DAA2D;QACpE,QAAQ,EAAE,yCAAyC;QACnD,UAAU,EAAE,8BAA8B;KAC3C;IACD;QACE,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,0EAA0E;QACnF,QAAQ,EAAE,sCAAsC;QAChD,UAAU,EAAE,2BAA2B;KACxC;CACO,CAAC;AAIX;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAkB;IAChD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;IAEhD,WAAW;IACX,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,EAAE;QAC1C,EAAE,IAAI,EAAE,8CAA8C,EAAE;KACzD,CAAC,CAAC;IAEH,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,uBAAuB,EAAE,EAAE,CAAC,CAAC;IACrE,MAAM,QAAQ,CAAC,aAAa,CAC1B,SAAS,EACT,yDAAyD,EACzD,EAAE,CACH,CAAC;IAEF,wDAAwD;IACxD,IAAI,QAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CACtC,kDAAkD,EAClD,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAC9E,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,kFAAkF;QAClF,yEAAyE;QACzE,QAAQ,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,SAAS;QAE/C,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;YACrC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QACH,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC"}
|
|
@@ -8,13 +8,21 @@ import type { ApplicationService } from '@adonisjs/core/types';
|
|
|
8
8
|
* controllers / the dashboard can `inject()` it. When AI is disabled or no API
|
|
9
9
|
* key resolved, a disabled diagnoser is bound (its `diagnose` is a no-op
|
|
10
10
|
* returning `null`), so consumers can inject unconditionally.
|
|
11
|
+
* - `register()` also constructs a {@link DiagnosisCoordinator} (wrapping the
|
|
12
|
+
* resolved diagnoser, or a `null` diagnoser when AI is off) and publishes it into
|
|
13
|
+
* the core runtime slot. That single seam is what the MCP `diagnose_exception`
|
|
14
|
+
* tool and the alerter read (no DI) to attach probable-cause analysis. Publishing
|
|
15
|
+
* in `register()` — before ANY provider's `boot()` — guarantees the coordinator
|
|
16
|
+
* is in the slot when the MCP / alerts providers boot, regardless of order.
|
|
11
17
|
*
|
|
12
|
-
* Diagnosis never throws into the app: a model or parse failure resolves to `null
|
|
18
|
+
* Diagnosis never throws into the app: a model or parse failure resolves to `null`,
|
|
19
|
+
* and the coordinator additionally timeout-bounds and swallows every failure.
|
|
13
20
|
*/
|
|
14
21
|
export default class TelescopeAiProvider {
|
|
15
22
|
protected app: ApplicationService;
|
|
16
23
|
constructor(app: ApplicationService);
|
|
17
24
|
private resolve;
|
|
18
25
|
register(): void;
|
|
26
|
+
shutdown(): Promise<void>;
|
|
19
27
|
}
|
|
20
28
|
//# sourceMappingURL=telescope_ai_provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telescope_ai_provider.d.ts","sourceRoot":"","sources":["../../providers/telescope_ai_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"telescope_ai_provider.d.ts","sourceRoot":"","sources":["../../providers/telescope_ai_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAO/D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAC1B,SAAS,CAAC,GAAG,EAAE,kBAAkB;gBAAvB,GAAG,EAAE,kBAAkB;IAE7C,OAAO,CAAC,OAAO;IAWf,QAAQ;IAyBF,QAAQ;CAIf"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { resolveConfig } from '../src/ai/define_config.js';
|
|
2
|
+
import { DiagnosisCoordinator } from '../src/ai/diagnosis_coordinator.js';
|
|
2
3
|
import { createDiagnoser } from '../src/ai/factory.js';
|
|
3
4
|
import { TelescopeAiDiagnoser } from '../src/ai/telescope_ai_diagnoser.js';
|
|
5
|
+
import { setTelescopeDiagnosisCoordinator } from '../src/registry.js';
|
|
4
6
|
/**
|
|
5
7
|
* Wires `@adonis-agora/telescope/ai` into the AdonisJS application.
|
|
6
8
|
*
|
|
@@ -10,8 +12,15 @@ import { TelescopeAiDiagnoser } from '../src/ai/telescope_ai_diagnoser.js';
|
|
|
10
12
|
* controllers / the dashboard can `inject()` it. When AI is disabled or no API
|
|
11
13
|
* key resolved, a disabled diagnoser is bound (its `diagnose` is a no-op
|
|
12
14
|
* returning `null`), so consumers can inject unconditionally.
|
|
15
|
+
* - `register()` also constructs a {@link DiagnosisCoordinator} (wrapping the
|
|
16
|
+
* resolved diagnoser, or a `null` diagnoser when AI is off) and publishes it into
|
|
17
|
+
* the core runtime slot. That single seam is what the MCP `diagnose_exception`
|
|
18
|
+
* tool and the alerter read (no DI) to attach probable-cause analysis. Publishing
|
|
19
|
+
* in `register()` — before ANY provider's `boot()` — guarantees the coordinator
|
|
20
|
+
* is in the slot when the MCP / alerts providers boot, regardless of order.
|
|
13
21
|
*
|
|
14
|
-
* Diagnosis never throws into the app: a model or parse failure resolves to `null
|
|
22
|
+
* Diagnosis never throws into the app: a model or parse failure resolves to `null`,
|
|
23
|
+
* and the coordinator additionally timeout-bounds and swallows every failure.
|
|
15
24
|
*/
|
|
16
25
|
export default class TelescopeAiProvider {
|
|
17
26
|
app;
|
|
@@ -27,8 +36,9 @@ export default class TelescopeAiProvider {
|
|
|
27
36
|
}
|
|
28
37
|
register() {
|
|
29
38
|
const config = this.resolve();
|
|
39
|
+
// The real diagnoser, or `null` when AI is disabled / no provider resolved.
|
|
40
|
+
const diagnoser = createDiagnoser(config);
|
|
30
41
|
this.app.container.singleton(TelescopeAiDiagnoser, () => {
|
|
31
|
-
const diagnoser = createDiagnoser(config);
|
|
32
42
|
if (diagnoser !== null)
|
|
33
43
|
return diagnoser;
|
|
34
44
|
// No key / disabled: bind a diagnoser whose `diagnose` is a no-op so
|
|
@@ -40,6 +50,16 @@ export default class TelescopeAiProvider {
|
|
|
40
50
|
enabled: false,
|
|
41
51
|
});
|
|
42
52
|
});
|
|
53
|
+
// Build + publish the coordinator. When `diagnoser` is `null` the coordinator
|
|
54
|
+
// is inert (`isConfigured()` is false), so the MCP tool and the alerter both
|
|
55
|
+
// keep their exact non-AI behaviour.
|
|
56
|
+
const coordinator = new DiagnosisCoordinator({ diagnoser, timeoutMs: config.timeoutMs });
|
|
57
|
+
this.app.container.singleton(DiagnosisCoordinator, () => coordinator);
|
|
58
|
+
setTelescopeDiagnosisCoordinator(coordinator);
|
|
59
|
+
}
|
|
60
|
+
async shutdown() {
|
|
61
|
+
// Clear the slot so a re-registering app (tests / HMR) doesn't read a stale one.
|
|
62
|
+
setTelescopeDiagnosisCoordinator(null);
|
|
43
63
|
}
|
|
44
64
|
}
|
|
45
65
|
//# sourceMappingURL=telescope_ai_provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telescope_ai_provider.js","sourceRoot":"","sources":["../../providers/telescope_ai_provider.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"telescope_ai_provider.js","sourceRoot":"","sources":["../../providers/telescope_ai_provider.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAEtE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAChB;IAAtB,YAAsB,GAAuB;QAAvB,QAAG,GAAH,GAAG,CAAoB;IAAG,CAAC;IAEzC,OAAO;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAgC,cAAc,EAAE,SAAS,CAAC,CAAC;QAC1F,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAEjD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CACvC,qBAAqB,EACrB,SAAS,CACV,CAAC;QACF,OAAO,aAAa,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAED,QAAQ;QACN,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC9B,4EAA4E;QAC5E,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,EAAE,GAAG,EAAE;YACtD,IAAI,SAAS,KAAK,IAAI;gBAAE,OAAO,SAAS,CAAC;YACzC,qEAAqE;YACrE,qEAAqE;YACrE,OAAO,IAAI,oBAAoB,CAAC;gBAC9B,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE;gBAC7E,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,8EAA8E;QAC9E,6EAA6E;QAC7E,qCAAqC;QACrC,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;QACtE,gCAAgC,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,iFAAiF;QACjF,gCAAgC,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -15,6 +15,7 @@ import type { ApplicationService } from '@adonisjs/core/types';
|
|
|
15
15
|
export default class TelescopeAlertsProvider {
|
|
16
16
|
protected app: ApplicationService;
|
|
17
17
|
private poller;
|
|
18
|
+
private alerterService;
|
|
18
19
|
constructor(app: ApplicationService);
|
|
19
20
|
private resolve;
|
|
20
21
|
boot(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telescope_alerts_provider.d.ts","sourceRoot":"","sources":["../../providers/telescope_alerts_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"telescope_alerts_provider.d.ts","sourceRoot":"","sources":["../../providers/telescope_alerts_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAW/D;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAuB;IAI9B,SAAS,CAAC,GAAG,EAAE,kBAAkB;IAH7C,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,cAAc,CAA+B;gBAE/B,GAAG,EAAE,kBAAkB;IAE7C,OAAO,CAAC,OAAO;IAcT,IAAI;IA2DJ,QAAQ;CAcf"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Alerter } from '../src/alerts/alerter.js';
|
|
2
|
+
import { AlerterService } from '../src/alerts/alerter_service.js';
|
|
2
3
|
import { resolveConfig } from '../src/alerts/define_config.js';
|
|
3
4
|
import { ExceptionPoller } from '../src/alerts/exception_source.js';
|
|
5
|
+
import { MetricsService } from '../src/metrics/metrics_service.js';
|
|
4
6
|
import { getTelescopeRuntime } from '../src/registry.js';
|
|
5
7
|
/**
|
|
6
8
|
* Wires `@adonis-agora/telescope/alerts` into the AdonisJS application.
|
|
@@ -18,6 +20,7 @@ import { getTelescopeRuntime } from '../src/registry.js';
|
|
|
18
20
|
export default class TelescopeAlertsProvider {
|
|
19
21
|
app;
|
|
20
22
|
poller = null;
|
|
23
|
+
alerterService = null;
|
|
21
24
|
constructor(app) {
|
|
22
25
|
this.app = app;
|
|
23
26
|
}
|
|
@@ -42,7 +45,17 @@ export default class TelescopeAlertsProvider {
|
|
|
42
45
|
}
|
|
43
46
|
if (store === null)
|
|
44
47
|
return;
|
|
45
|
-
|
|
48
|
+
// Attach the AI probable-cause hook when a configured coordinator is published
|
|
49
|
+
// in the runtime slot. When AI is off, no hook is passed and alerts are
|
|
50
|
+
// exactly as before (no "Probable cause (AI)" section).
|
|
51
|
+
const coordinator = getTelescopeRuntime().diagnosisCoordinator;
|
|
52
|
+
const diagnose = coordinator !== null && coordinator.isConfigured()
|
|
53
|
+
? (entry) => coordinator.diagnoseSummary(entry)
|
|
54
|
+
: undefined;
|
|
55
|
+
const alerter = new Alerter({
|
|
56
|
+
alerts: config,
|
|
57
|
+
...(diagnose !== undefined ? { diagnose } : {}),
|
|
58
|
+
});
|
|
46
59
|
this.poller = new ExceptionPoller({
|
|
47
60
|
store,
|
|
48
61
|
alerter,
|
|
@@ -55,6 +68,22 @@ export default class TelescopeAlertsProvider {
|
|
|
55
68
|
console.error(`TelescopeAlertsProvider: failed to start the alert poller: ${asMessage(err)}`);
|
|
56
69
|
this.poller = null;
|
|
57
70
|
}
|
|
71
|
+
// The interval metric-threshold service only needs to run when at least one
|
|
72
|
+
// such rule is configured — otherwise its timer would tick doing nothing.
|
|
73
|
+
const hasMetricRule = config.rules.some((rule) => rule.type === 'metric-threshold');
|
|
74
|
+
if (hasMetricRule) {
|
|
75
|
+
this.alerterService = new AlerterService({
|
|
76
|
+
alerts: config,
|
|
77
|
+
metrics: new MetricsService(store),
|
|
78
|
+
});
|
|
79
|
+
try {
|
|
80
|
+
this.alerterService.start();
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
console.error(`TelescopeAlertsProvider: failed to start the metric alerter: ${asMessage(err)}`);
|
|
84
|
+
this.alerterService = null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
58
87
|
}
|
|
59
88
|
async shutdown() {
|
|
60
89
|
try {
|
|
@@ -63,7 +92,14 @@ export default class TelescopeAlertsProvider {
|
|
|
63
92
|
catch {
|
|
64
93
|
// never throw out of shutdown
|
|
65
94
|
}
|
|
95
|
+
try {
|
|
96
|
+
this.alerterService?.stop();
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// never throw out of shutdown
|
|
100
|
+
}
|
|
66
101
|
this.poller = null;
|
|
102
|
+
this.alerterService = null;
|
|
67
103
|
}
|
|
68
104
|
}
|
|
69
105
|
function asMessage(err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telescope_alerts_provider.js","sourceRoot":"","sources":["../../providers/telescope_alerts_provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"telescope_alerts_provider.js","sourceRoot":"","sources":["../../providers/telescope_alerts_provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ApplicationService } from '@adonisjs/core/types';
|
|
2
|
+
/**
|
|
3
|
+
* Wires `@adonis-agora/telescope/mcp` into the AdonisJS application.
|
|
4
|
+
*
|
|
5
|
+
* `boot()` reads `config/telescope_mcp.ts`, resolves the live telescope store from
|
|
6
|
+
* the core runtime slot (no DI — the same handle the watchers record through), and
|
|
7
|
+
* registers a JSON-RPC endpoint under the configured path via the AdonisJS router:
|
|
8
|
+
*
|
|
9
|
+
* - `POST <path>` — the MCP JSON-RPC surface (`initialize` / `tools/list` /
|
|
10
|
+
* `tools/call`). The route is a thin transport: it runs the SAME auth guard as the
|
|
11
|
+
* dashboard, then hands the parsed body + the `allowed` flag to a plain, testable
|
|
12
|
+
* {@link TelescopeMcpServer}. A denial rides inside the JSON-RPC envelope (`-32001`)
|
|
13
|
+
* because MCP has no transport-level 401.
|
|
14
|
+
* - `GET <path>` — 405: this stateless server has no server→client stream.
|
|
15
|
+
* - `DELETE <path>` — 200 no-op: it holds no session to terminate.
|
|
16
|
+
*
|
|
17
|
+
* Failures degrade safely: a disabled config or a missing store registers no routes
|
|
18
|
+
* (warn-logged), so the endpoint simply does not exist rather than crashing the host.
|
|
19
|
+
*/
|
|
20
|
+
export default class TelescopeMcpProvider {
|
|
21
|
+
protected app: ApplicationService;
|
|
22
|
+
constructor(app: ApplicationService);
|
|
23
|
+
private resolve;
|
|
24
|
+
boot(): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=telescope_mcp_provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telescope_mcp_provider.d.ts","sourceRoot":"","sources":["../../providers/telescope_mcp_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAkB/D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,OAAO,OAAO,oBAAoB;IAC3B,SAAS,CAAC,GAAG,EAAE,kBAAkB;gBAAvB,GAAG,EAAE,kBAAkB;IAE7C,OAAO,CAAC,OAAO;IAMT,IAAI;CAuFX"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { resolveConfig as resolveTelescopeConfig } from '../src/define_config.js';
|
|
2
|
+
import { resolveConfig, } from '../src/mcp/define_config.js';
|
|
3
|
+
import { TelescopeMcpServer } from '../src/mcp/server.js';
|
|
4
|
+
import { MetricsService } from '../src/metrics/metrics_service.js';
|
|
5
|
+
import { getTelescopeRuntime } from '../src/registry.js';
|
|
6
|
+
import { TelescopeService } from '../src/service.js';
|
|
7
|
+
import { runGuard } from '../src/ui/guard.js';
|
|
8
|
+
/**
|
|
9
|
+
* Wires `@adonis-agora/telescope/mcp` into the AdonisJS application.
|
|
10
|
+
*
|
|
11
|
+
* `boot()` reads `config/telescope_mcp.ts`, resolves the live telescope store from
|
|
12
|
+
* the core runtime slot (no DI — the same handle the watchers record through), and
|
|
13
|
+
* registers a JSON-RPC endpoint under the configured path via the AdonisJS router:
|
|
14
|
+
*
|
|
15
|
+
* - `POST <path>` — the MCP JSON-RPC surface (`initialize` / `tools/list` /
|
|
16
|
+
* `tools/call`). The route is a thin transport: it runs the SAME auth guard as the
|
|
17
|
+
* dashboard, then hands the parsed body + the `allowed` flag to a plain, testable
|
|
18
|
+
* {@link TelescopeMcpServer}. A denial rides inside the JSON-RPC envelope (`-32001`)
|
|
19
|
+
* because MCP has no transport-level 401.
|
|
20
|
+
* - `GET <path>` — 405: this stateless server has no server→client stream.
|
|
21
|
+
* - `DELETE <path>` — 200 no-op: it holds no session to terminate.
|
|
22
|
+
*
|
|
23
|
+
* Failures degrade safely: a disabled config or a missing store registers no routes
|
|
24
|
+
* (warn-logged), so the endpoint simply does not exist rather than crashing the host.
|
|
25
|
+
*/
|
|
26
|
+
export default class TelescopeMcpProvider {
|
|
27
|
+
app;
|
|
28
|
+
constructor(app) {
|
|
29
|
+
this.app = app;
|
|
30
|
+
}
|
|
31
|
+
resolve() {
|
|
32
|
+
return resolveConfig(this.app.config.get('telescope_mcp', undefined));
|
|
33
|
+
}
|
|
34
|
+
async boot() {
|
|
35
|
+
const config = this.resolve();
|
|
36
|
+
if (!config.enabled)
|
|
37
|
+
return;
|
|
38
|
+
let store;
|
|
39
|
+
try {
|
|
40
|
+
store = getTelescopeRuntime().store;
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
console.error(`TelescopeMcpProvider: could not resolve the telescope store: ${asMessage(err)}`);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (store === null) {
|
|
47
|
+
console.warn('TelescopeMcpProvider: telescope store is not booted (is @adonis-agora/telescope enabled?); ' +
|
|
48
|
+
'MCP endpoint not registered.');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const coreConfig = resolveTelescopeConfig(this.app.config.get('telescope', {}));
|
|
52
|
+
const service = new TelescopeService(store, {
|
|
53
|
+
windowMs: coreConfig.pulse.windowMs,
|
|
54
|
+
topN: coreConfig.pulse.topN,
|
|
55
|
+
buckets: coreConfig.pulse.buckets,
|
|
56
|
+
slowRouteMs: coreConfig.pulse.slowRouteMs,
|
|
57
|
+
cards: coreConfig.pulse.cards,
|
|
58
|
+
...(coreConfig.nPlusOne.enabled ? { nPlusOneThreshold: coreConfig.nPlusOne.threshold } : {}),
|
|
59
|
+
});
|
|
60
|
+
const metrics = new MetricsService(store, {
|
|
61
|
+
...(coreConfig.nPlusOne.enabled ? { nPlusOneThreshold: coreConfig.nPlusOne.threshold } : {}),
|
|
62
|
+
});
|
|
63
|
+
// Wire the AI diagnosis hook when a configured coordinator is published in the
|
|
64
|
+
// runtime slot. When AI is off (no coordinator, or an inert one), NO hook is
|
|
65
|
+
// passed, so `diagnose_exception` reports "not configured" exactly as before.
|
|
66
|
+
const coordinator = getTelescopeRuntime().diagnosisCoordinator;
|
|
67
|
+
const diagnose = coordinator !== null && coordinator.isConfigured()
|
|
68
|
+
? async (entry) => {
|
|
69
|
+
// Feed the same-trace siblings as extra context (already redacted).
|
|
70
|
+
const related = entry.traceId !== null ? await service.byTrace(entry.traceId) : undefined;
|
|
71
|
+
return coordinator.diagnoseMarkdown(entry, {
|
|
72
|
+
...(related !== undefined ? { related } : {}),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
: undefined;
|
|
76
|
+
const server = new TelescopeMcpServer(service, metrics, {
|
|
77
|
+
tools: config.tools,
|
|
78
|
+
serverInfo: { name: 'adonis-telescope', version: '0.4.0' },
|
|
79
|
+
...(diagnose !== undefined ? { diagnose } : {}),
|
|
80
|
+
});
|
|
81
|
+
const router = await this.app.container.make('router');
|
|
82
|
+
const guard = config.authorize;
|
|
83
|
+
// JSON-RPC surface. The transport is thin: guard → hand `body` + `allowed` to the
|
|
84
|
+
// server. A `null` result is a notification (no id) → 202 with no body.
|
|
85
|
+
router
|
|
86
|
+
.post(config.path, async (ctx) => {
|
|
87
|
+
const { allowed } = await runGuard(ctx, guard);
|
|
88
|
+
const body = (ctx.request.body?.() ?? {});
|
|
89
|
+
const result = await server.handle(body, allowed);
|
|
90
|
+
if (result === null) {
|
|
91
|
+
ctx.response.status(202);
|
|
92
|
+
return ctx.response.send('');
|
|
93
|
+
}
|
|
94
|
+
return ctx.response.status(200).send(result);
|
|
95
|
+
})
|
|
96
|
+
.as('telescope_mcp.rpc');
|
|
97
|
+
// The MCP streamable-HTTP transport opens a GET stream for server→client
|
|
98
|
+
// notifications; this stateless server has none, so 405 (per the spec).
|
|
99
|
+
router
|
|
100
|
+
.get(config.path, async (ctx) => {
|
|
101
|
+
ctx.response.status(405);
|
|
102
|
+
return ctx.response.send({ error: 'MCP server is stateless; GET is not supported.' });
|
|
103
|
+
})
|
|
104
|
+
.as('telescope_mcp.get');
|
|
105
|
+
// DELETE terminates a session; this stateless server holds none, so 200 (no-op).
|
|
106
|
+
router
|
|
107
|
+
.delete(config.path, async (ctx) => ctx.response.status(200).send({ ok: true }))
|
|
108
|
+
.as('telescope_mcp.delete');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function asMessage(err) {
|
|
112
|
+
return err instanceof Error ? err.message : String(err);
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=telescope_mcp_provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telescope_mcp_provider.js","sourceRoot":"","sources":["../../providers/telescope_mcp_provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,9 +20,17 @@ export default class TelescopeProvider {
|
|
|
20
20
|
private store;
|
|
21
21
|
private diagnosticsWatcher;
|
|
22
22
|
private entryEvents;
|
|
23
|
+
private pruner;
|
|
24
|
+
private overloadGuard;
|
|
23
25
|
constructor(app: ApplicationService);
|
|
24
26
|
register(): void;
|
|
25
27
|
boot(): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Register the `POST <path>` client-error ingestion route on the AdonisJS
|
|
30
|
+
* router, delegating to a {@link ClientErrorIngestor}. Idiomatic AdonisJS: a
|
|
31
|
+
* provider-registered route + `HttpContext` handler, not a NestJS controller.
|
|
32
|
+
*/
|
|
33
|
+
private registerClientErrors;
|
|
26
34
|
/**
|
|
27
35
|
* Build the active store from config. A supplied {@link TelescopeStore} instance is used
|
|
28
36
|
* as-is; otherwise `config.store` names a driver in `config.stores`, built via its lazy
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telescope_provider.d.ts","sourceRoot":"","sources":["../../providers/telescope_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"telescope_provider.d.ts","sourceRoot":"","sources":["../../providers/telescope_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAgC/D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAOxB,SAAS,CAAC,GAAG,EAAE,kBAAkB;IAN7C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,aAAa,CAA8B;gBAE7B,GAAG,EAAE,kBAAkB;IAE7C,QAAQ;IAUF,IAAI;IA+CV;;;;OAIG;YACW,oBAAoB;IAelC;;;;;OAKG;YACW,UAAU;IAexB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAKtB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAKrB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAMtB,oGAAoG;IACpG,OAAO,CAAC,sBAAsB;IAaxB,QAAQ;CAWf"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { ClientErrorIngestor, storeRecorder, } from '../src/client_errors/index.js';
|
|
1
2
|
import { resolveConfig, } from '../src/define_config.js';
|
|
2
3
|
import { DiagnosticsWatcher } from '../src/diagnostics_watcher.js';
|
|
3
4
|
import { ExtensionRegistry } from '../src/extension/registry.js';
|
|
5
|
+
import { OverloadGuard } from '../src/overload_guard.js';
|
|
6
|
+
import { TelescopePruner } from '../src/pruner.js';
|
|
4
7
|
import { RedactingTelescopeStore } from '../src/redaction/redacting_store.js';
|
|
5
|
-
import { resetTelescopeRuntime, setTelescopeEntryEvents, setTelescopeExtensionRegistry, setTelescopeRuntime, } from '../src/registry.js';
|
|
8
|
+
import { getTelescopeRuntime, resetTelescopeRuntime, setTelescopeEntryEvents, setTelescopeExtensionRegistry, setTelescopePaused, setTelescopeRuntime, } from '../src/registry.js';
|
|
6
9
|
import { SamplingTelescopeStore } from '../src/sampling/sampling_store.js';
|
|
7
10
|
import { TelescopeService } from '../src/service.js';
|
|
8
11
|
import { InMemoryTelescopeStore } from '../src/stores/memory.js';
|
|
@@ -29,6 +32,8 @@ export default class TelescopeProvider {
|
|
|
29
32
|
store = null;
|
|
30
33
|
diagnosticsWatcher = null;
|
|
31
34
|
entryEvents = null;
|
|
35
|
+
pruner = null;
|
|
36
|
+
overloadGuard = null;
|
|
32
37
|
constructor(app) {
|
|
33
38
|
this.app = app;
|
|
34
39
|
}
|
|
@@ -59,6 +64,40 @@ export default class TelescopeProvider {
|
|
|
59
64
|
// Build the extension registry from `config.extensions` and publish it so the UI can serve each
|
|
60
65
|
// extension's dashboards + data providers. A collision (duplicate id/name) throws here, at boot.
|
|
61
66
|
setTelescopeExtensionRegistry(this.buildExtensionRegistry(config, store));
|
|
67
|
+
// Protective infrastructure. The pruner runs only when a `prune` block was
|
|
68
|
+
// supplied; the overload guard is on by default (unref'd 1s sampler) and pauses
|
|
69
|
+
// ingestion through the runtime `paused` flag the middleware + watchers honour.
|
|
70
|
+
if (config.prune.enabled) {
|
|
71
|
+
this.pruner = new TelescopePruner(store, config.prune);
|
|
72
|
+
this.pruner.start();
|
|
73
|
+
}
|
|
74
|
+
if (config.overload.enabled) {
|
|
75
|
+
this.overloadGuard = new OverloadGuard(config.overload, runtimePauseController);
|
|
76
|
+
this.overloadGuard.start();
|
|
77
|
+
}
|
|
78
|
+
// Public client-error ingestion. Opt-in: the route is registered ONLY when
|
|
79
|
+
// enabled, so a disabled endpoint genuinely does not exist (a probe can't
|
|
80
|
+
// tell it is wired). Records through the same wrapped store as every watcher
|
|
81
|
+
// (redaction/sampling/streaming) and sheds while the overload guard pauses.
|
|
82
|
+
if (config.clientErrors.enabled) {
|
|
83
|
+
await this.registerClientErrors(store, config);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Register the `POST <path>` client-error ingestion route on the AdonisJS
|
|
88
|
+
* router, delegating to a {@link ClientErrorIngestor}. Idiomatic AdonisJS: a
|
|
89
|
+
* provider-registered route + `HttpContext` handler, not a NestJS controller.
|
|
90
|
+
*/
|
|
91
|
+
async registerClientErrors(store, config) {
|
|
92
|
+
const ingestor = new ClientErrorIngestor({
|
|
93
|
+
config: config.clientErrors,
|
|
94
|
+
record: storeRecorder(store),
|
|
95
|
+
isPaused: () => getTelescopeRuntime().paused,
|
|
96
|
+
});
|
|
97
|
+
const router = await this.app.container.make('router');
|
|
98
|
+
router
|
|
99
|
+
.post(config.clientErrors.path, (ctx) => ingestor.handle(ctx))
|
|
100
|
+
.as('telescope.client_errors');
|
|
62
101
|
}
|
|
63
102
|
/**
|
|
64
103
|
* Build the active store from config. A supplied {@link TelescopeStore} instance is used
|
|
@@ -124,6 +163,10 @@ export default class TelescopeProvider {
|
|
|
124
163
|
return new ExtensionRegistry(config.extensions, ctx);
|
|
125
164
|
}
|
|
126
165
|
async shutdown() {
|
|
166
|
+
this.overloadGuard?.stop();
|
|
167
|
+
this.overloadGuard = null;
|
|
168
|
+
this.pruner?.stop();
|
|
169
|
+
this.pruner = null;
|
|
127
170
|
this.diagnosticsWatcher?.stop();
|
|
128
171
|
this.diagnosticsWatcher = null;
|
|
129
172
|
this.entryEvents?.clear();
|
|
@@ -131,4 +174,16 @@ export default class TelescopeProvider {
|
|
|
131
174
|
resetTelescopeRuntime();
|
|
132
175
|
}
|
|
133
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* The overload guard's pause surface, backed by the global runtime `paused` flag
|
|
179
|
+
* every ingestion entry point (request middleware, watcher `safeRecord`) honours —
|
|
180
|
+
* so pausing sheds recording everywhere at once, with no DI wiring.
|
|
181
|
+
*/
|
|
182
|
+
const runtimePauseController = {
|
|
183
|
+
pause: () => setTelescopePaused(true),
|
|
184
|
+
resume: () => setTelescopePaused(false),
|
|
185
|
+
get isPaused() {
|
|
186
|
+
return getTelescopeRuntime().paused;
|
|
187
|
+
},
|
|
188
|
+
};
|
|
134
189
|
//# sourceMappingURL=telescope_provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telescope_provider.js","sourceRoot":"","sources":["../../providers/telescope_provider.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,aAAa,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAE3E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;
|
|
1
|
+
{"version":3,"file":"telescope_provider.js","sourceRoot":"","sources":["../../providers/telescope_provider.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EAEnB,aAAa,GACd,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAGL,aAAa,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAwB,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAE3E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAOd;IANd,KAAK,GAA0B,IAAI,CAAC;IACpC,kBAAkB,GAA8B,IAAI,CAAC;IACrD,WAAW,GAAuB,IAAI,CAAC;IACvC,MAAM,GAA2B,IAAI,CAAC;IACtC,aAAa,GAAyB,IAAI,CAAC;IAEnD,YAAsB,GAAuB;QAAvB,QAAG,GAAH,GAAG,CAAoB;IAAG,CAAC;IAEjD,QAAQ;QACN,iFAAiF;QACjF,mFAAmF;QACnF,gFAAgF;QAChF,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,EAAE,GAAG,EAAE;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,sBAAsB,EAAE,CAAC;YACzD,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAkB,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QACpF,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EACtF,MAAM,CACP,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,qBAAqB,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3D,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE1C,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;QACpC,CAAC;QAED,gGAAgG;QAChG,iGAAiG;QACjG,6BAA6B,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAE1E,2EAA2E;QAC3E,gFAAgF;QAChF,gFAAgF;QAChF,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;YAChF,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;QAED,2EAA2E;QAC3E,0EAA0E;QAC1E,6EAA6E;QAC7E,4EAA4E;QAC5E,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,oBAAoB,CAChC,KAAqB,EACrB,MAA+B;QAE/B,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC;YACvC,MAAM,EAAE,MAAM,CAAC,YAAY;YAC3B,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC;YAC5B,QAAQ,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,MAAM;SAC7C,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM;aACH,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,GAA2B,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACrF,EAAE,CAAC,yBAAyB,CAAC,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,UAAU,CAAC,MAA+B;QACtD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC;QAE1D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAEjD,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,sBAAsB,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,IAAI,KAAK,CACb,6CAA6C,MAAM,CAAC,KAAK,wBAAwB,MAAM,CAAC,KAAK,iBAAiB,CAC/G,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAAC,KAAqB,EAAE,MAA+B;QAC3E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QACzC,OAAO,IAAI,uBAAuB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED;;;;;OAKG;IACK,aAAa,CAAC,KAAqB,EAAE,MAA+B;QAC1E,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5D,OAAO,IAAI,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;;OAMG;IACK,cAAc,CAAC,KAAqB,EAAE,MAA+B;QAC3E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QACrC,OAAO,IAAI,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9D,CAAC;IAED,oGAAoG;IAC5F,sBAAsB,CAC5B,MAA+B,EAC/B,KAAqB;QAErB,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAChD,MAAM,GAAG,GAAqB;YAC5B,KAAK;YACL,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAc,CAAC,EAAE;YACvE,MAAM;SACP,CAAC;QACF,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,qBAAqB,EAAE,CAAC;IAC1B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,sBAAsB,GAAoB;IAC9C,KAAK,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC;IACrC,MAAM,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC;IACvC,IAAI,QAAQ;QACV,OAAO,mBAAmB,EAAE,CAAC,MAAM,CAAC;IACtC,CAAC;CACF,CAAC"}
|
|
@@ -15,6 +15,8 @@ import type { ApplicationService } from '@adonisjs/core/types';
|
|
|
15
15
|
export default class TelescopeUiProvider {
|
|
16
16
|
protected app: ApplicationService;
|
|
17
17
|
constructor(app: ApplicationService);
|
|
18
|
+
/** Warn once so a throwing `login` hook doesn't spam the logs on every failed attempt. */
|
|
19
|
+
private warnedOnHookThrow;
|
|
18
20
|
private resolve;
|
|
19
21
|
boot(): Promise<void>;
|
|
20
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telescope_ui_provider.d.ts","sourceRoot":"","sources":["../../providers/telescope_ui_provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"telescope_ui_provider.d.ts","sourceRoot":"","sources":["../../providers/telescope_ui_provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAwB/D;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAC1B,SAAS,CAAC,GAAG,EAAE,kBAAkB;gBAAvB,GAAG,EAAE,kBAAkB;IAE7C,0FAA0F;IAC1F,OAAO,CAAC,iBAAiB,CAAS;IAElC,OAAO,CAAC,OAAO;IAMT,IAAI;CAwQX"}
|