@smthrs/observability 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/LICENSE +21 -0
  2. package/docker-compose.otel.yml +104 -0
  3. package/grafana/dashboards/smithers-dashboard.json +453 -0
  4. package/grafana/provisioning/dashboards/dashboards.yml +12 -0
  5. package/grafana/provisioning/datasources/datasources.yml +49 -0
  6. package/loki/loki-config.yaml +35 -0
  7. package/otel-collector-config.yml +38 -0
  8. package/package.json +47 -0
  9. package/prometheus/prometheus.yml +8 -0
  10. package/src/MetricName.ts +1 -0
  11. package/src/MetricsServiceLive.js +9 -0
  12. package/src/README.md +28 -0
  13. package/src/ResolvedSmithersObservabilityOptions.ts +12 -0
  14. package/src/SmithersEvent.ts +773 -0
  15. package/src/SmithersLogFormat.ts +1 -0
  16. package/src/SmithersMetricDefinition.ts +15 -0
  17. package/src/SmithersMetricType.ts +1 -0
  18. package/src/SmithersMetricUnit.ts +1 -0
  19. package/src/SmithersObservability.js +15 -0
  20. package/src/SmithersObservabilityOptions.ts +12 -0
  21. package/src/SmithersObservabilityService.ts +13 -0
  22. package/src/_coreCorrelation/CorrelationContext.ts +10 -0
  23. package/src/_coreCorrelation/CorrelationContextLive.js +11 -0
  24. package/src/_coreCorrelation/CorrelationContextService.js +15 -0
  25. package/src/_coreCorrelation/CorrelationContextServiceShape.ts +12 -0
  26. package/src/_coreCorrelation/CorrelationPatch.ts +3 -0
  27. package/src/_coreCorrelation/README.md +20 -0
  28. package/src/_coreCorrelation/_correlationStorage.js +4 -0
  29. package/src/_coreCorrelation/correlationContextFiberRef.js +5 -0
  30. package/src/_coreCorrelation/correlationContextToLogAnnotations.js +18 -0
  31. package/src/_coreCorrelation/getCurrentCorrelationContext.js +9 -0
  32. package/src/_coreCorrelation/getCurrentCorrelationContextEffect.js +11 -0
  33. package/src/_coreCorrelation/index.js +14 -0
  34. package/src/_coreCorrelation/mergeCorrelationContext.js +51 -0
  35. package/src/_coreCorrelation/runWithCorrelationContext.js +14 -0
  36. package/src/_coreCorrelation/updateCurrentCorrelationContext.js +17 -0
  37. package/src/_coreCorrelation/withCorrelationContext.js +38 -0
  38. package/src/_coreCorrelation/withCurrentCorrelationContext.js +11 -0
  39. package/src/_coreMetrics.js +14 -0
  40. package/src/_coreMetricsShape.ts +44 -0
  41. package/src/_corePrometheus.js +91 -0
  42. package/src/_corePrometheusShape.ts +11 -0
  43. package/src/_coreTracing.js +132 -0
  44. package/src/_coreTracingShape.ts +17 -0
  45. package/src/_otelLogBuilders.js +102 -0
  46. package/src/_sessionFileResolvers.js +164 -0
  47. package/src/_smithersSpanAttributeAliases.js +19 -0
  48. package/src/_smithersTraceSpanStorage.js +3 -0
  49. package/src/_traceEventNormalizers.js +499 -0
  50. package/src/_traceRedaction.js +162 -0
  51. package/src/agentSessionEventToOtelLogRecord.js +55 -0
  52. package/src/agentTrace.ts +144 -0
  53. package/src/agentTraceCapabilities.js +151 -0
  54. package/src/annotateSmithersTrace.js +11 -0
  55. package/src/canonicalTraceEventToOtelLogRecord.js +55 -0
  56. package/src/correlation.js +56 -0
  57. package/src/createSmithersObservabilityLayer.js +59 -0
  58. package/src/createSmithersOtelLayer.js +23 -0
  59. package/src/createSmithersRuntimeLayer.js +2 -0
  60. package/src/detectAgentFamily.js +26 -0
  61. package/src/detectCaptureMode.js +24 -0
  62. package/src/emitOtelLogRecord.js +19 -0
  63. package/src/getCurrentSmithersTraceAnnotations.js +14 -0
  64. package/src/getCurrentSmithersTraceSpan.js +7 -0
  65. package/src/index.d.ts +1321 -0
  66. package/src/index.js +136 -0
  67. package/src/kindPhase.js +17 -0
  68. package/src/logging.js +248 -0
  69. package/src/makeSmithersSpanAttributes.js +20 -0
  70. package/src/metrics/README.md +22 -0
  71. package/src/metrics/SmithersMetricDefinition.ts +17 -0
  72. package/src/metrics/SmithersMetricType.ts +1 -0
  73. package/src/metrics/SmithersMetricUnit.ts +1 -0
  74. package/src/metrics/_asyncExternalWaitCounts.js +4 -0
  75. package/src/metrics/_buckets.js +37 -0
  76. package/src/metrics/_incrementGauge.js +11 -0
  77. package/src/metrics/_processStartMs.js +1 -0
  78. package/src/metrics/activeNodes.js +2 -0
  79. package/src/metrics/activeRuns.js +2 -0
  80. package/src/metrics/agentActionsTotal.js +2 -0
  81. package/src/metrics/agentDurationMs.js +3 -0
  82. package/src/metrics/agentErrorsTotal.js +2 -0
  83. package/src/metrics/agentEventsTotal.js +2 -0
  84. package/src/metrics/agentInvocationsTotal.js +2 -0
  85. package/src/metrics/agentRetriesTotal.js +2 -0
  86. package/src/metrics/agentSessionsTotal.js +2 -0
  87. package/src/metrics/agentTokensTotal.js +2 -0
  88. package/src/metrics/alertDeliveriesAttempted.js +2 -0
  89. package/src/metrics/alertDeliveriesSuppressed.js +2 -0
  90. package/src/metrics/alertsAcknowledgedTotal.js +2 -0
  91. package/src/metrics/alertsActive.js +2 -0
  92. package/src/metrics/alertsEscalatedTotal.js +2 -0
  93. package/src/metrics/alertsFiredTotal.js +2 -0
  94. package/src/metrics/alertsReopenedTotal.js +2 -0
  95. package/src/metrics/alertsResolvedTotal.js +2 -0
  96. package/src/metrics/alertsSilencedTotal.js +2 -0
  97. package/src/metrics/approvalPending.js +2 -0
  98. package/src/metrics/approvalWaitDuration.js +5 -0
  99. package/src/metrics/approvalsDenied.js +2 -0
  100. package/src/metrics/approvalsGranted.js +2 -0
  101. package/src/metrics/approvalsRequested.js +2 -0
  102. package/src/metrics/attemptDuration.js +3 -0
  103. package/src/metrics/attentionBacklog.js +2 -0
  104. package/src/metrics/cacheHits.js +2 -0
  105. package/src/metrics/cacheMisses.js +2 -0
  106. package/src/metrics/dbQueryDuration.js +3 -0
  107. package/src/metrics/dbRetries.js +2 -0
  108. package/src/metrics/dbTransactionDuration.js +3 -0
  109. package/src/metrics/dbTransactionRetries.js +2 -0
  110. package/src/metrics/dbTransactionRollbacks.js +2 -0
  111. package/src/metrics/devtoolsActiveSubscribers.js +2 -0
  112. package/src/metrics/devtoolsBackpressureDisconnectTotal.js +2 -0
  113. package/src/metrics/devtoolsDeltaBuildMs.js +3 -0
  114. package/src/metrics/devtoolsEventBytes.js +3 -0
  115. package/src/metrics/devtoolsEventTotal.js +2 -0
  116. package/src/metrics/devtoolsSnapshotBuildMs.js +5 -0
  117. package/src/metrics/devtoolsSubscribeTotal.js +2 -0
  118. package/src/metrics/errorsTotal.js +2 -0
  119. package/src/metrics/eventsEmittedTotal.js +2 -0
  120. package/src/metrics/externalWaitAsyncPending.js +2 -0
  121. package/src/metrics/gatewayApprovalDecisionsTotal.js +2 -0
  122. package/src/metrics/gatewayAuthEventsTotal.js +2 -0
  123. package/src/metrics/gatewayConnectionsActive.js +2 -0
  124. package/src/metrics/gatewayConnectionsClosedTotal.js +2 -0
  125. package/src/metrics/gatewayConnectionsTotal.js +2 -0
  126. package/src/metrics/gatewayCronTriggersTotal.js +2 -0
  127. package/src/metrics/gatewayErrorsTotal.js +2 -0
  128. package/src/metrics/gatewayHeartbeatTicksTotal.js +2 -0
  129. package/src/metrics/gatewayMessagesReceivedTotal.js +2 -0
  130. package/src/metrics/gatewayMessagesSentTotal.js +2 -0
  131. package/src/metrics/gatewayRpcCallsTotal.js +2 -0
  132. package/src/metrics/gatewayRpcDuration.js +3 -0
  133. package/src/metrics/gatewayRunEventBackpressureDisconnectTotal.js +4 -0
  134. package/src/metrics/gatewayRunsCompletedTotal.js +2 -0
  135. package/src/metrics/gatewayRunsStartedTotal.js +2 -0
  136. package/src/metrics/gatewaySignalsTotal.js +2 -0
  137. package/src/metrics/gatewayWebhooksReceivedTotal.js +2 -0
  138. package/src/metrics/gatewayWebhooksRejectedTotal.js +2 -0
  139. package/src/metrics/gatewayWebhooksVerifiedTotal.js +2 -0
  140. package/src/metrics/heartbeatDataSizeBytes.js +5 -0
  141. package/src/metrics/heartbeatIntervalMs.js +3 -0
  142. package/src/metrics/hotReloadDuration.js +3 -0
  143. package/src/metrics/hotReloadFailures.js +2 -0
  144. package/src/metrics/hotReloads.js +2 -0
  145. package/src/metrics/httpRequestDuration.js +3 -0
  146. package/src/metrics/httpRequests.js +2 -0
  147. package/src/metrics/index.d.ts +1163 -0
  148. package/src/metrics/index.js +168 -0
  149. package/src/metrics/memoryFactReads.js +3 -0
  150. package/src/metrics/memoryFactWrites.js +3 -0
  151. package/src/metrics/memoryMessageSaves.js +3 -0
  152. package/src/metrics/memoryRecallDuration.js +11 -0
  153. package/src/metrics/memoryRecallQueries.js +3 -0
  154. package/src/metrics/metricsServiceAdapter.js +181 -0
  155. package/src/metrics/nodeDuration.js +3 -0
  156. package/src/metrics/nodeRetriesTotal.js +2 -0
  157. package/src/metrics/nodesFailed.js +2 -0
  158. package/src/metrics/nodesFinished.js +2 -0
  159. package/src/metrics/nodesStarted.js +2 -0
  160. package/src/metrics/openApiToolCallErrorsTotal.js +3 -0
  161. package/src/metrics/openApiToolCallsTotal.js +3 -0
  162. package/src/metrics/openApiToolDuration.js +9 -0
  163. package/src/metrics/processHeapUsedBytes.js +2 -0
  164. package/src/metrics/processMemoryRssBytes.js +2 -0
  165. package/src/metrics/processUptimeSeconds.js +2 -0
  166. package/src/metrics/promptSizeBytes.js +3 -0
  167. package/src/metrics/replaysStarted.js +3 -0
  168. package/src/metrics/responseSizeBytes.js +3 -0
  169. package/src/metrics/rewindDurationMs.js +3 -0
  170. package/src/metrics/rewindFramesDeleted.js +3 -0
  171. package/src/metrics/rewindRollbackTotal.js +2 -0
  172. package/src/metrics/rewindSandboxesReverted.js +3 -0
  173. package/src/metrics/rewindTotal.js +2 -0
  174. package/src/metrics/runDuration.js +3 -0
  175. package/src/metrics/runForksCreated.js +3 -0
  176. package/src/metrics/runsAncestryDepth.js +3 -0
  177. package/src/metrics/runsCancelledTotal.js +2 -0
  178. package/src/metrics/runsCarriedStateBytes.js +5 -0
  179. package/src/metrics/runsContinuedTotal.js +2 -0
  180. package/src/metrics/runsFailedTotal.js +2 -0
  181. package/src/metrics/runsFinishedTotal.js +2 -0
  182. package/src/metrics/runsResumedTotal.js +2 -0
  183. package/src/metrics/runsTotal.js +2 -0
  184. package/src/metrics/sandboxActive.js +2 -0
  185. package/src/metrics/sandboxBundleSizeBytes.js +5 -0
  186. package/src/metrics/sandboxCompletedTotal.js +2 -0
  187. package/src/metrics/sandboxCreatedTotal.js +2 -0
  188. package/src/metrics/sandboxDurationMs.js +3 -0
  189. package/src/metrics/sandboxPatchCount.js +3 -0
  190. package/src/metrics/sandboxTransportDurationMs.js +5 -0
  191. package/src/metrics/schedulerConcurrencyUtilization.js +2 -0
  192. package/src/metrics/schedulerQueueDepth.js +2 -0
  193. package/src/metrics/schedulerWaitDuration.js +5 -0
  194. package/src/metrics/scorerDuration.js +9 -0
  195. package/src/metrics/scorerEventsFailed.js +2 -0
  196. package/src/metrics/scorerEventsFinished.js +2 -0
  197. package/src/metrics/scorerEventsStarted.js +2 -0
  198. package/src/metrics/scorersFailed.js +3 -0
  199. package/src/metrics/scorersFinished.js +3 -0
  200. package/src/metrics/scorersStarted.js +3 -0
  201. package/src/metrics/smithersMetricCatalog.js +893 -0
  202. package/src/metrics/smithersMetricCatalogByKey.js +2 -0
  203. package/src/metrics/smithersMetricCatalogByName.js +2 -0
  204. package/src/metrics/smithersMetricCatalogByPrometheusName.js +4 -0
  205. package/src/metrics/snapshotDuration.js +9 -0
  206. package/src/metrics/snapshotsCaptured.js +3 -0
  207. package/src/metrics/supervisorPollDuration.js +5 -0
  208. package/src/metrics/supervisorPollsTotal.js +2 -0
  209. package/src/metrics/supervisorResumeLag.js +5 -0
  210. package/src/metrics/supervisorResumedTotal.js +2 -0
  211. package/src/metrics/supervisorSkippedTotal.js +2 -0
  212. package/src/metrics/supervisorStaleDetected.js +2 -0
  213. package/src/metrics/taskHeartbeatTimeoutTotal.js +2 -0
  214. package/src/metrics/taskHeartbeatsTotal.js +2 -0
  215. package/src/metrics/timerDelayDuration.js +3 -0
  216. package/src/metrics/timersCancelled.js +2 -0
  217. package/src/metrics/timersCreated.js +2 -0
  218. package/src/metrics/timersFired.js +2 -0
  219. package/src/metrics/timersPending.js +2 -0
  220. package/src/metrics/toPrometheusMetricName.js +8 -0
  221. package/src/metrics/tokensCacheReadTotal.js +2 -0
  222. package/src/metrics/tokensCacheWriteTotal.js +2 -0
  223. package/src/metrics/tokensContextWindowBucketTotal.js +2 -0
  224. package/src/metrics/tokensContextWindowPerCall.js +5 -0
  225. package/src/metrics/tokensInputPerCall.js +3 -0
  226. package/src/metrics/tokensInputTotal.js +2 -0
  227. package/src/metrics/tokensOutputPerCall.js +3 -0
  228. package/src/metrics/tokensOutputTotal.js +2 -0
  229. package/src/metrics/tokensReasoningTotal.js +2 -0
  230. package/src/metrics/toolCallErrorsTotal.js +2 -0
  231. package/src/metrics/toolCallsTotal.js +2 -0
  232. package/src/metrics/toolDuration.js +3 -0
  233. package/src/metrics/toolOutputTruncatedTotal.js +2 -0
  234. package/src/metrics/trackEvent.js +608 -0
  235. package/src/metrics/updateAsyncExternalWaitPending.js +18 -0
  236. package/src/metrics/updateProcessMetrics.js +20 -0
  237. package/src/metrics/vcsDuration.js +3 -0
  238. package/src/normalizeStructuredEvent.js +15 -0
  239. package/src/prometheusContentType.js +1 -0
  240. package/src/renderPrometheusMetrics.js +212 -0
  241. package/src/resolveAgentTraceCapabilities.js +59 -0
  242. package/src/resolveSmithersObservabilityOptions.js +109 -0
  243. package/src/smithersMetrics.js +2 -0
  244. package/src/smithersSpanNames.js +6 -0
  245. package/src/unsupportedKindsForCapabilities.js +32 -0
  246. package/src/withSmithersSpan.js +17 -0
  247. package/tempo/tempo.yml +17 -0
@@ -0,0 +1,773 @@
1
+ import type { AgentSessionTranscriptEvent, AgentTraceSummary, CanonicalAgentTraceEvent } from "./agentTrace";
2
+
3
+ type RunStatus =
4
+ | "running"
5
+ | "waiting-approval"
6
+ | "waiting-event"
7
+ | "waiting-timer"
8
+ | "waiting-quota"
9
+ | "paused"
10
+ | "finished"
11
+ | "continued"
12
+ | "failed"
13
+ | "cancelled";
14
+
15
+ type RunState =
16
+ | "running"
17
+ | "waiting-approval"
18
+ | "waiting-event"
19
+ | "waiting-timer"
20
+ | "waiting-quota"
21
+ | "paused"
22
+ | "recovering"
23
+ | "stale"
24
+ | "orphaned"
25
+ | "failed"
26
+ | "cancelled"
27
+ | "succeeded"
28
+ | "unknown";
29
+
30
+ type AgentCliActionKind =
31
+ | "turn"
32
+ | "command"
33
+ | "tool"
34
+ | "file_change"
35
+ | "web_search"
36
+ | "todo_list"
37
+ | "reasoning"
38
+ | "warning"
39
+ | "note";
40
+
41
+ type AgentCliActionPhase = "started" | "updated" | "completed";
42
+ type AgentCliEventLevel = "debug" | "info" | "warning" | "error";
43
+
44
+ type AgentCliStartedEvent = {
45
+ type: "started";
46
+ engine: string;
47
+ title: string;
48
+ resume?: string;
49
+ detail?: Record<string, unknown>;
50
+ };
51
+
52
+ type AgentCliActionEvent = {
53
+ type: "action";
54
+ engine: string;
55
+ phase: AgentCliActionPhase;
56
+ entryType?: "thought" | "message";
57
+ action: {
58
+ id: string;
59
+ kind: AgentCliActionKind;
60
+ title: string;
61
+ detail?: Record<string, unknown>;
62
+ };
63
+ message?: string;
64
+ ok?: boolean;
65
+ level?: AgentCliEventLevel;
66
+ };
67
+
68
+ type AgentCliCompletedEvent = {
69
+ type: "completed";
70
+ engine: string;
71
+ ok: boolean;
72
+ answer?: string;
73
+ error?: string;
74
+ resume?: string;
75
+ usage?: Record<string, unknown>;
76
+ };
77
+
78
+ type AgentCliEvent = AgentCliStartedEvent | AgentCliActionEvent | AgentCliCompletedEvent;
79
+
80
+ export type SmithersEvent =
81
+ | {
82
+ type: "SupervisorStarted";
83
+ runId: string;
84
+ pollIntervalMs: number;
85
+ staleThresholdMs: number;
86
+ timestampMs: number;
87
+ }
88
+ | {
89
+ type: "SupervisorPollCompleted";
90
+ runId: string;
91
+ staleCount: number;
92
+ resumedCount: number;
93
+ skippedCount: number;
94
+ durationMs: number;
95
+ timestampMs: number;
96
+ }
97
+ | {
98
+ type: "RunAutoResumed";
99
+ runId: string;
100
+ lastHeartbeatAtMs: number | null;
101
+ staleDurationMs: number;
102
+ timestampMs: number;
103
+ }
104
+ | {
105
+ type: "RunAutoResumeSkipped";
106
+ runId: string;
107
+ reason: "pid-alive" | "missing-workflow" | "rate-limited";
108
+ timestampMs: number;
109
+ }
110
+ | { type: "RunStarted"; runId: string; timestampMs: number }
111
+ | {
112
+ type: "RunStatusChanged";
113
+ runId: string;
114
+ status: RunStatus;
115
+ timestampMs: number;
116
+ }
117
+ | {
118
+ type: "RunStateChanged";
119
+ runId: string;
120
+ before: RunState;
121
+ after: RunState;
122
+ timestampMs: number;
123
+ }
124
+ | {
125
+ type: "RunFinished";
126
+ runId: string;
127
+ timestampMs: number;
128
+ /**
129
+ * Tasks that ended `failed` but were tolerated (continueOnFail / transient
130
+ * agent failures) so the run still finished. Present only when `> 0` — the
131
+ * run "succeeded" while these children failed. See `docs/runtime/run-state.mdx`.
132
+ */
133
+ failedChildren?: number;
134
+ /** Task state keys (`nodeId::iteration`) counted by `failedChildren`. */
135
+ failedChildKeys?: readonly string[];
136
+ }
137
+ | { type: "RunFailed"; runId: string; error: unknown; timestampMs: number }
138
+ | { type: "RunCancelled"; runId: string; timestampMs: number }
139
+ | {
140
+ type: "RunContinuedAsNew";
141
+ runId: string;
142
+ newRunId: string;
143
+ iteration: number;
144
+ carriedStateSize: number;
145
+ ancestryDepth?: number;
146
+ timestampMs: number;
147
+ }
148
+ | {
149
+ type: "RunHijackRequested";
150
+ runId: string;
151
+ target?: string;
152
+ timestampMs: number;
153
+ }
154
+ | {
155
+ type: "RunHijacked";
156
+ runId: string;
157
+ nodeId: string;
158
+ iteration: number;
159
+ attempt: number;
160
+ engine: string;
161
+ mode: "native-cli" | "conversation";
162
+ resume?: string | null;
163
+ cwd: string;
164
+ timestampMs: number;
165
+ }
166
+ | {
167
+ type: "OneshotSteerQueued";
168
+ runId: string;
169
+ nodeId: "steer";
170
+ messageId: string;
171
+ message: string;
172
+ engine: string;
173
+ delivery: "queued";
174
+ timestampMs: number;
175
+ }
176
+ | {
177
+ type: "OneshotSteerDelivered";
178
+ runId: string;
179
+ nodeId: "steer";
180
+ messageId: string;
181
+ engine: string;
182
+ delivery: "delivered";
183
+ timestampMs: number;
184
+ }
185
+ | {
186
+ type: "OneshotSteerAcknowledged";
187
+ runId: string;
188
+ nodeId: "steer";
189
+ messageId: string;
190
+ engine: string;
191
+ delivery: "agent-acked";
192
+ timestampMs: number;
193
+ }
194
+ | {
195
+ type: "OneshotSteerFailed";
196
+ runId: string;
197
+ nodeId: "steer";
198
+ messageId: string;
199
+ message?: string;
200
+ engine?: string;
201
+ delivery: "failed";
202
+ error: string;
203
+ resumed?: boolean;
204
+ recoveryError?: string;
205
+ timestampMs: number;
206
+ }
207
+ | {
208
+ type: "OneshotRestartRequested";
209
+ runId: string;
210
+ restartedAsRunId: string;
211
+ priorStatus: string;
212
+ timestampMs: number;
213
+ }
214
+ | {
215
+ type: "OneshotRestartLaunched";
216
+ runId: string;
217
+ restartedAsRunId: string;
218
+ pid: number | null;
219
+ timestampMs: number;
220
+ }
221
+ | {
222
+ type: "OneshotRestartFailed";
223
+ runId: string;
224
+ restartedAsRunId: string;
225
+ error: string;
226
+ timestampMs: number;
227
+ }
228
+ | {
229
+ type: "SandboxCreated";
230
+ runId: string;
231
+ sandboxId: string;
232
+ runtime: "bubblewrap" | "docker" | "codeplane";
233
+ configJson: string;
234
+ timestampMs: number;
235
+ }
236
+ | {
237
+ type: "SandboxShipped";
238
+ runId: string;
239
+ sandboxId: string;
240
+ runtime: "bubblewrap" | "docker" | "codeplane";
241
+ bundleSizeBytes: number;
242
+ timestampMs: number;
243
+ }
244
+ | {
245
+ type: "SandboxHeartbeat";
246
+ runId: string;
247
+ sandboxId: string;
248
+ remoteRunId?: string;
249
+ progress?: number;
250
+ timestampMs: number;
251
+ }
252
+ | {
253
+ type: "SandboxBundleReceived";
254
+ runId: string;
255
+ sandboxId: string;
256
+ bundleSizeBytes: number;
257
+ patchCount: number;
258
+ hasOutputs: boolean;
259
+ timestampMs: number;
260
+ }
261
+ | {
262
+ type: "SandboxCompleted";
263
+ runId: string;
264
+ sandboxId: string;
265
+ remoteRunId?: string;
266
+ runtime: "bubblewrap" | "docker" | "codeplane";
267
+ status: "finished" | "failed" | "cancelled";
268
+ durationMs: number;
269
+ timestampMs: number;
270
+ }
271
+ | {
272
+ type: "SandboxFailed";
273
+ runId: string;
274
+ sandboxId: string;
275
+ runtime: "bubblewrap" | "docker" | "codeplane";
276
+ error: unknown;
277
+ timestampMs: number;
278
+ }
279
+ | {
280
+ type: "SandboxDiffReviewRequested";
281
+ runId: string;
282
+ sandboxId: string;
283
+ patchCount: number;
284
+ totalDiffLines: number;
285
+ timestampMs: number;
286
+ }
287
+ | {
288
+ type: "SandboxDiffAccepted";
289
+ runId: string;
290
+ sandboxId: string;
291
+ patchCount: number;
292
+ timestampMs: number;
293
+ }
294
+ | {
295
+ type: "SandboxDiffRejected";
296
+ runId: string;
297
+ sandboxId: string;
298
+ reason?: string;
299
+ timestampMs: number;
300
+ }
301
+ | {
302
+ type: "FrameCommitted";
303
+ runId: string;
304
+ frameNo: number;
305
+ xmlHash: string;
306
+ trigger?: {
307
+ reason: string;
308
+ nodeId?: string;
309
+ iteration?: number;
310
+ };
311
+ timestampMs: number;
312
+ }
313
+ | {
314
+ type: "NodePending";
315
+ runId: string;
316
+ nodeId: string;
317
+ iteration: number;
318
+ timestampMs: number;
319
+ }
320
+ | {
321
+ type: "NodeStarted";
322
+ runId: string;
323
+ nodeId: string;
324
+ iteration: number;
325
+ attempt: number;
326
+ /** Deterministic child run launched by a childRun subflow node. */
327
+ childRunId?: string;
328
+ timestampMs: number;
329
+ }
330
+ | {
331
+ type: "TaskHeartbeat";
332
+ runId: string;
333
+ nodeId: string;
334
+ iteration: number;
335
+ attempt: number;
336
+ hasData: boolean;
337
+ dataSizeBytes: number;
338
+ intervalMs?: number;
339
+ timestampMs: number;
340
+ }
341
+ | {
342
+ type: "TaskHeartbeatTimeout";
343
+ runId: string;
344
+ nodeId: string;
345
+ iteration: number;
346
+ attempt: number;
347
+ lastHeartbeatAtMs: number;
348
+ timeoutMs: number;
349
+ timestampMs: number;
350
+ }
351
+ | {
352
+ type: "NodeFinished";
353
+ runId: string;
354
+ nodeId: string;
355
+ iteration: number;
356
+ attempt: number;
357
+ timestampMs: number;
358
+ }
359
+ | {
360
+ type: "NodeFailed";
361
+ runId: string;
362
+ nodeId: string;
363
+ iteration: number;
364
+ attempt: number;
365
+ error: unknown;
366
+ timestampMs: number;
367
+ }
368
+ | {
369
+ type: "NodeCancelled";
370
+ runId: string;
371
+ nodeId: string;
372
+ iteration: number;
373
+ attempt?: number;
374
+ reason?: string;
375
+ timestampMs: number;
376
+ }
377
+ | {
378
+ type: "NodeSkipped";
379
+ runId: string;
380
+ nodeId: string;
381
+ iteration: number;
382
+ timestampMs: number;
383
+ }
384
+ | {
385
+ type: "NodeRetrying";
386
+ runId: string;
387
+ nodeId: string;
388
+ iteration: number;
389
+ attempt: number;
390
+ timestampMs: number;
391
+ }
392
+ | {
393
+ type: "NodeWaitingApproval";
394
+ runId: string;
395
+ nodeId: string;
396
+ iteration: number;
397
+ timestampMs: number;
398
+ }
399
+ | {
400
+ type: "NodeWaitingTimer";
401
+ runId: string;
402
+ nodeId: string;
403
+ iteration: number;
404
+ firesAtMs: number;
405
+ timestampMs: number;
406
+ }
407
+ | {
408
+ type: "ApprovalRequested";
409
+ runId: string;
410
+ nodeId: string;
411
+ iteration: number;
412
+ timestampMs: number;
413
+ }
414
+ | {
415
+ type: "ApprovalGranted";
416
+ runId: string;
417
+ nodeId: string;
418
+ iteration: number;
419
+ timestampMs: number;
420
+ }
421
+ | {
422
+ type: "ApprovalAutoApproved";
423
+ runId: string;
424
+ nodeId: string;
425
+ iteration: number;
426
+ timestampMs: number;
427
+ }
428
+ | {
429
+ type: "ApprovalDenied";
430
+ runId: string;
431
+ nodeId: string;
432
+ iteration: number;
433
+ timestampMs: number;
434
+ }
435
+ | {
436
+ type: "ToolCallStarted";
437
+ runId: string;
438
+ nodeId: string;
439
+ iteration: number;
440
+ attempt: number;
441
+ toolCallId: string;
442
+ toolName: string;
443
+ seq: number;
444
+ timestampMs: number;
445
+ }
446
+ | {
447
+ type: "ToolCallFinished";
448
+ runId: string;
449
+ nodeId: string;
450
+ iteration: number;
451
+ attempt: number;
452
+ toolCallId: string;
453
+ toolName: string;
454
+ seq: number;
455
+ status: "success" | "error";
456
+ timestampMs: number;
457
+ }
458
+ | {
459
+ type: "NodeOutput";
460
+ runId: string;
461
+ nodeId: string;
462
+ iteration: number;
463
+ attempt: number;
464
+ text: string;
465
+ stream: "stdout" | "stderr";
466
+ timestampMs: number;
467
+ }
468
+ | {
469
+ type: "AgentEvent";
470
+ runId: string;
471
+ nodeId: string;
472
+ iteration: number;
473
+ attempt: number;
474
+ engine: string;
475
+ event: AgentCliEvent;
476
+ timestampMs: number;
477
+ }
478
+ | {
479
+ type: "RetryTaskStarted";
480
+ runId: string;
481
+ nodeId: string;
482
+ iteration: number;
483
+ resetDependents: boolean;
484
+ resetNodes: string[];
485
+ timestampMs: number;
486
+ }
487
+ | {
488
+ type: "RetryTaskFinished";
489
+ runId: string;
490
+ nodeId: string;
491
+ iteration: number;
492
+ resetNodes: string[];
493
+ success: boolean;
494
+ error?: string;
495
+ timestampMs: number;
496
+ }
497
+ | {
498
+ type: "RevertStarted";
499
+ runId: string;
500
+ nodeId: string;
501
+ iteration: number;
502
+ attempt: number;
503
+ jjPointer: string;
504
+ timestampMs: number;
505
+ }
506
+ | {
507
+ type: "RevertFinished";
508
+ runId: string;
509
+ nodeId: string;
510
+ iteration: number;
511
+ attempt: number;
512
+ jjPointer: string;
513
+ success: boolean;
514
+ error?: string;
515
+ timestampMs: number;
516
+ }
517
+ | {
518
+ type: "TimeTravelStarted";
519
+ runId: string;
520
+ nodeId: string;
521
+ iteration: number;
522
+ attempt: number;
523
+ jjPointer?: string;
524
+ timestampMs: number;
525
+ }
526
+ | {
527
+ type: "TimeTravelFinished";
528
+ runId: string;
529
+ nodeId: string;
530
+ iteration: number;
531
+ attempt: number;
532
+ jjPointer?: string;
533
+ success: boolean;
534
+ vcsRestored: boolean;
535
+ resetNodes: string[];
536
+ error?: string;
537
+ timestampMs: number;
538
+ }
539
+ | {
540
+ type: "TimeTravelJumped";
541
+ runId: string;
542
+ fromFrameNo: number;
543
+ toFrameNo: number;
544
+ timestampMs: number;
545
+ caller?: string;
546
+ }
547
+ | {
548
+ type: "EffectRevertStarted";
549
+ runId: string;
550
+ operation: string;
551
+ kind: "tool" | "task";
552
+ toolName: string;
553
+ nodeId: string;
554
+ iteration: number;
555
+ attempt: number;
556
+ seq: number;
557
+ effectStatus: "succeeded" | "unknown";
558
+ timestampMs: number;
559
+ }
560
+ | {
561
+ type: "EffectRevertFinished";
562
+ runId: string;
563
+ operation: string;
564
+ kind: "tool" | "task";
565
+ toolName: string;
566
+ nodeId: string;
567
+ iteration: number;
568
+ attempt: number;
569
+ seq: number;
570
+ timestampMs: number;
571
+ }
572
+ | {
573
+ type: "EffectRevertFailed";
574
+ runId: string;
575
+ operation: string;
576
+ kind: "tool" | "task";
577
+ toolName: string;
578
+ nodeId: string;
579
+ iteration: number;
580
+ attempt: number;
581
+ seq: number;
582
+ error: string;
583
+ timestampMs: number;
584
+ }
585
+ | {
586
+ type: "SideEffectBoundaryCrossed";
587
+ runId: string;
588
+ opId: string;
589
+ operation: string;
590
+ report: {
591
+ blocking: unknown[];
592
+ revertible: unknown[];
593
+ warnings: unknown[];
594
+ };
595
+ parentRunId?: string;
596
+ warningOnly?: boolean;
597
+ lateCompletion?: boolean;
598
+ archivedByOp?: string;
599
+ timestampMs: number;
600
+ }
601
+ | {
602
+ type: "WorkflowReloadDetected";
603
+ runId: string;
604
+ changedFiles: string[];
605
+ timestampMs: number;
606
+ }
607
+ | {
608
+ type: "WorkflowReloaded";
609
+ runId: string;
610
+ generation: number;
611
+ changedFiles: string[];
612
+ timestampMs: number;
613
+ }
614
+ | {
615
+ type: "WorkflowReloadFailed";
616
+ runId: string;
617
+ error: unknown;
618
+ changedFiles: string[];
619
+ timestampMs: number;
620
+ }
621
+ | {
622
+ type: "WorkflowReloadUnsafe";
623
+ runId: string;
624
+ reason: string;
625
+ changedFiles: string[];
626
+ timestampMs: number;
627
+ }
628
+ | {
629
+ type: "ScorerStarted";
630
+ runId: string;
631
+ nodeId: string;
632
+ scorerId: string;
633
+ scorerName: string;
634
+ timestampMs: number;
635
+ }
636
+ | {
637
+ type: "ScorerFinished";
638
+ runId: string;
639
+ nodeId: string;
640
+ scorerId: string;
641
+ scorerName: string;
642
+ score: number;
643
+ timestampMs: number;
644
+ }
645
+ | {
646
+ type: "ScorerFailed";
647
+ runId: string;
648
+ nodeId: string;
649
+ scorerId: string;
650
+ scorerName: string;
651
+ error: unknown;
652
+ timestampMs: number;
653
+ }
654
+ | {
655
+ type: "TokenUsageReported";
656
+ runId: string;
657
+ nodeId: string;
658
+ iteration: number;
659
+ attempt: number;
660
+ model: string;
661
+ agent: string;
662
+ inputTokens: number;
663
+ outputTokens: number;
664
+ cacheReadTokens?: number;
665
+ cacheWriteTokens?: number;
666
+ reasoningTokens?: number;
667
+ timestampMs: number;
668
+ }
669
+ | {
670
+ type: "SnapshotCaptured";
671
+ runId: string;
672
+ frameNo: number;
673
+ contentHash: string;
674
+ timestampMs: number;
675
+ }
676
+ | {
677
+ type: "RunForked";
678
+ runId: string;
679
+ parentRunId: string;
680
+ parentFrameNo: number;
681
+ branchLabel?: string;
682
+ timestampMs: number;
683
+ }
684
+ | {
685
+ type: "ReplayStarted";
686
+ runId: string;
687
+ parentRunId: string;
688
+ parentFrameNo: number;
689
+ restoreVcs: boolean;
690
+ timestampMs: number;
691
+ }
692
+ | {
693
+ type: "MemoryFactSet";
694
+ runId: string;
695
+ namespace: string;
696
+ key: string;
697
+ timestampMs: number;
698
+ }
699
+ | {
700
+ type: "MemoryRecalled";
701
+ runId: string;
702
+ namespace: string;
703
+ query: string;
704
+ resultCount: number;
705
+ timestampMs: number;
706
+ }
707
+ | {
708
+ type: "MemoryMessageSaved";
709
+ runId: string;
710
+ threadId: string;
711
+ role: string;
712
+ timestampMs: number;
713
+ }
714
+ | {
715
+ type: "OpenApiToolCalled";
716
+ runId: string;
717
+ operationId: string;
718
+ method: string;
719
+ path: string;
720
+ durationMs: number;
721
+ status: "success" | "error";
722
+ timestampMs: number;
723
+ }
724
+ | {
725
+ type: "TimerCreated";
726
+ runId: string;
727
+ timerId: string;
728
+ firesAtMs: number;
729
+ timerType: "duration" | "absolute";
730
+ timestampMs: number;
731
+ }
732
+ | {
733
+ type: "TimerFired";
734
+ runId: string;
735
+ timerId: string;
736
+ firesAtMs: number;
737
+ firedAtMs: number;
738
+ delayMs: number;
739
+ timestampMs: number;
740
+ }
741
+ | {
742
+ type: "TimerCancelled";
743
+ runId: string;
744
+ timerId: string;
745
+ timestampMs: number;
746
+ }
747
+ | {
748
+ type: "AgentTraceEvent";
749
+ runId: string;
750
+ nodeId: string;
751
+ iteration: number;
752
+ attempt: number;
753
+ trace: CanonicalAgentTraceEvent;
754
+ timestampMs: number;
755
+ }
756
+ | {
757
+ type: "AgentTraceSummary";
758
+ runId: string;
759
+ nodeId: string;
760
+ iteration: number;
761
+ attempt: number;
762
+ summary: AgentTraceSummary;
763
+ timestampMs: number;
764
+ }
765
+ | {
766
+ type: "AgentSessionEvent";
767
+ runId: string;
768
+ nodeId: string;
769
+ iteration: number;
770
+ attempt: number;
771
+ transcript: AgentSessionTranscriptEvent;
772
+ timestampMs: number;
773
+ };