@evalops/maestro 0.10.21 → 0.10.23

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 (154) hide show
  1. package/dist/agent/agent.d.ts +1 -0
  2. package/dist/agent/agent.d.ts.map +1 -1
  3. package/dist/agent/agent.js +15 -4
  4. package/dist/agent/agent.js.map +1 -1
  5. package/dist/agent/swarm/executor.d.ts.map +1 -1
  6. package/dist/agent/swarm/executor.js +68 -3
  7. package/dist/agent/swarm/executor.js.map +1 -1
  8. package/dist/agent/swarm/types.d.ts +3 -0
  9. package/dist/agent/swarm/types.d.ts.map +1 -1
  10. package/dist/agent/swarm/types.js.map +1 -1
  11. package/dist/agent/transport.d.ts.map +1 -1
  12. package/dist/agent/transport.js +7 -1
  13. package/dist/agent/transport.js.map +1 -1
  14. package/dist/audit/logger.d.ts +1 -1
  15. package/dist/bootstrap/tools-setup.d.ts.map +1 -1
  16. package/dist/bootstrap/tools-setup.js +3 -2
  17. package/dist/bootstrap/tools-setup.js.map +1 -1
  18. package/dist/cli/commands/a2a.d.ts.map +1 -1
  19. package/dist/cli/commands/a2a.js +141 -8
  20. package/dist/cli/commands/a2a.js.map +1 -1
  21. package/dist/cli/commands/codex.d.ts.map +1 -1
  22. package/dist/cli/commands/codex.js +4 -3
  23. package/dist/cli/commands/codex.js.map +1 -1
  24. package/dist/cli/commands/hosted-runner.d.ts +1 -0
  25. package/dist/cli/commands/hosted-runner.d.ts.map +1 -1
  26. package/dist/cli/commands/hosted-runner.js +31 -2
  27. package/dist/cli/commands/hosted-runner.js.map +1 -1
  28. package/dist/cli/commands/run.d.ts.map +1 -1
  29. package/dist/cli/commands/run.js +2 -9
  30. package/dist/cli/commands/run.js.map +1 -1
  31. package/dist/cli-tui/commands/a2a-handlers.d.ts.map +1 -1
  32. package/dist/cli-tui/commands/a2a-handlers.js +55 -0
  33. package/dist/cli-tui/commands/a2a-handlers.js.map +1 -1
  34. package/dist/cli.js +3925 -2024
  35. package/dist/codex/compatibility.d.ts +17 -1
  36. package/dist/codex/compatibility.d.ts.map +1 -1
  37. package/dist/codex/compatibility.js +57 -1
  38. package/dist/codex/compatibility.js.map +1 -1
  39. package/dist/guardian/config.d.ts +8 -6
  40. package/dist/guardian/config.d.ts.map +1 -1
  41. package/dist/guardian/config.js +33 -7
  42. package/dist/guardian/config.js.map +1 -1
  43. package/dist/guardian/runner.d.ts.map +1 -1
  44. package/dist/guardian/runner.js +54 -9
  45. package/dist/guardian/runner.js.map +1 -1
  46. package/dist/mcp/config.d.ts.map +1 -1
  47. package/dist/mcp/config.js +2 -0
  48. package/dist/mcp/config.js.map +1 -1
  49. package/dist/mcp/fathom-cua.d.ts +3 -0
  50. package/dist/mcp/fathom-cua.d.ts.map +1 -0
  51. package/dist/mcp/fathom-cua.js +158 -0
  52. package/dist/mcp/fathom-cua.js.map +1 -0
  53. package/dist/mcp/index.d.ts +1 -0
  54. package/dist/mcp/index.d.ts.map +1 -1
  55. package/dist/mcp/index.js +1 -0
  56. package/dist/mcp/index.js.map +1 -1
  57. package/dist/node_modules/@evalops/contracts/dist/artifacts.d.ts +58 -0
  58. package/dist/node_modules/@evalops/contracts/dist/artifacts.d.ts.map +1 -0
  59. package/dist/node_modules/@evalops/contracts/dist/artifacts.js +191 -0
  60. package/dist/node_modules/@evalops/contracts/dist/artifacts.js.map +1 -0
  61. package/dist/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +10 -10
  62. package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
  63. package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  64. package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
  65. package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  66. package/dist/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +1 -1
  67. package/dist/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +3 -3
  68. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  69. package/dist/node_modules/@evalops/tui/package.json +1 -1
  70. package/dist/platform/a2a-cockpit.d.ts +90 -0
  71. package/dist/platform/a2a-cockpit.d.ts.map +1 -0
  72. package/dist/platform/a2a-cockpit.js +302 -0
  73. package/dist/platform/a2a-cockpit.js.map +1 -0
  74. package/dist/platform/a2a-fleet.d.ts +14 -0
  75. package/dist/platform/a2a-fleet.d.ts.map +1 -1
  76. package/dist/platform/a2a-fleet.js +66 -1
  77. package/dist/platform/a2a-fleet.js.map +1 -1
  78. package/dist/platform/a2a-ownership.d.ts +27 -0
  79. package/dist/platform/a2a-ownership.d.ts.map +1 -0
  80. package/dist/platform/a2a-ownership.js +149 -0
  81. package/dist/platform/a2a-ownership.js.map +1 -0
  82. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  83. package/dist/platform/a2a-task-ledger.js +29 -5
  84. package/dist/platform/a2a-task-ledger.js.map +1 -1
  85. package/dist/server/agent-trajectory-replay-lab.d.ts +36 -0
  86. package/dist/server/agent-trajectory-replay-lab.d.ts.map +1 -0
  87. package/dist/server/agent-trajectory-replay-lab.js +48 -0
  88. package/dist/server/agent-trajectory-replay-lab.js.map +1 -0
  89. package/dist/server/any-agent-control-plane-proof.d.ts +42 -0
  90. package/dist/server/any-agent-control-plane-proof.d.ts.map +1 -0
  91. package/dist/server/any-agent-control-plane-proof.js +175 -0
  92. package/dist/server/any-agent-control-plane-proof.js.map +1 -0
  93. package/dist/server/app-context.d.ts +1 -0
  94. package/dist/server/app-context.d.ts.map +1 -1
  95. package/dist/server/app-context.js.map +1 -1
  96. package/dist/server/handlers/a2a-cockpit.d.ts +3 -0
  97. package/dist/server/handlers/a2a-cockpit.d.ts.map +1 -0
  98. package/dist/server/handlers/a2a-cockpit.js +71 -0
  99. package/dist/server/handlers/a2a-cockpit.js.map +1 -0
  100. package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
  101. package/dist/server/handlers/headless-sessions.js +17 -2
  102. package/dist/server/handlers/headless-sessions.js.map +1 -1
  103. package/dist/server/handlers/session-artifacts.d.ts.map +1 -1
  104. package/dist/server/handlers/session-artifacts.js +14 -58
  105. package/dist/server/handlers/session-artifacts.js.map +1 -1
  106. package/dist/server/handlers/session-replay-lab.d.ts +13 -0
  107. package/dist/server/handlers/session-replay-lab.d.ts.map +1 -0
  108. package/dist/server/handlers/session-replay-lab.js +80 -0
  109. package/dist/server/handlers/session-replay-lab.js.map +1 -0
  110. package/dist/server/handlers/stats.js +1 -1
  111. package/dist/server/handlers/stats.js.map +1 -1
  112. package/dist/server/handlers/status.d.ts +44 -3
  113. package/dist/server/handlers/status.d.ts.map +1 -1
  114. package/dist/server/handlers/status.js +227 -17
  115. package/dist/server/handlers/status.js.map +1 -1
  116. package/dist/server/headless-runtime-service.d.ts +17 -0
  117. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  118. package/dist/server/headless-runtime-service.js +143 -3
  119. package/dist/server/headless-runtime-service.js.map +1 -1
  120. package/dist/server/hosted-agent-runtime-progress.d.ts +17 -0
  121. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
  122. package/dist/server/hosted-agent-runtime-progress.js +352 -15
  123. package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
  124. package/dist/server/routes.d.ts.map +1 -1
  125. package/dist/server/routes.js +14 -0
  126. package/dist/server/routes.js.map +1 -1
  127. package/dist/services/intelligent-router/index.d.ts +1 -1
  128. package/dist/services/intelligent-router/index.d.ts.map +1 -1
  129. package/dist/services/intelligent-router/index.js +1 -1
  130. package/dist/services/intelligent-router/index.js.map +1 -1
  131. package/dist/services/intelligent-router/normalize.d.ts +10 -2
  132. package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
  133. package/dist/services/intelligent-router/normalize.js +20 -1
  134. package/dist/services/intelligent-router/normalize.js.map +1 -1
  135. package/dist/services/intelligent-router/service.d.ts.map +1 -1
  136. package/dist/services/intelligent-router/service.js +35 -0
  137. package/dist/services/intelligent-router/service.js.map +1 -1
  138. package/dist/services/intelligent-router/types.d.ts +13 -0
  139. package/dist/services/intelligent-router/types.d.ts.map +1 -1
  140. package/dist/services/intelligent-router/types.js +1 -0
  141. package/dist/services/intelligent-router/types.js.map +1 -1
  142. package/dist/telemetry/cli-command-aggregator.d.ts +1 -0
  143. package/dist/telemetry/cli-command-aggregator.d.ts.map +1 -1
  144. package/dist/telemetry/cli-command-aggregator.js +23 -0
  145. package/dist/telemetry/cli-command-aggregator.js.map +1 -1
  146. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  147. package/dist/telemetry/maestro-event-bus.js +11 -5
  148. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  149. package/dist/telemetry/maestro-event-catalog.d.ts +15 -1
  150. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  151. package/dist/telemetry/maestro-event-catalog.js +30 -0
  152. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  153. package/dist/version.json +2 -2
  154. package/package.json +289 -283
@@ -38,12 +38,19 @@ function aggregateFromState(state) {
38
38
  provider: state.provider,
39
39
  model: state.model,
40
40
  samples: state.samples,
41
+ productionSamples: state.productionSamples,
42
+ evalSamples: state.evalSamples,
41
43
  successCount: state.successCount,
42
44
  successRate: state.samples > 0 ? state.successCount / state.samples : 0,
45
+ evalSuccessRate: state.evalSamples > 0 ? state.evalSuccessCount / state.evalSamples : 0,
43
46
  averageLatencyMs: state.samples > 0 ? state.totalLatencyMs / state.samples : 0,
44
47
  p95LatencyMs: percentile(state.latenciesMs, 0.95),
45
48
  averageCostUsd: state.samples > 0 ? state.totalCostUsd / state.samples : 0,
46
49
  qualityScore: state.samples > 0 ? state.qualityScoreTotal / state.samples : 0.5,
50
+ evalQualityScore: state.evalSamples > 0
51
+ ? state.evalQualityScoreTotal / state.evalSamples
52
+ : 0.5,
53
+ evalSuites: Array.from(state.evalSuites).sort(),
47
54
  updatedAt: state.updatedAt.toISOString(),
48
55
  };
49
56
  }
@@ -117,6 +124,15 @@ function scoreCandidate(params) {
117
124
  `cost=${cost.toFixed(2)}`,
118
125
  `quality=${quality.toFixed(2)}`,
119
126
  ];
127
+ if (params.aggregate?.evalSamples) {
128
+ reasons.push(`eval_samples=${params.aggregate.evalSamples}`);
129
+ }
130
+ if (params.aggregate?.productionSamples) {
131
+ reasons.push(`production_samples=${params.aggregate.productionSamples}`);
132
+ }
133
+ if (params.aggregate?.evalSamples && !params.aggregate.productionSamples) {
134
+ reasons.push("eval_backed");
135
+ }
120
136
  if (!params.available) {
121
137
  reasons.push("unavailable");
122
138
  }
@@ -132,6 +148,9 @@ function scoreCandidate(params) {
132
148
  costScore: cost,
133
149
  qualityScore: quality,
134
150
  samples: params.aggregate?.samples ?? 0,
151
+ productionSamples: params.aggregate?.productionSamples ?? 0,
152
+ evalSamples: params.aggregate?.evalSamples ?? 0,
153
+ evalBacked: Boolean(params.aggregate?.evalSamples && !params.aggregate.productionSamples),
135
154
  available: params.available,
136
155
  reasons,
137
156
  };
@@ -168,16 +187,32 @@ export class IntelligentRouterService {
168
187
  provider: metric.provider,
169
188
  model: metric.model,
170
189
  samples: 0,
190
+ productionSamples: 0,
191
+ evalSamples: 0,
171
192
  successCount: 0,
193
+ evalSuccessCount: 0,
172
194
  totalLatencyMs: 0,
173
195
  latenciesMs: [],
174
196
  totalCostUsd: 0,
175
197
  qualityScoreTotal: 0,
198
+ evalQualityScoreTotal: 0,
199
+ evalSuites: new Set(),
176
200
  updatedAt: this.now(),
177
201
  };
178
202
  state.samples += 1;
179
203
  if (metric.success)
180
204
  state.successCount += 1;
205
+ if (metric.source === "eval") {
206
+ state.evalSamples += 1;
207
+ if (metric.success)
208
+ state.evalSuccessCount += 1;
209
+ state.evalQualityScoreTotal += metric.qualityScore;
210
+ if (metric.evalSuite)
211
+ state.evalSuites.add(metric.evalSuite);
212
+ }
213
+ else {
214
+ state.productionSamples += 1;
215
+ }
181
216
  state.totalLatencyMs += metric.latencyMs;
182
217
  state.latenciesMs.push(metric.latencyMs);
183
218
  if (state.latenciesMs.length > MAX_LATENCIES) {
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/services/intelligent-router/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n\ttype ServiceAuthorityResolution,\n\tresolveServiceAuthority,\n} from \"../service-authority.js\";\nimport {\n\tIntelligentRouterValidationError,\n\tnormalizePerformanceMetricInput,\n\tnormalizeRoutingOverrideInput,\n\tnormalizeRoutingRequest,\n} from \"./normalize.js\";\nimport type {\n\tModelPerformanceAggregate,\n\tModelPerformanceMetricInput,\n\tRoutedModel,\n\tRoutingDecision,\n\tRoutingModelCandidate,\n\tRoutingOverride,\n\tRoutingOverrideInput,\n\tRoutingRequestInput,\n\tRoutingScore,\n\tRoutingStrategy,\n} from \"./types.js\";\n\nconst MIN_HISTORY_SAMPLES = 2;\nconst MAX_LATENCIES = 100;\nconst MAX_DECISIONS = 100;\n\ninterface MetricState {\n\ttaskType: string;\n\tprovider: string;\n\tmodel: string;\n\tsamples: number;\n\tsuccessCount: number;\n\ttotalLatencyMs: number;\n\tlatenciesMs: number[];\n\ttotalCostUsd: number;\n\tqualityScoreTotal: number;\n\tupdatedAt: Date;\n}\n\ninterface StrategyWeights {\n\tsuccess: number;\n\tlatency: number;\n\tcost: number;\n\tquality: number;\n}\n\nconst STRATEGY_WEIGHTS: Record<RoutingStrategy, StrategyWeights> = {\n\tbalanced: { success: 0.45, latency: 0.25, cost: 0.2, quality: 0.1 },\n\tquality: { success: 0.3, latency: 0.05, cost: 0.05, quality: 0.6 },\n\tcost: { success: 0.25, latency: 0.15, cost: 0.55, quality: 0.05 },\n\tlatency: { success: 0.3, latency: 0.55, cost: 0.1, quality: 0.05 },\n};\n\nfunction modelKey(provider: string, model: string): string {\n\treturn `${provider}/${model}`;\n}\n\nfunction metricKey(taskType: string, provider: string, model: string): string {\n\treturn `${taskType}:${modelKey(provider, model)}`;\n}\n\nfunction normalizeModelRef(value: string): string {\n\treturn value.trim().toLowerCase();\n}\n\nfunction decisionId(payload: unknown): string {\n\treturn `route_${createHash(\"sha256\")\n\t\t.update(JSON.stringify(payload))\n\t\t.digest(\"hex\")\n\t\t.slice(0, 16)}`;\n}\n\nfunction percentile(values: number[], ratio: number): number {\n\tif (values.length === 0) return 0;\n\tconst sorted = [...values].sort((a, b) => a - b);\n\tconst index = Math.min(\n\t\tsorted.length - 1,\n\t\tMath.max(0, Math.ceil(sorted.length * ratio) - 1),\n\t);\n\treturn sorted[index] ?? 0;\n}\n\nfunction aggregateFromState(state: MetricState): ModelPerformanceAggregate {\n\treturn {\n\t\ttaskType: state.taskType,\n\t\tprovider: state.provider,\n\t\tmodel: state.model,\n\t\tsamples: state.samples,\n\t\tsuccessCount: state.successCount,\n\t\tsuccessRate: state.samples > 0 ? state.successCount / state.samples : 0,\n\t\taverageLatencyMs:\n\t\t\tstate.samples > 0 ? state.totalLatencyMs / state.samples : 0,\n\t\tp95LatencyMs: percentile(state.latenciesMs, 0.95),\n\t\taverageCostUsd: state.samples > 0 ? state.totalCostUsd / state.samples : 0,\n\t\tqualityScore:\n\t\t\tstate.samples > 0 ? state.qualityScoreTotal / state.samples : 0.5,\n\t\tupdatedAt: state.updatedAt.toISOString(),\n\t};\n}\n\nfunction candidateKey(candidate: RoutingModelCandidate): string {\n\treturn modelKey(candidate.provider, candidate.model);\n}\n\nfunction modelMatchesHint(\n\tcandidate: RoutingModelCandidate,\n\thint: string | undefined,\n): boolean {\n\tif (!hint) return false;\n\tconst normalizedHint = normalizeModelRef(hint);\n\tconst candidateRefs = [\n\t\tcandidate.model,\n\t\tcandidateKey(candidate),\n\t\t`${candidate.provider}:${candidate.model}`,\n\t];\n\treturn candidateRefs.some(\n\t\t(candidateRef) => normalizeModelRef(candidateRef) === normalizedHint,\n\t);\n}\n\nfunction costEstimate(candidate: RoutingModelCandidate): number | undefined {\n\tconst cost = candidate.cost;\n\tif (!cost) return undefined;\n\tconst values = [\n\t\tcost.input,\n\t\tcost.output,\n\t\tcost.cacheRead,\n\t\tcost.cacheWrite,\n\t].filter(\n\t\t(value): value is number =>\n\t\t\ttypeof value === \"number\" && Number.isFinite(value),\n\t);\n\tif (values.length === 0) return undefined;\n\treturn values.reduce((total, value) => total + value, 0) / values.length;\n}\n\nfunction costScore(\n\taggregate: ModelPerformanceAggregate | undefined,\n\tcandidate: RoutingModelCandidate,\n): number {\n\tconst cost = aggregate?.samples\n\t\t? aggregate.averageCostUsd\n\t\t: costEstimate(candidate);\n\tif (cost === undefined || cost <= 0) return 0.5;\n\treturn 1 / (1 + cost);\n}\n\nfunction latencyScore(\n\taggregate: ModelPerformanceAggregate | undefined,\n): number {\n\tif (!aggregate?.samples) return 0.5;\n\tconst latency = aggregate.p95LatencyMs || aggregate.averageLatencyMs;\n\treturn Math.max(0, 1 - Math.min(latency, 30_000) / 30_000);\n}\n\nfunction successScore(\n\taggregate: ModelPerformanceAggregate | undefined,\n): number {\n\tif (!aggregate?.samples) return 0.5;\n\treturn aggregate.successRate;\n}\n\nfunction qualityScore(\n\taggregate: ModelPerformanceAggregate | undefined,\n): number {\n\tif (!aggregate?.samples) return 0.5;\n\treturn aggregate.qualityScore;\n}\n\nfunction scoreCandidate(params: {\n\tcandidate: RoutingModelCandidate;\n\taggregate?: ModelPerformanceAggregate;\n\tstrategy: RoutingStrategy;\n\tavailable: boolean;\n}): RoutingScore {\n\tconst weights = STRATEGY_WEIGHTS[params.strategy];\n\tconst success = successScore(params.aggregate);\n\tconst latency = latencyScore(params.aggregate);\n\tconst cost = costScore(params.aggregate, params.candidate);\n\tconst quality = qualityScore(params.aggregate);\n\tconst score = params.available\n\t\t? success * weights.success +\n\t\t\tlatency * weights.latency +\n\t\t\tcost * weights.cost +\n\t\t\tquality * weights.quality\n\t\t: -1;\n\tconst reasons = [\n\t\t`success=${success.toFixed(2)}`,\n\t\t`latency=${latency.toFixed(2)}`,\n\t\t`cost=${cost.toFixed(2)}`,\n\t\t`quality=${quality.toFixed(2)}`,\n\t];\n\tif (!params.available) {\n\t\treasons.push(\"unavailable\");\n\t}\n\tif (!params.aggregate?.samples) {\n\t\treasons.push(\"cold_start\");\n\t}\n\treturn {\n\t\tprovider: params.candidate.provider,\n\t\tmodel: params.candidate.model,\n\t\tscore,\n\t\tsuccessRate: success,\n\t\tlatencyScore: latency,\n\t\tcostScore: cost,\n\t\tqualityScore: quality,\n\t\tsamples: params.aggregate?.samples ?? 0,\n\t\tavailable: params.available,\n\t\treasons,\n\t};\n}\n\nfunction routedModelFromScore(score: RoutingScore): RoutedModel {\n\treturn {\n\t\tprovider: score.provider,\n\t\tmodel: score.model,\n\t};\n}\n\nfunction overrideExpired(override: RoutingOverride, now: Date): boolean {\n\treturn override.expiresAt\n\t\t? Date.parse(override.expiresAt) <= now.getTime()\n\t\t: false;\n}\n\nexport class IntelligentRouterService {\n\tprivate readonly metrics = new Map<string, MetricState>();\n\tprivate readonly overrides = new Map<string, RoutingOverride>();\n\tprivate readonly decisions: RoutingDecision[] = [];\n\n\tconstructor(\n\t\tprivate readonly defaultModels: () => RoutingModelCandidate[] = () => [],\n\t\tprivate readonly now: () => Date = () => new Date(),\n\t) {}\n\n\tgetAuthority(): ServiceAuthorityResolution {\n\t\treturn resolveServiceAuthority(\"intelligent_router\");\n\t}\n\n\trecordPerformanceMetric(\n\t\tinput: ModelPerformanceMetricInput,\n\t): ModelPerformanceAggregate {\n\t\tconst metric = normalizePerformanceMetricInput(input);\n\t\tconst key = metricKey(metric.taskType, metric.provider, metric.model);\n\t\tconst existing = this.metrics.get(key);\n\t\tconst state =\n\t\t\texisting ??\n\t\t\t({\n\t\t\t\ttaskType: metric.taskType,\n\t\t\t\tprovider: metric.provider,\n\t\t\t\tmodel: metric.model,\n\t\t\t\tsamples: 0,\n\t\t\t\tsuccessCount: 0,\n\t\t\t\ttotalLatencyMs: 0,\n\t\t\t\tlatenciesMs: [],\n\t\t\t\ttotalCostUsd: 0,\n\t\t\t\tqualityScoreTotal: 0,\n\t\t\t\tupdatedAt: this.now(),\n\t\t\t} satisfies MetricState);\n\n\t\tstate.samples += 1;\n\t\tif (metric.success) state.successCount += 1;\n\t\tstate.totalLatencyMs += metric.latencyMs;\n\t\tstate.latenciesMs.push(metric.latencyMs);\n\t\tif (state.latenciesMs.length > MAX_LATENCIES) {\n\t\t\tstate.latenciesMs.splice(0, state.latenciesMs.length - MAX_LATENCIES);\n\t\t}\n\t\tstate.totalCostUsd += metric.costUsd;\n\t\tstate.qualityScoreTotal += metric.qualityScore;\n\t\tstate.updatedAt =\n\t\t\tmetric.occurredAt instanceof Date\n\t\t\t\t? metric.occurredAt\n\t\t\t\t: new Date(metric.occurredAt);\n\t\tthis.metrics.set(key, state);\n\t\treturn aggregateFromState(state);\n\t}\n\n\trouteRequest(input: RoutingRequestInput): RoutingDecision {\n\t\tconst request = normalizeRoutingRequest(input, this.defaultModels());\n\t\tif (request.availableModels.length === 0) {\n\t\t\tthrow new IntelligentRouterValidationError(\n\t\t\t\t\"No available models were provided for routing.\",\n\t\t\t);\n\t\t}\n\n\t\tthis.pruneExpiredOverrides();\n\t\tconst unavailable = new Set(\n\t\t\trequest.unavailableModels.map((entry) => normalizeModelRef(entry)),\n\t\t);\n\t\tconst scores = request.availableModels\n\t\t\t.map((candidate) => {\n\t\t\t\tconst aggregate = this.getAggregate(\n\t\t\t\t\trequest.taskType,\n\t\t\t\t\tcandidate.provider,\n\t\t\t\t\tcandidate.model,\n\t\t\t\t);\n\t\t\t\tconst available =\n\t\t\t\t\tcandidate.available !== false &&\n\t\t\t\t\t!unavailable.has(normalizeModelRef(candidate.model)) &&\n\t\t\t\t\t!unavailable.has(normalizeModelRef(candidateKey(candidate)));\n\t\t\t\treturn scoreCandidate({\n\t\t\t\t\tcandidate,\n\t\t\t\t\taggregate,\n\t\t\t\t\tstrategy: request.strategy,\n\t\t\t\t\tavailable,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.sort((a, b) => b.score - a.score || a.model.localeCompare(b.model));\n\n\t\tconst availableScores = scores.filter((score) => score.available);\n\t\tif (availableScores.length === 0) {\n\t\t\tthrow new IntelligentRouterValidationError(\n\t\t\t\t\"All models are marked unavailable.\",\n\t\t\t);\n\t\t}\n\t\tconst firstAvailable = availableScores[0];\n\t\tif (!firstAvailable) {\n\t\t\tthrow new IntelligentRouterValidationError(\n\t\t\t\t\"All models are marked unavailable.\",\n\t\t\t);\n\t\t}\n\n\t\tconst override = this.overrides.get(request.taskType);\n\t\tconst overrideScore =\n\t\t\toverride && !overrideExpired(override, this.now())\n\t\t\t\t? availableScores.find(\n\t\t\t\t\t\t(score) =>\n\t\t\t\t\t\t\tscore.provider === override.provider &&\n\t\t\t\t\t\t\tscore.model === override.model,\n\t\t\t\t\t)\n\t\t\t\t: undefined;\n\t\tconst hintScore = request.modelHint\n\t\t\t? availableScores.find((score) =>\n\t\t\t\t\tmodelMatchesHint(\n\t\t\t\t\t\t{ provider: score.provider, model: score.model },\n\t\t\t\t\t\trequest.modelHint,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t: undefined;\n\t\tconst enoughHistory = availableScores.some(\n\t\t\t(score) => score.samples >= MIN_HISTORY_SAMPLES,\n\t\t);\n\t\tconst selectedScore =\n\t\t\toverrideScore ??\n\t\t\t(!enoughHistory && hintScore ? hintScore : firstAvailable);\n\t\tconst overrideApplied = overrideScore !== undefined;\n\t\tconst reason = overrideApplied\n\t\t\t? \"override\"\n\t\t\t: !enoughHistory && hintScore\n\t\t\t\t? \"insufficient_history_model_hint\"\n\t\t\t\t: \"highest_score\";\n\t\tconst selected = routedModelFromScore(selectedScore);\n\t\tconst fallbackChain = availableScores\n\t\t\t.filter(\n\t\t\t\t(score) =>\n\t\t\t\t\tscore.provider !== selected.provider ||\n\t\t\t\t\tscore.model !== selected.model,\n\t\t\t)\n\t\t\t.map(routedModelFromScore);\n\t\tconst createdAt = this.now().toISOString();\n\t\tconst decision: RoutingDecision = {\n\t\t\tdecisionId: decisionId({\n\t\t\t\ttaskType: request.taskType,\n\t\t\t\tstrategy: request.strategy,\n\t\t\t\tselected,\n\t\t\t\tcreatedAt,\n\t\t\t}),\n\t\t\ttaskType: request.taskType,\n\t\t\tstrategy: request.strategy,\n\t\t\tselectedModel: selected,\n\t\t\tfallbackChain,\n\t\t\tscores,\n\t\t\toverrideApplied,\n\t\t\treason,\n\t\t\tcreatedAt,\n\t\t\t...(request.modelHint ? { modelHint: request.modelHint } : {}),\n\t\t};\n\t\tthis.decisions.unshift(decision);\n\t\tif (this.decisions.length > MAX_DECISIONS) {\n\t\t\tthis.decisions.splice(MAX_DECISIONS);\n\t\t}\n\t\treturn decision;\n\t}\n\n\tsetOverride(input: RoutingOverrideInput): RoutingOverride {\n\t\tconst overrideInput = normalizeRoutingOverrideInput(input);\n\t\tconst expiresAt =\n\t\t\toverrideInput.expiresAt instanceof Date\n\t\t\t\t? overrideInput.expiresAt.toISOString()\n\t\t\t\t: overrideInput.expiresAt;\n\t\tconst override: RoutingOverride = {\n\t\t\ttaskType: overrideInput.taskType,\n\t\t\tprovider: overrideInput.provider,\n\t\t\tmodel: overrideInput.model,\n\t\t\tcreatedAt: this.now().toISOString(),\n\t\t\t...(overrideInput.reason ? { reason: overrideInput.reason } : {}),\n\t\t\t...(expiresAt ? { expiresAt } : {}),\n\t\t};\n\t\tthis.overrides.set(override.taskType, override);\n\t\treturn override;\n\t}\n\n\tdeleteOverride(taskType: string): boolean {\n\t\treturn this.overrides.delete(taskType.trim());\n\t}\n\n\tlistOverrides(): RoutingOverride[] {\n\t\tthis.pruneExpiredOverrides();\n\t\treturn Array.from(this.overrides.values()).sort((a, b) =>\n\t\t\ta.taskType.localeCompare(b.taskType),\n\t\t);\n\t}\n\n\tlistMetrics(taskType?: string): ModelPerformanceAggregate[] {\n\t\tconst aggregates = Array.from(this.metrics.values()).map(\n\t\t\taggregateFromState,\n\t\t);\n\t\tconst filtered = taskType\n\t\t\t? aggregates.filter((metric) => metric.taskType === taskType)\n\t\t\t: aggregates;\n\t\treturn filtered.sort(\n\t\t\t(a, b) =>\n\t\t\t\ta.taskType.localeCompare(b.taskType) ||\n\t\t\t\ta.provider.localeCompare(b.provider) ||\n\t\t\t\ta.model.localeCompare(b.model),\n\t\t);\n\t}\n\n\tlistDecisions(limit = 20): RoutingDecision[] {\n\t\tconst normalizedLimit = Math.max(1, Math.min(100, Math.floor(limit)));\n\t\treturn this.decisions.slice(0, normalizedLimit);\n\t}\n\n\tclearForTest(): void {\n\t\tthis.metrics.clear();\n\t\tthis.overrides.clear();\n\t\tthis.decisions.length = 0;\n\t}\n\n\tprivate getAggregate(\n\t\ttaskType: string,\n\t\tprovider: string,\n\t\tmodel: string,\n\t): ModelPerformanceAggregate | undefined {\n\t\tconst state = this.metrics.get(metricKey(taskType, provider, model));\n\t\treturn state ? aggregateFromState(state) : undefined;\n\t}\n\n\tprivate pruneExpiredOverrides(): void {\n\t\tconst now = this.now();\n\t\tfor (const [taskType, override] of this.overrides) {\n\t\t\tif (overrideExpired(override, now)) {\n\t\t\t\tthis.overrides.delete(taskType);\n\t\t\t}\n\t\t}\n\t}\n}\n\nlet defaultIntelligentRouterService: IntelligentRouterService | null = null;\n\nexport function getIntelligentRouterService(): IntelligentRouterService {\n\tdefaultIntelligentRouterService ??= new IntelligentRouterService();\n\treturn defaultIntelligentRouterService;\n}\n\nexport function setIntelligentRouterServiceForTest(\n\tservice: IntelligentRouterService | null,\n): void {\n\tdefaultIntelligentRouterService = service;\n}\n"]}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/services/intelligent-router/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n\ttype ServiceAuthorityResolution,\n\tresolveServiceAuthority,\n} from \"../service-authority.js\";\nimport {\n\tIntelligentRouterValidationError,\n\tnormalizePerformanceMetricInput,\n\tnormalizeRoutingOverrideInput,\n\tnormalizeRoutingRequest,\n} from \"./normalize.js\";\nimport type {\n\tModelPerformanceAggregate,\n\tModelPerformanceMetricInput,\n\tRoutedModel,\n\tRoutingDecision,\n\tRoutingModelCandidate,\n\tRoutingOverride,\n\tRoutingOverrideInput,\n\tRoutingRequestInput,\n\tRoutingScore,\n\tRoutingStrategy,\n} from \"./types.js\";\n\nconst MIN_HISTORY_SAMPLES = 2;\nconst MAX_LATENCIES = 100;\nconst MAX_DECISIONS = 100;\n\ninterface MetricState {\n\ttaskType: string;\n\tprovider: string;\n\tmodel: string;\n\tsamples: number;\n\tproductionSamples: number;\n\tevalSamples: number;\n\tsuccessCount: number;\n\tevalSuccessCount: number;\n\ttotalLatencyMs: number;\n\tlatenciesMs: number[];\n\ttotalCostUsd: number;\n\tqualityScoreTotal: number;\n\tevalQualityScoreTotal: number;\n\tevalSuites: Set<string>;\n\tupdatedAt: Date;\n}\n\ninterface StrategyWeights {\n\tsuccess: number;\n\tlatency: number;\n\tcost: number;\n\tquality: number;\n}\n\nconst STRATEGY_WEIGHTS: Record<RoutingStrategy, StrategyWeights> = {\n\tbalanced: { success: 0.45, latency: 0.25, cost: 0.2, quality: 0.1 },\n\tquality: { success: 0.3, latency: 0.05, cost: 0.05, quality: 0.6 },\n\tcost: { success: 0.25, latency: 0.15, cost: 0.55, quality: 0.05 },\n\tlatency: { success: 0.3, latency: 0.55, cost: 0.1, quality: 0.05 },\n};\n\nfunction modelKey(provider: string, model: string): string {\n\treturn `${provider}/${model}`;\n}\n\nfunction metricKey(taskType: string, provider: string, model: string): string {\n\treturn `${taskType}:${modelKey(provider, model)}`;\n}\n\nfunction normalizeModelRef(value: string): string {\n\treturn value.trim().toLowerCase();\n}\n\nfunction decisionId(payload: unknown): string {\n\treturn `route_${createHash(\"sha256\")\n\t\t.update(JSON.stringify(payload))\n\t\t.digest(\"hex\")\n\t\t.slice(0, 16)}`;\n}\n\nfunction percentile(values: number[], ratio: number): number {\n\tif (values.length === 0) return 0;\n\tconst sorted = [...values].sort((a, b) => a - b);\n\tconst index = Math.min(\n\t\tsorted.length - 1,\n\t\tMath.max(0, Math.ceil(sorted.length * ratio) - 1),\n\t);\n\treturn sorted[index] ?? 0;\n}\n\nfunction aggregateFromState(state: MetricState): ModelPerformanceAggregate {\n\treturn {\n\t\ttaskType: state.taskType,\n\t\tprovider: state.provider,\n\t\tmodel: state.model,\n\t\tsamples: state.samples,\n\t\tproductionSamples: state.productionSamples,\n\t\tevalSamples: state.evalSamples,\n\t\tsuccessCount: state.successCount,\n\t\tsuccessRate: state.samples > 0 ? state.successCount / state.samples : 0,\n\t\tevalSuccessRate:\n\t\t\tstate.evalSamples > 0 ? state.evalSuccessCount / state.evalSamples : 0,\n\t\taverageLatencyMs:\n\t\t\tstate.samples > 0 ? state.totalLatencyMs / state.samples : 0,\n\t\tp95LatencyMs: percentile(state.latenciesMs, 0.95),\n\t\taverageCostUsd: state.samples > 0 ? state.totalCostUsd / state.samples : 0,\n\t\tqualityScore:\n\t\t\tstate.samples > 0 ? state.qualityScoreTotal / state.samples : 0.5,\n\t\tevalQualityScore:\n\t\t\tstate.evalSamples > 0\n\t\t\t\t? state.evalQualityScoreTotal / state.evalSamples\n\t\t\t\t: 0.5,\n\t\tevalSuites: Array.from(state.evalSuites).sort(),\n\t\tupdatedAt: state.updatedAt.toISOString(),\n\t};\n}\n\nfunction candidateKey(candidate: RoutingModelCandidate): string {\n\treturn modelKey(candidate.provider, candidate.model);\n}\n\nfunction modelMatchesHint(\n\tcandidate: RoutingModelCandidate,\n\thint: string | undefined,\n): boolean {\n\tif (!hint) return false;\n\tconst normalizedHint = normalizeModelRef(hint);\n\tconst candidateRefs = [\n\t\tcandidate.model,\n\t\tcandidateKey(candidate),\n\t\t`${candidate.provider}:${candidate.model}`,\n\t];\n\treturn candidateRefs.some(\n\t\t(candidateRef) => normalizeModelRef(candidateRef) === normalizedHint,\n\t);\n}\n\nfunction costEstimate(candidate: RoutingModelCandidate): number | undefined {\n\tconst cost = candidate.cost;\n\tif (!cost) return undefined;\n\tconst values = [\n\t\tcost.input,\n\t\tcost.output,\n\t\tcost.cacheRead,\n\t\tcost.cacheWrite,\n\t].filter(\n\t\t(value): value is number =>\n\t\t\ttypeof value === \"number\" && Number.isFinite(value),\n\t);\n\tif (values.length === 0) return undefined;\n\treturn values.reduce((total, value) => total + value, 0) / values.length;\n}\n\nfunction costScore(\n\taggregate: ModelPerformanceAggregate | undefined,\n\tcandidate: RoutingModelCandidate,\n): number {\n\tconst cost = aggregate?.samples\n\t\t? aggregate.averageCostUsd\n\t\t: costEstimate(candidate);\n\tif (cost === undefined || cost <= 0) return 0.5;\n\treturn 1 / (1 + cost);\n}\n\nfunction latencyScore(\n\taggregate: ModelPerformanceAggregate | undefined,\n): number {\n\tif (!aggregate?.samples) return 0.5;\n\tconst latency = aggregate.p95LatencyMs || aggregate.averageLatencyMs;\n\treturn Math.max(0, 1 - Math.min(latency, 30_000) / 30_000);\n}\n\nfunction successScore(\n\taggregate: ModelPerformanceAggregate | undefined,\n): number {\n\tif (!aggregate?.samples) return 0.5;\n\treturn aggregate.successRate;\n}\n\nfunction qualityScore(\n\taggregate: ModelPerformanceAggregate | undefined,\n): number {\n\tif (!aggregate?.samples) return 0.5;\n\treturn aggregate.qualityScore;\n}\n\nfunction scoreCandidate(params: {\n\tcandidate: RoutingModelCandidate;\n\taggregate?: ModelPerformanceAggregate;\n\tstrategy: RoutingStrategy;\n\tavailable: boolean;\n}): RoutingScore {\n\tconst weights = STRATEGY_WEIGHTS[params.strategy];\n\tconst success = successScore(params.aggregate);\n\tconst latency = latencyScore(params.aggregate);\n\tconst cost = costScore(params.aggregate, params.candidate);\n\tconst quality = qualityScore(params.aggregate);\n\tconst score = params.available\n\t\t? success * weights.success +\n\t\t\tlatency * weights.latency +\n\t\t\tcost * weights.cost +\n\t\t\tquality * weights.quality\n\t\t: -1;\n\tconst reasons = [\n\t\t`success=${success.toFixed(2)}`,\n\t\t`latency=${latency.toFixed(2)}`,\n\t\t`cost=${cost.toFixed(2)}`,\n\t\t`quality=${quality.toFixed(2)}`,\n\t];\n\tif (params.aggregate?.evalSamples) {\n\t\treasons.push(`eval_samples=${params.aggregate.evalSamples}`);\n\t}\n\tif (params.aggregate?.productionSamples) {\n\t\treasons.push(`production_samples=${params.aggregate.productionSamples}`);\n\t}\n\tif (params.aggregate?.evalSamples && !params.aggregate.productionSamples) {\n\t\treasons.push(\"eval_backed\");\n\t}\n\tif (!params.available) {\n\t\treasons.push(\"unavailable\");\n\t}\n\tif (!params.aggregate?.samples) {\n\t\treasons.push(\"cold_start\");\n\t}\n\treturn {\n\t\tprovider: params.candidate.provider,\n\t\tmodel: params.candidate.model,\n\t\tscore,\n\t\tsuccessRate: success,\n\t\tlatencyScore: latency,\n\t\tcostScore: cost,\n\t\tqualityScore: quality,\n\t\tsamples: params.aggregate?.samples ?? 0,\n\t\tproductionSamples: params.aggregate?.productionSamples ?? 0,\n\t\tevalSamples: params.aggregate?.evalSamples ?? 0,\n\t\tevalBacked: Boolean(\n\t\t\tparams.aggregate?.evalSamples && !params.aggregate.productionSamples,\n\t\t),\n\t\tavailable: params.available,\n\t\treasons,\n\t};\n}\n\nfunction routedModelFromScore(score: RoutingScore): RoutedModel {\n\treturn {\n\t\tprovider: score.provider,\n\t\tmodel: score.model,\n\t};\n}\n\nfunction overrideExpired(override: RoutingOverride, now: Date): boolean {\n\treturn override.expiresAt\n\t\t? Date.parse(override.expiresAt) <= now.getTime()\n\t\t: false;\n}\n\nexport class IntelligentRouterService {\n\tprivate readonly metrics = new Map<string, MetricState>();\n\tprivate readonly overrides = new Map<string, RoutingOverride>();\n\tprivate readonly decisions: RoutingDecision[] = [];\n\n\tconstructor(\n\t\tprivate readonly defaultModels: () => RoutingModelCandidate[] = () => [],\n\t\tprivate readonly now: () => Date = () => new Date(),\n\t) {}\n\n\tgetAuthority(): ServiceAuthorityResolution {\n\t\treturn resolveServiceAuthority(\"intelligent_router\");\n\t}\n\n\trecordPerformanceMetric(\n\t\tinput: ModelPerformanceMetricInput,\n\t): ModelPerformanceAggregate {\n\t\tconst metric = normalizePerformanceMetricInput(input);\n\t\tconst key = metricKey(metric.taskType, metric.provider, metric.model);\n\t\tconst existing = this.metrics.get(key);\n\t\tconst state =\n\t\t\texisting ??\n\t\t\t({\n\t\t\t\ttaskType: metric.taskType,\n\t\t\t\tprovider: metric.provider,\n\t\t\t\tmodel: metric.model,\n\t\t\t\tsamples: 0,\n\t\t\t\tproductionSamples: 0,\n\t\t\t\tevalSamples: 0,\n\t\t\t\tsuccessCount: 0,\n\t\t\t\tevalSuccessCount: 0,\n\t\t\t\ttotalLatencyMs: 0,\n\t\t\t\tlatenciesMs: [],\n\t\t\t\ttotalCostUsd: 0,\n\t\t\t\tqualityScoreTotal: 0,\n\t\t\t\tevalQualityScoreTotal: 0,\n\t\t\t\tevalSuites: new Set<string>(),\n\t\t\t\tupdatedAt: this.now(),\n\t\t\t} satisfies MetricState);\n\n\t\tstate.samples += 1;\n\t\tif (metric.success) state.successCount += 1;\n\t\tif (metric.source === \"eval\") {\n\t\t\tstate.evalSamples += 1;\n\t\t\tif (metric.success) state.evalSuccessCount += 1;\n\t\t\tstate.evalQualityScoreTotal += metric.qualityScore;\n\t\t\tif (metric.evalSuite) state.evalSuites.add(metric.evalSuite);\n\t\t} else {\n\t\t\tstate.productionSamples += 1;\n\t\t}\n\t\tstate.totalLatencyMs += metric.latencyMs;\n\t\tstate.latenciesMs.push(metric.latencyMs);\n\t\tif (state.latenciesMs.length > MAX_LATENCIES) {\n\t\t\tstate.latenciesMs.splice(0, state.latenciesMs.length - MAX_LATENCIES);\n\t\t}\n\t\tstate.totalCostUsd += metric.costUsd;\n\t\tstate.qualityScoreTotal += metric.qualityScore;\n\t\tstate.updatedAt =\n\t\t\tmetric.occurredAt instanceof Date\n\t\t\t\t? metric.occurredAt\n\t\t\t\t: new Date(metric.occurredAt);\n\t\tthis.metrics.set(key, state);\n\t\treturn aggregateFromState(state);\n\t}\n\n\trouteRequest(input: RoutingRequestInput): RoutingDecision {\n\t\tconst request = normalizeRoutingRequest(input, this.defaultModels());\n\t\tif (request.availableModels.length === 0) {\n\t\t\tthrow new IntelligentRouterValidationError(\n\t\t\t\t\"No available models were provided for routing.\",\n\t\t\t);\n\t\t}\n\n\t\tthis.pruneExpiredOverrides();\n\t\tconst unavailable = new Set(\n\t\t\trequest.unavailableModels.map((entry) => normalizeModelRef(entry)),\n\t\t);\n\t\tconst scores = request.availableModels\n\t\t\t.map((candidate) => {\n\t\t\t\tconst aggregate = this.getAggregate(\n\t\t\t\t\trequest.taskType,\n\t\t\t\t\tcandidate.provider,\n\t\t\t\t\tcandidate.model,\n\t\t\t\t);\n\t\t\t\tconst available =\n\t\t\t\t\tcandidate.available !== false &&\n\t\t\t\t\t!unavailable.has(normalizeModelRef(candidate.model)) &&\n\t\t\t\t\t!unavailable.has(normalizeModelRef(candidateKey(candidate)));\n\t\t\t\treturn scoreCandidate({\n\t\t\t\t\tcandidate,\n\t\t\t\t\taggregate,\n\t\t\t\t\tstrategy: request.strategy,\n\t\t\t\t\tavailable,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.sort((a, b) => b.score - a.score || a.model.localeCompare(b.model));\n\n\t\tconst availableScores = scores.filter((score) => score.available);\n\t\tif (availableScores.length === 0) {\n\t\t\tthrow new IntelligentRouterValidationError(\n\t\t\t\t\"All models are marked unavailable.\",\n\t\t\t);\n\t\t}\n\t\tconst firstAvailable = availableScores[0];\n\t\tif (!firstAvailable) {\n\t\t\tthrow new IntelligentRouterValidationError(\n\t\t\t\t\"All models are marked unavailable.\",\n\t\t\t);\n\t\t}\n\n\t\tconst override = this.overrides.get(request.taskType);\n\t\tconst overrideScore =\n\t\t\toverride && !overrideExpired(override, this.now())\n\t\t\t\t? availableScores.find(\n\t\t\t\t\t\t(score) =>\n\t\t\t\t\t\t\tscore.provider === override.provider &&\n\t\t\t\t\t\t\tscore.model === override.model,\n\t\t\t\t\t)\n\t\t\t\t: undefined;\n\t\tconst hintScore = request.modelHint\n\t\t\t? availableScores.find((score) =>\n\t\t\t\t\tmodelMatchesHint(\n\t\t\t\t\t\t{ provider: score.provider, model: score.model },\n\t\t\t\t\t\trequest.modelHint,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t: undefined;\n\t\tconst enoughHistory = availableScores.some(\n\t\t\t(score) => score.samples >= MIN_HISTORY_SAMPLES,\n\t\t);\n\t\tconst selectedScore =\n\t\t\toverrideScore ??\n\t\t\t(!enoughHistory && hintScore ? hintScore : firstAvailable);\n\t\tconst overrideApplied = overrideScore !== undefined;\n\t\tconst reason = overrideApplied\n\t\t\t? \"override\"\n\t\t\t: !enoughHistory && hintScore\n\t\t\t\t? \"insufficient_history_model_hint\"\n\t\t\t\t: \"highest_score\";\n\t\tconst selected = routedModelFromScore(selectedScore);\n\t\tconst fallbackChain = availableScores\n\t\t\t.filter(\n\t\t\t\t(score) =>\n\t\t\t\t\tscore.provider !== selected.provider ||\n\t\t\t\t\tscore.model !== selected.model,\n\t\t\t)\n\t\t\t.map(routedModelFromScore);\n\t\tconst createdAt = this.now().toISOString();\n\t\tconst decision: RoutingDecision = {\n\t\t\tdecisionId: decisionId({\n\t\t\t\ttaskType: request.taskType,\n\t\t\t\tstrategy: request.strategy,\n\t\t\t\tselected,\n\t\t\t\tcreatedAt,\n\t\t\t}),\n\t\t\ttaskType: request.taskType,\n\t\t\tstrategy: request.strategy,\n\t\t\tselectedModel: selected,\n\t\t\tfallbackChain,\n\t\t\tscores,\n\t\t\toverrideApplied,\n\t\t\treason,\n\t\t\tcreatedAt,\n\t\t\t...(request.modelHint ? { modelHint: request.modelHint } : {}),\n\t\t};\n\t\tthis.decisions.unshift(decision);\n\t\tif (this.decisions.length > MAX_DECISIONS) {\n\t\t\tthis.decisions.splice(MAX_DECISIONS);\n\t\t}\n\t\treturn decision;\n\t}\n\n\tsetOverride(input: RoutingOverrideInput): RoutingOverride {\n\t\tconst overrideInput = normalizeRoutingOverrideInput(input);\n\t\tconst expiresAt =\n\t\t\toverrideInput.expiresAt instanceof Date\n\t\t\t\t? overrideInput.expiresAt.toISOString()\n\t\t\t\t: overrideInput.expiresAt;\n\t\tconst override: RoutingOverride = {\n\t\t\ttaskType: overrideInput.taskType,\n\t\t\tprovider: overrideInput.provider,\n\t\t\tmodel: overrideInput.model,\n\t\t\tcreatedAt: this.now().toISOString(),\n\t\t\t...(overrideInput.reason ? { reason: overrideInput.reason } : {}),\n\t\t\t...(expiresAt ? { expiresAt } : {}),\n\t\t};\n\t\tthis.overrides.set(override.taskType, override);\n\t\treturn override;\n\t}\n\n\tdeleteOverride(taskType: string): boolean {\n\t\treturn this.overrides.delete(taskType.trim());\n\t}\n\n\tlistOverrides(): RoutingOverride[] {\n\t\tthis.pruneExpiredOverrides();\n\t\treturn Array.from(this.overrides.values()).sort((a, b) =>\n\t\t\ta.taskType.localeCompare(b.taskType),\n\t\t);\n\t}\n\n\tlistMetrics(taskType?: string): ModelPerformanceAggregate[] {\n\t\tconst aggregates = Array.from(this.metrics.values()).map(\n\t\t\taggregateFromState,\n\t\t);\n\t\tconst filtered = taskType\n\t\t\t? aggregates.filter((metric) => metric.taskType === taskType)\n\t\t\t: aggregates;\n\t\treturn filtered.sort(\n\t\t\t(a, b) =>\n\t\t\t\ta.taskType.localeCompare(b.taskType) ||\n\t\t\t\ta.provider.localeCompare(b.provider) ||\n\t\t\t\ta.model.localeCompare(b.model),\n\t\t);\n\t}\n\n\tlistDecisions(limit = 20): RoutingDecision[] {\n\t\tconst normalizedLimit = Math.max(1, Math.min(100, Math.floor(limit)));\n\t\treturn this.decisions.slice(0, normalizedLimit);\n\t}\n\n\tclearForTest(): void {\n\t\tthis.metrics.clear();\n\t\tthis.overrides.clear();\n\t\tthis.decisions.length = 0;\n\t}\n\n\tprivate getAggregate(\n\t\ttaskType: string,\n\t\tprovider: string,\n\t\tmodel: string,\n\t): ModelPerformanceAggregate | undefined {\n\t\tconst state = this.metrics.get(metricKey(taskType, provider, model));\n\t\treturn state ? aggregateFromState(state) : undefined;\n\t}\n\n\tprivate pruneExpiredOverrides(): void {\n\t\tconst now = this.now();\n\t\tfor (const [taskType, override] of this.overrides) {\n\t\t\tif (overrideExpired(override, now)) {\n\t\t\t\tthis.overrides.delete(taskType);\n\t\t\t}\n\t\t}\n\t}\n}\n\nlet defaultIntelligentRouterService: IntelligentRouterService | null = null;\n\nexport function getIntelligentRouterService(): IntelligentRouterService {\n\tdefaultIntelligentRouterService ??= new IntelligentRouterService();\n\treturn defaultIntelligentRouterService;\n}\n\nexport function setIntelligentRouterServiceForTest(\n\tservice: IntelligentRouterService | null,\n): void {\n\tdefaultIntelligentRouterService = service;\n}\n"]}
@@ -1,5 +1,7 @@
1
1
  export declare const ROUTING_STRATEGIES: readonly ["balanced", "quality", "cost", "latency"];
2
2
  export type RoutingStrategy = (typeof ROUTING_STRATEGIES)[number];
3
+ export declare const MODEL_PERFORMANCE_METRIC_SOURCES: readonly ["production", "eval"];
4
+ export type ModelPerformanceMetricSource = (typeof MODEL_PERFORMANCE_METRIC_SOURCES)[number];
3
5
  export interface RoutingModelCost {
4
6
  input?: number;
5
7
  output?: number;
@@ -17,10 +19,13 @@ export interface ModelPerformanceMetricInput {
17
19
  taskType: string;
18
20
  provider: string;
19
21
  model: string;
22
+ source?: ModelPerformanceMetricSource;
20
23
  latencyMs?: number;
21
24
  success?: boolean;
22
25
  costUsd?: number;
23
26
  qualityScore?: number;
27
+ evalSuite?: string;
28
+ evalCase?: string;
24
29
  occurredAt?: Date | string;
25
30
  }
26
31
  export interface ModelPerformanceAggregate {
@@ -28,12 +33,17 @@ export interface ModelPerformanceAggregate {
28
33
  provider: string;
29
34
  model: string;
30
35
  samples: number;
36
+ productionSamples: number;
37
+ evalSamples: number;
31
38
  successCount: number;
32
39
  successRate: number;
40
+ evalSuccessRate: number;
33
41
  averageLatencyMs: number;
34
42
  p95LatencyMs: number;
35
43
  averageCostUsd: number;
36
44
  qualityScore: number;
45
+ evalQualityScore: number;
46
+ evalSuites: string[];
37
47
  updatedAt: string;
38
48
  }
39
49
  export interface RoutingRequestInput {
@@ -61,6 +71,9 @@ export interface RoutingScore {
61
71
  costScore: number;
62
72
  qualityScore: number;
63
73
  samples: number;
74
+ productionSamples: number;
75
+ evalSamples: number;
76
+ evalBacked: boolean;
64
77
  available: boolean;
65
78
  reasons: string[];
66
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/intelligent-router/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/intelligent-router/types.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,5 @@ export const ROUTING_STRATEGIES = [
4
4
  "cost",
5
5
  "latency",
6
6
  ];
7
+ export const MODEL_PERFORMANCE_METRIC_SOURCES = ["production", "eval"];
7
8
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/intelligent-router/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IACjC,UAAU;IACV,SAAS;IACT,MAAM;IACN,SAAS;CACA,CAAC","sourcesContent":["export const ROUTING_STRATEGIES = [\n\t\"balanced\",\n\t\"quality\",\n\t\"cost\",\n\t\"latency\",\n] as const;\n\nexport type RoutingStrategy = (typeof ROUTING_STRATEGIES)[number];\n\nexport interface RoutingModelCost {\n\tinput?: number;\n\toutput?: number;\n\tcacheRead?: number;\n\tcacheWrite?: number;\n}\n\nexport interface RoutingModelCandidate {\n\tprovider: string;\n\tmodel: string;\n\tname?: string;\n\tcost?: RoutingModelCost;\n\tavailable?: boolean;\n}\n\nexport interface ModelPerformanceMetricInput {\n\ttaskType: string;\n\tprovider: string;\n\tmodel: string;\n\tlatencyMs?: number;\n\tsuccess?: boolean;\n\tcostUsd?: number;\n\tqualityScore?: number;\n\toccurredAt?: Date | string;\n}\n\nexport interface ModelPerformanceAggregate {\n\ttaskType: string;\n\tprovider: string;\n\tmodel: string;\n\tsamples: number;\n\tsuccessCount: number;\n\tsuccessRate: number;\n\taverageLatencyMs: number;\n\tp95LatencyMs: number;\n\taverageCostUsd: number;\n\tqualityScore: number;\n\tupdatedAt: string;\n}\n\nexport interface RoutingRequestInput {\n\ttaskType?: string;\n\tmodelHint?: string;\n\tmodel_hint?: string;\n\tstrategy?: string;\n\tunavailableModels?: string[] | string;\n\tunavailable_models?: string[] | string;\n\tavailableModels?: RoutingModelCandidate[];\n}\n\nexport interface RoutingRequest {\n\ttaskType: string;\n\tmodelHint?: string;\n\tstrategy: RoutingStrategy;\n\tunavailableModels: string[];\n\tavailableModels: RoutingModelCandidate[];\n}\n\nexport interface RoutingScore {\n\tprovider: string;\n\tmodel: string;\n\tscore: number;\n\tsuccessRate: number;\n\tlatencyScore: number;\n\tcostScore: number;\n\tqualityScore: number;\n\tsamples: number;\n\tavailable: boolean;\n\treasons: string[];\n}\n\nexport interface RoutedModel {\n\tprovider: string;\n\tmodel: string;\n}\n\nexport interface RoutingDecision {\n\tdecisionId: string;\n\ttaskType: string;\n\tstrategy: RoutingStrategy;\n\tselectedModel: RoutedModel;\n\tfallbackChain: RoutedModel[];\n\tscores: RoutingScore[];\n\tmodelHint?: string;\n\toverrideApplied: boolean;\n\treason: string;\n\tcreatedAt: string;\n}\n\nexport interface RoutingOverrideInput {\n\ttaskType: string;\n\tprovider: string;\n\tmodel: string;\n\treason?: string;\n\texpiresAt?: Date | string;\n}\n\nexport interface RoutingOverride {\n\ttaskType: string;\n\tprovider: string;\n\tmodel: string;\n\treason?: string;\n\tcreatedAt: string;\n\texpiresAt?: string;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/intelligent-router/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IACjC,UAAU;IACV,SAAS;IACT,MAAM;IACN,SAAS;CACA,CAAC;AAIX,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAU,CAAC","sourcesContent":["export const ROUTING_STRATEGIES = [\n\t\"balanced\",\n\t\"quality\",\n\t\"cost\",\n\t\"latency\",\n] as const;\n\nexport type RoutingStrategy = (typeof ROUTING_STRATEGIES)[number];\n\nexport const MODEL_PERFORMANCE_METRIC_SOURCES = [\"production\", \"eval\"] as const;\n\nexport type ModelPerformanceMetricSource =\n\t(typeof MODEL_PERFORMANCE_METRIC_SOURCES)[number];\n\nexport interface RoutingModelCost {\n\tinput?: number;\n\toutput?: number;\n\tcacheRead?: number;\n\tcacheWrite?: number;\n}\n\nexport interface RoutingModelCandidate {\n\tprovider: string;\n\tmodel: string;\n\tname?: string;\n\tcost?: RoutingModelCost;\n\tavailable?: boolean;\n}\n\nexport interface ModelPerformanceMetricInput {\n\ttaskType: string;\n\tprovider: string;\n\tmodel: string;\n\tsource?: ModelPerformanceMetricSource;\n\tlatencyMs?: number;\n\tsuccess?: boolean;\n\tcostUsd?: number;\n\tqualityScore?: number;\n\tevalSuite?: string;\n\tevalCase?: string;\n\toccurredAt?: Date | string;\n}\n\nexport interface ModelPerformanceAggregate {\n\ttaskType: string;\n\tprovider: string;\n\tmodel: string;\n\tsamples: number;\n\tproductionSamples: number;\n\tevalSamples: number;\n\tsuccessCount: number;\n\tsuccessRate: number;\n\tevalSuccessRate: number;\n\taverageLatencyMs: number;\n\tp95LatencyMs: number;\n\taverageCostUsd: number;\n\tqualityScore: number;\n\tevalQualityScore: number;\n\tevalSuites: string[];\n\tupdatedAt: string;\n}\n\nexport interface RoutingRequestInput {\n\ttaskType?: string;\n\tmodelHint?: string;\n\tmodel_hint?: string;\n\tstrategy?: string;\n\tunavailableModels?: string[] | string;\n\tunavailable_models?: string[] | string;\n\tavailableModels?: RoutingModelCandidate[];\n}\n\nexport interface RoutingRequest {\n\ttaskType: string;\n\tmodelHint?: string;\n\tstrategy: RoutingStrategy;\n\tunavailableModels: string[];\n\tavailableModels: RoutingModelCandidate[];\n}\n\nexport interface RoutingScore {\n\tprovider: string;\n\tmodel: string;\n\tscore: number;\n\tsuccessRate: number;\n\tlatencyScore: number;\n\tcostScore: number;\n\tqualityScore: number;\n\tsamples: number;\n\tproductionSamples: number;\n\tevalSamples: number;\n\tevalBacked: boolean;\n\tavailable: boolean;\n\treasons: string[];\n}\n\nexport interface RoutedModel {\n\tprovider: string;\n\tmodel: string;\n}\n\nexport interface RoutingDecision {\n\tdecisionId: string;\n\ttaskType: string;\n\tstrategy: RoutingStrategy;\n\tselectedModel: RoutedModel;\n\tfallbackChain: RoutedModel[];\n\tscores: RoutingScore[];\n\tmodelHint?: string;\n\toverrideApplied: boolean;\n\treason: string;\n\tcreatedAt: string;\n}\n\nexport interface RoutingOverrideInput {\n\ttaskType: string;\n\tprovider: string;\n\tmodel: string;\n\treason?: string;\n\texpiresAt?: Date | string;\n}\n\nexport interface RoutingOverride {\n\ttaskType: string;\n\tprovider: string;\n\tmodel: string;\n\treason?: string;\n\tcreatedAt: string;\n\texpiresAt?: string;\n}\n"]}
@@ -22,6 +22,7 @@ export declare class CliCommandAggregator {
22
22
  private drainBuffer;
23
23
  private restoreBuffer;
24
24
  private withBufferLock;
25
+ private withBufferFileLock;
25
26
  private lockStaleMs;
26
27
  dispose(): Promise<void>;
27
28
  private buildCommandEvent;
@@ -1 +1 @@
1
- {"version":3,"file":"cli-command-aggregator.d.ts","sourceRoot":"","sources":["../../src/telemetry/cli-command-aggregator.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAaD,qBAAa,oBAAoB;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,KAAK,CAA+B;gBAEhC,OAAO,EAAE,2BAA2B;IAYhD,cAAc,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO;IAiB7D,KAAK,IAAI,IAAI;IAUP,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAgBd,WAAW;YAcX,aAAa;YAcb,cAAc;IAkC5B,OAAO,CAAC,WAAW;IAIb,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,kBAAkB;YAMZ,UAAU;YAsCV,WAAW;YAcX,WAAW;CAGzB;AAED,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,2BAA2B,GAClC,oBAAoB,CAMtB;AAED,wBAAgB,uCAAuC,IAAI,IAAI,CAE9D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG9D"}
1
+ {"version":3,"file":"cli-command-aggregator.d.ts","sourceRoot":"","sources":["../../src/telemetry/cli-command-aggregator.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAcD,qBAAa,oBAAoB;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,KAAK,CAA+B;gBAEhC,OAAO,EAAE,2BAA2B;IAYhD,cAAc,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO;IAiB7D,KAAK,IAAI,IAAI;IAUP,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAgBd,WAAW;YAcX,aAAa;YAcb,cAAc;YAOd,kBAAkB;IAoChC,OAAO,CAAC,WAAW;IAIb,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,kBAAkB;YAMZ,UAAU;YAsCV,WAAW;YAcX,WAAW;CAGzB;AAwBD,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,2BAA2B,GAClC,oBAAoB,CAMtB;AAED,wBAAgB,uCAAuC,IAAI,IAAI,CAE9D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG9D"}
@@ -8,6 +8,7 @@ const LOCK_RETRY_MS = 5;
8
8
  const DEFAULT_LOCK_TIMEOUT_MS = 5_000;
9
9
  const LOCK_STALE_GRACE_MS = 1_000;
10
10
  let globalAggregator = null;
11
+ const inProcessBufferLockQueues = new Map();
11
12
  export class CliCommandAggregator {
12
13
  constructor(options) {
13
14
  this.timer = null;
@@ -112,6 +113,9 @@ export class CliCommandAggregator {
112
113
  }
113
114
  async withBufferLock(operation) {
114
115
  const lockFile = `${this.bufferFile}.lock`;
116
+ await runWithInProcessBufferLock(lockFile, () => this.withBufferFileLock(lockFile, operation));
117
+ }
118
+ async withBufferFileLock(lockFile, operation) {
115
119
  const deadline = Date.now() + this.lockTimeoutMs;
116
120
  let handle;
117
121
  while (!handle) {
@@ -217,6 +221,25 @@ export class CliCommandAggregator {
217
221
  await rm(this.bufferFile, { force: true });
218
222
  }
219
223
  }
224
+ async function runWithInProcessBufferLock(lockFile, operation) {
225
+ const previous = inProcessBufferLockQueues.get(lockFile) ?? Promise.resolve();
226
+ let releaseCurrent = () => undefined;
227
+ const current = new Promise((resolve) => {
228
+ releaseCurrent = resolve;
229
+ });
230
+ const queued = previous.catch(() => undefined).then(() => current);
231
+ inProcessBufferLockQueues.set(lockFile, queued);
232
+ await previous.catch(() => undefined);
233
+ try {
234
+ await operation();
235
+ }
236
+ finally {
237
+ releaseCurrent();
238
+ if (inProcessBufferLockQueues.get(lockFile) === queued) {
239
+ inProcessBufferLockQueues.delete(lockFile);
240
+ }
241
+ }
242
+ }
220
243
  export function getGlobalCliCommandAggregator(options) {
221
244
  if (!globalAggregator?.matchesOptions(options)) {
222
245
  void globalAggregator?.dispose().catch(() => undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"cli-command-aggregator.js","sourceRoot":"","sources":["../../src/telemetry/cli-command-aggregator.ts"],"names":[],"mappings":"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","sourcesContent":["import { open, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { setTimeout as sleep } from \"node:timers/promises\";\nimport { PATHS } from \"../config/constants.js\";\nimport {\n\ttype BeaconEvent,\n\temitBeaconBatch,\n\tisBeaconEnabled,\n} from \"./beacon.js\";\n\nexport interface CliCommandAggregatorOptions {\n\tbufferMs?: number;\n\tclientVersion: string;\n\tenv?: NodeJS.ProcessEnv;\n\tnow?: () => number;\n\tbufferFile?: string;\n\tlockTimeoutMs?: number;\n}\n\ninterface CliCommandBuffer {\n\tlastFlushAt: number;\n\tcounts: Record<string, number>;\n}\n\nconst DEFAULT_BUFFER_MS = 10_000;\nconst LOCK_RETRY_MS = 5;\nconst DEFAULT_LOCK_TIMEOUT_MS = 5_000;\nconst LOCK_STALE_GRACE_MS = 1_000;\nlet globalAggregator: CliCommandAggregator | null = null;\n\nexport class CliCommandAggregator {\n\tprivate readonly bufferMs: number;\n\tprivate readonly clientVersion: string;\n\tprivate readonly env: NodeJS.ProcessEnv;\n\tprivate readonly now: () => number;\n\tprivate readonly bufferFile: string;\n\tprivate readonly lockTimeoutMs: number;\n\tprivate timer: NodeJS.Timeout | null = null;\n\n\tconstructor(options: CliCommandAggregatorOptions) {\n\t\tthis.bufferMs = options.bufferMs ?? DEFAULT_BUFFER_MS;\n\t\tthis.clientVersion = options.clientVersion;\n\t\tthis.env = options.env ?? process.env;\n\t\tthis.now = options.now ?? Date.now;\n\t\tthis.bufferFile =\n\t\t\toptions.bufferFile ??\n\t\t\tthis.env.MAESTRO_CLI_COMMAND_BEACON_BUFFER_FILE ??\n\t\t\tjoin(PATHS.MAESTRO_HOME, \"telemetry-cli-command-counts.json\");\n\t\tthis.lockTimeoutMs = options.lockTimeoutMs ?? DEFAULT_LOCK_TIMEOUT_MS;\n\t}\n\n\tmatchesOptions(options: CliCommandAggregatorOptions): boolean {\n\t\tconst env = options.env ?? process.env;\n\t\tconst now = options.now ?? Date.now;\n\t\tconst bufferFile =\n\t\t\toptions.bufferFile ??\n\t\t\tenv.MAESTRO_CLI_COMMAND_BEACON_BUFFER_FILE ??\n\t\t\tjoin(PATHS.MAESTRO_HOME, \"telemetry-cli-command-counts.json\");\n\t\treturn (\n\t\t\tthis.bufferMs === (options.bufferMs ?? DEFAULT_BUFFER_MS) &&\n\t\t\tthis.clientVersion === options.clientVersion &&\n\t\t\tthis.env === env &&\n\t\t\tthis.now === now &&\n\t\t\tthis.bufferFile === bufferFile &&\n\t\t\tthis.lockTimeoutMs === (options.lockTimeoutMs ?? DEFAULT_LOCK_TIMEOUT_MS)\n\t\t);\n\t}\n\n\tstart(): void {\n\t\tif (this.timer || !isBeaconEnabled(this.env)) {\n\t\t\treturn;\n\t\t}\n\t\tthis.timer = setInterval(() => {\n\t\t\tvoid this.flush().catch(() => undefined);\n\t\t}, this.bufferMs);\n\t\tthis.timer.unref?.();\n\t}\n\n\tasync submit(command: string): Promise<void> {\n\t\tif (!isBeaconEnabled(this.env)) {\n\t\t\treturn;\n\t\t}\n\t\tconst action = normalizeCommandAction(command);\n\t\tlet shouldFlush = false;\n\t\tlet shouldStartTimer = false;\n\t\tawait this.withBufferLock(async () => {\n\t\t\tconst buffer = await this.readBuffer();\n\t\t\tbuffer.counts[action] = (buffer.counts[action] ?? 0) + 1;\n\t\t\tif (this.now() - buffer.lastFlushAt >= this.bufferMs) {\n\t\t\t\tawait this.writeBuffer(buffer);\n\t\t\t\tshouldFlush = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.writeBuffer(buffer);\n\t\t\tshouldStartTimer = true;\n\t\t});\n\t\tif (shouldFlush) {\n\t\t\tawait this.flush();\n\t\t\treturn;\n\t\t}\n\t\tif (shouldStartTimer) {\n\t\t\tthis.start();\n\t\t}\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tif (!isBeaconEnabled(this.env)) {\n\t\t\treturn;\n\t\t}\n\t\tconst buffer = await this.drainBuffer();\n\t\tif (!buffer) {\n\t\t\treturn;\n\t\t}\n\t\tconst emitted = await emitBeaconBatch(this.buildCommandEvents(buffer), {\n\t\t\tenv: this.env,\n\t\t});\n\t\tif (!emitted) {\n\t\t\tawait this.restoreBuffer(buffer);\n\t\t}\n\t}\n\n\tprivate async drainBuffer(): Promise<CliCommandBuffer | null> {\n\t\tlet drained: CliCommandBuffer | null = null;\n\t\tawait this.withBufferLock(async () => {\n\t\t\tconst buffer = await this.readBuffer();\n\t\t\tif (!this.buildCommandEvents(buffer).length) {\n\t\t\t\tawait this.writeBuffer({ lastFlushAt: this.now(), counts: {} });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdrained = buffer;\n\t\t\tawait this.clearBuffer();\n\t\t});\n\t\treturn drained;\n\t}\n\n\tprivate async restoreBuffer(buffer: CliCommandBuffer): Promise<void> {\n\t\tawait this.withBufferLock(async () => {\n\t\t\tconst current = await this.readBuffer();\n\t\t\tconst counts = { ...current.counts };\n\t\t\tfor (const [action, count] of Object.entries(buffer.counts)) {\n\t\t\t\tcounts[action] = (counts[action] ?? 0) + count;\n\t\t\t}\n\t\t\tawait this.writeBuffer({\n\t\t\t\tlastFlushAt: Math.min(current.lastFlushAt, buffer.lastFlushAt),\n\t\t\t\tcounts,\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate async withBufferLock(operation: () => Promise<void>): Promise<void> {\n\t\tconst lockFile = `${this.bufferFile}.lock`;\n\t\tconst deadline = Date.now() + this.lockTimeoutMs;\n\t\tlet handle: Awaited<ReturnType<typeof open>> | undefined;\n\t\twhile (!handle) {\n\t\t\ttry {\n\t\t\t\thandle = await open(lockFile, \"wx\");\n\t\t\t\tbreak;\n\t\t\t} catch (error) {\n\t\t\t\tconst code = (error as NodeJS.ErrnoException).code;\n\t\t\t\tif (code === \"ENOENT\") {\n\t\t\t\t\tawait mkdirForFile(lockFile);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tcode === \"EEXIST\" &&\n\t\t\t\t\t(await removeStaleLock(lockFile, this.lockStaleMs()))\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (code !== \"EEXIST\" || Date.now() >= deadline) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait sleep(LOCK_RETRY_MS, undefined, { ref: false });\n\t\t\t}\n\t\t}\n\t\ttry {\n\t\t\tawait operation();\n\t\t} finally {\n\t\t\tawait handle.close().catch(() => undefined);\n\t\t\tawait rm(lockFile, { force: true }).catch(() => undefined);\n\t\t}\n\t}\n\n\tprivate lockStaleMs(): number {\n\t\treturn this.lockTimeoutMs + LOCK_STALE_GRACE_MS;\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tif (this.timer) {\n\t\t\tclearInterval(this.timer);\n\t\t\tthis.timer = null;\n\t\t}\n\t\tawait this.flush();\n\t}\n\n\tprivate buildCommandEvent(action: string, count: number): BeaconEvent {\n\t\treturn {\n\t\t\tfeature: \"cli.command\",\n\t\t\taction,\n\t\t\ttimestamp: this.now() * 1000,\n\t\t\tsource: {\n\t\t\t\tclient: \"cli\",\n\t\t\t\tclientVersion: this.clientVersion,\n\t\t\t},\n\t\t\tparameters: {\n\t\t\t\tmetadata: {\n\t\t\t\t\tcount,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate buildCommandEvents(buffer: CliCommandBuffer): BeaconEvent[] {\n\t\treturn Object.entries(buffer.counts)\n\t\t\t.filter(([, count]) => count > 0)\n\t\t\t.map(([action, count]) => this.buildCommandEvent(action, count));\n\t}\n\n\tprivate async readBuffer(): Promise<CliCommandBuffer> {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(await readFile(this.bufferFile, \"utf8\")) as {\n\t\t\t\tlastFlushAt?: unknown;\n\t\t\t\tcounts?: unknown;\n\t\t\t};\n\t\t\tconst counts: Record<string, number> = {};\n\t\t\tif (\n\t\t\t\tparsed.counts &&\n\t\t\t\ttypeof parsed.counts === \"object\" &&\n\t\t\t\t!Array.isArray(parsed.counts)\n\t\t\t) {\n\t\t\t\tfor (const [key, value] of Object.entries(parsed.counts)) {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"number\" &&\n\t\t\t\t\t\tNumber.isFinite(value) &&\n\t\t\t\t\t\tvalue > 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tcounts[key] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tlastFlushAt:\n\t\t\t\t\ttypeof parsed.lastFlushAt === \"number\" &&\n\t\t\t\t\tNumber.isFinite(parsed.lastFlushAt)\n\t\t\t\t\t\t? parsed.lastFlushAt\n\t\t\t\t\t\t: this.now(),\n\t\t\t\tcounts,\n\t\t\t};\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tlastFlushAt: this.now(),\n\t\t\t\tcounts: {},\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate async writeBuffer(buffer: CliCommandBuffer): Promise<void> {\n\t\tawait writeFile(\n\t\t\tthis.bufferFile,\n\t\t\t`${JSON.stringify(buffer)}\\n`,\n\t\t\t\"utf8\",\n\t\t).catch(async (error: NodeJS.ErrnoException) => {\n\t\t\tif (error.code !== \"ENOENT\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait mkdirForFile(this.bufferFile);\n\t\t\tawait writeFile(this.bufferFile, `${JSON.stringify(buffer)}\\n`, \"utf8\");\n\t\t});\n\t}\n\n\tprivate async clearBuffer(): Promise<void> {\n\t\tawait rm(this.bufferFile, { force: true });\n\t}\n}\n\nexport function getGlobalCliCommandAggregator(\n\toptions: CliCommandAggregatorOptions,\n): CliCommandAggregator {\n\tif (!globalAggregator?.matchesOptions(options)) {\n\t\tvoid globalAggregator?.dispose().catch(() => undefined);\n\t\tglobalAggregator = new CliCommandAggregator(options);\n\t}\n\treturn globalAggregator;\n}\n\nexport function resetGlobalCliCommandAggregatorForTests(): void {\n\tglobalAggregator = null;\n}\n\nexport function normalizeCommandAction(command: string): string {\n\tconst trimmed = command.trim();\n\treturn `cli.command.${trimmed.length > 0 ? trimmed : \"interactive\"}`;\n}\n\nasync function mkdirForFile(file: string): Promise<void> {\n\tconst { mkdir } = await import(\"node:fs/promises\");\n\tawait mkdir(dirname(file), { recursive: true });\n}\n\nasync function removeStaleLock(\n\tlockFile: string,\n\tstaleAfterMs: number,\n): Promise<boolean> {\n\ttry {\n\t\tconst lock = await stat(lockFile);\n\t\tif (Date.now() - lock.mtimeMs < staleAfterMs) {\n\t\t\treturn false;\n\t\t}\n\t\tawait rm(lockFile, { force: true });\n\t\treturn true;\n\t} catch (error) {\n\t\treturn (error as NodeJS.ErrnoException).code === \"ENOENT\";\n\t}\n}\n"]}
1
+ {"version":3,"file":"cli-command-aggregator.js","sourceRoot":"","sources":["../../src/telemetry/cli-command-aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAEN,eAAe,EACf,eAAe,GACf,MAAM,aAAa,CAAC;AAgBrB,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,uBAAuB,GAAG,KAAK,CAAC;AACtC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAClC,IAAI,gBAAgB,GAAgC,IAAI,CAAC;AACzD,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAyB,CAAC;AAEnE,MAAM,OAAO,oBAAoB;IAShC,YAAY,OAAoC;QAFxC,UAAK,GAA0B,IAAI,CAAC;QAG3C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;QACtD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACtC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACnC,IAAI,CAAC,UAAU;YACd,OAAO,CAAC,UAAU;gBAClB,IAAI,CAAC,GAAG,CAAC,sCAAsC;gBAC/C,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,mCAAmC,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,uBAAuB,CAAC;IACvE,CAAC;IAED,cAAc,CAAC,OAAoC;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACpC,MAAM,UAAU,GACf,OAAO,CAAC,UAAU;YAClB,GAAG,CAAC,sCAAsC;YAC1C,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,mCAAmC,CAAC,CAAC;QAC/D,OAAO,CACN,IAAI,CAAC,QAAQ,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;YACzD,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa;YAC5C,IAAI,CAAC,GAAG,KAAK,GAAG;YAChB,IAAI,CAAC,GAAG,KAAK,GAAG;YAChB,IAAI,CAAC,UAAU,KAAK,UAAU;YAC9B,IAAI,CAAC,aAAa,KAAK,CAAC,OAAO,CAAC,aAAa,IAAI,uBAAuB,CAAC,CACzE,CAAC;IACH,CAAC;IAED,KAAK;QACJ,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO;QACR,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe;QAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO;QACR,CAAC;QACD,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE;YACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACtD,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBAC/B,WAAW,GAAG,IAAI,CAAC;gBACnB,OAAO;YACR,CAAC;YACD,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC/B,gBAAgB,GAAG,IAAI,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,IAAI,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO;QACR,CAAC;QACD,IAAI,gBAAgB,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;IACF,CAAC;IAED,KAAK,CAAC,KAAK;QACV,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO;QACR,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO;QACR,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;YACtE,GAAG,EAAE,IAAI,CAAC,GAAG;SACb,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,WAAW;QACxB,IAAI,OAAO,GAA4B,IAAI,CAAC;QAC5C,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE;YACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC7C,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;gBAChE,OAAO;YACR,CAAC;YACD,OAAO,GAAG,MAAM,CAAC;YACjB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,MAAwB;QACnD,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE;YACpC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;YAChD,CAAC;YACD,MAAM,IAAI,CAAC,WAAW,CAAC;gBACtB,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;gBAC9D,MAAM;aACN,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,SAA8B;QAC1D,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,UAAU,OAAO,CAAC;QAC3C,MAAM,0BAA0B,CAAC,QAAQ,EAAE,GAAG,EAAE,CAC/C,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAC5C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC/B,QAAgB,EAChB,SAA8B;QAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QACjD,IAAI,MAAoD,CAAC;QACzD,OAAO,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC;gBACJ,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACpC,MAAM;YACP,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;gBACnD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACvB,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;oBAC7B,SAAS;gBACV,CAAC;gBACD,IACC,IAAI,KAAK,QAAQ;oBACjB,CAAC,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EACpD,CAAC;oBACF,SAAS;gBACV,CAAC;gBACD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;oBACjD,OAAO;gBACR,CAAC;gBACD,MAAM,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;QACF,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,SAAS,EAAE,CAAC;QACnB,CAAC;gBAAS,CAAC;YACV,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5D,CAAC;IACF,CAAC;IAEO,WAAW;QAClB,OAAO,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAEO,iBAAiB,CAAC,MAAc,EAAE,KAAa;QACtD,OAAO;YACN,OAAO,EAAE,aAAa;YACtB,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;YAC5B,MAAM,EAAE;gBACP,MAAM,EAAE,KAAK;gBACb,aAAa,EAAE,IAAI,CAAC,aAAa;aACjC;YACD,UAAU,EAAE;gBACX,QAAQ,EAAE;oBACT,KAAK;iBACL;aACD;SACD,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,MAAwB;QAClD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;aAClC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACnE,CAAC;IAEO,KAAK,CAAC,UAAU;QACvB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAGhE,CAAC;YACF,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,IACC,MAAM,CAAC,MAAM;gBACb,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;gBACjC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAC5B,CAAC;gBACF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1D,IACC,OAAO,KAAK,KAAK,QAAQ;wBACzB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;wBACtB,KAAK,GAAG,CAAC,EACR,CAAC;wBACF,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBACrB,CAAC;gBACF,CAAC;YACF,CAAC;YACD,OAAO;gBACN,WAAW,EACV,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;oBACtC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC;oBAClC,CAAC,CAAC,MAAM,CAAC,WAAW;oBACpB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBACd,MAAM;aACN,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACR,OAAO;gBACN,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;gBACvB,MAAM,EAAE,EAAE;aACV,CAAC;QACH,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAwB;QACjD,MAAM,SAAS,CACd,IAAI,CAAC,UAAU,EACf,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAC7B,MAAM,CACN,CAAC,KAAK,CAAC,KAAK,EAAE,KAA4B,EAAE,EAAE;YAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,OAAO;YACR,CAAC;YACD,MAAM,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACpC,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,WAAW;QACxB,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;CACD;AAED,KAAK,UAAU,0BAA0B,CACxC,QAAgB,EAChB,SAA8B;IAE9B,MAAM,QAAQ,GAAG,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAC9E,IAAI,cAAc,GAAe,GAAG,EAAE,CAAC,SAAS,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC7C,cAAc,GAAG,OAAO,CAAC;IAC1B,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IACnE,yBAAyB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC;QACJ,MAAM,SAAS,EAAE,CAAC;IACnB,CAAC;YAAS,CAAC;QACV,cAAc,EAAE,CAAC;QACjB,IAAI,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,MAAM,EAAE,CAAC;YACxD,yBAAyB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC5C,OAAoC;IAEpC,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAChD,KAAK,gBAAgB,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACxD,gBAAgB,GAAG,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,gBAAgB,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,uCAAuC;IACtD,gBAAgB,GAAG,IAAI,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,OAAO,eAAe,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACnD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,eAAe,CAC7B,QAAgB,EAChB,YAAoB;IAEpB,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,YAAY,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC;QACd,CAAC;QACD,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAQ,KAA+B,CAAC,IAAI,KAAK,QAAQ,CAAC;IAC3D,CAAC;AACF,CAAC","sourcesContent":["import { open, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { setTimeout as sleep } from \"node:timers/promises\";\nimport { PATHS } from \"../config/constants.js\";\nimport {\n\ttype BeaconEvent,\n\temitBeaconBatch,\n\tisBeaconEnabled,\n} from \"./beacon.js\";\n\nexport interface CliCommandAggregatorOptions {\n\tbufferMs?: number;\n\tclientVersion: string;\n\tenv?: NodeJS.ProcessEnv;\n\tnow?: () => number;\n\tbufferFile?: string;\n\tlockTimeoutMs?: number;\n}\n\ninterface CliCommandBuffer {\n\tlastFlushAt: number;\n\tcounts: Record<string, number>;\n}\n\nconst DEFAULT_BUFFER_MS = 10_000;\nconst LOCK_RETRY_MS = 5;\nconst DEFAULT_LOCK_TIMEOUT_MS = 5_000;\nconst LOCK_STALE_GRACE_MS = 1_000;\nlet globalAggregator: CliCommandAggregator | null = null;\nconst inProcessBufferLockQueues = new Map<string, Promise<void>>();\n\nexport class CliCommandAggregator {\n\tprivate readonly bufferMs: number;\n\tprivate readonly clientVersion: string;\n\tprivate readonly env: NodeJS.ProcessEnv;\n\tprivate readonly now: () => number;\n\tprivate readonly bufferFile: string;\n\tprivate readonly lockTimeoutMs: number;\n\tprivate timer: NodeJS.Timeout | null = null;\n\n\tconstructor(options: CliCommandAggregatorOptions) {\n\t\tthis.bufferMs = options.bufferMs ?? DEFAULT_BUFFER_MS;\n\t\tthis.clientVersion = options.clientVersion;\n\t\tthis.env = options.env ?? process.env;\n\t\tthis.now = options.now ?? Date.now;\n\t\tthis.bufferFile =\n\t\t\toptions.bufferFile ??\n\t\t\tthis.env.MAESTRO_CLI_COMMAND_BEACON_BUFFER_FILE ??\n\t\t\tjoin(PATHS.MAESTRO_HOME, \"telemetry-cli-command-counts.json\");\n\t\tthis.lockTimeoutMs = options.lockTimeoutMs ?? DEFAULT_LOCK_TIMEOUT_MS;\n\t}\n\n\tmatchesOptions(options: CliCommandAggregatorOptions): boolean {\n\t\tconst env = options.env ?? process.env;\n\t\tconst now = options.now ?? Date.now;\n\t\tconst bufferFile =\n\t\t\toptions.bufferFile ??\n\t\t\tenv.MAESTRO_CLI_COMMAND_BEACON_BUFFER_FILE ??\n\t\t\tjoin(PATHS.MAESTRO_HOME, \"telemetry-cli-command-counts.json\");\n\t\treturn (\n\t\t\tthis.bufferMs === (options.bufferMs ?? DEFAULT_BUFFER_MS) &&\n\t\t\tthis.clientVersion === options.clientVersion &&\n\t\t\tthis.env === env &&\n\t\t\tthis.now === now &&\n\t\t\tthis.bufferFile === bufferFile &&\n\t\t\tthis.lockTimeoutMs === (options.lockTimeoutMs ?? DEFAULT_LOCK_TIMEOUT_MS)\n\t\t);\n\t}\n\n\tstart(): void {\n\t\tif (this.timer || !isBeaconEnabled(this.env)) {\n\t\t\treturn;\n\t\t}\n\t\tthis.timer = setInterval(() => {\n\t\t\tvoid this.flush().catch(() => undefined);\n\t\t}, this.bufferMs);\n\t\tthis.timer.unref?.();\n\t}\n\n\tasync submit(command: string): Promise<void> {\n\t\tif (!isBeaconEnabled(this.env)) {\n\t\t\treturn;\n\t\t}\n\t\tconst action = normalizeCommandAction(command);\n\t\tlet shouldFlush = false;\n\t\tlet shouldStartTimer = false;\n\t\tawait this.withBufferLock(async () => {\n\t\t\tconst buffer = await this.readBuffer();\n\t\t\tbuffer.counts[action] = (buffer.counts[action] ?? 0) + 1;\n\t\t\tif (this.now() - buffer.lastFlushAt >= this.bufferMs) {\n\t\t\t\tawait this.writeBuffer(buffer);\n\t\t\t\tshouldFlush = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.writeBuffer(buffer);\n\t\t\tshouldStartTimer = true;\n\t\t});\n\t\tif (shouldFlush) {\n\t\t\tawait this.flush();\n\t\t\treturn;\n\t\t}\n\t\tif (shouldStartTimer) {\n\t\t\tthis.start();\n\t\t}\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tif (!isBeaconEnabled(this.env)) {\n\t\t\treturn;\n\t\t}\n\t\tconst buffer = await this.drainBuffer();\n\t\tif (!buffer) {\n\t\t\treturn;\n\t\t}\n\t\tconst emitted = await emitBeaconBatch(this.buildCommandEvents(buffer), {\n\t\t\tenv: this.env,\n\t\t});\n\t\tif (!emitted) {\n\t\t\tawait this.restoreBuffer(buffer);\n\t\t}\n\t}\n\n\tprivate async drainBuffer(): Promise<CliCommandBuffer | null> {\n\t\tlet drained: CliCommandBuffer | null = null;\n\t\tawait this.withBufferLock(async () => {\n\t\t\tconst buffer = await this.readBuffer();\n\t\t\tif (!this.buildCommandEvents(buffer).length) {\n\t\t\t\tawait this.writeBuffer({ lastFlushAt: this.now(), counts: {} });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdrained = buffer;\n\t\t\tawait this.clearBuffer();\n\t\t});\n\t\treturn drained;\n\t}\n\n\tprivate async restoreBuffer(buffer: CliCommandBuffer): Promise<void> {\n\t\tawait this.withBufferLock(async () => {\n\t\t\tconst current = await this.readBuffer();\n\t\t\tconst counts = { ...current.counts };\n\t\t\tfor (const [action, count] of Object.entries(buffer.counts)) {\n\t\t\t\tcounts[action] = (counts[action] ?? 0) + count;\n\t\t\t}\n\t\t\tawait this.writeBuffer({\n\t\t\t\tlastFlushAt: Math.min(current.lastFlushAt, buffer.lastFlushAt),\n\t\t\t\tcounts,\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate async withBufferLock(operation: () => Promise<void>): Promise<void> {\n\t\tconst lockFile = `${this.bufferFile}.lock`;\n\t\tawait runWithInProcessBufferLock(lockFile, () =>\n\t\t\tthis.withBufferFileLock(lockFile, operation),\n\t\t);\n\t}\n\n\tprivate async withBufferFileLock(\n\t\tlockFile: string,\n\t\toperation: () => Promise<void>,\n\t): Promise<void> {\n\t\tconst deadline = Date.now() + this.lockTimeoutMs;\n\t\tlet handle: Awaited<ReturnType<typeof open>> | undefined;\n\t\twhile (!handle) {\n\t\t\ttry {\n\t\t\t\thandle = await open(lockFile, \"wx\");\n\t\t\t\tbreak;\n\t\t\t} catch (error) {\n\t\t\t\tconst code = (error as NodeJS.ErrnoException).code;\n\t\t\t\tif (code === \"ENOENT\") {\n\t\t\t\t\tawait mkdirForFile(lockFile);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tcode === \"EEXIST\" &&\n\t\t\t\t\t(await removeStaleLock(lockFile, this.lockStaleMs()))\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (code !== \"EEXIST\" || Date.now() >= deadline) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait sleep(LOCK_RETRY_MS, undefined, { ref: false });\n\t\t\t}\n\t\t}\n\t\ttry {\n\t\t\tawait operation();\n\t\t} finally {\n\t\t\tawait handle.close().catch(() => undefined);\n\t\t\tawait rm(lockFile, { force: true }).catch(() => undefined);\n\t\t}\n\t}\n\n\tprivate lockStaleMs(): number {\n\t\treturn this.lockTimeoutMs + LOCK_STALE_GRACE_MS;\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tif (this.timer) {\n\t\t\tclearInterval(this.timer);\n\t\t\tthis.timer = null;\n\t\t}\n\t\tawait this.flush();\n\t}\n\n\tprivate buildCommandEvent(action: string, count: number): BeaconEvent {\n\t\treturn {\n\t\t\tfeature: \"cli.command\",\n\t\t\taction,\n\t\t\ttimestamp: this.now() * 1000,\n\t\t\tsource: {\n\t\t\t\tclient: \"cli\",\n\t\t\t\tclientVersion: this.clientVersion,\n\t\t\t},\n\t\t\tparameters: {\n\t\t\t\tmetadata: {\n\t\t\t\t\tcount,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate buildCommandEvents(buffer: CliCommandBuffer): BeaconEvent[] {\n\t\treturn Object.entries(buffer.counts)\n\t\t\t.filter(([, count]) => count > 0)\n\t\t\t.map(([action, count]) => this.buildCommandEvent(action, count));\n\t}\n\n\tprivate async readBuffer(): Promise<CliCommandBuffer> {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(await readFile(this.bufferFile, \"utf8\")) as {\n\t\t\t\tlastFlushAt?: unknown;\n\t\t\t\tcounts?: unknown;\n\t\t\t};\n\t\t\tconst counts: Record<string, number> = {};\n\t\t\tif (\n\t\t\t\tparsed.counts &&\n\t\t\t\ttypeof parsed.counts === \"object\" &&\n\t\t\t\t!Array.isArray(parsed.counts)\n\t\t\t) {\n\t\t\t\tfor (const [key, value] of Object.entries(parsed.counts)) {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"number\" &&\n\t\t\t\t\t\tNumber.isFinite(value) &&\n\t\t\t\t\t\tvalue > 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tcounts[key] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tlastFlushAt:\n\t\t\t\t\ttypeof parsed.lastFlushAt === \"number\" &&\n\t\t\t\t\tNumber.isFinite(parsed.lastFlushAt)\n\t\t\t\t\t\t? parsed.lastFlushAt\n\t\t\t\t\t\t: this.now(),\n\t\t\t\tcounts,\n\t\t\t};\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tlastFlushAt: this.now(),\n\t\t\t\tcounts: {},\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate async writeBuffer(buffer: CliCommandBuffer): Promise<void> {\n\t\tawait writeFile(\n\t\t\tthis.bufferFile,\n\t\t\t`${JSON.stringify(buffer)}\\n`,\n\t\t\t\"utf8\",\n\t\t).catch(async (error: NodeJS.ErrnoException) => {\n\t\t\tif (error.code !== \"ENOENT\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait mkdirForFile(this.bufferFile);\n\t\t\tawait writeFile(this.bufferFile, `${JSON.stringify(buffer)}\\n`, \"utf8\");\n\t\t});\n\t}\n\n\tprivate async clearBuffer(): Promise<void> {\n\t\tawait rm(this.bufferFile, { force: true });\n\t}\n}\n\nasync function runWithInProcessBufferLock(\n\tlockFile: string,\n\toperation: () => Promise<void>,\n): Promise<void> {\n\tconst previous = inProcessBufferLockQueues.get(lockFile) ?? Promise.resolve();\n\tlet releaseCurrent: () => void = () => undefined;\n\tconst current = new Promise<void>((resolve) => {\n\t\treleaseCurrent = resolve;\n\t});\n\tconst queued = previous.catch(() => undefined).then(() => current);\n\tinProcessBufferLockQueues.set(lockFile, queued);\n\tawait previous.catch(() => undefined);\n\ttry {\n\t\tawait operation();\n\t} finally {\n\t\treleaseCurrent();\n\t\tif (inProcessBufferLockQueues.get(lockFile) === queued) {\n\t\t\tinProcessBufferLockQueues.delete(lockFile);\n\t\t}\n\t}\n}\n\nexport function getGlobalCliCommandAggregator(\n\toptions: CliCommandAggregatorOptions,\n): CliCommandAggregator {\n\tif (!globalAggregator?.matchesOptions(options)) {\n\t\tvoid globalAggregator?.dispose().catch(() => undefined);\n\t\tglobalAggregator = new CliCommandAggregator(options);\n\t}\n\treturn globalAggregator;\n}\n\nexport function resetGlobalCliCommandAggregatorForTests(): void {\n\tglobalAggregator = null;\n}\n\nexport function normalizeCommandAction(command: string): string {\n\tconst trimmed = command.trim();\n\treturn `cli.command.${trimmed.length > 0 ? trimmed : \"interactive\"}`;\n}\n\nasync function mkdirForFile(file: string): Promise<void> {\n\tconst { mkdir } = await import(\"node:fs/promises\");\n\tawait mkdir(dirname(file), { recursive: true });\n}\n\nasync function removeStaleLock(\n\tlockFile: string,\n\tstaleAfterMs: number,\n): Promise<boolean> {\n\ttry {\n\t\tconst lock = await stat(lockFile);\n\t\tif (Date.now() - lock.mtimeMs < staleAfterMs) {\n\t\t\treturn false;\n\t\t}\n\t\tawait rm(lockFile, { force: true });\n\t\treturn true;\n\t} catch (error) {\n\t\treturn (error as NodeJS.ErrnoException).code === \"ENOENT\";\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"maestro-event-bus.d.ts","sourceRoot":"","sources":["../../src/telemetry/maestro-event-bus.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,EACN,mBAAmB,EAEnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,KAAK,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;AAE7B,MAAM,MAAM,cAAc,GACvB,qBAAqB,GACrB,qBAAqB,GACrB,qBAAqB,GACrB,qBAAqB,GACrB,8BAA8B,GAC9B,yBAAyB,GACzB,+BAA+B,CAAC;AAEnC,MAAM,MAAM,kBAAkB,GAC3B,4BAA4B,GAC5B,+BAA+B,GAC/B,6BAA6B,GAC7B,sCAAsC,CAAC;AAE1C,MAAM,MAAM,mBAAmB,GAC5B,+BAA+B,GAC/B,iCAAiC,GACjC,+BAA+B,GAC/B,8BAA8B,CAAC;AAElC,MAAM,MAAM,kBAAkB,GAC3B,gCAAgC,GAChC,mCAAmC,GACnC,mCAAmC,GACnC,kCAAkC,GAClC,4BAA4B,GAC5B,oCAAoC,CAAC;AAExC,MAAM,MAAM,mBAAmB,GAC5B,6BAA6B,GAC7B,wCAAwC,GACxC,4BAA4B,GAC5B,qCAAqC,CAAC;AAEzC,MAAM,MAAM,qBAAqB,GAC9B,oCAAoC,GACpC,iCAAiC,GACjC,iCAAiC,GACjC,oCAAoC,CAAC;AAExC,MAAM,MAAM,8BAA8B,GACvC,wCAAwC,GACxC,qCAAqC,GACrC,qCAAqC,GACrC,wCAAwC,GACxC,gDAAgD,GAChD,2CAA2C,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,YAAY,EAAE,KAAK,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,sBAAsB,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,UAAU,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,uBAAuB,EAAE,oBAAoB,CAAC;QAC9C,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACtB,CAAC;CACF;AAED,MAAM,WAAW,uBAAwB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,WAAW,EAAE,kBAAkB,CAAC;IAChC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,EAAE,kBAAkB,CAAC;IACjC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,oBAAqB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpE,WAAW,EAAE,kBAAkB,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,mBAAmB,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAA0B,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACzE,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAuB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtE,WAAW,EAAE,kBAAkB,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAyB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxE,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAwB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,EAAE,kBAAkB,CAAC;CACvC;AAED,MAAM,WAAW,8BAChB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/B,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,cAAc,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,6BAA8B,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,8BAChB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/B,WAAW,EAAE,kBAAkB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,6BAA6B,EAAE,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAyB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxE,WAAW,EAAE,kBAAkB,CAAC;IAChC,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,EAAE,qBAAqB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,yBAAyB,GAClC,SAAS,GACT,OAAO,GACP,SAAS,GACT,mBAAmB,GACnB,cAAc,CAAC;AAElB,MAAM,WAAW,qBAAsB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrE,WAAW,EAAE,kBAAkB,CAAC;IAChC,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,EAAE,qBAAqB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,8BAA8B,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,yBAAyB,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACnE,WAAW,EAAE,kBAAkB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,yBAA0B,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACzE,WAAW,EAAE,kBAAkB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACxC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IAC1C,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,MAAM,2BAA2B,GAAG;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,mBAAmB,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,+BAA+B;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,iCAAiC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,mCAAmC;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,uCAAuC;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,gCAAgC;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,6BAA6B,EAAE,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,EAAE,qBAAqB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,EAAE,qBAAqB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,8BAA8B,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,yBAAyB,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,kCAAkC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AA2KD,wBAAgB,4BAA4B,CAC3C,GAAG,GAAE,GAAiB,GACpB,qBAAqB,CA4CvB;AAED,wBAAgB,wBAAwB,CACvC,GAAG,GAAE,GAAiB,GACpB,qBAAqB,CAYvB;AAED,wBAAgB,mCAAmC,CAClD,SAAS,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,GACpD,IAAI,CAEN;AAED,wBAAsB,oCAAoC,CAAC,CAAC,EAC3D,SAAS,EAAE,wBAAwB,GAAG,IAAI,EAC1C,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC,CASnE;AAgFD,wBAAgB,qCAAqC,CACpD,WAAW,EAAE,kBAAkB,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmCxB;AAyBD,wBAAgB,sBAAsB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3E,IAAI,EAAE,mBAAmB,EACzB,IAAI,EAAE,KAAK,EACX,OAAO,GAAE,0BAA+B,GACtC,iBAAiB,CAAC,KAAK,CAAC,CA0C1B;AA8CD,wBAAsB,wBAAwB,CAC7C,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAErC,IAAI,EAAE,mBAAmB,EACzB,IAAI,EAAE,KAAK,EACX,OAAO,GAAE,0BAA+B,GACtC,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,8BAA8B,CACnD,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAErC,IAAI,EAAE,mBAAmB,EACzB,IAAI,EAAE,KAAK,EACX,OAAO,GAAE,0BAA+B,GACtC,OAAO,CAAC,IAAI,CAAC,CAWf;AAsND,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,GAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,GAAG,CAAC,EAAE,GAAG,CAAC;CACL,GACJ,IAAI,CAmCN;AAED,wBAAgB,wBAAwB,CACvC,KAAK,EAAE,6BAA6B,GAClC,IAAI,CAuBN;AAED,wBAAgB,0BAA0B,CACzC,KAAK,EAAE,+BAA+B,GACpC,IAAI,CAoBN;AAED,wBAAgB,4BAA4B,CAC3C,KAAK,EAAE,iCAAiC,GACtC,IAAI,CA4BN;AAED,wBAAgB,8BAA8B,CAC7C,KAAK,EAAE,mCAAmC,GACxC,IAAI,CA0BN;AAED,wBAAgB,kCAAkC,CACjD,KAAK,EAAE,uCAAuC,GAC5C,IAAI,CAuBN;AAED,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,gCAAgC,GACrC,IAAI,CAuBN;AAED,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,8BAA8B,GACnC,IAAI,CAmBN;AAED,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,8BAA8B,GACnC,IAAI,CAsCN;AAED,wBAAgB,6BAA6B,CAC5C,KAAK,EAAE,kCAAkC,GACvC,IAAI,CA+BN;AAED,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,4BAA4B,GACjC,IAAI,CAkCN;AAED,wBAAsB,gCAAgC,CACrD,KAAK,EAAE,2BAA2B,GAChC,OAAO,CAAC,IAAI,CAAC,CA2Jf"}
1
+ {"version":3,"file":"maestro-event-bus.d.ts","sourceRoot":"","sources":["../../src/telemetry/maestro-event-bus.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,EACN,mBAAmB,EAEnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,KAAK,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;AAE7B,MAAM,MAAM,cAAc,GACvB,qBAAqB,GACrB,qBAAqB,GACrB,qBAAqB,GACrB,qBAAqB,GACrB,8BAA8B,GAC9B,yBAAyB,GACzB,+BAA+B,CAAC;AAEnC,MAAM,MAAM,kBAAkB,GAC3B,4BAA4B,GAC5B,+BAA+B,GAC/B,6BAA6B,GAC7B,sCAAsC,CAAC;AAE1C,MAAM,MAAM,mBAAmB,GAC5B,+BAA+B,GAC/B,iCAAiC,GACjC,+BAA+B,GAC/B,8BAA8B,CAAC;AAElC,MAAM,MAAM,kBAAkB,GAC3B,gCAAgC,GAChC,mCAAmC,GACnC,mCAAmC,GACnC,kCAAkC,GAClC,4BAA4B,GAC5B,oCAAoC,CAAC;AAExC,MAAM,MAAM,mBAAmB,GAC5B,6BAA6B,GAC7B,wCAAwC,GACxC,4BAA4B,GAC5B,qCAAqC,CAAC;AAEzC,MAAM,MAAM,qBAAqB,GAC9B,oCAAoC,GACpC,iCAAiC,GACjC,iCAAiC,GACjC,oCAAoC,CAAC;AAExC,MAAM,MAAM,8BAA8B,GACvC,wCAAwC,GACxC,qCAAqC,GACrC,qCAAqC,GACrC,wCAAwC,GACxC,gDAAgD,GAChD,2CAA2C,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,YAAY,EAAE,KAAK,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,sBAAsB,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,UAAU,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,uBAAuB,EAAE,oBAAoB,CAAC;QAC9C,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACtB,CAAC;CACF;AAED,MAAM,WAAW,uBAAwB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,WAAW,EAAE,kBAAkB,CAAC;IAChC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,EAAE,kBAAkB,CAAC;IACjC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,oBAAqB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpE,WAAW,EAAE,kBAAkB,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,mBAAmB,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAA0B,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACzE,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAuB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtE,WAAW,EAAE,kBAAkB,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAyB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxE,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAwB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,EAAE,kBAAkB,CAAC;CACvC;AAED,MAAM,WAAW,8BAChB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/B,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,cAAc,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,6BAA8B,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,8BAChB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/B,WAAW,EAAE,kBAAkB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,6BAA6B,EAAE,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAyB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxE,WAAW,EAAE,kBAAkB,CAAC;IAChC,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,EAAE,qBAAqB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,yBAAyB,GAClC,SAAS,GACT,OAAO,GACP,SAAS,GACT,mBAAmB,GACnB,cAAc,CAAC;AAElB,MAAM,WAAW,qBAAsB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrE,WAAW,EAAE,kBAAkB,CAAC;IAChC,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,EAAE,qBAAqB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,8BAA8B,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,yBAAyB,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACnE,WAAW,EAAE,kBAAkB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,yBAA0B,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACzE,WAAW,EAAE,kBAAkB,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACxC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IAC1C,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,MAAM,2BAA2B,GAAG;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,mBAAmB,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,+BAA+B;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,iCAAiC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,mCAAmC;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,uCAAuC;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,gCAAgC;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,6BAA6B,EAAE,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,EAAE,qBAAqB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,EAAE,qBAAqB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,8BAA8B,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,yBAAyB,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AAED,MAAM,WAAW,kCAAkC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC;CACV;AA2KD,wBAAgB,4BAA4B,CAC3C,GAAG,GAAE,GAAiB,GACpB,qBAAqB,CA4CvB;AAED,wBAAgB,wBAAwB,CACvC,GAAG,GAAE,GAAiB,GACpB,qBAAqB,CAYvB;AAED,wBAAgB,mCAAmC,CAClD,SAAS,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,GACpD,IAAI,CAEN;AAED,wBAAsB,oCAAoC,CAAC,CAAC,EAC3D,SAAS,EAAE,wBAAwB,GAAG,IAAI,EAC1C,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC,CASnE;AAgFD,wBAAgB,qCAAqC,CACpD,WAAW,EAAE,kBAAkB,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmCxB;AAyBD,wBAAgB,sBAAsB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3E,IAAI,EAAE,mBAAmB,EACzB,IAAI,EAAE,KAAK,EACX,OAAO,GAAE,0BAA+B,GACtC,iBAAiB,CAAC,KAAK,CAAC,CA0C1B;AA8CD,wBAAsB,wBAAwB,CAC7C,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAErC,IAAI,EAAE,mBAAmB,EACzB,IAAI,EAAE,KAAK,EACX,OAAO,GAAE,0BAA+B,GACtC,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,8BAA8B,CACnD,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAErC,IAAI,EAAE,mBAAmB,EACzB,IAAI,EAAE,KAAK,EACX,OAAO,GAAE,0BAA+B,GACtC,OAAO,CAAC,IAAI,CAAC,CAWf;AAsND,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,GAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,GAAG,CAAC,EAAE,GAAG,CAAC;CACL,GACJ,IAAI,CAmCN;AAED,wBAAgB,wBAAwB,CACvC,KAAK,EAAE,6BAA6B,GAClC,IAAI,CAuBN;AAED,wBAAgB,0BAA0B,CACzC,KAAK,EAAE,+BAA+B,GACpC,IAAI,CAoBN;AAED,wBAAgB,4BAA4B,CAC3C,KAAK,EAAE,iCAAiC,GACtC,IAAI,CA4BN;AAED,wBAAgB,8BAA8B,CAC7C,KAAK,EAAE,mCAAmC,GACxC,IAAI,CA0BN;AAUD,wBAAgB,kCAAkC,CACjD,KAAK,EAAE,uCAAuC,GAC5C,IAAI,CAuBN;AAED,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,gCAAgC,GACrC,IAAI,CAuBN;AAED,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,8BAA8B,GACnC,IAAI,CAmBN;AAED,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,8BAA8B,GACnC,IAAI,CAsCN;AAED,wBAAgB,6BAA6B,CAC5C,KAAK,EAAE,kCAAkC,GACvC,IAAI,CA+BN;AAED,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,4BAA4B,GACjC,IAAI,CAkCN;AAED,wBAAsB,gCAAgC,CACrD,KAAK,EAAE,2BAA2B,GAChC,OAAO,CAAC,IAAI,CAAC,CA4Jf"}
@@ -670,7 +670,7 @@ export function recordMaestroToolCallAttempt(event) {
670
670
  }
671
671
  export function recordMaestroToolCallCompleted(event) {
672
672
  const completedAt = event.completed_at ?? new Date().toISOString();
673
- void publishMaestroCloudEvent(MaestroBusEventType.ToolCallCompleted, {
673
+ void publishMaestroCloudEvent(toolCallResultEventType(event.status), {
674
674
  correlation: mergeCorrelation(resolveMaestroEventBusConfig(event.env).defaultCorrelation, event.correlation),
675
675
  tool_call_id: event.tool_call_id,
676
676
  tool_execution_id: event.tool_execution_id,
@@ -688,6 +688,11 @@ export function recordMaestroToolCallCompleted(event) {
688
688
  completed_at: completedAt,
689
689
  }, { env: event.env, eventId: event.event_id, time: completedAt });
690
690
  }
691
+ function toolCallResultEventType(status) {
692
+ return status === "MAESTRO_TOOL_CALL_STATUS_FAILED"
693
+ ? MaestroBusEventType.ToolCallFailed
694
+ : MaestroBusEventType.ToolCallCompleted;
695
+ }
691
696
  export function recordMaestroPromptVariantSelected(event) {
692
697
  const selectedAt = event.selected_at ?? new Date().toISOString();
693
698
  const promptID = event.prompt_id ?? event.prompt_metadata.name;
@@ -910,14 +915,15 @@ export async function mirrorTelemetryToMaestroEventBus(event) {
910
915
  }
911
916
  if (event.type === "tool-execution") {
912
917
  const metadata = fields.metadata;
913
- await publishMaestroCloudEvent(MaestroBusEventType.ToolCallCompleted, {
918
+ const status = fields.success
919
+ ? "MAESTRO_TOOL_CALL_STATUS_SUCCEEDED"
920
+ : "MAESTRO_TOOL_CALL_STATUS_FAILED";
921
+ await publishMaestroCloudEvent(toolCallResultEventType(status), {
914
922
  correlation: mergeCorrelation(resolveMaestroEventBusConfig().defaultCorrelation, correlationFromMetadata(metadata)),
915
923
  tool_call_id: stringMetadata(metadata, "toolCallId") ??
916
924
  stringMetadata(metadata, "tool_call_id") ??
917
925
  `${String(fields.toolName ?? "tool")}:${event.timestamp}`,
918
- status: fields.success
919
- ? "MAESTRO_TOOL_CALL_STATUS_SUCCEEDED"
920
- : "MAESTRO_TOOL_CALL_STATUS_FAILED",
926
+ status,
921
927
  duration: durationFromMs(fields.durationMs),
922
928
  error_message: fields.success
923
929
  ? undefined