@sentry/junior 0.71.3 → 0.73.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/bin/junior.mjs +22 -10
  2. package/dist/api-reference.d.ts +2 -0
  3. package/dist/app.d.ts +12 -3
  4. package/dist/app.js +2522 -15560
  5. package/dist/chat/agent-dispatch/heartbeat.d.ts +0 -6
  6. package/dist/chat/agent-dispatch/runner.d.ts +2 -0
  7. package/dist/chat/agent-dispatch/store.d.ts +2 -2
  8. package/dist/chat/agent-dispatch/types.d.ts +6 -3
  9. package/dist/chat/agent-dispatch/validation.d.ts +2 -3
  10. package/dist/chat/app/production.d.ts +8 -1
  11. package/dist/chat/app/services.d.ts +7 -0
  12. package/dist/chat/destination.d.ts +3 -1
  13. package/dist/chat/logging.d.ts +3 -0
  14. package/dist/chat/mcp/errors.d.ts +3 -0
  15. package/dist/chat/mcp/tool-manager.d.ts +5 -1
  16. package/dist/chat/oauth-flow.d.ts +1 -1
  17. package/dist/chat/plugins/agent-hooks.d.ts +3 -2
  18. package/dist/chat/plugins/registry.d.ts +2 -0
  19. package/dist/chat/plugins/types.d.ts +2 -0
  20. package/dist/chat/prompt.d.ts +4 -1
  21. package/dist/chat/requester.d.ts +67 -0
  22. package/dist/chat/respond.d.ts +8 -8
  23. package/dist/chat/runtime/agent-continue-runner.d.ts +25 -0
  24. package/dist/chat/runtime/reply-executor.d.ts +7 -5
  25. package/dist/chat/runtime/slack-resume.d.ts +3 -3
  26. package/dist/chat/runtime/slack-runtime.d.ts +13 -3
  27. package/dist/chat/runtime/turn.d.ts +17 -3
  28. package/dist/chat/sandbox/egress-credentials.d.ts +5 -2
  29. package/dist/chat/sandbox/egress-policy.d.ts +5 -1
  30. package/dist/chat/sandbox/egress-proxy.d.ts +2 -0
  31. package/dist/chat/sandbox/egress-schemas.d.ts +4 -0
  32. package/dist/chat/sandbox/egress-session.d.ts +3 -1
  33. package/dist/chat/sandbox/egress-tracing.d.ts +7 -0
  34. package/dist/chat/sandbox/sandbox.d.ts +2 -0
  35. package/dist/chat/sandbox/session.d.ts +3 -2
  36. package/dist/chat/services/agent-continue.d.ts +27 -0
  37. package/dist/chat/services/auth-pause-response.d.ts +1 -1
  38. package/dist/chat/services/auth-pause.d.ts +2 -1
  39. package/dist/chat/services/mcp-auth-orchestration.d.ts +1 -1
  40. package/dist/chat/services/message-actor-identity.d.ts +12 -4
  41. package/dist/chat/services/plugin-auth-orchestration.d.ts +9 -8
  42. package/dist/chat/services/turn-result.d.ts +3 -0
  43. package/dist/chat/services/turn-session-record.d.ts +10 -7
  44. package/dist/chat/slack/user.d.ts +4 -4
  45. package/dist/chat/state/adapter.d.ts +2 -0
  46. package/dist/chat/state/conversation-details.d.ts +4 -3
  47. package/dist/chat/state/session-log.d.ts +43 -0
  48. package/dist/chat/state/turn-session.d.ts +7 -10
  49. package/dist/chat/task-execution/slack-work.d.ts +5 -5
  50. package/dist/chat/task-execution/store.d.ts +83 -48
  51. package/dist/chat/task-execution/worker.d.ts +3 -3
  52. package/dist/chat/tools/definition.d.ts +3 -0
  53. package/dist/chat/tools/execution/tool-error-handler.d.ts +2 -1
  54. package/dist/chat/tools/slack/canvas-tools.d.ts +3 -2
  55. package/dist/chat/tools/slack/channel-list-messages.d.ts +2 -2
  56. package/dist/chat/tools/slack/channel-post-message.d.ts +3 -2
  57. package/dist/chat/tools/slack/context.d.ts +15 -2
  58. package/dist/chat/tools/slack/message-add-reaction.d.ts +3 -2
  59. package/dist/chat/tools/slack/thread-read.d.ts +2 -2
  60. package/dist/chat/tools/types.d.ts +20 -23
  61. package/dist/{chunk-BBXYXOJW.js → chunk-3BYAPS6B.js} +48 -529
  62. package/dist/{chunk-UXG6TU2U.js → chunk-7Q5YOUUT.js} +16 -93
  63. package/dist/chunk-AL5T52ZD.js +1119 -0
  64. package/dist/chunk-CYUI7JU5.js +195 -0
  65. package/dist/{chunk-R62YWUNO.js → chunk-DIMX5F3T.js} +10 -28
  66. package/dist/chunk-G3E7SCME.js +28 -0
  67. package/dist/chunk-KVZL5NZS.js +519 -0
  68. package/dist/chunk-M4FLLXXD.js +212 -0
  69. package/dist/chunk-OQSYYOLM.js +12787 -0
  70. package/dist/{chunk-GT67ZWZQ.js → chunk-OR6NQJ5E.js} +5 -3
  71. package/dist/{chunk-B5HKWWQB.js → chunk-RY6AL5C7.js} +8 -6
  72. package/dist/chunk-SJHUF3DP.js +43 -0
  73. package/dist/{chunk-XE2VFQQN.js → chunk-UOTZ3EEQ.js} +1 -1
  74. package/dist/{chunk-HOGQL2H6.js → chunk-UZVHXZ7V.js} +1357 -1486
  75. package/dist/{chunk-76YMBKW7.js → chunk-V4VYUY4A.js} +27 -14
  76. package/dist/{chunk-JS4HURDT.js → chunk-WS2EG3GW.js} +224 -224
  77. package/dist/chunk-ZDA2HYX5.js +275 -0
  78. package/dist/cli/chat.js +205 -0
  79. package/dist/cli/check.js +6 -5
  80. package/dist/cli/run.js +18 -2
  81. package/dist/cli/snapshot-warmup.js +11 -8
  82. package/dist/cli/upgrade.js +599 -0
  83. package/dist/deployment.d.ts +4 -0
  84. package/dist/handlers/agent-dispatch.d.ts +6 -1
  85. package/dist/handlers/mcp-oauth-callback.d.ts +6 -1
  86. package/dist/handlers/oauth-callback.d.ts +6 -1
  87. package/dist/handlers/sandbox-egress-proxy.d.ts +2 -0
  88. package/dist/handlers/webhooks.d.ts +4 -2
  89. package/dist/instrumentation.js +17 -2
  90. package/dist/nitro.d.ts +1 -1
  91. package/dist/nitro.js +10 -10
  92. package/dist/plugins.d.ts +1 -1
  93. package/dist/reporting/conversations.d.ts +116 -0
  94. package/dist/reporting.d.ts +24 -129
  95. package/dist/reporting.js +320 -166
  96. package/dist/runner-LMAM4OGD.js +259 -0
  97. package/package.json +3 -3
  98. package/dist/chat/runtime/timeout-resume-runner.d.ts +0 -19
  99. package/dist/chat/services/requester-identity.d.ts +0 -19
  100. package/dist/chat/services/timeout-resume.d.ts +0 -23
  101. package/dist/chunk-6YY4Q3D4.js +0 -12
  102. package/dist/chunk-Z3YD6NHK.js +0 -12
  103. package/dist/handlers/turn-resume.d.ts +0 -4
@@ -1,6 +1,8 @@
1
1
  import {
2
+ getDeploymentServiceVersion,
3
+ getDeploymentTelemetryAttributes,
2
4
  sentry_exports
3
- } from "./chunk-Z3YD6NHK.js";
5
+ } from "./chunk-SJHUF3DP.js";
4
6
  import "./chunk-2KG3PWR4.js";
5
7
 
6
8
  // src/instrumentation.ts
@@ -22,16 +24,29 @@ function initSentry() {
22
24
  }
23
25
  const dsn = process.env.SENTRY_DSN;
24
26
  const enableLogs = getBoolean(process.env.SENTRY_ENABLE_LOGS, Boolean(dsn));
27
+ const serviceVersion = getDeploymentServiceVersion();
28
+ const deploymentSpanAttributes = getDeploymentTelemetryAttributes();
25
29
  sentry_exports.init({
26
30
  dsn,
27
31
  environment: process.env.SENTRY_ENVIRONMENT ?? process.env.VERCEL_ENV ?? process.env.NODE_ENV,
28
- release: process.env.SENTRY_RELEASE ?? process.env.VERCEL_GIT_COMMIT_SHA,
32
+ release: serviceVersion,
29
33
  tracesSampleRate: getSampleRate(process.env.SENTRY_TRACES_SAMPLE_RATE, 1),
30
34
  sendDefaultPii: true,
31
35
  enabled: Boolean(dsn),
32
36
  enableLogs,
33
37
  registerEsmLoaderHooks: false,
34
38
  streamGenAiSpans: true,
39
+ // Keep deployment identity centralized so every emitted Sentry span carries it.
40
+ beforeSendSpan(span) {
41
+ if (Object.keys(deploymentSpanAttributes).length === 0) {
42
+ return span;
43
+ }
44
+ span.data = {
45
+ ...span.data,
46
+ ...deploymentSpanAttributes
47
+ };
48
+ return span;
49
+ },
35
50
  integrations: [
36
51
  sentry_exports.vercelAIIntegration({
37
52
  recordInputs: true,
package/dist/nitro.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type JuniorPluginSet } from "@/plugins";
1
+ import { type JuniorPluginSet } from "./plugins";
2
2
  export interface JuniorPluginModuleReference {
3
3
  /** Runtime-safe module that exports a `defineJuniorPlugins(...)` set. */
4
4
  module: string;
package/dist/nitro.js CHANGED
@@ -2,20 +2,20 @@ import {
2
2
  pluginCatalogConfigFromPluginSet,
3
3
  pluginHookRegistrationsFromPluginSet,
4
4
  resolveConversationWorkQueueTopic
5
- } from "./chunk-XE2VFQQN.js";
6
- import "./chunk-76YMBKW7.js";
7
- import {
8
- JUNIOR_CONVERSATION_WORK_CALLBACK_ROUTE,
9
- JUNIOR_HEARTBEAT_CRON_SCHEDULE,
10
- JUNIOR_HEARTBEAT_ROUTE
11
- } from "./chunk-6YY4Q3D4.js";
12
- import "./chunk-JS4HURDT.js";
5
+ } from "./chunk-UOTZ3EEQ.js";
6
+ import "./chunk-V4VYUY4A.js";
13
7
  import {
14
8
  discoverInstalledPluginPackageContent,
15
9
  isValidPackageName,
16
10
  resolvePackageDir
17
- } from "./chunk-BBXYXOJW.js";
18
- import "./chunk-Z3YD6NHK.js";
11
+ } from "./chunk-KVZL5NZS.js";
12
+ import "./chunk-WS2EG3GW.js";
13
+ import "./chunk-3BYAPS6B.js";
14
+ import {
15
+ JUNIOR_CONVERSATION_WORK_CALLBACK_ROUTE,
16
+ JUNIOR_HEARTBEAT_CRON_SCHEDULE,
17
+ JUNIOR_HEARTBEAT_ROUTE
18
+ } from "./chunk-SJHUF3DP.js";
19
19
  import "./chunk-2KG3PWR4.js";
20
20
 
21
21
  // src/nitro.ts
package/dist/plugins.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { JuniorPluginRegistration } from "@sentry/junior-plugin-api";
2
- import type { PluginCatalogConfig, PluginManifestConfig } from "@/chat/plugins/types";
2
+ import type { PluginCatalogConfig, PluginManifestConfig } from "./chat/plugins/types";
3
3
  export type JuniorPluginInput = JuniorPluginRegistration | string;
4
4
  export interface JuniorPluginSetOptions {
5
5
  /** Install-level manifest overrides applied before validation. */
@@ -0,0 +1,116 @@
1
+ export type ConversationReportStatus = "active" | "completed" | "failed" | "hung" | "superseded";
2
+ export type ConversationSurface = "api" | "internal" | "scheduler" | "slack";
3
+ export interface ConversationUsage {
4
+ inputTokens?: number;
5
+ outputTokens?: number;
6
+ cachedInputTokens?: number;
7
+ cacheCreationTokens?: number;
8
+ totalTokens?: number;
9
+ }
10
+ export interface RequesterIdentity {
11
+ email?: string;
12
+ fullName?: string;
13
+ slackUserId?: string;
14
+ slackUserName?: string;
15
+ }
16
+ export interface ConversationSummaryReport {
17
+ /** Always-populated display title, with privacy redaction applied first. */
18
+ displayTitle: string;
19
+ cumulativeDurationMs: number;
20
+ cumulativeUsage?: ConversationUsage;
21
+ conversationId: string;
22
+ id: string;
23
+ status: ConversationReportStatus;
24
+ startedAt: string;
25
+ lastSeenAt: string;
26
+ lastProgressAt: string;
27
+ completedAt?: string;
28
+ surface: ConversationSurface;
29
+ requesterIdentity?: RequesterIdentity;
30
+ channel?: string;
31
+ channelName?: string;
32
+ sentryConversationUrl?: string;
33
+ sentryTraceUrl?: string;
34
+ traceId?: string;
35
+ }
36
+ export type TranscriptPartType = "text" | "thinking" | "tool_call" | "tool_result" | "unknown";
37
+ export interface TranscriptPart {
38
+ bytes?: number;
39
+ chars?: number;
40
+ id?: string;
41
+ input?: unknown;
42
+ inputKeys?: string[];
43
+ inputSizeBytes?: number;
44
+ inputSizeChars?: number;
45
+ inputType?: string;
46
+ name?: string;
47
+ output?: unknown;
48
+ outputKeys?: string[];
49
+ outputSizeBytes?: number;
50
+ outputSizeChars?: number;
51
+ outputType?: string;
52
+ redacted?: boolean;
53
+ sourceType?: string;
54
+ text?: string;
55
+ type: TranscriptPartType;
56
+ }
57
+ export type TranscriptRole = "assistant" | "system" | "tool" | "toolResult" | "unknown" | "user";
58
+ export interface TranscriptMessage {
59
+ parts: TranscriptPart[];
60
+ role: TranscriptRole;
61
+ timestamp?: number;
62
+ }
63
+ export interface ConversationRunReport extends ConversationSummaryReport {
64
+ transcriptAvailable: boolean;
65
+ transcriptMetadata?: TranscriptMessage[];
66
+ transcriptMessageCount?: number;
67
+ transcriptRedacted?: boolean;
68
+ transcriptRedactionReason?: "non_public_conversation";
69
+ transcript: TranscriptMessage[];
70
+ }
71
+ export interface ConversationReport {
72
+ conversationId: string;
73
+ /** Always-populated display title, computed the same way as per-run reports. */
74
+ displayTitle: string;
75
+ generatedAt: string;
76
+ runs: ConversationRunReport[];
77
+ }
78
+ export interface ConversationFeed {
79
+ sessions: ConversationSummaryReport[];
80
+ source: "conversation_index";
81
+ generatedAt: string;
82
+ }
83
+ export interface ConversationStatsItem {
84
+ active: number;
85
+ conversations: number;
86
+ durationMs: number;
87
+ failed: number;
88
+ hung: number;
89
+ label: string;
90
+ runs: number;
91
+ tokens?: number;
92
+ }
93
+ export interface ConversationStatsReport {
94
+ active: number;
95
+ conversations: number;
96
+ durationMs: number;
97
+ failed: number;
98
+ generatedAt: string;
99
+ hung: number;
100
+ locations: ConversationStatsItem[];
101
+ requesters: ConversationStatsItem[];
102
+ sampleLimit: number;
103
+ sampleSize: number;
104
+ source: "conversation_index";
105
+ tokens?: number;
106
+ truncated: boolean;
107
+ runs: number;
108
+ windowEnd: string;
109
+ windowStart: string;
110
+ }
111
+ /** Read the recent conversation feed for reporting consumers. */
112
+ export declare function readConversationFeed(): Promise<ConversationFeed>;
113
+ /** Read aggregate conversation statistics for reporting consumers. */
114
+ export declare function readConversationStatsReport(): Promise<ConversationStatsReport>;
115
+ /** Read one conversation transcript for reporting consumers. */
116
+ export declare function readConversationReport(conversationId: string): Promise<ConversationReport>;
@@ -1,6 +1,6 @@
1
- import { getPluginPackageContent } from "@/chat/plugins/registry";
2
- import { type AgentTurnSurface } from "@/chat/state/turn-session";
3
1
  import type { PluginOperationalReport } from "@sentry/junior-plugin-api";
2
+ import { type ConversationFeed, type ConversationReport, type ConversationStatsReport } from "./reporting/conversations";
3
+ export type { ConversationFeed, ConversationReport, ConversationReportStatus, ConversationRunReport, ConversationStatsItem, ConversationStatsReport, ConversationSummaryReport, ConversationSurface, ConversationUsage, RequesterIdentity, TranscriptMessage, TranscriptPart, TranscriptPartType, TranscriptRole, } from "./reporting/conversations";
4
4
  export interface HealthReport {
5
5
  status: "ok";
6
6
  service: string;
@@ -19,119 +19,19 @@ export interface RuntimeInfoReport {
19
19
  descriptionText?: string;
20
20
  providers: string[];
21
21
  skills: SkillReport[];
22
- packagedContent: ReturnType<typeof getPluginPackageContent>;
22
+ packagedContent: PluginPackageContentReport;
23
23
  }
24
- export type DashboardSessionStatus = "active" | "completed" | "failed" | "hung" | "superseded";
25
- export type DashboardSurface = AgentTurnSurface;
26
- export interface DashboardTurnUsage {
27
- inputTokens?: number;
28
- outputTokens?: number;
29
- cachedInputTokens?: number;
30
- cacheCreationTokens?: number;
31
- totalTokens?: number;
32
- }
33
- export interface DashboardRequesterIdentity {
34
- email?: string;
35
- fullName?: string;
36
- slackUserId?: string;
37
- slackUserName?: string;
38
- }
39
- export interface DashboardSessionReport {
40
- /** Always-populated display title. LLM-generated title when available, otherwise the
41
- * Slack channel/conversation location label or a generic fallback. Privacy redaction
42
- * wins over everything else for non-public conversations. */
43
- displayTitle: string;
44
- cumulativeDurationMs: number;
45
- cumulativeUsage?: DashboardTurnUsage;
46
- conversationId: string;
47
- id: string;
48
- status: DashboardSessionStatus;
49
- startedAt: string;
50
- lastSeenAt: string;
51
- lastProgressAt: string;
52
- completedAt?: string;
53
- surface: DashboardSurface;
54
- requesterIdentity?: DashboardRequesterIdentity;
55
- channel?: string;
56
- channelName?: string;
57
- sentryConversationUrl?: string;
58
- sentryTraceUrl?: string;
59
- traceId?: string;
60
- }
61
- export type DashboardTranscriptPartType = "text" | "thinking" | "tool_call" | "tool_result" | "unknown";
62
- export interface DashboardTranscriptPart {
63
- bytes?: number;
64
- chars?: number;
65
- id?: string;
66
- input?: unknown;
67
- inputKeys?: string[];
68
- inputSizeBytes?: number;
69
- inputSizeChars?: number;
70
- inputType?: string;
71
- name?: string;
72
- output?: unknown;
73
- outputKeys?: string[];
74
- outputSizeBytes?: number;
75
- outputSizeChars?: number;
76
- outputType?: string;
77
- redacted?: boolean;
78
- sourceType?: string;
79
- text?: string;
80
- type: DashboardTranscriptPartType;
81
- }
82
- export type DashboardTranscriptRole = "assistant" | "system" | "tool" | "toolResult" | "unknown" | "user";
83
- export interface DashboardTranscriptMessage {
84
- parts: DashboardTranscriptPart[];
85
- role: DashboardTranscriptRole;
86
- timestamp?: number;
87
- }
88
- export interface DashboardTurnReport extends DashboardSessionReport {
89
- transcriptAvailable: boolean;
90
- transcriptMetadata?: DashboardTranscriptMessage[];
91
- transcriptMessageCount?: number;
92
- transcriptRedacted?: boolean;
93
- transcriptRedactionReason?: "non_public_conversation";
94
- transcript: DashboardTranscriptMessage[];
95
- }
96
- export interface DashboardConversationReport {
97
- conversationId: string;
98
- /** Always-populated display title, computed the same way as DashboardSessionReport.displayTitle. */
99
- displayTitle: string;
100
- generatedAt: string;
101
- turns: DashboardTurnReport[];
102
- }
103
- export interface DashboardSessionFeed {
104
- sessions: DashboardSessionReport[];
105
- source: "turn_session_records";
106
- generatedAt: string;
107
- }
108
- export interface DashboardConversationStatsItem {
109
- active: number;
110
- conversations: number;
111
- durationMs: number;
112
- failed: number;
113
- hung: number;
114
- label: string;
115
- tokens?: number;
116
- turns: number;
24
+ export interface PluginPackageContentItemReport {
25
+ dir: string;
26
+ hasSkillsDir: boolean;
27
+ name: string;
117
28
  }
118
- export interface DashboardConversationStatsReport {
119
- active: number;
120
- conversations: number;
121
- durationMs: number;
122
- failed: number;
123
- generatedAt: string;
124
- hung: number;
125
- locations: DashboardConversationStatsItem[];
126
- requesters: DashboardConversationStatsItem[];
127
- sampleLimit: number;
128
- sampleSize: number;
129
- source: "turn_session_records";
130
- tokens?: number;
131
- truncated: boolean;
132
- turns: number;
133
- windowEnd: string;
134
- windowStart: string;
29
+ export interface PluginPackageContentReport {
30
+ packageNames: string[];
31
+ packages: PluginPackageContentItemReport[];
32
+ manifestRoots: string[];
33
+ skillRoots: string[];
34
+ tracingIncludes: string[];
135
35
  }
136
36
  export type { PluginOperationalReport } from "@sentry/junior-plugin-api";
137
37
  export interface PluginOperationalReportFeed {
@@ -142,34 +42,29 @@ export interface PluginOperationalReportFeed {
142
42
  export interface JuniorReporting {
143
43
  /** Read the public runtime health snapshot without exposing discovery data. */
144
44
  getHealth(): Promise<HealthReport>;
145
- /** Read authenticated dashboard runtime discovery data. */
45
+ /** Read authenticated runtime discovery data for reporting consumers. */
146
46
  getRuntimeInfo(): Promise<RuntimeInfoReport>;
147
- /** Read configured plugin names for authenticated dashboard views. */
47
+ /** Read configured plugin names for reporting consumers. */
148
48
  getPlugins(): Promise<PluginReport[]>;
149
- /** Read discovered skill names for authenticated dashboard views. */
49
+ /** Read discovered skill names for reporting consumers. */
150
50
  getSkills(): Promise<SkillReport[]>;
151
- /**
152
- * Read recent turn metadata for authenticated dashboard views.
153
- *
154
- * Keep this API trace-shaped: callers should rely on timestamps, status,
155
- * actor, route, usage, and links that can later be reconstructed from spans.
156
- */
157
- getSessions(): Promise<DashboardSessionFeed>;
158
- /** Read aggregate conversation stats for authenticated dashboard views. */
159
- getConversationStats?(): Promise<DashboardConversationStatsReport>;
51
+ /** Read recent conversation summaries for reporting consumers. */
52
+ getSessions(): Promise<ConversationFeed>;
53
+ /** Read aggregate conversation stats for reporting consumers. */
54
+ getConversationStats?(): Promise<ConversationStatsReport>;
160
55
  /** Read sanitized operational summaries contributed by plugins. */
161
56
  getPluginOperationalReports?(): Promise<PluginOperationalReportFeed>;
162
57
  /**
163
- * Read one conversation transcript for the dashboard.
58
+ * Read one conversation transcript for reporting consumers.
164
59
  *
165
60
  * The current implementation joins turn-session records with expiring session
166
61
  * logs, but the API should stay compatible with a future Sentry trace-history
167
62
  * source. Avoid adding fields that require Redis-only transcript internals.
168
63
  */
169
- getConversation(conversationId: string): Promise<DashboardConversationReport>;
64
+ getConversation(conversationId: string): Promise<ConversationReport>;
170
65
  }
171
- /** Create the read-only reporting boundary used by authenticated dashboard routes. */
66
+ /** Create the read-only reporting boundary used by plugins and other consumers. */
172
67
  export declare function createJuniorReporting(): JuniorReporting & {
173
- getConversationStats(): Promise<DashboardConversationStatsReport>;
68
+ getConversationStats(): Promise<ConversationStatsReport>;
174
69
  getPluginOperationalReports(): Promise<PluginOperationalReportFeed>;
175
70
  };