@linnlabs/linnkit 0.8.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 (123) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/LICENSE +21 -0
  3. package/README.md +178 -0
  4. package/README.zh-CN.md +182 -0
  5. package/dist/agent-invocation-BHcNfrBV.d.cts +30 -0
  6. package/dist/agent-invocation-BznDaXDs.d.ts +30 -0
  7. package/dist/agentEvents-DEB7Fy_J.d.cts +81 -0
  8. package/dist/agentEvents-DEB7Fy_J.d.ts +81 -0
  9. package/dist/agentSpec-EkmviZjy.d.cts +2621 -0
  10. package/dist/agentSpec-EkmviZjy.d.ts +2621 -0
  11. package/dist/ai-engine.types-BpeU_XQG.d.cts +158 -0
  12. package/dist/ai-engine.types-vZRnQcJa.d.ts +158 -0
  13. package/dist/audit-BaRUGaqv.d.cts +307 -0
  14. package/dist/audit-BaRUGaqv.d.ts +307 -0
  15. package/dist/audit-CtcfART1.d.ts +33 -0
  16. package/dist/audit-LeOrm2hX.d.cts +33 -0
  17. package/dist/checkpointMarker-DAI3wUQu.d.cts +8 -0
  18. package/dist/checkpointMarker-DAI3wUQu.d.ts +8 -0
  19. package/dist/cli.cjs +8028 -0
  20. package/dist/cli.cjs.map +1 -0
  21. package/dist/cli.d.cts +4 -0
  22. package/dist/cli.d.ts +4 -0
  23. package/dist/cli.js +8025 -0
  24. package/dist/cli.js.map +1 -0
  25. package/dist/context-manager.cjs +8704 -0
  26. package/dist/context-manager.cjs.map +1 -0
  27. package/dist/context-manager.d.cts +2190 -0
  28. package/dist/context-manager.d.ts +2190 -0
  29. package/dist/context-manager.js +8650 -0
  30. package/dist/context-manager.js.map +1 -0
  31. package/dist/context-trace-DRi5M4lX.d.ts +239 -0
  32. package/dist/context-trace-HE2qY5Q-.d.cts +239 -0
  33. package/dist/contracts.cjs +1333 -0
  34. package/dist/contracts.cjs.map +1 -0
  35. package/dist/contracts.d.cts +8 -0
  36. package/dist/contracts.d.ts +8 -0
  37. package/dist/contracts.js +1214 -0
  38. package/dist/contracts.js.map +1 -0
  39. package/dist/defaultGraphExecutor-BBswR8wn.d.ts +624 -0
  40. package/dist/defaultGraphExecutor-BIjJj7WF.d.cts +624 -0
  41. package/dist/execution-CAIypb41.d.cts +129 -0
  42. package/dist/execution-CAIypb41.d.ts +129 -0
  43. package/dist/index-CHqwkvGp.d.ts +149 -0
  44. package/dist/index-CJeWHopy.d.ts +584 -0
  45. package/dist/index-Cm-JbzTH.d.cts +1450 -0
  46. package/dist/index-Cvr23YCl.d.cts +23 -0
  47. package/dist/index-DDzuSb0n.d.ts +23 -0
  48. package/dist/index-DO4dQgf2.d.cts +584 -0
  49. package/dist/index-DRBWi1fy.d.ts +1450 -0
  50. package/dist/index-Dl5PLgAv.d.cts +149 -0
  51. package/dist/index.cjs +9577 -0
  52. package/dist/index.cjs.map +1 -0
  53. package/dist/index.d.cts +89 -0
  54. package/dist/index.d.ts +89 -0
  55. package/dist/index.js +9563 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/messages-XthmnHZ3.d.cts +8007 -0
  58. package/dist/messages-XthmnHZ3.d.ts +8007 -0
  59. package/dist/ports-DaatKJXp.d.cts +90 -0
  60. package/dist/ports-DnLuKfpE.d.ts +90 -0
  61. package/dist/ports.cjs +4 -0
  62. package/dist/ports.cjs.map +1 -0
  63. package/dist/ports.d.cts +7 -0
  64. package/dist/ports.d.ts +7 -0
  65. package/dist/ports.js +3 -0
  66. package/dist/ports.js.map +1 -0
  67. package/dist/quickstart.cjs +7697 -0
  68. package/dist/quickstart.cjs.map +1 -0
  69. package/dist/quickstart.d.cts +24 -0
  70. package/dist/quickstart.d.ts +24 -0
  71. package/dist/quickstart.js +7691 -0
  72. package/dist/quickstart.js.map +1 -0
  73. package/dist/runAgent-CPj_9e58.d.ts +88 -0
  74. package/dist/runAgent-HYKlXbVr.d.cts +88 -0
  75. package/dist/runHandle-CyXvzgzk.d.ts +239 -0
  76. package/dist/runHandle-D3gPsD7B.d.cts +239 -0
  77. package/dist/runtime-kernel/events.cjs +1485 -0
  78. package/dist/runtime-kernel/events.cjs.map +1 -0
  79. package/dist/runtime-kernel/events.d.cts +8 -0
  80. package/dist/runtime-kernel/events.d.ts +8 -0
  81. package/dist/runtime-kernel/events.js +1475 -0
  82. package/dist/runtime-kernel/events.js.map +1 -0
  83. package/dist/runtime-kernel.cjs +8656 -0
  84. package/dist/runtime-kernel.cjs.map +1 -0
  85. package/dist/runtime-kernel.d.cts +19 -0
  86. package/dist/runtime-kernel.d.ts +19 -0
  87. package/dist/runtime-kernel.js +8568 -0
  88. package/dist/runtime-kernel.js.map +1 -0
  89. package/dist/sse-vPyrOPa0.d.cts +1687 -0
  90. package/dist/sse-vPyrOPa0.d.ts +1687 -0
  91. package/dist/testkit.cjs +10613 -0
  92. package/dist/testkit.cjs.map +1 -0
  93. package/dist/testkit.d.cts +284 -0
  94. package/dist/testkit.d.ts +284 -0
  95. package/dist/testkit.js +10593 -0
  96. package/dist/testkit.js.map +1 -0
  97. package/dist/todo-B1PmDlp3.d.cts +2253 -0
  98. package/dist/todo-B1PmDlp3.d.ts +2253 -0
  99. package/dist/tokenizer-DFL4I7-I.d.ts +28 -0
  100. package/dist/tokenizer-DH_JXv-H.d.cts +28 -0
  101. package/dist/toolContracts-Blll0241.d.ts +463 -0
  102. package/dist/toolContracts-CLkQmhTG.d.cts +463 -0
  103. package/docs/README.md +76 -0
  104. package/docs/integration/01-installation.md +94 -0
  105. package/docs/integration/02-quickstart.md +104 -0
  106. package/docs/integration/README.md +223 -0
  107. package/docs/integration/agent-registration-guide.md +330 -0
  108. package/docs/integration/audit.md +64 -0
  109. package/docs/integration/child-runs.md +87 -0
  110. package/docs/integration/constraints-and-pitfalls.md +87 -0
  111. package/docs/integration/context-engineering.md +650 -0
  112. package/docs/integration/context-fences.md +289 -0
  113. package/docs/integration/glossary.md +69 -0
  114. package/docs/integration/llm-provider.md +76 -0
  115. package/docs/integration/persistence.md +44 -0
  116. package/docs/integration/realtime.md +76 -0
  117. package/docs/integration/run-supervisor.md +69 -0
  118. package/docs/integration/telemetry.md +48 -0
  119. package/docs/integration/testing.md +95 -0
  120. package/docs/integration/tool-development-guide.md +362 -0
  121. package/docs/integration/tool-history.md +202 -0
  122. package/docs/integration/tools.md +188 -0
  123. package/package.json +115 -0
@@ -0,0 +1,1475 @@
1
+ import { z } from 'zod';
2
+
3
+ // src/runtime-kernel/events/agentEvents.ts
4
+ function isRecord(value) {
5
+ return !!value && typeof value === "object" && !Array.isArray(value);
6
+ }
7
+ function isMarkedAsSseDispatched(event) {
8
+ return isRecord(event) && event["__dispatched_via_sse__"] === true;
9
+ }
10
+ function readAgentEventAnswerId(event) {
11
+ if (!isRecord(event)) return void 0;
12
+ const snake = event["answer_id"];
13
+ if (typeof snake === "string" && snake.trim().length > 0) {
14
+ return snake.trim();
15
+ }
16
+ const camel = event["answerId"];
17
+ if (typeof camel === "string" && camel.trim().length > 0) {
18
+ return camel.trim();
19
+ }
20
+ return void 0;
21
+ }
22
+ function readAgentEventSeq(event) {
23
+ if (!isRecord(event)) return void 0;
24
+ const value = event["seq"];
25
+ return Number.isInteger(value) ? Number(value) : void 0;
26
+ }
27
+ var ProviderReasoningDetails = z.array(z.unknown());
28
+ var ToolCallExtraContent = z.object({
29
+ google: z.object({
30
+ thought_signature: z.string().optional()
31
+ }).passthrough().optional()
32
+ }).passthrough();
33
+ var ToolCallWire = z.object({
34
+ id: z.string(),
35
+ type: z.literal("function"),
36
+ function: z.object({
37
+ name: z.string(),
38
+ arguments: z.string()
39
+ }),
40
+ extra_content: ToolCallExtraContent.optional()
41
+ }).passthrough();
42
+ z.object({
43
+ messageType: z.literal("summary"),
44
+ originalMessageCount: z.number().int().positive(),
45
+ compressionRatio: z.number().min(0).max(1).optional(),
46
+ includedOldSummary: z.boolean(),
47
+ replacedMessageIds: z.array(z.string()),
48
+ summarySeq: z.number().int().nonnegative()
49
+ });
50
+ z.object({
51
+ tool_calls: z.array(ToolCallWire),
52
+ reasoning_details: ProviderReasoningDetails.optional()
53
+ });
54
+ z.object({
55
+ tool_name: z.string(),
56
+ args: z.record(z.unknown()).optional(),
57
+ tool_call_id: z.string()
58
+ });
59
+ var ImageInfoMeta = z.object({
60
+ url: z.string().optional(),
61
+ width: z.number().int().positive().optional(),
62
+ height: z.number().int().positive().optional(),
63
+ format: z.string().optional(),
64
+ size: z.number().int().nonnegative().optional()
65
+ });
66
+ z.object({
67
+ taskType: z.string().optional(),
68
+ taskId: z.string().optional(),
69
+ taskStatus: z.enum(["requested", "in_progress", "completed", "failed"]).optional(),
70
+ taskTrackingInfo: z.object({
71
+ startTime: z.number().optional(),
72
+ endTime: z.number().optional(),
73
+ duration: z.number().optional(),
74
+ retryCount: z.number().int().nonnegative().optional(),
75
+ lastError: z.string().optional()
76
+ }).optional()
77
+ });
78
+ var PersistentMetadata = z.object({
79
+ messageType: z.literal("summary").optional(),
80
+ originalMessageCount: z.number().int().positive().optional(),
81
+ compressionRatio: z.number().min(0).max(1).optional(),
82
+ includedOldSummary: z.boolean().optional(),
83
+ replacedMessageIds: z.array(z.string()).optional(),
84
+ summarySeq: z.number().int().nonnegative().optional(),
85
+ tool_calls: z.array(ToolCallWire).optional(),
86
+ reasoning_details: ProviderReasoningDetails.optional(),
87
+ tool_name: z.string().optional(),
88
+ args: z.record(z.unknown()).optional(),
89
+ tool_call_id: z.string().optional(),
90
+ raw_output: z.string().optional(),
91
+ image_info: ImageInfoMeta.optional(),
92
+ taskType: z.string().optional(),
93
+ taskId: z.string().optional(),
94
+ taskStatus: z.enum(["requested", "in_progress", "completed", "failed"]).optional(),
95
+ taskTrackingInfo: z.object({
96
+ startTime: z.number().optional(),
97
+ endTime: z.number().optional(),
98
+ duration: z.number().optional(),
99
+ retryCount: z.number().int().nonnegative().optional(),
100
+ lastError: z.string().optional()
101
+ }).optional(),
102
+ fenceKind: z.string().optional(),
103
+ fenceAttrs: z.record(z.unknown()).optional(),
104
+ fencePlacement: z.string().optional()
105
+ }).passthrough();
106
+ var BaseMessage = z.object({
107
+ id: z.string(),
108
+ content: z.string(),
109
+ timestamp: z.number().int().nonnegative(),
110
+ metadata: PersistentMetadata.optional()
111
+ });
112
+ var SystemMessage = BaseMessage.extend({
113
+ role: z.literal("system"),
114
+ type: z.enum(["system_prompt", "history_summary", "context_injection"])
115
+ });
116
+ var UserMessage = BaseMessage.extend({
117
+ role: z.literal("user"),
118
+ type: z.enum([
119
+ "user_input",
120
+ "context_injection",
121
+ "context_before",
122
+ "context_after",
123
+ "document_fragment",
124
+ "task_request",
125
+ "image"
126
+ ])
127
+ });
128
+ var AssistantMessage = BaseMessage.extend({
129
+ role: z.literal("assistant"),
130
+ type: z.enum([
131
+ "thought",
132
+ "final_answer",
133
+ "tool_code",
134
+ "tool_calls",
135
+ "task_completion"
136
+ ])
137
+ });
138
+ var ToolMessage = BaseMessage.extend({
139
+ role: z.literal("tool"),
140
+ type: z.literal("tool_output")
141
+ });
142
+ z.discriminatedUnion("role", [
143
+ SystemMessage,
144
+ UserMessage,
145
+ AssistantMessage,
146
+ ToolMessage
147
+ ]);
148
+ var SerializableJsonValueSchema = z.lazy(
149
+ () => z.union([
150
+ z.string(),
151
+ z.number(),
152
+ z.boolean(),
153
+ z.null(),
154
+ z.array(SerializableJsonValueSchema),
155
+ z.record(z.string(), SerializableJsonValueSchema)
156
+ ])
157
+ );
158
+ var SerializableJsonRecord = z.record(z.string(), SerializableJsonValueSchema);
159
+ var AgentSpecMessageType = z.enum([
160
+ "system_prompt",
161
+ "history_summary",
162
+ "context_injection",
163
+ "user_input",
164
+ "context_before",
165
+ "context_after",
166
+ "document_fragment",
167
+ "task_request",
168
+ "image",
169
+ "thought",
170
+ "final_answer",
171
+ "tool_code",
172
+ "tool_calls",
173
+ "task_completion",
174
+ "tool_output"
175
+ ]);
176
+ var AgentSpecBudgetPolicy = z.object({
177
+ maxTokens: z.number().int().positive().optional(),
178
+ reservedForResponse: z.number().int().nonnegative().optional(),
179
+ workingMemoryBudgetPercentage: z.number().min(0).max(1).optional()
180
+ });
181
+ var AgentSpecToolHistoryPolicy = z.object({
182
+ strategy: z.enum(["per-pair", "per-run", "none"]).optional(),
183
+ keepLatestToolPairs: z.number().int().nonnegative().optional(),
184
+ keepLatestRuns: z.number().int().nonnegative().optional(),
185
+ maxInteractionGroups: z.number().int().nonnegative().optional(),
186
+ overflowStrategy: z.enum(["keep-latest", "fail-fast"]).optional(),
187
+ maxPairTokens: z.number().int().nonnegative().optional(),
188
+ maxOutputSummaryTokens: z.number().int().nonnegative().optional()
189
+ });
190
+ var AgentSpecToolObservationGovernancePolicy = z.object({
191
+ enabled: z.boolean().optional(),
192
+ maxChars: z.number().int().positive().optional(),
193
+ maxLines: z.number().int().positive().optional()
194
+ });
195
+ var AgentSpecToolOutputPolicy = z.object({
196
+ observationGovernance: AgentSpecToolObservationGovernancePolicy.optional()
197
+ });
198
+ var AgentSpecProviderReplayPolicy = z.object({
199
+ provider: z.string().min(1).optional(),
200
+ requiresReasoningDetailsForToolReplay: z.boolean().optional(),
201
+ missingSidecarBehavior: z.enum(["allow", "degrade_to_text", "provider_empty_replay_field"]).optional()
202
+ });
203
+ var AgentSpecSummarizationPolicy = z.object({
204
+ triggerThreshold: z.number().min(0).max(1).optional(),
205
+ budgetPercentage: z.number().min(0).max(1).optional(),
206
+ oldestMessagesPercentage: z.number().min(0).max(1).optional(),
207
+ agentId: z.string().min(1).optional(),
208
+ failureBehavior: z.enum(["fail-fast", "continue-if-within-budget"]).optional()
209
+ });
210
+ var AgentSpecMustKeepTruncationRule = z.object({
211
+ fenceKind: z.string().min(1),
212
+ maxBudgetFraction: z.number().gt(0).max(1),
213
+ strategyName: z.string().min(1)
214
+ });
215
+ var AgentSpecMustKeepPolicy = z.object({
216
+ alwaysKeepTypes: z.array(AgentSpecMessageType).optional(),
217
+ alwaysKeepFenceKinds: z.array(z.string().min(1)).optional(),
218
+ truncationRules: z.array(AgentSpecMustKeepTruncationRule).optional()
219
+ });
220
+ var AgentSpecWorkingMemoryPolicy = z.object({
221
+ maxRecentToolInteractions: z.number().int().nonnegative().optional(),
222
+ minToolInteractionsToKeep: z.number().int().nonnegative().optional(),
223
+ toolPairingSearchRange: z.number().int().positive().optional()
224
+ });
225
+ var AgentSpecCheckpointPolicy = z.object({
226
+ keepPairsBefore: z.number().int().nonnegative().optional(),
227
+ triggerToolName: z.string().min(1).optional()
228
+ });
229
+ var AgentSpecReasoningRetentionPolicy = z.object({
230
+ keepLatestThoughts: z.number().int().nonnegative().optional()
231
+ });
232
+ var AgentSpecTokenEstimationPolicy = z.object({
233
+ encoding: z.string().min(1).optional(),
234
+ avgCharsPerToken: z.number().positive().optional(),
235
+ toolCallOverhead: z.number().int().nonnegative().optional()
236
+ });
237
+ var AgentSpecSystemReminderTrigger = z.object({
238
+ kind: z.string().min(1),
239
+ threshold: z.number().nonnegative().optional(),
240
+ value: z.union([z.string(), z.number(), z.boolean()]).optional(),
241
+ moduloStep: z.boolean().optional(),
242
+ toolName: z.string().min(1).optional(),
243
+ period: z.number().int().positive().optional(),
244
+ minStep: z.number().int().nonnegative().optional(),
245
+ ratio: z.number().min(0).max(1).optional(),
246
+ config: SerializableJsonRecord.optional()
247
+ });
248
+ var AgentSpecSystemReminderExtraRule = z.object({
249
+ id: z.string().min(1),
250
+ trigger: AgentSpecSystemReminderTrigger,
251
+ contentTemplate: z.string().min(1),
252
+ contentArgs: SerializableJsonRecord.optional()
253
+ });
254
+ var AgentSpecSystemReminderPolicy = z.object({
255
+ enabledRuleIds: z.array(z.string().min(1)).nullable().optional(),
256
+ disabledRuleIds: z.array(z.string().min(1)).optional(),
257
+ thresholds: z.object({
258
+ toolCallStreak: z.number().int().nonnegative().optional(),
259
+ taskstateReflectionPeriod: z.number().int().positive().optional(),
260
+ budgetWarningRatio: z.number().min(0).max(1).optional(),
261
+ lastStepsHintThreshold: z.number().int().nonnegative().optional()
262
+ }).optional(),
263
+ extraRules: z.array(AgentSpecSystemReminderExtraRule).optional()
264
+ }).superRefine((value, ctx) => {
265
+ if (value.enabledRuleIds !== void 0 && value.enabledRuleIds !== null && value.disabledRuleIds?.length) {
266
+ ctx.addIssue({
267
+ code: z.ZodIssueCode.custom,
268
+ path: ["disabledRuleIds"],
269
+ message: "enabledRuleIds and disabledRuleIds cannot be configured at the same time"
270
+ });
271
+ }
272
+ });
273
+ var AgentSpecContextTracePolicy = z.object({
274
+ enabled: z.boolean().optional(),
275
+ includeMessageIds: z.boolean().optional(),
276
+ includeTokenBreakdown: z.boolean().optional(),
277
+ maxTraceEvents: z.number().int().positive().optional()
278
+ });
279
+ var AgentSpecContextPolicy = z.object({
280
+ profileId: z.string().min(1),
281
+ budget: AgentSpecBudgetPolicy.optional(),
282
+ toolHistory: AgentSpecToolHistoryPolicy.optional(),
283
+ toolOutput: AgentSpecToolOutputPolicy.optional(),
284
+ providerReplay: AgentSpecProviderReplayPolicy.optional(),
285
+ summarization: AgentSpecSummarizationPolicy.optional(),
286
+ mustKeep: AgentSpecMustKeepPolicy.optional(),
287
+ workingMemory: AgentSpecWorkingMemoryPolicy.optional(),
288
+ checkpoint: AgentSpecCheckpointPolicy.optional(),
289
+ reasoningRetention: AgentSpecReasoningRetentionPolicy.optional(),
290
+ tokenEstimation: AgentSpecTokenEstimationPolicy.optional(),
291
+ systemReminder: AgentSpecSystemReminderPolicy.optional(),
292
+ contextTrace: AgentSpecContextTracePolicy.optional()
293
+ });
294
+ var JsonRecord = z.record(z.string(), z.unknown());
295
+ var ToolArgsSchemaSpec = JsonRecord.superRefine((value, ctx) => {
296
+ const parse = value["parse"];
297
+ const safeParse = value["safeParse"];
298
+ const definition = value["_def"];
299
+ if (typeof parse === "function" && typeof safeParse === "function" && definition !== void 0) {
300
+ ctx.addIssue({
301
+ code: z.ZodIssueCode.custom,
302
+ message: "argsSchema must be a serializable record, not a runtime zod schema"
303
+ });
304
+ }
305
+ });
306
+ var AgentCapability = z.string().min(1);
307
+ var ToolBindingSpec = z.object({
308
+ toolId: z.string().min(1),
309
+ bindingId: z.string().min(1).optional(),
310
+ argsSchema: ToolArgsSchemaSpec.optional(),
311
+ config: JsonRecord.optional(),
312
+ metadata: JsonRecord.optional()
313
+ });
314
+ var AgentSpecModelHints = z.object({
315
+ preferredProviders: z.array(z.string().min(1)).optional(),
316
+ preferredModels: z.array(z.string().min(1)).optional(),
317
+ fallbackChain: z.array(z.string().min(1)).optional()
318
+ });
319
+ var AgentSpecAuditConfig = z.object({
320
+ redactionLevel: z.enum(["none", "standard", "strict"]).optional(),
321
+ pii: z.boolean().optional()
322
+ });
323
+ z.object({
324
+ id: z.string().min(1),
325
+ version: z.string().min(1),
326
+ role: z.string().optional(),
327
+ description: z.string().optional(),
328
+ capabilities: z.array(AgentCapability),
329
+ tools: z.array(ToolBindingSpec),
330
+ contextPolicy: AgentSpecContextPolicy,
331
+ modelHints: AgentSpecModelHints.optional(),
332
+ audit: AgentSpecAuditConfig.optional(),
333
+ metadata: JsonRecord.optional()
334
+ });
335
+ var JsonRecord2 = z.record(z.string(), z.unknown());
336
+ var AUDIT_DECISION_OUTCOMES = [
337
+ "allowed",
338
+ "denied",
339
+ "fallback",
340
+ "retry",
341
+ "cancelled",
342
+ "paused",
343
+ "resumed",
344
+ "requested",
345
+ "recorded"
346
+ ];
347
+ var AuditActor = z.object({
348
+ kind: z.enum(["system", "host", "agent", "model", "tool", "user"]),
349
+ id: z.string().min(1).optional(),
350
+ name: z.string().min(1).optional()
351
+ });
352
+ var AuditDecision = z.object({
353
+ outcome: z.enum(AUDIT_DECISION_OUTCOMES),
354
+ reason: z.string().optional(),
355
+ policy: z.string().optional(),
356
+ metadata: JsonRecord2.optional()
357
+ });
358
+ var AuditEvidence = z.object({
359
+ kind: z.string().min(1),
360
+ ref: z.string().min(1).optional(),
361
+ summary: z.string().optional(),
362
+ metadata: JsonRecord2.optional()
363
+ });
364
+ var AuditCostDelta = z.object({
365
+ tokensInput: z.number().int().nonnegative().optional(),
366
+ tokensOutput: z.number().int().nonnegative().optional(),
367
+ totalCostUsd: z.number().nonnegative().optional(),
368
+ latencyMs: z.number().nonnegative().optional()
369
+ });
370
+ var AuditScope = z.object({
371
+ conversationId: z.string().min(1).optional(),
372
+ runId: z.string().min(1).optional(),
373
+ parentRunId: z.string().min(1).optional(),
374
+ turnId: z.string().min(1).optional(),
375
+ traceId: z.string().min(1).optional(),
376
+ agentSpecId: z.string().min(1).optional(),
377
+ toolCallId: z.string().min(1).optional(),
378
+ toolName: z.string().min(1).optional(),
379
+ modelId: z.string().min(1).optional(),
380
+ nodeId: z.string().min(1).optional(),
381
+ metadata: JsonRecord2.optional()
382
+ });
383
+ var AuditEnvelope = z.object({
384
+ envelopeId: z.string().min(1),
385
+ runId: z.string().min(1),
386
+ parentRunId: z.string().min(1).optional(),
387
+ ts: z.number().int().nonnegative(),
388
+ actor: AuditActor,
389
+ action: z.string().min(1),
390
+ decision: AuditDecision.optional(),
391
+ evidence: z.array(AuditEvidence).optional(),
392
+ costDelta: AuditCostDelta.optional(),
393
+ scope: AuditScope.optional()
394
+ });
395
+ var BaseEvent = z.object({
396
+ id: z.string(),
397
+ conversation_id: z.string(),
398
+ timestamp: z.number(),
399
+ metadata: z.record(z.unknown()).optional(),
400
+ version: z.literal(1).default(1),
401
+ turn_id: z.string(),
402
+ ephemeral: z.boolean().optional()
403
+ });
404
+ var ToolCallPhase = z.enum(["start", "update", "complete", "error"]);
405
+ var Status = z.enum(["loading", "success", "error"]);
406
+ var AgentTodoStatus = z.enum(["pending", "in_progress", "completed", "cancelled"]);
407
+ var AgentTodoItem = z.object({
408
+ id: z.string(),
409
+ content: z.string(),
410
+ status: AgentTodoStatus
411
+ });
412
+ var ProviderReasoningDetailsPayload = z.array(z.unknown());
413
+ var ToolCallDecisionPayload = z.object({
414
+ args: z.record(z.any()).optional(),
415
+ tool_calls: z.array(z.unknown()).optional(),
416
+ /**
417
+ * 不透明 provider reasoning replay blocks。
418
+ *
419
+ * RuntimeEvent 层的标准位置是 assistant 产出事件携带 reasoning_details;
420
+ * context-manager 会把它回放到 AiMessage.metadata.reasoning_details。
421
+ */
422
+ reasoning_details: ProviderReasoningDetailsPayload.optional()
423
+ }).passthrough();
424
+ z.discriminatedUnion("type", [
425
+ BaseEvent.extend({
426
+ type: z.literal("user_input"),
427
+ content: z.string(),
428
+ raw_content: z.string().optional(),
429
+ source: z.enum(["user", "editor", "system"]).default("user")
430
+ }),
431
+ BaseEvent.extend({
432
+ type: z.literal("thought"),
433
+ content: z.string(),
434
+ thought_message_id: z.string().optional(),
435
+ delta: z.string().optional(),
436
+ is_complete: z.boolean().default(false)
437
+ }),
438
+ BaseEvent.extend({
439
+ type: z.literal("tool_call_decision"),
440
+ tool_name: z.string(),
441
+ tool_call_id: z.string(),
442
+ phase: ToolCallPhase,
443
+ status: Status,
444
+ args: z.record(z.any()).optional(),
445
+ payload: ToolCallDecisionPayload.optional(),
446
+ parent_tool_call_id: z.string().optional(),
447
+ meta: z.record(z.any()).optional()
448
+ }),
449
+ BaseEvent.extend({
450
+ type: z.literal("tool_process"),
451
+ tool_name: z.string(),
452
+ tool_call_id: z.string(),
453
+ phase: ToolCallPhase,
454
+ status: Status,
455
+ args: z.record(z.any()).optional(),
456
+ payload: z.record(z.any()).optional(),
457
+ parent_tool_call_id: z.string().optional(),
458
+ meta: z.record(z.any()).optional()
459
+ }),
460
+ BaseEvent.extend({
461
+ type: z.literal("tool_output"),
462
+ tool_name: z.string(),
463
+ tool_call_id: z.string(),
464
+ status: z.enum(["success", "error"]),
465
+ output: z.any().optional(),
466
+ payload: z.record(z.any()).optional(),
467
+ error: z.string().optional(),
468
+ duration_ms: z.number().optional()
469
+ }),
470
+ BaseEvent.extend({
471
+ type: z.literal("todo_updated"),
472
+ todo_list_id: z.string(),
473
+ todo_list_version: z.number().int().nonnegative(),
474
+ items: z.array(AgentTodoItem)
475
+ }),
476
+ BaseEvent.extend({
477
+ type: z.literal("subrun_trace"),
478
+ parent_tool_call_id: z.string(),
479
+ subrun_id: z.string(),
480
+ subrun_parent_id: z.string().optional(),
481
+ kind: z.enum([
482
+ "thought_delta",
483
+ "thought_complete",
484
+ "tool_call_decision",
485
+ "tool_process",
486
+ "tool_output",
487
+ "final_answer_chunk",
488
+ "final_answer"
489
+ ]),
490
+ delta: z.string().optional(),
491
+ content: z.string().optional(),
492
+ tool_name: z.string().optional(),
493
+ tool_call_id: z.string().optional(),
494
+ phase: ToolCallPhase.optional(),
495
+ status: Status.optional(),
496
+ args: z.unknown().optional(),
497
+ output: z.unknown().optional(),
498
+ duration_ms: z.number().optional(),
499
+ meta: z.record(z.unknown()).optional()
500
+ }),
501
+ BaseEvent.extend({
502
+ type: z.literal("requires_user_interaction"),
503
+ form: z.any().optional(),
504
+ interaction_type: z.string().optional(),
505
+ prompt: z.string().optional()
506
+ }),
507
+ BaseEvent.extend({
508
+ type: z.literal("audit_envelope"),
509
+ envelope: AuditEnvelope
510
+ }),
511
+ BaseEvent.extend({
512
+ type: z.literal("final_answer"),
513
+ answer_id: z.string(),
514
+ content: z.string(),
515
+ is_complete: z.boolean().default(true),
516
+ reasoning_details: ProviderReasoningDetailsPayload.optional(),
517
+ meta: z.record(z.any()).optional()
518
+ }),
519
+ BaseEvent.extend({
520
+ type: z.literal("final_answer_chunk"),
521
+ answer_id: z.string(),
522
+ seq: z.number().int().nonnegative(),
523
+ content: z.string(),
524
+ is_last: z.boolean().optional()
525
+ }),
526
+ BaseEvent.extend({
527
+ type: z.literal("history_summary"),
528
+ content: z.string(),
529
+ replaced_message_ids: z.array(z.string()),
530
+ summary_seq: z.number().int().nonnegative(),
531
+ original_message_count: z.number().int().nonnegative().optional(),
532
+ compression_ratio: z.number().min(0).max(1).optional(),
533
+ included_old_summary: z.boolean().optional()
534
+ }),
535
+ BaseEvent.extend({
536
+ type: z.literal("error"),
537
+ error: z.string(),
538
+ details: z.any().optional(),
539
+ error_code: z.string().optional(),
540
+ retryable: z.boolean().optional()
541
+ }),
542
+ BaseEvent.extend({
543
+ type: z.literal("control"),
544
+ op: z.enum(["truncate_after", "replace", "redo", "branch"]),
545
+ target_id: z.string().optional(),
546
+ reason: z.string().optional(),
547
+ meta: z.any().optional()
548
+ }),
549
+ BaseEvent.extend({
550
+ type: z.literal("stream_end"),
551
+ reason: z.enum(["complete", "error", "interrupted", "timeout"]).optional(),
552
+ reason_message: z.string().optional(),
553
+ stats: z.object({
554
+ total_events: z.number().optional(),
555
+ duration_ms: z.number().optional(),
556
+ error_count: z.number().optional()
557
+ }).optional()
558
+ })
559
+ ]);
560
+ var createThoughtEvent = (id, conversationId, turnId, content, options = {}) => ({
561
+ type: "thought",
562
+ id,
563
+ conversation_id: conversationId,
564
+ turn_id: turnId,
565
+ timestamp: Date.now(),
566
+ version: 1,
567
+ content,
568
+ is_complete: false,
569
+ ...options
570
+ });
571
+ var createToolCallDecisionEvent = (id, conversationId, turnId, toolName, toolCallId, options = {}) => ({
572
+ type: "tool_call_decision",
573
+ id,
574
+ conversation_id: conversationId,
575
+ turn_id: turnId,
576
+ timestamp: Date.now(),
577
+ version: 1,
578
+ tool_name: toolName,
579
+ tool_call_id: toolCallId,
580
+ phase: "start",
581
+ status: "loading",
582
+ ...options
583
+ });
584
+ var createToolProcessEvent = (id, conversationId, turnId, toolName, toolCallId, options = {}) => ({
585
+ type: "tool_process",
586
+ id,
587
+ conversation_id: conversationId,
588
+ turn_id: turnId,
589
+ timestamp: Date.now(),
590
+ version: 1,
591
+ tool_name: toolName,
592
+ tool_call_id: toolCallId,
593
+ phase: "start",
594
+ status: "loading",
595
+ ...options
596
+ });
597
+ var createToolOutputEvent = (id, conversationId, turnId, toolName, toolCallId, output, status = "success", options = {}) => ({
598
+ type: "tool_output",
599
+ id,
600
+ conversation_id: conversationId,
601
+ turn_id: turnId,
602
+ timestamp: Date.now(),
603
+ version: 1,
604
+ tool_name: toolName,
605
+ tool_call_id: toolCallId,
606
+ status,
607
+ output,
608
+ ...options
609
+ });
610
+ var createFinalAnswerEvent = (id, conversationId, turnId, answerId, content, options = {}) => ({
611
+ type: "final_answer",
612
+ id,
613
+ conversation_id: conversationId,
614
+ turn_id: turnId,
615
+ timestamp: Date.now(),
616
+ version: 1,
617
+ answer_id: answerId,
618
+ content,
619
+ is_complete: true,
620
+ ...options
621
+ });
622
+ var createFinalAnswerChunkEvent = (id, conversationId, turnId, answerId, seq, content, options = {}) => ({
623
+ type: "final_answer_chunk",
624
+ id,
625
+ conversation_id: conversationId,
626
+ turn_id: turnId,
627
+ timestamp: Date.now(),
628
+ version: 1,
629
+ answer_id: answerId,
630
+ seq,
631
+ content,
632
+ ...options
633
+ });
634
+ var createErrorEvent = (id, conversationId, turnId, error, options = {}) => ({
635
+ type: "error",
636
+ id,
637
+ conversation_id: conversationId,
638
+ turn_id: turnId,
639
+ timestamp: Date.now(),
640
+ version: 1,
641
+ error,
642
+ ...options
643
+ });
644
+ var ExecutionTraceContext = z.object({
645
+ execution_id: z.string().describe("The unique identifier for a single, complete execution flow."),
646
+ trace_id: z.string().optional().describe("An optional trace ID for correlating logs in an APM system.")
647
+ });
648
+ z.object({
649
+ seq: z.number().int().nonnegative().describe("A monotonically increasing sequence number within a single execution."),
650
+ timestamp: z.number().describe("The high-precision timestamp of when the event occurred."),
651
+ trace: ExecutionTraceContext,
652
+ source: z.string().describe("The origin of the event, e.g., 'ai', 'tool:file_reader', 'system:summary'."),
653
+ payload: z.unknown(),
654
+ render_hint: z.object({
655
+ card: z.enum(["normal", "collapsible", "none", "image", "interactive"]).optional().describe("Hint for how the UI card should be rendered."),
656
+ content: z.enum(["markdown", "text", "json", "image_url", "code"]).default("text").describe("Hint for how the content itself should be interpreted.")
657
+ }).optional(),
658
+ run_location: z.enum(["frontend", "backend"]).optional().describe("Specifies where a tool action should be or was executed.")
659
+ });
660
+ var BaseSSEEvent = z.object({
661
+ id: z.string(),
662
+ timestamp: z.number(),
663
+ conversation_id: z.string(),
664
+ turn_id: z.string(),
665
+ metadata: z.record(z.unknown()).optional()
666
+ });
667
+ var SSEThoughtEvent = BaseSSEEvent.extend({
668
+ type: z.literal("thought"),
669
+ thought_message_id: z.string().optional(),
670
+ delta: z.string().optional(),
671
+ content: z.string().optional(),
672
+ is_complete: z.boolean().default(false)
673
+ });
674
+ var SSEFinalAnswerChunkEvent = BaseSSEEvent.extend({
675
+ type: z.literal("final_answer_chunk"),
676
+ answer_id: z.string(),
677
+ seq: z.number().int().nonnegative(),
678
+ chunk: z.string(),
679
+ is_last: z.boolean().optional()
680
+ });
681
+ var SSEFinalAnswerEvent = BaseSSEEvent.extend({
682
+ type: z.literal("final_answer"),
683
+ answer_id: z.string(),
684
+ content: z.string(),
685
+ meta: z.record(z.any()).optional()
686
+ });
687
+ var SSEMarkdownChunkEvent = BaseSSEEvent.extend({
688
+ type: z.literal("markdown_chunk"),
689
+ content_type: z.enum(["text", "code", "table", "image"]).default("text"),
690
+ text: z.string(),
691
+ seq: z.number().optional()
692
+ });
693
+ var BaseSSEToolLifecycleEvent = BaseSSEEvent.extend({
694
+ tool_name: z.string(),
695
+ tool_call_id: z.string(),
696
+ phase: z.enum(["start", "update", "complete", "error"]),
697
+ status: z.enum(["loading", "success", "error"]),
698
+ args: z.any().optional(),
699
+ payload: z.any().optional(),
700
+ meta: z.record(z.any()).optional()
701
+ });
702
+ var SSEToolCallDecisionEvent = BaseSSEToolLifecycleEvent.extend({
703
+ type: z.literal("tool_call_decision")
704
+ });
705
+ var SSEToolProcessEvent = BaseSSEToolLifecycleEvent.extend({
706
+ type: z.literal("tool_process")
707
+ });
708
+ var SSEToolOutputEvent = BaseSSEEvent.extend({
709
+ type: z.literal("tool_output"),
710
+ tool_name: z.string(),
711
+ tool_call_id: z.string(),
712
+ status: z.enum(["success", "error"]),
713
+ output: z.any().optional(),
714
+ payload: z.record(z.any()).optional(),
715
+ duration_ms: z.number().optional()
716
+ });
717
+ var SSETodoUpdatedEvent = BaseSSEEvent.extend({
718
+ type: z.literal("todo_updated"),
719
+ todo_list_id: z.string(),
720
+ todo_list_version: z.number().int().nonnegative(),
721
+ items: z.array(z.object({
722
+ id: z.string(),
723
+ content: z.string(),
724
+ status: z.enum(["pending", "in_progress", "completed", "cancelled"])
725
+ }))
726
+ });
727
+ var SSESubRunTraceEvent = BaseSSEEvent.extend({
728
+ type: z.literal("subrun_trace"),
729
+ parent_tool_call_id: z.string(),
730
+ subrun_id: z.string(),
731
+ subrun_parent_id: z.string().optional(),
732
+ kind: z.enum([
733
+ "thought_delta",
734
+ "thought_complete",
735
+ "tool_call_decision",
736
+ "tool_process",
737
+ "tool_output",
738
+ "final_answer_chunk",
739
+ "final_answer"
740
+ ]),
741
+ delta: z.string().optional(),
742
+ content: z.string().optional(),
743
+ tool_name: z.string().optional(),
744
+ tool_call_id: z.string().optional(),
745
+ phase: z.enum(["start", "update", "complete", "error"]).optional(),
746
+ status: z.enum(["loading", "success", "error"]).optional(),
747
+ args: z.unknown().optional(),
748
+ output: z.unknown().optional(),
749
+ duration_ms: z.number().optional(),
750
+ meta: z.record(z.unknown()).optional()
751
+ });
752
+ var SSERequiresUserInteractionEvent = BaseSSEEvent.extend({
753
+ type: z.literal("requires_user_interaction"),
754
+ form: z.any().optional(),
755
+ interaction_type: z.string().optional(),
756
+ prompt: z.string().optional()
757
+ });
758
+ var SSEErrorEvent = BaseSSEEvent.extend({
759
+ type: z.literal("error"),
760
+ error: z.string(),
761
+ details: z.any().optional(),
762
+ error_code: z.string().optional(),
763
+ retryable: z.boolean().optional()
764
+ });
765
+ var SSEStreamEndEvent = BaseSSEEvent.extend({
766
+ type: z.literal("stream_end"),
767
+ reason: z.enum(["complete", "error", "interrupted", "timeout"]).optional(),
768
+ reason_message: z.string().optional(),
769
+ stats: z.object({
770
+ total_events: z.number().optional(),
771
+ duration_ms: z.number().optional(),
772
+ error_count: z.number().optional(),
773
+ benchmark: z.record(z.unknown()).optional()
774
+ }).optional()
775
+ });
776
+ var SSEHistorySummaryEvent = BaseSSEEvent.extend({
777
+ type: z.literal("history_summary"),
778
+ summary_id: z.string(),
779
+ content: z.string(),
780
+ original_message_count: z.number().int().nonnegative(),
781
+ summary_seq: z.number().int().nonnegative()
782
+ });
783
+ var SSESummarizationStartEvent = BaseSSEEvent.extend({
784
+ type: z.literal("summarization_start"),
785
+ originalMessages: z.number().optional()
786
+ });
787
+ var SSESummarizationEndEvent = BaseSSEEvent.extend({
788
+ type: z.literal("summarization_end"),
789
+ originalMessages: z.number().optional(),
790
+ compressedMessages: z.number().optional(),
791
+ compressionRatio: z.string().optional(),
792
+ timeSaved: z.string().optional()
793
+ });
794
+ var SSESummarizationErrorEvent = BaseSSEEvent.extend({
795
+ type: z.literal("summarization_error"),
796
+ error: z.string()
797
+ });
798
+ z.discriminatedUnion("type", [
799
+ SSEThoughtEvent,
800
+ SSEFinalAnswerChunkEvent,
801
+ SSEFinalAnswerEvent,
802
+ SSEMarkdownChunkEvent,
803
+ SSEToolCallDecisionEvent,
804
+ SSEToolProcessEvent,
805
+ SSEToolOutputEvent,
806
+ SSETodoUpdatedEvent,
807
+ SSESubRunTraceEvent,
808
+ SSERequiresUserInteractionEvent,
809
+ SSEErrorEvent,
810
+ SSEStreamEndEvent,
811
+ SSEHistorySummaryEvent,
812
+ SSESummarizationStartEvent,
813
+ SSESummarizationEndEvent,
814
+ SSESummarizationErrorEvent
815
+ ]);
816
+ var createSSEThoughtEvent = (id, conversationId, turnId, options = {}) => ({
817
+ type: "thought",
818
+ id,
819
+ timestamp: Date.now(),
820
+ conversation_id: conversationId,
821
+ turn_id: turnId,
822
+ is_complete: false,
823
+ ...options
824
+ });
825
+ var createSSEFinalAnswerChunkEvent = (id, conversationId, turnId, answerId, seq, chunk, options = {}) => ({
826
+ type: "final_answer_chunk",
827
+ id,
828
+ timestamp: Date.now(),
829
+ conversation_id: conversationId,
830
+ turn_id: turnId,
831
+ answer_id: answerId,
832
+ seq,
833
+ chunk,
834
+ ...options
835
+ });
836
+ var createSSEFinalAnswerEvent = (id, conversationId, turnId, answerId, content, options = {}) => ({
837
+ type: "final_answer",
838
+ id,
839
+ timestamp: Date.now(),
840
+ conversation_id: conversationId,
841
+ turn_id: turnId,
842
+ answer_id: answerId,
843
+ content,
844
+ ...options
845
+ });
846
+ var createSSEToolCallDecisionEvent = (id, conversationId, turnId, toolName, toolCallId, phase, status, options = {}) => ({
847
+ type: "tool_call_decision",
848
+ id,
849
+ timestamp: Date.now(),
850
+ conversation_id: conversationId,
851
+ turn_id: turnId,
852
+ tool_name: toolName,
853
+ tool_call_id: toolCallId,
854
+ phase,
855
+ status,
856
+ ...options
857
+ });
858
+ var createSSEToolProcessEvent = (id, conversationId, turnId, toolName, toolCallId, phase, status, options = {}) => ({
859
+ type: "tool_process",
860
+ id,
861
+ timestamp: Date.now(),
862
+ conversation_id: conversationId,
863
+ turn_id: turnId,
864
+ tool_name: toolName,
865
+ tool_call_id: toolCallId,
866
+ phase,
867
+ status,
868
+ ...options
869
+ });
870
+ var createSSEToolOutputEvent = (id, conversationId, turnId, toolName, toolCallId, status, output, options = {}) => ({
871
+ type: "tool_output",
872
+ id,
873
+ timestamp: Date.now(),
874
+ conversation_id: conversationId,
875
+ turn_id: turnId,
876
+ tool_name: toolName,
877
+ tool_call_id: toolCallId,
878
+ status,
879
+ output,
880
+ ...options
881
+ });
882
+ var createSSEErrorEvent = (id, conversationId, turnId, error, options = {}) => ({
883
+ type: "error",
884
+ id,
885
+ timestamp: Date.now(),
886
+ conversation_id: conversationId,
887
+ turn_id: turnId,
888
+ error,
889
+ ...options
890
+ });
891
+
892
+ // src/shared/ids.ts
893
+ function isoRandomUUID() {
894
+ const c = globalThis.crypto;
895
+ if (c && typeof c.randomUUID === "function") {
896
+ return c.randomUUID();
897
+ }
898
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (ch) => {
899
+ const r = Math.random() * 16 | 0;
900
+ const v = ch === "x" ? r : r & 3 | 8;
901
+ return v.toString(16);
902
+ });
903
+ }
904
+ function shortRandomId(prefix) {
905
+ return `${prefix}-${isoRandomUUID().replace(/-/g, "").slice(0, 12)}`;
906
+ }
907
+ function generateMessageId() {
908
+ return shortRandomId("msg");
909
+ }
910
+
911
+ // src/runtime-kernel/events/provider-sidecar.ts
912
+ var isRecord2 = (value) => !!value && typeof value === "object" && !Array.isArray(value);
913
+ var isToolCallWire = (value) => {
914
+ if (!isRecord2(value)) return false;
915
+ if (typeof value.id !== "string") return false;
916
+ if (value.type !== "function") return false;
917
+ const fn = value.function;
918
+ return isRecord2(fn) && typeof fn.name === "string" && typeof fn.arguments === "string";
919
+ };
920
+ function resolveToolDisplayOptions(toolName, toolPresentationPort) {
921
+ return toolPresentationPort?.getDisplayOptions(toolName);
922
+ }
923
+ function readAnswerIdFromEvent(event) {
924
+ if (!isRecord2(event)) return void 0;
925
+ const value = event["answerId"];
926
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
927
+ }
928
+ function readMetaFromEvent(event) {
929
+ if (!isRecord2(event)) return void 0;
930
+ const value = event["meta"];
931
+ return isRecord2(value) ? value : void 0;
932
+ }
933
+
934
+ // src/runtime-kernel/events/agent-to-runtime.ts
935
+ function agentEventToRuntime(agentEvent, context, options = {}) {
936
+ if (!agentEvent || typeof agentEvent !== "object") return null;
937
+ if (isRecord2(agentEvent) && agentEvent["type"] === "history_summary") {
938
+ const evt = agentEvent;
939
+ if (context.metadata) {
940
+ evt.metadata = { ...evt.metadata ?? {}, ...context.metadata };
941
+ }
942
+ return evt;
943
+ }
944
+ const typed = agentEvent;
945
+ const { conversationId, turnId } = context;
946
+ const timestamp = typed.timestamp ?? context.timestamp ?? Date.now();
947
+ const id = typed.id ?? generateMessageId();
948
+ const contextMeta = context.metadata;
949
+ switch (typed.type) {
950
+ case "thought":
951
+ return mapThoughtToRuntime(typed, context, options, id, timestamp);
952
+ case "tool_call_decision":
953
+ case "tool_process":
954
+ return mapToolProgressToRuntime(typed, context, options, id, timestamp);
955
+ case "observation": {
956
+ const observationEvent = typed;
957
+ const toolName = observationEvent.tool_name || "unknown_tool";
958
+ const toolCallId = observationEvent.tool_call_id || `call_${id}`;
959
+ const success = observationEvent.success ?? !/^错误[::]/i.test(String(observationEvent.output ?? ""));
960
+ const payload = observationEvent.payload || {};
961
+ const event = createToolOutputEvent(
962
+ id,
963
+ conversationId,
964
+ turnId,
965
+ toolName,
966
+ toolCallId,
967
+ observationEvent.output,
968
+ success ? "success" : "error",
969
+ { timestamp, payload, duration_ms: payload.duration_ms }
970
+ );
971
+ event.ephemeral = false;
972
+ if (contextMeta) event.metadata = { ...event.metadata ?? {}, ...contextMeta };
973
+ return event;
974
+ }
975
+ case "final_answer": {
976
+ const finalAnswerEvent = typed;
977
+ const answerIdFromSnake = typeof finalAnswerEvent.answer_id === "string" && finalAnswerEvent.answer_id.trim().length > 0 ? finalAnswerEvent.answer_id.trim() : void 0;
978
+ return createFinalAnswerEvent(
979
+ id,
980
+ conversationId,
981
+ turnId,
982
+ answerIdFromSnake ?? readAnswerIdFromEvent(finalAnswerEvent) ?? `answer_${turnId}`,
983
+ finalAnswerEvent.answer ?? "",
984
+ {
985
+ timestamp,
986
+ reasoning_details: Array.isArray(finalAnswerEvent.reasoning_details) ? finalAnswerEvent.reasoning_details : void 0,
987
+ meta: readMetaFromEvent(finalAnswerEvent)
988
+ }
989
+ );
990
+ }
991
+ case "error": {
992
+ const errorEvent = typed;
993
+ return createErrorEvent(id, conversationId, turnId, errorEvent.error ?? "Unknown error", {
994
+ timestamp,
995
+ details: errorEvent.details
996
+ });
997
+ }
998
+ case "stream_chunk":
999
+ return mapStreamChunkToRuntime(typed, context, id, timestamp);
1000
+ default:
1001
+ return null;
1002
+ }
1003
+ }
1004
+ function mapThoughtToRuntime(thoughtEvent, context, options, id, timestamp) {
1005
+ const isComplete = "is_complete" in thoughtEvent ? Boolean(thoughtEvent.is_complete) : false;
1006
+ if (options.skipIncomplete && !isComplete) return null;
1007
+ const thoughtMessageId = typeof thoughtEvent.thought_message_id === "string" && thoughtEvent.thought_message_id.length > 0 ? thoughtEvent.thought_message_id : void 0;
1008
+ const runtimeEvent = createThoughtEvent(id, context.conversationId, context.turnId, thoughtEvent.content ?? "", {
1009
+ timestamp,
1010
+ thought_message_id: thoughtMessageId,
1011
+ delta: thoughtEvent.delta,
1012
+ is_complete: isComplete
1013
+ });
1014
+ if (!isComplete) runtimeEvent.ephemeral = true;
1015
+ const thoughtMeta = isRecord2(thoughtEvent.meta) ? thoughtEvent.meta : void 0;
1016
+ if (context.metadata || thoughtMeta) {
1017
+ runtimeEvent.metadata = { ...runtimeEvent.metadata ?? {}, ...context.metadata ?? {}, ...thoughtMeta ?? {} };
1018
+ }
1019
+ return runtimeEvent;
1020
+ }
1021
+ function mapToolProgressToRuntime(toolEvent, context, options, id, timestamp) {
1022
+ const toolName = toolEvent.tool_name || "unknown_tool";
1023
+ const toolCallId = toolEvent.tool_call_id || `call_${id}`;
1024
+ const meta = toolEvent.meta && typeof toolEvent.meta === "object" ? { ...toolEvent.meta } : {};
1025
+ const displayOptions = resolveToolDisplayOptions(toolName, options.toolPresentationPort);
1026
+ if (displayOptions && !meta.displayOptions) meta.displayOptions = displayOptions;
1027
+ const event = toolEvent.type === "tool_call_decision" ? createToolCallDecisionEvent(id, context.conversationId, context.turnId, toolName, toolCallId, {
1028
+ timestamp,
1029
+ phase: toolEvent.phase ?? "start",
1030
+ status: toolEvent.status ?? "loading",
1031
+ args: toolEvent.tool_args || {},
1032
+ payload: toolEvent.payload || {},
1033
+ meta
1034
+ }) : createToolProcessEvent(id, context.conversationId, context.turnId, toolName, toolCallId, {
1035
+ timestamp,
1036
+ phase: toolEvent.phase ?? "start",
1037
+ status: toolEvent.status ?? "loading",
1038
+ args: toolEvent.tool_args || {},
1039
+ payload: toolEvent.payload || {},
1040
+ meta
1041
+ });
1042
+ event.ephemeral = meta.ephemeral === true;
1043
+ if (context.metadata) event.metadata = { ...event.metadata ?? {}, ...context.metadata };
1044
+ return event;
1045
+ }
1046
+ function mapStreamChunkToRuntime(streamEvent, context, id, timestamp) {
1047
+ const text = streamEvent.content ?? "";
1048
+ if (!text) return null;
1049
+ const answerId = readAgentEventAnswerId(streamEvent) ?? `answer_${context.turnId}`;
1050
+ const seq = readAgentEventSeq(streamEvent) ?? 0;
1051
+ const isLast = Boolean(
1052
+ "isLast" in streamEvent && streamEvent.isLast || "is_last" in streamEvent && streamEvent.is_last
1053
+ );
1054
+ const chunkEvent = createFinalAnswerChunkEvent(id, context.conversationId, context.turnId, answerId, seq, text, {
1055
+ timestamp,
1056
+ is_last: isLast
1057
+ });
1058
+ chunkEvent.ephemeral = true;
1059
+ if (context.metadata) chunkEvent.metadata = { ...chunkEvent.metadata ?? {}, ...context.metadata };
1060
+ return chunkEvent;
1061
+ }
1062
+
1063
+ // src/runtime-kernel/events/runtime-to-ai-message.ts
1064
+ function applyRuntimeEventToMemory(event, memory) {
1065
+ if (!event || !memory) return;
1066
+ switch (event.type) {
1067
+ case "user_input": {
1068
+ const userEvent = event;
1069
+ memory.addUserMessage(userEvent.content || "", userEvent.id);
1070
+ break;
1071
+ }
1072
+ case "tool_call_decision":
1073
+ applyToolCallDecision(event, memory);
1074
+ break;
1075
+ case "tool_output":
1076
+ applyToolOutput(event, memory);
1077
+ break;
1078
+ case "final_answer": {
1079
+ const answerEvent = event;
1080
+ const answerContent = answerEvent.content || "";
1081
+ if (answerContent.trim()) {
1082
+ const metadata = Array.isArray(answerEvent.reasoning_details) ? { reasoning_details: answerEvent.reasoning_details } : void 0;
1083
+ memory.addAssistantMessage(answerContent, "final_answer", metadata, answerEvent.id);
1084
+ }
1085
+ break;
1086
+ }
1087
+ case "thought": {
1088
+ const thoughtEvent = event;
1089
+ memory.addAssistantMessage(thoughtEvent.content || "", "thought", void 0, thoughtEvent.id);
1090
+ break;
1091
+ }
1092
+ case "history_summary":
1093
+ applyHistorySummary(event, memory);
1094
+ break;
1095
+ }
1096
+ }
1097
+ function applyToolCallDecision(event, memory) {
1098
+ const payload = event.payload || {};
1099
+ const toolCalls = Array.isArray(payload.tool_calls) ? payload.tool_calls.filter(isToolCallWire) : [];
1100
+ const toolArgs = event.args || payload.args || {};
1101
+ const toolCallId = event.tool_call_id || (toolCalls.length > 0 ? toolCalls[0].id : `call_${event.id || Date.now()}`);
1102
+ const normalizedToolCalls = toolCalls.length > 0 ? toolCalls : [
1103
+ {
1104
+ id: toolCallId,
1105
+ type: "function",
1106
+ function: { name: event.tool_name, arguments: JSON.stringify(toolArgs || {}) }
1107
+ }
1108
+ ];
1109
+ const reasoningDetails = Array.isArray(payload.reasoning_details) ? payload.reasoning_details : void 0;
1110
+ memory.addAssistantMessage(
1111
+ null,
1112
+ "tool_calls",
1113
+ {
1114
+ tool_calls: normalizedToolCalls,
1115
+ ...reasoningDetails ? { reasoning_details: reasoningDetails } : {}
1116
+ },
1117
+ event.id
1118
+ );
1119
+ }
1120
+ function applyToolOutput(event, memory) {
1121
+ if (!event.tool_call_id) return;
1122
+ const payload = event.payload || {};
1123
+ const outputValue = payload.result ?? payload.output ?? event.output;
1124
+ let serializedOutput;
1125
+ if (typeof outputValue === "string") {
1126
+ serializedOutput = outputValue;
1127
+ } else {
1128
+ try {
1129
+ serializedOutput = JSON.stringify(outputValue ?? "");
1130
+ } catch {
1131
+ serializedOutput = String(outputValue ?? "");
1132
+ }
1133
+ }
1134
+ memory.addToolResponse(String(event.tool_call_id), serializedOutput, event.tool_name, event.id);
1135
+ }
1136
+ function applyHistorySummary(summaryEvent, memory) {
1137
+ const summaryMetadata = {
1138
+ messageType: "summary",
1139
+ generatedBy: summaryEvent.generated_by || "AgentSummarizationProvider",
1140
+ originalMessageCount: summaryEvent.original_message_count,
1141
+ compressionRatio: summaryEvent.compression_ratio,
1142
+ includedOldSummary: summaryEvent.included_old_summary,
1143
+ replacesStartMessageId: summaryEvent.replaces_start_message_id,
1144
+ replacesEndMessageId: summaryEvent.replaces_end_message_id,
1145
+ replacedMessageIds: Array.isArray(summaryEvent.replaced_message_ids) ? summaryEvent.replaced_message_ids : [],
1146
+ summarySeq: summaryEvent.summary_seq || 0
1147
+ };
1148
+ const summaryMessage = {
1149
+ id: summaryEvent.id,
1150
+ role: "system",
1151
+ type: "history_summary",
1152
+ content: summaryEvent.content || "",
1153
+ timestamp: summaryEvent.timestamp,
1154
+ metadata: summaryMetadata
1155
+ };
1156
+ memory.appendMessage(summaryMessage);
1157
+ }
1158
+
1159
+ // src/runtime-kernel/events/sse-projection.ts
1160
+ function agentEventToSSE(agentEvent, context, options = {}) {
1161
+ if (!agentEvent || typeof agentEvent !== "object") return null;
1162
+ if (options.skipAlreadyDispatched && isMarkedAsSseDispatched(agentEvent)) return null;
1163
+ const { conversationId, turnId } = context;
1164
+ const timestamp = agentEvent.timestamp ?? context.timestamp ?? Date.now();
1165
+ const id = agentEvent.id ?? generateMessageId();
1166
+ const contextMeta = context.metadata;
1167
+ switch (agentEvent.type) {
1168
+ case "thought": {
1169
+ const thoughtEvent = agentEvent;
1170
+ const rawContent = "content" in thoughtEvent ? thoughtEvent.content : "";
1171
+ const delta = "delta" in thoughtEvent ? thoughtEvent.delta : "";
1172
+ const isComplete = "is_complete" in thoughtEvent ? Boolean(thoughtEvent.is_complete) : false;
1173
+ const thoughtMessageId = typeof thoughtEvent.thought_message_id === "string" && thoughtEvent.thought_message_id.length > 0 ? thoughtEvent.thought_message_id : void 0;
1174
+ const sse = createSSEThoughtEvent(id, conversationId, turnId, {
1175
+ thought_message_id: thoughtMessageId,
1176
+ content: isComplete ? rawContent ?? "" : void 0,
1177
+ delta: !isComplete ? delta ?? rawContent : void 0,
1178
+ is_complete: isComplete
1179
+ });
1180
+ sse.timestamp = timestamp;
1181
+ const thoughtMeta = isRecord2(thoughtEvent.meta) ? thoughtEvent.meta : void 0;
1182
+ if (contextMeta || thoughtMeta) {
1183
+ sse.metadata = { ...contextMeta ?? {}, ...thoughtMeta ?? {} };
1184
+ }
1185
+ return sse;
1186
+ }
1187
+ case "tool_call_decision":
1188
+ case "tool_process":
1189
+ return mapToolProgressToSse(agentEvent, context, options, id, timestamp);
1190
+ case "observation": {
1191
+ const observationEvent = agentEvent;
1192
+ const toolName = observationEvent.tool_name || "unknown_tool";
1193
+ const toolCallId = observationEvent.tool_call_id || `call_${id}`;
1194
+ const status = observationEvent.success === false ? "error" : "success";
1195
+ const payload = observationEvent.payload || {};
1196
+ const duration = payload.duration_ms;
1197
+ const sse = createSSEToolOutputEvent(
1198
+ id,
1199
+ conversationId,
1200
+ turnId,
1201
+ toolName,
1202
+ toolCallId,
1203
+ status,
1204
+ observationEvent.output,
1205
+ { timestamp, payload, duration_ms: duration }
1206
+ );
1207
+ sse.timestamp = timestamp;
1208
+ if (contextMeta) sse.metadata = contextMeta;
1209
+ return sse;
1210
+ }
1211
+ case "stream_chunk": {
1212
+ const streamEvent = agentEvent;
1213
+ const text = streamEvent.content ?? "";
1214
+ if (!text) return null;
1215
+ const answerId = readAgentEventAnswerId(streamEvent) ?? `answer_${turnId}`;
1216
+ const seq = readAgentEventSeq(streamEvent) ?? 0;
1217
+ const isLast = Boolean(
1218
+ "isLast" in streamEvent && streamEvent.isLast || "is_last" in streamEvent && streamEvent.is_last
1219
+ );
1220
+ const sse = createSSEFinalAnswerChunkEvent(id, conversationId, turnId, answerId, seq, text, {
1221
+ is_last: isLast
1222
+ });
1223
+ sse.timestamp = timestamp;
1224
+ if (contextMeta) sse.metadata = contextMeta;
1225
+ return sse;
1226
+ }
1227
+ case "final_answer": {
1228
+ const finalAnswerEvent = agentEvent;
1229
+ const answer = finalAnswerEvent.answer ?? "";
1230
+ const answerIdFromSnake = typeof finalAnswerEvent.answer_id === "string" && finalAnswerEvent.answer_id.trim().length > 0 ? finalAnswerEvent.answer_id.trim() : void 0;
1231
+ const answerId = answerIdFromSnake ?? readAnswerIdFromEvent(finalAnswerEvent) ?? `answer_${turnId}`;
1232
+ const sse = createSSEFinalAnswerEvent(id, conversationId, turnId, answerId, answer, {
1233
+ meta: readMetaFromEvent(finalAnswerEvent)
1234
+ });
1235
+ sse.timestamp = timestamp;
1236
+ if (contextMeta) sse.metadata = contextMeta;
1237
+ return sse;
1238
+ }
1239
+ case "error": {
1240
+ const errorEvent = agentEvent;
1241
+ const sse = createSSEErrorEvent(id, conversationId, turnId, errorEvent.error ?? "Unknown error", {
1242
+ details: errorEvent.details
1243
+ });
1244
+ sse.timestamp = timestamp;
1245
+ if (contextMeta) sse.metadata = contextMeta;
1246
+ return sse;
1247
+ }
1248
+ default:
1249
+ return null;
1250
+ }
1251
+ }
1252
+ function mapToolProgressToSse(agentEvent, context, options, id, timestamp) {
1253
+ const toolName = agentEvent.tool_name || "unknown_tool";
1254
+ const toolCallId = agentEvent.tool_call_id || `call_${id}`;
1255
+ const phase = agentEvent.phase ?? "start";
1256
+ const status = agentEvent.status ?? "loading";
1257
+ const args = agentEvent.tool_args || {};
1258
+ const payload = agentEvent.payload || {};
1259
+ const meta = agentEvent.meta && typeof agentEvent.meta === "object" ? { ...agentEvent.meta } : {};
1260
+ const displayOptions = resolveToolDisplayOptions(toolName, options.toolPresentationPort);
1261
+ if (displayOptions && !meta.displayOptions) meta.displayOptions = displayOptions;
1262
+ const sse = agentEvent.type === "tool_call_decision" ? createSSEToolCallDecisionEvent(id, context.conversationId, context.turnId, toolName, toolCallId, phase, status, {
1263
+ timestamp,
1264
+ args,
1265
+ payload,
1266
+ meta
1267
+ }) : createSSEToolProcessEvent(id, context.conversationId, context.turnId, toolName, toolCallId, phase, status, {
1268
+ timestamp,
1269
+ args,
1270
+ payload,
1271
+ meta
1272
+ });
1273
+ sse.timestamp = timestamp;
1274
+ if (context.metadata) sse.metadata = context.metadata;
1275
+ return sse;
1276
+ }
1277
+
1278
+ // src/runtime-kernel/events/eventMappers.ts
1279
+ var eventMapper = {
1280
+ /**
1281
+ * 将 AgentEvent 转换为 SSEEvent。
1282
+ */
1283
+ agentToSse: agentEventToSSE,
1284
+ /**
1285
+ * 将 AgentEvent 转换为 RuntimeEvent。
1286
+ */
1287
+ agentToRuntime: agentEventToRuntime,
1288
+ /**
1289
+ * 将 RuntimeEvent 应用到 ConversationMemoryPort。
1290
+ */
1291
+ applyToMemory: applyRuntimeEventToMemory,
1292
+ /**
1293
+ * 批量处理 AgentEvent → SSEEvent + RuntimeEvent。
1294
+ */
1295
+ agentToBoth: (agentEvent, context, options = {}) => {
1296
+ const sseEvent = agentEventToSSE(agentEvent, context, options.sseOptions);
1297
+ const runtimeEvent = agentEventToRuntime(agentEvent, context, options.runtimeOptions);
1298
+ return { sseEvent, runtimeEvent };
1299
+ },
1300
+ /**
1301
+ * 批量重建内存。
1302
+ */
1303
+ rebuildMemory: (events, memory) => {
1304
+ for (const event of events) {
1305
+ applyRuntimeEventToMemory(event, memory);
1306
+ }
1307
+ }
1308
+ };
1309
+
1310
+ // src/runtime-kernel/events/eventGovernance.ts
1311
+ function isRecord3(value) {
1312
+ return !!value && typeof value === "object" && !Array.isArray(value);
1313
+ }
1314
+ function isToolCallDecisionEvent(event) {
1315
+ return event.type === "tool_call_decision";
1316
+ }
1317
+ function isToolProcessEvent(event) {
1318
+ return event.type === "tool_process";
1319
+ }
1320
+ function isTodoUpdatedRuntimeEvent(event) {
1321
+ return event.type === "todo_updated";
1322
+ }
1323
+ function isSubRunTraceRuntimeEvent(event) {
1324
+ return event.type === "subrun_trace";
1325
+ }
1326
+ function isStreamEndRuntimeEvent(event) {
1327
+ return event.type === "stream_end";
1328
+ }
1329
+ function isRequiresUserInteractionRuntimeEvent(event) {
1330
+ return event.type === "requires_user_interaction";
1331
+ }
1332
+ function isAuditEnvelopeRuntimeEvent(event) {
1333
+ return event.type === "audit_envelope";
1334
+ }
1335
+ function isControlRuntimeEvent(event) {
1336
+ return event.type === "control";
1337
+ }
1338
+ function isHiddenUserInputEvent(event) {
1339
+ if (event.type !== "user_input") {
1340
+ return false;
1341
+ }
1342
+ const metadata = isRecord3(event.metadata) ? event.metadata : void 0;
1343
+ const ui = metadata && isRecord3(metadata.ui) ? metadata.ui : void 0;
1344
+ return ui?.presentation === "hidden";
1345
+ }
1346
+ function isEmptyTerminalAssistantRuntimeEvent(event) {
1347
+ if (event.type !== "thought" && event.type !== "final_answer") {
1348
+ return false;
1349
+ }
1350
+ return event.content.trim().length === 0;
1351
+ }
1352
+ function shouldPersistRuntimeEvent(event) {
1353
+ return describeRuntimeEventLifecycle(event).persist;
1354
+ }
1355
+ function shouldReplayRuntimeEventToUi(event) {
1356
+ return describeRuntimeEventLifecycle(event).replayToUi;
1357
+ }
1358
+ function shouldEnterAgentContext(event) {
1359
+ return describeRuntimeEventLifecycle(event).enterAgentContext;
1360
+ }
1361
+ function isCheckpointHistorySummaryEvent(event) {
1362
+ if (event.type !== "history_summary") {
1363
+ return false;
1364
+ }
1365
+ const metadata = isRecord3(event.metadata) ? event.metadata : void 0;
1366
+ return metadata?.summary_kind === "checkpoint";
1367
+ }
1368
+ function getRuntimeEventUiProjectionKind(event) {
1369
+ if (isHiddenUserInputEvent(event)) {
1370
+ return "hidden";
1371
+ }
1372
+ switch (event.type) {
1373
+ case "user_input":
1374
+ return "user_input";
1375
+ case "thought":
1376
+ return "thought";
1377
+ case "final_answer":
1378
+ return "final_answer";
1379
+ case "final_answer_chunk":
1380
+ return "final_answer_chunk";
1381
+ case "tool_call_decision":
1382
+ return "tool_call_decision";
1383
+ case "tool_process":
1384
+ return "tool_process";
1385
+ case "tool_output":
1386
+ return "tool_output";
1387
+ case "requires_user_interaction":
1388
+ return "requires_user_interaction";
1389
+ case "audit_envelope":
1390
+ return "audit_envelope";
1391
+ case "todo_updated":
1392
+ return "todo_updated";
1393
+ case "subrun_trace":
1394
+ return "subrun_trace";
1395
+ case "error":
1396
+ return "error";
1397
+ case "stream_end":
1398
+ return "stream_end";
1399
+ case "history_summary":
1400
+ return isCheckpointHistorySummaryEvent(event) ? "checkpoint_history_summary" : "history_summary";
1401
+ default:
1402
+ return "unsupported";
1403
+ }
1404
+ }
1405
+ function describeRuntimeEventLifecycle(event) {
1406
+ const uiProjectionKind = getRuntimeEventUiProjectionKind(event);
1407
+ const persist = event.ephemeral !== true && !isToolProcessEvent(event);
1408
+ const replayToUi = uiProjectionKind !== "hidden" && uiProjectionKind !== "audit_envelope" && uiProjectionKind !== "final_answer_chunk" && uiProjectionKind !== "unsupported";
1409
+ const enterAgentContext = (() => {
1410
+ if (isTodoUpdatedRuntimeEvent(event)) {
1411
+ return false;
1412
+ }
1413
+ if (isSubRunTraceRuntimeEvent(event)) {
1414
+ return false;
1415
+ }
1416
+ if (isStreamEndRuntimeEvent(event)) {
1417
+ return false;
1418
+ }
1419
+ if (isRequiresUserInteractionRuntimeEvent(event)) {
1420
+ return false;
1421
+ }
1422
+ if (isAuditEnvelopeRuntimeEvent(event)) {
1423
+ return false;
1424
+ }
1425
+ if (isControlRuntimeEvent(event)) {
1426
+ return false;
1427
+ }
1428
+ if (isHiddenUserInputEvent(event)) {
1429
+ return false;
1430
+ }
1431
+ if (isToolProcessEvent(event)) {
1432
+ return false;
1433
+ }
1434
+ if (event.type === "final_answer_chunk") {
1435
+ return false;
1436
+ }
1437
+ if (isEmptyTerminalAssistantRuntimeEvent(event)) {
1438
+ return false;
1439
+ }
1440
+ return true;
1441
+ })();
1442
+ const realtimeChannel = (() => {
1443
+ switch (uiProjectionKind) {
1444
+ case "thought":
1445
+ case "final_answer":
1446
+ case "final_answer_chunk":
1447
+ case "tool_call_decision":
1448
+ case "tool_process":
1449
+ case "tool_output":
1450
+ case "requires_user_interaction":
1451
+ case "todo_updated":
1452
+ case "subrun_trace":
1453
+ case "error":
1454
+ return "event_bus_sse";
1455
+ case "audit_envelope":
1456
+ return "none";
1457
+ default:
1458
+ return "none";
1459
+ }
1460
+ })();
1461
+ return {
1462
+ uiProjectionKind,
1463
+ persist,
1464
+ replayToUi,
1465
+ enterAgentContext,
1466
+ realtimeChannel
1467
+ };
1468
+ }
1469
+ function shouldEmitRuntimeEventToSse(event) {
1470
+ return describeRuntimeEventLifecycle(event).realtimeChannel === "event_bus_sse";
1471
+ }
1472
+
1473
+ export { describeRuntimeEventLifecycle, eventMapper, getRuntimeEventUiProjectionKind, isCheckpointHistorySummaryEvent, isToolCallDecisionEvent, shouldEmitRuntimeEventToSse, shouldEnterAgentContext, shouldPersistRuntimeEvent, shouldReplayRuntimeEventToUi };
1474
+ //# sourceMappingURL=events.js.map
1475
+ //# sourceMappingURL=events.js.map