@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,1214 @@
1
+ import { z } from 'zod';
2
+
3
+ // src/contracts/messages.ts
4
+ var ProviderReasoningDetails = z.array(z.unknown());
5
+ var ToolCallExtraContent = z.object({
6
+ google: z.object({
7
+ thought_signature: z.string().optional()
8
+ }).passthrough().optional()
9
+ }).passthrough();
10
+ var ToolCallWire = z.object({
11
+ id: z.string(),
12
+ type: z.literal("function"),
13
+ function: z.object({
14
+ name: z.string(),
15
+ arguments: z.string()
16
+ }),
17
+ extra_content: ToolCallExtraContent.optional()
18
+ }).passthrough();
19
+ var HistorySummaryMeta = z.object({
20
+ messageType: z.literal("summary"),
21
+ originalMessageCount: z.number().int().positive(),
22
+ compressionRatio: z.number().min(0).max(1).optional(),
23
+ includedOldSummary: z.boolean(),
24
+ replacedMessageIds: z.array(z.string()),
25
+ summarySeq: z.number().int().nonnegative()
26
+ });
27
+ var ToolCallsMeta = z.object({
28
+ tool_calls: z.array(ToolCallWire),
29
+ reasoning_details: ProviderReasoningDetails.optional()
30
+ });
31
+ var ToolOutputMeta = z.object({
32
+ tool_name: z.string(),
33
+ args: z.record(z.unknown()).optional(),
34
+ tool_call_id: z.string()
35
+ });
36
+ var ImageInfoMeta = z.object({
37
+ url: z.string().optional(),
38
+ width: z.number().int().positive().optional(),
39
+ height: z.number().int().positive().optional(),
40
+ format: z.string().optional(),
41
+ size: z.number().int().nonnegative().optional()
42
+ });
43
+ var TaskTrackingMeta = z.object({
44
+ taskType: z.string().optional(),
45
+ taskId: z.string().optional(),
46
+ taskStatus: z.enum(["requested", "in_progress", "completed", "failed"]).optional(),
47
+ taskTrackingInfo: z.object({
48
+ startTime: z.number().optional(),
49
+ endTime: z.number().optional(),
50
+ duration: z.number().optional(),
51
+ retryCount: z.number().int().nonnegative().optional(),
52
+ lastError: z.string().optional()
53
+ }).optional()
54
+ });
55
+ var PersistentMetadata = z.object({
56
+ messageType: z.literal("summary").optional(),
57
+ originalMessageCount: z.number().int().positive().optional(),
58
+ compressionRatio: z.number().min(0).max(1).optional(),
59
+ includedOldSummary: z.boolean().optional(),
60
+ replacedMessageIds: z.array(z.string()).optional(),
61
+ summarySeq: z.number().int().nonnegative().optional(),
62
+ tool_calls: z.array(ToolCallWire).optional(),
63
+ reasoning_details: ProviderReasoningDetails.optional(),
64
+ tool_name: z.string().optional(),
65
+ args: z.record(z.unknown()).optional(),
66
+ tool_call_id: z.string().optional(),
67
+ raw_output: z.string().optional(),
68
+ image_info: ImageInfoMeta.optional(),
69
+ taskType: z.string().optional(),
70
+ taskId: z.string().optional(),
71
+ taskStatus: z.enum(["requested", "in_progress", "completed", "failed"]).optional(),
72
+ taskTrackingInfo: z.object({
73
+ startTime: z.number().optional(),
74
+ endTime: z.number().optional(),
75
+ duration: z.number().optional(),
76
+ retryCount: z.number().int().nonnegative().optional(),
77
+ lastError: z.string().optional()
78
+ }).optional(),
79
+ fenceKind: z.string().optional(),
80
+ fenceAttrs: z.record(z.unknown()).optional(),
81
+ fencePlacement: z.string().optional()
82
+ }).passthrough();
83
+ var BaseMessage = z.object({
84
+ id: z.string(),
85
+ content: z.string(),
86
+ timestamp: z.number().int().nonnegative(),
87
+ metadata: PersistentMetadata.optional()
88
+ });
89
+ var SystemMessage = BaseMessage.extend({
90
+ role: z.literal("system"),
91
+ type: z.enum(["system_prompt", "history_summary", "context_injection"])
92
+ });
93
+ var UserMessage = BaseMessage.extend({
94
+ role: z.literal("user"),
95
+ type: z.enum([
96
+ "user_input",
97
+ "context_injection",
98
+ "context_before",
99
+ "context_after",
100
+ "document_fragment",
101
+ "task_request",
102
+ "image"
103
+ ])
104
+ });
105
+ var AssistantMessage = BaseMessage.extend({
106
+ role: z.literal("assistant"),
107
+ type: z.enum([
108
+ "thought",
109
+ "final_answer",
110
+ "tool_code",
111
+ "tool_calls",
112
+ "task_completion"
113
+ ])
114
+ });
115
+ var ToolMessage = BaseMessage.extend({
116
+ role: z.literal("tool"),
117
+ type: z.literal("tool_output")
118
+ });
119
+ var AiMessage = z.discriminatedUnion("role", [
120
+ SystemMessage,
121
+ UserMessage,
122
+ AssistantMessage,
123
+ ToolMessage
124
+ ]);
125
+ function createSystemMessage(type, content, metadata) {
126
+ return {
127
+ id: crypto.randomUUID(),
128
+ role: "system",
129
+ type,
130
+ content,
131
+ timestamp: Date.now(),
132
+ metadata
133
+ };
134
+ }
135
+ function createUserMessage(type, content, metadata) {
136
+ return {
137
+ id: crypto.randomUUID(),
138
+ role: "user",
139
+ type,
140
+ content,
141
+ timestamp: Date.now(),
142
+ metadata
143
+ };
144
+ }
145
+ function createAssistantMessage(type, content, metadata) {
146
+ return {
147
+ id: crypto.randomUUID(),
148
+ role: "assistant",
149
+ type,
150
+ content,
151
+ timestamp: Date.now(),
152
+ metadata
153
+ };
154
+ }
155
+ function createToolMessage(content, toolCallId, toolName, metadata) {
156
+ return {
157
+ id: crypto.randomUUID(),
158
+ role: "tool",
159
+ type: "tool_output",
160
+ content,
161
+ timestamp: Date.now(),
162
+ metadata: {
163
+ ...metadata,
164
+ tool_call_id: toolCallId,
165
+ tool_name: toolName
166
+ }
167
+ };
168
+ }
169
+ function createHistorySummaryMessage(content, summaryMeta) {
170
+ return {
171
+ id: crypto.randomUUID(),
172
+ role: "system",
173
+ type: "history_summary",
174
+ content,
175
+ timestamp: Date.now(),
176
+ metadata: summaryMeta
177
+ };
178
+ }
179
+ function validateAiMessage(data) {
180
+ return AiMessage.safeParse(data);
181
+ }
182
+ function validateHistorySummaryMeta(data) {
183
+ return HistorySummaryMeta.safeParse(data);
184
+ }
185
+ function isSystemMessage(message) {
186
+ return message.role === "system";
187
+ }
188
+ function isUserMessage(message) {
189
+ return message.role === "user";
190
+ }
191
+ function isAssistantMessage(message) {
192
+ return message.role === "assistant";
193
+ }
194
+ function isToolMessage(message) {
195
+ return message.role === "tool";
196
+ }
197
+ function isHistorySummaryMessage(message) {
198
+ return message.role === "system" && message.type === "history_summary" && message.metadata?.messageType === "summary";
199
+ }
200
+ function hasToolCalls(message) {
201
+ return message.role === "assistant" && Array.isArray(message.metadata?.tool_calls) && message.metadata.tool_calls.length > 0;
202
+ }
203
+ var SerializableJsonValueSchema = z.lazy(
204
+ () => z.union([
205
+ z.string(),
206
+ z.number(),
207
+ z.boolean(),
208
+ z.null(),
209
+ z.array(SerializableJsonValueSchema),
210
+ z.record(z.string(), SerializableJsonValueSchema)
211
+ ])
212
+ );
213
+ var SerializableJsonRecord = z.record(z.string(), SerializableJsonValueSchema);
214
+ var AgentSpecMessageType = z.enum([
215
+ "system_prompt",
216
+ "history_summary",
217
+ "context_injection",
218
+ "user_input",
219
+ "context_before",
220
+ "context_after",
221
+ "document_fragment",
222
+ "task_request",
223
+ "image",
224
+ "thought",
225
+ "final_answer",
226
+ "tool_code",
227
+ "tool_calls",
228
+ "task_completion",
229
+ "tool_output"
230
+ ]);
231
+ var AgentSpecBudgetPolicy = z.object({
232
+ maxTokens: z.number().int().positive().optional(),
233
+ reservedForResponse: z.number().int().nonnegative().optional(),
234
+ workingMemoryBudgetPercentage: z.number().min(0).max(1).optional()
235
+ });
236
+ var AgentSpecToolHistoryPolicy = z.object({
237
+ strategy: z.enum(["per-pair", "per-run", "none"]).optional(),
238
+ keepLatestToolPairs: z.number().int().nonnegative().optional(),
239
+ keepLatestRuns: z.number().int().nonnegative().optional(),
240
+ maxInteractionGroups: z.number().int().nonnegative().optional(),
241
+ overflowStrategy: z.enum(["keep-latest", "fail-fast"]).optional(),
242
+ maxPairTokens: z.number().int().nonnegative().optional(),
243
+ maxOutputSummaryTokens: z.number().int().nonnegative().optional()
244
+ });
245
+ var AgentSpecToolObservationGovernancePolicy = z.object({
246
+ enabled: z.boolean().optional(),
247
+ maxChars: z.number().int().positive().optional(),
248
+ maxLines: z.number().int().positive().optional()
249
+ });
250
+ var AgentSpecToolOutputPolicy = z.object({
251
+ observationGovernance: AgentSpecToolObservationGovernancePolicy.optional()
252
+ });
253
+ var AgentSpecProviderReplayPolicy = z.object({
254
+ provider: z.string().min(1).optional(),
255
+ requiresReasoningDetailsForToolReplay: z.boolean().optional(),
256
+ missingSidecarBehavior: z.enum(["allow", "degrade_to_text", "provider_empty_replay_field"]).optional()
257
+ });
258
+ var AgentSpecSummarizationPolicy = z.object({
259
+ triggerThreshold: z.number().min(0).max(1).optional(),
260
+ budgetPercentage: z.number().min(0).max(1).optional(),
261
+ oldestMessagesPercentage: z.number().min(0).max(1).optional(),
262
+ agentId: z.string().min(1).optional(),
263
+ failureBehavior: z.enum(["fail-fast", "continue-if-within-budget"]).optional()
264
+ });
265
+ var AgentSpecMustKeepTruncationRule = z.object({
266
+ fenceKind: z.string().min(1),
267
+ maxBudgetFraction: z.number().gt(0).max(1),
268
+ strategyName: z.string().min(1)
269
+ });
270
+ var AgentSpecMustKeepPolicy = z.object({
271
+ alwaysKeepTypes: z.array(AgentSpecMessageType).optional(),
272
+ alwaysKeepFenceKinds: z.array(z.string().min(1)).optional(),
273
+ truncationRules: z.array(AgentSpecMustKeepTruncationRule).optional()
274
+ });
275
+ var AgentSpecWorkingMemoryPolicy = z.object({
276
+ maxRecentToolInteractions: z.number().int().nonnegative().optional(),
277
+ minToolInteractionsToKeep: z.number().int().nonnegative().optional(),
278
+ toolPairingSearchRange: z.number().int().positive().optional()
279
+ });
280
+ var AgentSpecCheckpointPolicy = z.object({
281
+ keepPairsBefore: z.number().int().nonnegative().optional(),
282
+ triggerToolName: z.string().min(1).optional()
283
+ });
284
+ var AgentSpecReasoningRetentionPolicy = z.object({
285
+ keepLatestThoughts: z.number().int().nonnegative().optional()
286
+ });
287
+ var AgentSpecTokenEstimationPolicy = z.object({
288
+ encoding: z.string().min(1).optional(),
289
+ avgCharsPerToken: z.number().positive().optional(),
290
+ toolCallOverhead: z.number().int().nonnegative().optional()
291
+ });
292
+ var SYSTEM_REMINDER_BUILTIN_TRIGGER_KINDS = [
293
+ "phase-equals",
294
+ "remaining-steps-leq",
295
+ "step-count-modulo",
296
+ "tool-call-streak",
297
+ "budget-warning",
298
+ "agent-has-tool"
299
+ ];
300
+ var AgentSpecSystemReminderTrigger = z.object({
301
+ kind: z.string().min(1),
302
+ threshold: z.number().nonnegative().optional(),
303
+ value: z.union([z.string(), z.number(), z.boolean()]).optional(),
304
+ moduloStep: z.boolean().optional(),
305
+ toolName: z.string().min(1).optional(),
306
+ period: z.number().int().positive().optional(),
307
+ minStep: z.number().int().nonnegative().optional(),
308
+ ratio: z.number().min(0).max(1).optional(),
309
+ config: SerializableJsonRecord.optional()
310
+ });
311
+ var AgentSpecSystemReminderExtraRule = z.object({
312
+ id: z.string().min(1),
313
+ trigger: AgentSpecSystemReminderTrigger,
314
+ contentTemplate: z.string().min(1),
315
+ contentArgs: SerializableJsonRecord.optional()
316
+ });
317
+ var AgentSpecSystemReminderPolicy = z.object({
318
+ enabledRuleIds: z.array(z.string().min(1)).nullable().optional(),
319
+ disabledRuleIds: z.array(z.string().min(1)).optional(),
320
+ thresholds: z.object({
321
+ toolCallStreak: z.number().int().nonnegative().optional(),
322
+ taskstateReflectionPeriod: z.number().int().positive().optional(),
323
+ budgetWarningRatio: z.number().min(0).max(1).optional(),
324
+ lastStepsHintThreshold: z.number().int().nonnegative().optional()
325
+ }).optional(),
326
+ extraRules: z.array(AgentSpecSystemReminderExtraRule).optional()
327
+ }).superRefine((value, ctx) => {
328
+ if (value.enabledRuleIds !== void 0 && value.enabledRuleIds !== null && value.disabledRuleIds?.length) {
329
+ ctx.addIssue({
330
+ code: z.ZodIssueCode.custom,
331
+ path: ["disabledRuleIds"],
332
+ message: "enabledRuleIds and disabledRuleIds cannot be configured at the same time"
333
+ });
334
+ }
335
+ });
336
+ var AgentSpecContextTracePolicy = z.object({
337
+ enabled: z.boolean().optional(),
338
+ includeMessageIds: z.boolean().optional(),
339
+ includeTokenBreakdown: z.boolean().optional(),
340
+ maxTraceEvents: z.number().int().positive().optional()
341
+ });
342
+ var AgentSpecContextPolicy = z.object({
343
+ profileId: z.string().min(1),
344
+ budget: AgentSpecBudgetPolicy.optional(),
345
+ toolHistory: AgentSpecToolHistoryPolicy.optional(),
346
+ toolOutput: AgentSpecToolOutputPolicy.optional(),
347
+ providerReplay: AgentSpecProviderReplayPolicy.optional(),
348
+ summarization: AgentSpecSummarizationPolicy.optional(),
349
+ mustKeep: AgentSpecMustKeepPolicy.optional(),
350
+ workingMemory: AgentSpecWorkingMemoryPolicy.optional(),
351
+ checkpoint: AgentSpecCheckpointPolicy.optional(),
352
+ reasoningRetention: AgentSpecReasoningRetentionPolicy.optional(),
353
+ tokenEstimation: AgentSpecTokenEstimationPolicy.optional(),
354
+ systemReminder: AgentSpecSystemReminderPolicy.optional(),
355
+ contextTrace: AgentSpecContextTracePolicy.optional()
356
+ });
357
+ var DEFAULT_CONTEXT_POLICY = {
358
+ profileId: "agent",
359
+ budget: {
360
+ maxTokens: 12e4,
361
+ reservedForResponse: 2400,
362
+ workingMemoryBudgetPercentage: 0.7
363
+ },
364
+ toolHistory: {
365
+ strategy: "per-run",
366
+ keepLatestToolPairs: 2,
367
+ keepLatestRuns: 1,
368
+ maxInteractionGroups: 12,
369
+ overflowStrategy: "keep-latest",
370
+ maxPairTokens: 6e3,
371
+ maxOutputSummaryTokens: 1e3
372
+ },
373
+ toolOutput: {
374
+ observationGovernance: {
375
+ enabled: true,
376
+ maxChars: 2e4,
377
+ maxLines: 1200
378
+ }
379
+ },
380
+ providerReplay: {},
381
+ summarization: {
382
+ triggerThreshold: 0.7,
383
+ budgetPercentage: 0.12,
384
+ oldestMessagesPercentage: 0.75,
385
+ failureBehavior: "fail-fast"
386
+ },
387
+ mustKeep: {
388
+ alwaysKeepTypes: ["system_prompt", "user_input"],
389
+ alwaysKeepFenceKinds: [],
390
+ truncationRules: []
391
+ },
392
+ workingMemory: {
393
+ maxRecentToolInteractions: 2,
394
+ minToolInteractionsToKeep: 2,
395
+ toolPairingSearchRange: 10
396
+ },
397
+ checkpoint: {
398
+ keepPairsBefore: 2,
399
+ triggerToolName: "context_checkpoint"
400
+ },
401
+ reasoningRetention: {
402
+ keepLatestThoughts: 1
403
+ },
404
+ tokenEstimation: {
405
+ encoding: "cl100k_base",
406
+ avgCharsPerToken: 2,
407
+ toolCallOverhead: 50
408
+ },
409
+ systemReminder: {
410
+ enabledRuleIds: null,
411
+ disabledRuleIds: [],
412
+ thresholds: {
413
+ toolCallStreak: 10,
414
+ taskstateReflectionPeriod: 30,
415
+ budgetWarningRatio: 0.9,
416
+ lastStepsHintThreshold: 0
417
+ },
418
+ extraRules: []
419
+ },
420
+ contextTrace: {
421
+ enabled: false,
422
+ includeMessageIds: true,
423
+ includeTokenBreakdown: true,
424
+ maxTraceEvents: 200
425
+ }
426
+ };
427
+ function defineContextPolicy(input = {}) {
428
+ const merged = {
429
+ profileId: input.profileId ?? DEFAULT_CONTEXT_POLICY.profileId,
430
+ budget: { ...DEFAULT_CONTEXT_POLICY.budget, ...input.budget },
431
+ toolHistory: { ...DEFAULT_CONTEXT_POLICY.toolHistory, ...input.toolHistory },
432
+ toolOutput: {
433
+ ...DEFAULT_CONTEXT_POLICY.toolOutput,
434
+ ...input.toolOutput,
435
+ observationGovernance: {
436
+ ...DEFAULT_CONTEXT_POLICY.toolOutput.observationGovernance,
437
+ ...input.toolOutput?.observationGovernance
438
+ }
439
+ },
440
+ providerReplay: { ...DEFAULT_CONTEXT_POLICY.providerReplay, ...input.providerReplay },
441
+ summarization: { ...DEFAULT_CONTEXT_POLICY.summarization, ...input.summarization },
442
+ mustKeep: { ...DEFAULT_CONTEXT_POLICY.mustKeep, ...input.mustKeep },
443
+ workingMemory: { ...DEFAULT_CONTEXT_POLICY.workingMemory, ...input.workingMemory },
444
+ checkpoint: { ...DEFAULT_CONTEXT_POLICY.checkpoint, ...input.checkpoint },
445
+ reasoningRetention: { ...DEFAULT_CONTEXT_POLICY.reasoningRetention, ...input.reasoningRetention },
446
+ tokenEstimation: { ...DEFAULT_CONTEXT_POLICY.tokenEstimation, ...input.tokenEstimation },
447
+ systemReminder: {
448
+ ...DEFAULT_CONTEXT_POLICY.systemReminder,
449
+ ...input.systemReminder,
450
+ thresholds: {
451
+ ...DEFAULT_CONTEXT_POLICY.systemReminder.thresholds,
452
+ ...input.systemReminder?.thresholds
453
+ },
454
+ extraRules: input.systemReminder?.extraRules ?? DEFAULT_CONTEXT_POLICY.systemReminder.extraRules
455
+ },
456
+ contextTrace: { ...DEFAULT_CONTEXT_POLICY.contextTrace, ...input.contextTrace }
457
+ };
458
+ return AgentSpecContextPolicy.parse(merged);
459
+ }
460
+ var JsonRecord = z.record(z.string(), z.unknown());
461
+ var ToolArgsSchemaSpec = JsonRecord.superRefine((value, ctx) => {
462
+ const parse = value["parse"];
463
+ const safeParse = value["safeParse"];
464
+ const definition = value["_def"];
465
+ if (typeof parse === "function" && typeof safeParse === "function" && definition !== void 0) {
466
+ ctx.addIssue({
467
+ code: z.ZodIssueCode.custom,
468
+ message: "argsSchema must be a serializable record, not a runtime zod schema"
469
+ });
470
+ }
471
+ });
472
+ var AgentCapability = z.string().min(1);
473
+ var ToolBindingSpec = z.object({
474
+ toolId: z.string().min(1),
475
+ bindingId: z.string().min(1).optional(),
476
+ argsSchema: ToolArgsSchemaSpec.optional(),
477
+ config: JsonRecord.optional(),
478
+ metadata: JsonRecord.optional()
479
+ });
480
+ var AgentSpecModelHints = z.object({
481
+ preferredProviders: z.array(z.string().min(1)).optional(),
482
+ preferredModels: z.array(z.string().min(1)).optional(),
483
+ fallbackChain: z.array(z.string().min(1)).optional()
484
+ });
485
+ var AgentSpecAuditConfig = z.object({
486
+ redactionLevel: z.enum(["none", "standard", "strict"]).optional(),
487
+ pii: z.boolean().optional()
488
+ });
489
+ var AgentSpec = z.object({
490
+ id: z.string().min(1),
491
+ version: z.string().min(1),
492
+ role: z.string().optional(),
493
+ description: z.string().optional(),
494
+ capabilities: z.array(AgentCapability),
495
+ tools: z.array(ToolBindingSpec),
496
+ contextPolicy: AgentSpecContextPolicy,
497
+ modelHints: AgentSpecModelHints.optional(),
498
+ audit: AgentSpecAuditConfig.optional(),
499
+ metadata: JsonRecord.optional()
500
+ });
501
+ var JsonRecord2 = z.record(z.string(), z.unknown());
502
+ var AUDIT_ACTIONS = [
503
+ "model.select",
504
+ "model.fallback",
505
+ "tool.allow",
506
+ "tool.deny",
507
+ "wait_user.request",
508
+ "sandbox.decide",
509
+ "run.cancel",
510
+ "run.pause",
511
+ "run.resume",
512
+ "memory.write"
513
+ ];
514
+ var AUDIT_DECISION_OUTCOMES = [
515
+ "allowed",
516
+ "denied",
517
+ "fallback",
518
+ "retry",
519
+ "cancelled",
520
+ "paused",
521
+ "resumed",
522
+ "requested",
523
+ "recorded"
524
+ ];
525
+ var AuditActor = z.object({
526
+ kind: z.enum(["system", "host", "agent", "model", "tool", "user"]),
527
+ id: z.string().min(1).optional(),
528
+ name: z.string().min(1).optional()
529
+ });
530
+ var AuditDecision = z.object({
531
+ outcome: z.enum(AUDIT_DECISION_OUTCOMES),
532
+ reason: z.string().optional(),
533
+ policy: z.string().optional(),
534
+ metadata: JsonRecord2.optional()
535
+ });
536
+ var AuditEvidence = z.object({
537
+ kind: z.string().min(1),
538
+ ref: z.string().min(1).optional(),
539
+ summary: z.string().optional(),
540
+ metadata: JsonRecord2.optional()
541
+ });
542
+ var AuditCostDelta = z.object({
543
+ tokensInput: z.number().int().nonnegative().optional(),
544
+ tokensOutput: z.number().int().nonnegative().optional(),
545
+ totalCostUsd: z.number().nonnegative().optional(),
546
+ latencyMs: z.number().nonnegative().optional()
547
+ });
548
+ var AuditScope = z.object({
549
+ conversationId: z.string().min(1).optional(),
550
+ runId: z.string().min(1).optional(),
551
+ parentRunId: z.string().min(1).optional(),
552
+ turnId: z.string().min(1).optional(),
553
+ traceId: z.string().min(1).optional(),
554
+ agentSpecId: z.string().min(1).optional(),
555
+ toolCallId: z.string().min(1).optional(),
556
+ toolName: z.string().min(1).optional(),
557
+ modelId: z.string().min(1).optional(),
558
+ nodeId: z.string().min(1).optional(),
559
+ metadata: JsonRecord2.optional()
560
+ });
561
+ var AuditEnvelope = z.object({
562
+ envelopeId: z.string().min(1),
563
+ runId: z.string().min(1),
564
+ parentRunId: z.string().min(1).optional(),
565
+ ts: z.number().int().nonnegative(),
566
+ actor: AuditActor,
567
+ action: z.string().min(1),
568
+ decision: AuditDecision.optional(),
569
+ evidence: z.array(AuditEvidence).optional(),
570
+ costDelta: AuditCostDelta.optional(),
571
+ scope: AuditScope.optional()
572
+ });
573
+ var BaseEvent = z.object({
574
+ id: z.string(),
575
+ conversation_id: z.string(),
576
+ timestamp: z.number(),
577
+ metadata: z.record(z.unknown()).optional(),
578
+ version: z.literal(1).default(1),
579
+ turn_id: z.string(),
580
+ ephemeral: z.boolean().optional()
581
+ });
582
+ var ToolCallPhase = z.enum(["start", "update", "complete", "error"]);
583
+ var Status = z.enum(["loading", "success", "error"]);
584
+ var AgentTodoStatus = z.enum(["pending", "in_progress", "completed", "cancelled"]);
585
+ var AgentTodoItem = z.object({
586
+ id: z.string(),
587
+ content: z.string(),
588
+ status: AgentTodoStatus
589
+ });
590
+ var ProviderReasoningDetailsPayload = z.array(z.unknown());
591
+ var ToolCallDecisionPayload = z.object({
592
+ args: z.record(z.any()).optional(),
593
+ tool_calls: z.array(z.unknown()).optional(),
594
+ /**
595
+ * 不透明 provider reasoning replay blocks。
596
+ *
597
+ * RuntimeEvent 层的标准位置是 assistant 产出事件携带 reasoning_details;
598
+ * context-manager 会把它回放到 AiMessage.metadata.reasoning_details。
599
+ */
600
+ reasoning_details: ProviderReasoningDetailsPayload.optional()
601
+ }).passthrough();
602
+ var RuntimeEvent = z.discriminatedUnion("type", [
603
+ BaseEvent.extend({
604
+ type: z.literal("user_input"),
605
+ content: z.string(),
606
+ raw_content: z.string().optional(),
607
+ source: z.enum(["user", "editor", "system"]).default("user")
608
+ }),
609
+ BaseEvent.extend({
610
+ type: z.literal("thought"),
611
+ content: z.string(),
612
+ thought_message_id: z.string().optional(),
613
+ delta: z.string().optional(),
614
+ is_complete: z.boolean().default(false)
615
+ }),
616
+ BaseEvent.extend({
617
+ type: z.literal("tool_call_decision"),
618
+ tool_name: z.string(),
619
+ tool_call_id: z.string(),
620
+ phase: ToolCallPhase,
621
+ status: Status,
622
+ args: z.record(z.any()).optional(),
623
+ payload: ToolCallDecisionPayload.optional(),
624
+ parent_tool_call_id: z.string().optional(),
625
+ meta: z.record(z.any()).optional()
626
+ }),
627
+ BaseEvent.extend({
628
+ type: z.literal("tool_process"),
629
+ tool_name: z.string(),
630
+ tool_call_id: z.string(),
631
+ phase: ToolCallPhase,
632
+ status: Status,
633
+ args: z.record(z.any()).optional(),
634
+ payload: z.record(z.any()).optional(),
635
+ parent_tool_call_id: z.string().optional(),
636
+ meta: z.record(z.any()).optional()
637
+ }),
638
+ BaseEvent.extend({
639
+ type: z.literal("tool_output"),
640
+ tool_name: z.string(),
641
+ tool_call_id: z.string(),
642
+ status: z.enum(["success", "error"]),
643
+ output: z.any().optional(),
644
+ payload: z.record(z.any()).optional(),
645
+ error: z.string().optional(),
646
+ duration_ms: z.number().optional()
647
+ }),
648
+ BaseEvent.extend({
649
+ type: z.literal("todo_updated"),
650
+ todo_list_id: z.string(),
651
+ todo_list_version: z.number().int().nonnegative(),
652
+ items: z.array(AgentTodoItem)
653
+ }),
654
+ BaseEvent.extend({
655
+ type: z.literal("subrun_trace"),
656
+ parent_tool_call_id: z.string(),
657
+ subrun_id: z.string(),
658
+ subrun_parent_id: z.string().optional(),
659
+ kind: z.enum([
660
+ "thought_delta",
661
+ "thought_complete",
662
+ "tool_call_decision",
663
+ "tool_process",
664
+ "tool_output",
665
+ "final_answer_chunk",
666
+ "final_answer"
667
+ ]),
668
+ delta: z.string().optional(),
669
+ content: z.string().optional(),
670
+ tool_name: z.string().optional(),
671
+ tool_call_id: z.string().optional(),
672
+ phase: ToolCallPhase.optional(),
673
+ status: Status.optional(),
674
+ args: z.unknown().optional(),
675
+ output: z.unknown().optional(),
676
+ duration_ms: z.number().optional(),
677
+ meta: z.record(z.unknown()).optional()
678
+ }),
679
+ BaseEvent.extend({
680
+ type: z.literal("requires_user_interaction"),
681
+ form: z.any().optional(),
682
+ interaction_type: z.string().optional(),
683
+ prompt: z.string().optional()
684
+ }),
685
+ BaseEvent.extend({
686
+ type: z.literal("audit_envelope"),
687
+ envelope: AuditEnvelope
688
+ }),
689
+ BaseEvent.extend({
690
+ type: z.literal("final_answer"),
691
+ answer_id: z.string(),
692
+ content: z.string(),
693
+ is_complete: z.boolean().default(true),
694
+ reasoning_details: ProviderReasoningDetailsPayload.optional(),
695
+ meta: z.record(z.any()).optional()
696
+ }),
697
+ BaseEvent.extend({
698
+ type: z.literal("final_answer_chunk"),
699
+ answer_id: z.string(),
700
+ seq: z.number().int().nonnegative(),
701
+ content: z.string(),
702
+ is_last: z.boolean().optional()
703
+ }),
704
+ BaseEvent.extend({
705
+ type: z.literal("history_summary"),
706
+ content: z.string(),
707
+ replaced_message_ids: z.array(z.string()),
708
+ summary_seq: z.number().int().nonnegative(),
709
+ original_message_count: z.number().int().nonnegative().optional(),
710
+ compression_ratio: z.number().min(0).max(1).optional(),
711
+ included_old_summary: z.boolean().optional()
712
+ }),
713
+ BaseEvent.extend({
714
+ type: z.literal("error"),
715
+ error: z.string(),
716
+ details: z.any().optional(),
717
+ error_code: z.string().optional(),
718
+ retryable: z.boolean().optional()
719
+ }),
720
+ BaseEvent.extend({
721
+ type: z.literal("control"),
722
+ op: z.enum(["truncate_after", "replace", "redo", "branch"]),
723
+ target_id: z.string().optional(),
724
+ reason: z.string().optional(),
725
+ meta: z.any().optional()
726
+ }),
727
+ BaseEvent.extend({
728
+ type: z.literal("stream_end"),
729
+ reason: z.enum(["complete", "error", "interrupted", "timeout"]).optional(),
730
+ reason_message: z.string().optional(),
731
+ stats: z.object({
732
+ total_events: z.number().optional(),
733
+ duration_ms: z.number().optional(),
734
+ error_count: z.number().optional()
735
+ }).optional()
736
+ })
737
+ ]);
738
+ var validateRuntimeEvent = (event) => RuntimeEvent.safeParse(event);
739
+ var validateRuntimeEvents = (events) => z.array(RuntimeEvent).safeParse(events);
740
+ var createUserInputEvent = (id, conversationId, turnId, content, options = {}) => ({
741
+ type: "user_input",
742
+ id,
743
+ conversation_id: conversationId,
744
+ turn_id: turnId,
745
+ timestamp: Date.now(),
746
+ version: 1,
747
+ content,
748
+ source: "user",
749
+ ...options
750
+ });
751
+ var createThoughtEvent = (id, conversationId, turnId, content, options = {}) => ({
752
+ type: "thought",
753
+ id,
754
+ conversation_id: conversationId,
755
+ turn_id: turnId,
756
+ timestamp: Date.now(),
757
+ version: 1,
758
+ content,
759
+ is_complete: false,
760
+ ...options
761
+ });
762
+ var createToolCallDecisionEvent = (id, conversationId, turnId, toolName, toolCallId, options = {}) => ({
763
+ type: "tool_call_decision",
764
+ id,
765
+ conversation_id: conversationId,
766
+ turn_id: turnId,
767
+ timestamp: Date.now(),
768
+ version: 1,
769
+ tool_name: toolName,
770
+ tool_call_id: toolCallId,
771
+ phase: "start",
772
+ status: "loading",
773
+ ...options
774
+ });
775
+ var createToolProcessEvent = (id, conversationId, turnId, toolName, toolCallId, options = {}) => ({
776
+ type: "tool_process",
777
+ id,
778
+ conversation_id: conversationId,
779
+ turn_id: turnId,
780
+ timestamp: Date.now(),
781
+ version: 1,
782
+ tool_name: toolName,
783
+ tool_call_id: toolCallId,
784
+ phase: "start",
785
+ status: "loading",
786
+ ...options
787
+ });
788
+ var createSubRunTraceEvent = (id, conversationId, turnId, parentToolCallId, subrunId, kind, options = {}) => ({
789
+ type: "subrun_trace",
790
+ id,
791
+ conversation_id: conversationId,
792
+ turn_id: turnId,
793
+ timestamp: Date.now(),
794
+ version: 1,
795
+ ephemeral: true,
796
+ parent_tool_call_id: parentToolCallId,
797
+ subrun_id: subrunId,
798
+ kind,
799
+ ...options
800
+ });
801
+ var createToolOutputEvent = (id, conversationId, turnId, toolName, toolCallId, output, status = "success", options = {}) => ({
802
+ type: "tool_output",
803
+ id,
804
+ conversation_id: conversationId,
805
+ turn_id: turnId,
806
+ timestamp: Date.now(),
807
+ version: 1,
808
+ tool_name: toolName,
809
+ tool_call_id: toolCallId,
810
+ status,
811
+ output,
812
+ ...options
813
+ });
814
+ var createTodoUpdatedEvent = (id, conversationId, turnId, todoListId, todoListVersion, items, options = {}) => ({
815
+ type: "todo_updated",
816
+ id,
817
+ conversation_id: conversationId,
818
+ turn_id: turnId,
819
+ timestamp: Date.now(),
820
+ version: 1,
821
+ todo_list_id: todoListId,
822
+ todo_list_version: todoListVersion,
823
+ items,
824
+ ...options
825
+ });
826
+ var createFinalAnswerEvent = (id, conversationId, turnId, answerId, content, options = {}) => ({
827
+ type: "final_answer",
828
+ id,
829
+ conversation_id: conversationId,
830
+ turn_id: turnId,
831
+ timestamp: Date.now(),
832
+ version: 1,
833
+ answer_id: answerId,
834
+ content,
835
+ is_complete: true,
836
+ ...options
837
+ });
838
+ var createAuditEnvelopeEvent = (id, conversationId, turnId, envelope, options = {}) => ({
839
+ type: "audit_envelope",
840
+ id,
841
+ conversation_id: conversationId,
842
+ turn_id: turnId,
843
+ timestamp: envelope.ts,
844
+ version: 1,
845
+ envelope,
846
+ metadata: {
847
+ audit_action: envelope.action,
848
+ run_context: {
849
+ runId: envelope.runId,
850
+ parentId: envelope.parentRunId,
851
+ traceId: envelope.scope?.traceId
852
+ }
853
+ },
854
+ ...options
855
+ });
856
+ var createFinalAnswerChunkEvent = (id, conversationId, turnId, answerId, seq, content, options = {}) => ({
857
+ type: "final_answer_chunk",
858
+ id,
859
+ conversation_id: conversationId,
860
+ turn_id: turnId,
861
+ timestamp: Date.now(),
862
+ version: 1,
863
+ answer_id: answerId,
864
+ seq,
865
+ content,
866
+ ...options
867
+ });
868
+ var createHistorySummaryEvent = (id, conversationId, turnId, content, replacedMessageIds, summarySeq, options = {}) => ({
869
+ type: "history_summary",
870
+ id,
871
+ conversation_id: conversationId,
872
+ turn_id: turnId,
873
+ timestamp: Date.now(),
874
+ version: 1,
875
+ content,
876
+ replaced_message_ids: replacedMessageIds,
877
+ summary_seq: summarySeq,
878
+ ...options
879
+ });
880
+ var createErrorEvent = (id, conversationId, turnId, error, options = {}) => ({
881
+ type: "error",
882
+ id,
883
+ conversation_id: conversationId,
884
+ turn_id: turnId,
885
+ timestamp: Date.now(),
886
+ version: 1,
887
+ error,
888
+ ...options
889
+ });
890
+ var createStreamEndEvent = (id, conversationId, turnId, options = {}) => ({
891
+ type: "stream_end",
892
+ id,
893
+ conversation_id: conversationId,
894
+ turn_id: turnId,
895
+ timestamp: Date.now(),
896
+ version: 1,
897
+ ...options
898
+ });
899
+
900
+ // src/contracts/constants.ts
901
+ var DEFAULT_MAX_STEPS = 80;
902
+ var ExecutionTraceContext = z.object({
903
+ execution_id: z.string().describe("The unique identifier for a single, complete execution flow."),
904
+ trace_id: z.string().optional().describe("An optional trace ID for correlating logs in an APM system.")
905
+ });
906
+ var EventEnvelopeSchema = z.object({
907
+ seq: z.number().int().nonnegative().describe("A monotonically increasing sequence number within a single execution."),
908
+ timestamp: z.number().describe("The high-precision timestamp of when the event occurred."),
909
+ trace: ExecutionTraceContext,
910
+ source: z.string().describe("The origin of the event, e.g., 'ai', 'tool:file_reader', 'system:summary'."),
911
+ payload: z.unknown(),
912
+ render_hint: z.object({
913
+ card: z.enum(["normal", "collapsible", "none", "image", "interactive"]).optional().describe("Hint for how the UI card should be rendered."),
914
+ content: z.enum(["markdown", "text", "json", "image_url", "code"]).default("text").describe("Hint for how the content itself should be interpreted.")
915
+ }).optional(),
916
+ run_location: z.enum(["frontend", "backend"]).optional().describe("Specifies where a tool action should be or was executed.")
917
+ });
918
+ var EventEnvelope = EventEnvelopeSchema;
919
+ var BaseSSEEvent = z.object({
920
+ id: z.string(),
921
+ timestamp: z.number(),
922
+ conversation_id: z.string(),
923
+ turn_id: z.string(),
924
+ metadata: z.record(z.unknown()).optional()
925
+ });
926
+ var SSEThoughtEvent = BaseSSEEvent.extend({
927
+ type: z.literal("thought"),
928
+ thought_message_id: z.string().optional(),
929
+ delta: z.string().optional(),
930
+ content: z.string().optional(),
931
+ is_complete: z.boolean().default(false)
932
+ });
933
+ var SSEFinalAnswerChunkEvent = BaseSSEEvent.extend({
934
+ type: z.literal("final_answer_chunk"),
935
+ answer_id: z.string(),
936
+ seq: z.number().int().nonnegative(),
937
+ chunk: z.string(),
938
+ is_last: z.boolean().optional()
939
+ });
940
+ var SSEFinalAnswerEvent = BaseSSEEvent.extend({
941
+ type: z.literal("final_answer"),
942
+ answer_id: z.string(),
943
+ content: z.string(),
944
+ meta: z.record(z.any()).optional()
945
+ });
946
+ var SSEMarkdownChunkEvent = BaseSSEEvent.extend({
947
+ type: z.literal("markdown_chunk"),
948
+ content_type: z.enum(["text", "code", "table", "image"]).default("text"),
949
+ text: z.string(),
950
+ seq: z.number().optional()
951
+ });
952
+ var BaseSSEToolLifecycleEvent = BaseSSEEvent.extend({
953
+ tool_name: z.string(),
954
+ tool_call_id: z.string(),
955
+ phase: z.enum(["start", "update", "complete", "error"]),
956
+ status: z.enum(["loading", "success", "error"]),
957
+ args: z.any().optional(),
958
+ payload: z.any().optional(),
959
+ meta: z.record(z.any()).optional()
960
+ });
961
+ var SSEToolCallDecisionEvent = BaseSSEToolLifecycleEvent.extend({
962
+ type: z.literal("tool_call_decision")
963
+ });
964
+ var SSEToolProcessEvent = BaseSSEToolLifecycleEvent.extend({
965
+ type: z.literal("tool_process")
966
+ });
967
+ var SSEToolOutputEvent = BaseSSEEvent.extend({
968
+ type: z.literal("tool_output"),
969
+ tool_name: z.string(),
970
+ tool_call_id: z.string(),
971
+ status: z.enum(["success", "error"]),
972
+ output: z.any().optional(),
973
+ payload: z.record(z.any()).optional(),
974
+ duration_ms: z.number().optional()
975
+ });
976
+ var SSETodoUpdatedEvent = BaseSSEEvent.extend({
977
+ type: z.literal("todo_updated"),
978
+ todo_list_id: z.string(),
979
+ todo_list_version: z.number().int().nonnegative(),
980
+ items: z.array(z.object({
981
+ id: z.string(),
982
+ content: z.string(),
983
+ status: z.enum(["pending", "in_progress", "completed", "cancelled"])
984
+ }))
985
+ });
986
+ var SSESubRunTraceEvent = BaseSSEEvent.extend({
987
+ type: z.literal("subrun_trace"),
988
+ parent_tool_call_id: z.string(),
989
+ subrun_id: z.string(),
990
+ subrun_parent_id: z.string().optional(),
991
+ kind: z.enum([
992
+ "thought_delta",
993
+ "thought_complete",
994
+ "tool_call_decision",
995
+ "tool_process",
996
+ "tool_output",
997
+ "final_answer_chunk",
998
+ "final_answer"
999
+ ]),
1000
+ delta: z.string().optional(),
1001
+ content: z.string().optional(),
1002
+ tool_name: z.string().optional(),
1003
+ tool_call_id: z.string().optional(),
1004
+ phase: z.enum(["start", "update", "complete", "error"]).optional(),
1005
+ status: z.enum(["loading", "success", "error"]).optional(),
1006
+ args: z.unknown().optional(),
1007
+ output: z.unknown().optional(),
1008
+ duration_ms: z.number().optional(),
1009
+ meta: z.record(z.unknown()).optional()
1010
+ });
1011
+ var SSERequiresUserInteractionEvent = BaseSSEEvent.extend({
1012
+ type: z.literal("requires_user_interaction"),
1013
+ form: z.any().optional(),
1014
+ interaction_type: z.string().optional(),
1015
+ prompt: z.string().optional()
1016
+ });
1017
+ var SSEErrorEvent = BaseSSEEvent.extend({
1018
+ type: z.literal("error"),
1019
+ error: z.string(),
1020
+ details: z.any().optional(),
1021
+ error_code: z.string().optional(),
1022
+ retryable: z.boolean().optional()
1023
+ });
1024
+ var SSEStreamEndEvent = BaseSSEEvent.extend({
1025
+ type: z.literal("stream_end"),
1026
+ reason: z.enum(["complete", "error", "interrupted", "timeout"]).optional(),
1027
+ reason_message: z.string().optional(),
1028
+ stats: z.object({
1029
+ total_events: z.number().optional(),
1030
+ duration_ms: z.number().optional(),
1031
+ error_count: z.number().optional(),
1032
+ benchmark: z.record(z.unknown()).optional()
1033
+ }).optional()
1034
+ });
1035
+ var SSEHistorySummaryEvent = BaseSSEEvent.extend({
1036
+ type: z.literal("history_summary"),
1037
+ summary_id: z.string(),
1038
+ content: z.string(),
1039
+ original_message_count: z.number().int().nonnegative(),
1040
+ summary_seq: z.number().int().nonnegative()
1041
+ });
1042
+ var SSESummarizationStartEvent = BaseSSEEvent.extend({
1043
+ type: z.literal("summarization_start"),
1044
+ originalMessages: z.number().optional()
1045
+ });
1046
+ var SSESummarizationEndEvent = BaseSSEEvent.extend({
1047
+ type: z.literal("summarization_end"),
1048
+ originalMessages: z.number().optional(),
1049
+ compressedMessages: z.number().optional(),
1050
+ compressionRatio: z.string().optional(),
1051
+ timeSaved: z.string().optional()
1052
+ });
1053
+ var SSESummarizationErrorEvent = BaseSSEEvent.extend({
1054
+ type: z.literal("summarization_error"),
1055
+ error: z.string()
1056
+ });
1057
+ var SSEEvent = z.discriminatedUnion("type", [
1058
+ SSEThoughtEvent,
1059
+ SSEFinalAnswerChunkEvent,
1060
+ SSEFinalAnswerEvent,
1061
+ SSEMarkdownChunkEvent,
1062
+ SSEToolCallDecisionEvent,
1063
+ SSEToolProcessEvent,
1064
+ SSEToolOutputEvent,
1065
+ SSETodoUpdatedEvent,
1066
+ SSESubRunTraceEvent,
1067
+ SSERequiresUserInteractionEvent,
1068
+ SSEErrorEvent,
1069
+ SSEStreamEndEvent,
1070
+ SSEHistorySummaryEvent,
1071
+ SSESummarizationStartEvent,
1072
+ SSESummarizationEndEvent,
1073
+ SSESummarizationErrorEvent
1074
+ ]);
1075
+ var validateSSEEvent = (event) => SSEEvent.safeParse(event);
1076
+ var createSSEThoughtEvent = (id, conversationId, turnId, options = {}) => ({
1077
+ type: "thought",
1078
+ id,
1079
+ timestamp: Date.now(),
1080
+ conversation_id: conversationId,
1081
+ turn_id: turnId,
1082
+ is_complete: false,
1083
+ ...options
1084
+ });
1085
+ var createSSEFinalAnswerChunkEvent = (id, conversationId, turnId, answerId, seq, chunk, options = {}) => ({
1086
+ type: "final_answer_chunk",
1087
+ id,
1088
+ timestamp: Date.now(),
1089
+ conversation_id: conversationId,
1090
+ turn_id: turnId,
1091
+ answer_id: answerId,
1092
+ seq,
1093
+ chunk,
1094
+ ...options
1095
+ });
1096
+ var createSSEFinalAnswerEvent = (id, conversationId, turnId, answerId, content, options = {}) => ({
1097
+ type: "final_answer",
1098
+ id,
1099
+ timestamp: Date.now(),
1100
+ conversation_id: conversationId,
1101
+ turn_id: turnId,
1102
+ answer_id: answerId,
1103
+ content,
1104
+ ...options
1105
+ });
1106
+ var createSSEMarkdownChunkEvent = (id, conversationId, turnId, text, options = {}) => ({
1107
+ type: "markdown_chunk",
1108
+ id,
1109
+ timestamp: Date.now(),
1110
+ conversation_id: conversationId,
1111
+ turn_id: turnId,
1112
+ text,
1113
+ content_type: "text",
1114
+ ...options
1115
+ });
1116
+ var createSSEToolCallDecisionEvent = (id, conversationId, turnId, toolName, toolCallId, phase, status, options = {}) => ({
1117
+ type: "tool_call_decision",
1118
+ id,
1119
+ timestamp: Date.now(),
1120
+ conversation_id: conversationId,
1121
+ turn_id: turnId,
1122
+ tool_name: toolName,
1123
+ tool_call_id: toolCallId,
1124
+ phase,
1125
+ status,
1126
+ ...options
1127
+ });
1128
+ var createSSEToolProcessEvent = (id, conversationId, turnId, toolName, toolCallId, phase, status, options = {}) => ({
1129
+ type: "tool_process",
1130
+ id,
1131
+ timestamp: Date.now(),
1132
+ conversation_id: conversationId,
1133
+ turn_id: turnId,
1134
+ tool_name: toolName,
1135
+ tool_call_id: toolCallId,
1136
+ phase,
1137
+ status,
1138
+ ...options
1139
+ });
1140
+ var createSSEToolOutputEvent = (id, conversationId, turnId, toolName, toolCallId, status, output, options = {}) => ({
1141
+ type: "tool_output",
1142
+ id,
1143
+ timestamp: Date.now(),
1144
+ conversation_id: conversationId,
1145
+ turn_id: turnId,
1146
+ tool_name: toolName,
1147
+ tool_call_id: toolCallId,
1148
+ status,
1149
+ output,
1150
+ ...options
1151
+ });
1152
+ var createSSETodoUpdatedEvent = (id, conversationId, turnId, todoListId, todoListVersion, items, options = {}) => ({
1153
+ type: "todo_updated",
1154
+ id,
1155
+ timestamp: Date.now(),
1156
+ conversation_id: conversationId,
1157
+ turn_id: turnId,
1158
+ todo_list_id: todoListId,
1159
+ todo_list_version: todoListVersion,
1160
+ items,
1161
+ ...options
1162
+ });
1163
+ var createSSESubRunTraceEvent = (id, conversationId, turnId, parentToolCallId, subrunId, kind, options = {}) => ({
1164
+ type: "subrun_trace",
1165
+ id,
1166
+ timestamp: Date.now(),
1167
+ conversation_id: conversationId,
1168
+ turn_id: turnId,
1169
+ parent_tool_call_id: parentToolCallId,
1170
+ subrun_id: subrunId,
1171
+ kind,
1172
+ ...options
1173
+ });
1174
+ var createSSERequiresUserInteractionEvent = (id, conversationId, turnId, options = {}) => ({
1175
+ type: "requires_user_interaction",
1176
+ id,
1177
+ timestamp: Date.now(),
1178
+ conversation_id: conversationId,
1179
+ turn_id: turnId,
1180
+ ...options
1181
+ });
1182
+ var createSSEErrorEvent = (id, conversationId, turnId, error, options = {}) => ({
1183
+ type: "error",
1184
+ id,
1185
+ timestamp: Date.now(),
1186
+ conversation_id: conversationId,
1187
+ turn_id: turnId,
1188
+ error,
1189
+ ...options
1190
+ });
1191
+ var createSSEStreamEndEvent = (id, conversationId, turnId, options = {}) => ({
1192
+ type: "stream_end",
1193
+ id,
1194
+ timestamp: Date.now(),
1195
+ conversation_id: conversationId,
1196
+ turn_id: turnId,
1197
+ ...options
1198
+ });
1199
+ var createSSEHistorySummaryEvent = (id, conversationId, turnId, summaryId, content, originalMessageCount, summarySeq, options = {}) => ({
1200
+ type: "history_summary",
1201
+ id,
1202
+ timestamp: Date.now(),
1203
+ conversation_id: conversationId,
1204
+ turn_id: turnId,
1205
+ summary_id: summaryId,
1206
+ content,
1207
+ original_message_count: originalMessageCount,
1208
+ summary_seq: summarySeq,
1209
+ ...options
1210
+ });
1211
+
1212
+ export { AUDIT_ACTIONS, AUDIT_DECISION_OUTCOMES, AgentCapability, AgentSpec, AgentSpecAuditConfig, AgentSpecBudgetPolicy, AgentSpecCheckpointPolicy, AgentSpecContextPolicy, AgentSpecContextTracePolicy, AgentSpecMessageType, AgentSpecModelHints, AgentSpecMustKeepPolicy, AgentSpecMustKeepTruncationRule, AgentSpecProviderReplayPolicy, AgentSpecReasoningRetentionPolicy, AgentSpecSummarizationPolicy, AgentSpecSystemReminderExtraRule, AgentSpecSystemReminderPolicy, AgentSpecSystemReminderTrigger, AgentSpecTokenEstimationPolicy, AgentSpecToolHistoryPolicy, AgentSpecToolObservationGovernancePolicy, AgentSpecToolOutputPolicy, AgentSpecWorkingMemoryPolicy, AgentTodoItem, AgentTodoStatus, AiMessage, AssistantMessage, AuditActor, AuditCostDelta, AuditDecision, AuditEnvelope, AuditEvidence, AuditScope, BaseEvent, BaseSSEEvent, DEFAULT_MAX_STEPS, EventEnvelope, ExecutionTraceContext, HistorySummaryMeta, ImageInfoMeta, PersistentMetadata, ProviderReasoningDetails, ProviderReasoningDetailsPayload, RuntimeEvent, SSEErrorEvent, SSEEvent, SSEFinalAnswerChunkEvent, SSEFinalAnswerEvent, SSEHistorySummaryEvent, SSEMarkdownChunkEvent, SSERequiresUserInteractionEvent, SSEStreamEndEvent, SSESubRunTraceEvent, SSESummarizationEndEvent, SSESummarizationErrorEvent, SSESummarizationStartEvent, SSEThoughtEvent, SSETodoUpdatedEvent, SSEToolCallDecisionEvent, SSEToolOutputEvent, SSEToolProcessEvent, SYSTEM_REMINDER_BUILTIN_TRIGGER_KINDS, Status, SystemMessage, TaskTrackingMeta, ToolBindingSpec, ToolCallDecisionPayload, ToolCallExtraContent, ToolCallPhase, ToolCallWire, ToolCallsMeta, ToolMessage, ToolOutputMeta, UserMessage, createAssistantMessage, createAuditEnvelopeEvent, createErrorEvent, createFinalAnswerChunkEvent, createFinalAnswerEvent, createHistorySummaryEvent, createHistorySummaryMessage, createSSEErrorEvent, createSSEFinalAnswerChunkEvent, createSSEFinalAnswerEvent, createSSEHistorySummaryEvent, createSSEMarkdownChunkEvent, createSSERequiresUserInteractionEvent, createSSEStreamEndEvent, createSSESubRunTraceEvent, createSSEThoughtEvent, createSSETodoUpdatedEvent, createSSEToolCallDecisionEvent, createSSEToolOutputEvent, createSSEToolProcessEvent, createStreamEndEvent, createSubRunTraceEvent, createSystemMessage, createThoughtEvent, createTodoUpdatedEvent, createToolCallDecisionEvent, createToolMessage, createToolOutputEvent, createToolProcessEvent, createUserInputEvent, createUserMessage, defineContextPolicy, hasToolCalls, isAssistantMessage, isHistorySummaryMessage, isSystemMessage, isToolMessage, isUserMessage, validateAiMessage, validateHistorySummaryMeta, validateRuntimeEvent, validateRuntimeEvents, validateSSEEvent };
1213
+ //# sourceMappingURL=contracts.js.map
1214
+ //# sourceMappingURL=contracts.js.map