@goondan/openharness-base 0.0.1-alpha4 → 0.0.1-alpha5

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 (105) hide show
  1. package/dist/index.d.ts +72 -5
  2. package/dist/index.js +506 -5
  3. package/package.json +11 -33
  4. package/src/__tests__/compaction-summarize.test.ts +234 -0
  5. package/src/__tests__/context-message.test.ts +203 -0
  6. package/src/__tests__/logging.test.ts +200 -0
  7. package/src/__tests__/message-window.test.ts +193 -0
  8. package/src/__tests__/required-tools-guard.test.ts +206 -0
  9. package/src/__tests__/tool-search.test.ts +187 -0
  10. package/src/__tests__/tools.test.ts +332 -0
  11. package/src/extensions/compaction-summarize.ts +58 -0
  12. package/src/extensions/context-message.ts +37 -0
  13. package/src/extensions/logging.ts +42 -0
  14. package/src/extensions/message-window.ts +23 -0
  15. package/src/extensions/required-tools-guard.ts +24 -0
  16. package/src/extensions/tool-search.ts +38 -0
  17. package/src/index.ts +16 -0
  18. package/src/tools/bash.ts +38 -0
  19. package/src/tools/file-system.ts +83 -0
  20. package/src/tools/http-fetch.ts +64 -0
  21. package/src/tools/json-query.ts +71 -0
  22. package/src/tools/text-transform.ts +59 -0
  23. package/src/tools/wait.ts +46 -0
  24. package/tsconfig.json +8 -0
  25. package/vitest.config.ts +7 -0
  26. package/README.md +0 -11
  27. package/dist/extensions/compaction.d.ts +0 -12
  28. package/dist/extensions/compaction.d.ts.map +0 -1
  29. package/dist/extensions/compaction.js +0 -159
  30. package/dist/extensions/compaction.js.map +0 -1
  31. package/dist/extensions/context-message.d.ts +0 -9
  32. package/dist/extensions/context-message.d.ts.map +0 -1
  33. package/dist/extensions/context-message.js +0 -446
  34. package/dist/extensions/context-message.js.map +0 -1
  35. package/dist/extensions/index.d.ts +0 -13
  36. package/dist/extensions/index.d.ts.map +0 -1
  37. package/dist/extensions/index.js +0 -7
  38. package/dist/extensions/index.js.map +0 -1
  39. package/dist/extensions/logging.d.ts +0 -11
  40. package/dist/extensions/logging.d.ts.map +0 -1
  41. package/dist/extensions/logging.js +0 -140
  42. package/dist/extensions/logging.js.map +0 -1
  43. package/dist/extensions/message-integrity.d.ts +0 -8
  44. package/dist/extensions/message-integrity.d.ts.map +0 -1
  45. package/dist/extensions/message-integrity.js +0 -88
  46. package/dist/extensions/message-integrity.js.map +0 -1
  47. package/dist/extensions/message-window.d.ts +0 -7
  48. package/dist/extensions/message-window.d.ts.map +0 -1
  49. package/dist/extensions/message-window.js +0 -60
  50. package/dist/extensions/message-window.js.map +0 -1
  51. package/dist/extensions/required-tools-guard.d.ts +0 -9
  52. package/dist/extensions/required-tools-guard.d.ts.map +0 -1
  53. package/dist/extensions/required-tools-guard.js +0 -74
  54. package/dist/extensions/required-tools-guard.js.map +0 -1
  55. package/dist/extensions/tool-search.d.ts +0 -10
  56. package/dist/extensions/tool-search.d.ts.map +0 -1
  57. package/dist/extensions/tool-search.js +0 -198
  58. package/dist/extensions/tool-search.js.map +0 -1
  59. package/dist/harness.yaml +0 -503
  60. package/dist/index.d.ts.map +0 -1
  61. package/dist/index.js.map +0 -1
  62. package/dist/manifests/base.d.ts +0 -8
  63. package/dist/manifests/base.d.ts.map +0 -1
  64. package/dist/manifests/base.js +0 -352
  65. package/dist/manifests/base.js.map +0 -1
  66. package/dist/manifests/index.d.ts +0 -3
  67. package/dist/manifests/index.d.ts.map +0 -1
  68. package/dist/manifests/index.js +0 -2
  69. package/dist/manifests/index.js.map +0 -1
  70. package/dist/tools/bash.d.ts +0 -8
  71. package/dist/tools/bash.d.ts.map +0 -1
  72. package/dist/tools/bash.js +0 -119
  73. package/dist/tools/bash.js.map +0 -1
  74. package/dist/tools/file-system.d.ts +0 -12
  75. package/dist/tools/file-system.d.ts.map +0 -1
  76. package/dist/tools/file-system.js +0 -117
  77. package/dist/tools/file-system.js.map +0 -1
  78. package/dist/tools/http-fetch.d.ts +0 -8
  79. package/dist/tools/http-fetch.d.ts.map +0 -1
  80. package/dist/tools/http-fetch.js +0 -149
  81. package/dist/tools/http-fetch.js.map +0 -1
  82. package/dist/tools/index.d.ts +0 -7
  83. package/dist/tools/index.d.ts.map +0 -1
  84. package/dist/tools/index.js +0 -7
  85. package/dist/tools/index.js.map +0 -1
  86. package/dist/tools/json-query.d.ts +0 -12
  87. package/dist/tools/json-query.d.ts.map +0 -1
  88. package/dist/tools/json-query.js +0 -176
  89. package/dist/tools/json-query.js.map +0 -1
  90. package/dist/tools/text-transform.d.ts +0 -16
  91. package/dist/tools/text-transform.d.ts.map +0 -1
  92. package/dist/tools/text-transform.js +0 -127
  93. package/dist/tools/text-transform.js.map +0 -1
  94. package/dist/tools/wait.d.ts +0 -6
  95. package/dist/tools/wait.d.ts.map +0 -1
  96. package/dist/tools/wait.js +0 -32
  97. package/dist/tools/wait.js.map +0 -1
  98. package/dist/types.d.ts +0 -4
  99. package/dist/types.d.ts.map +0 -1
  100. package/dist/types.js +0 -6
  101. package/dist/types.js.map +0 -1
  102. package/dist/utils.d.ts +0 -17
  103. package/dist/utils.d.ts.map +0 -1
  104. package/dist/utils.js +0 -159
  105. package/dist/utils.js.map +0 -1
@@ -1,446 +0,0 @@
1
- import { createHash } from 'node:crypto';
2
- import { createId, isJsonObject } from '../utils.js';
3
- const EXTENSION_NAME = 'context-message';
4
- const EXTENSION_EVENTS_METADATA_KEY = 'extension.events';
5
- const CONTEXT_MESSAGE_MARKER_KEY = '__goondanContextMessage';
6
- const INBOUND_MESSAGE_METADATA_KEY = '__goondanInbound';
7
- const DEFAULT_CONFIG = {
8
- includeAgentPrompt: true,
9
- includeInboundContext: false,
10
- includeRouteSummary: false,
11
- includeInboundInput: true,
12
- };
13
- function readConfig(raw) {
14
- if (!isJsonObject(raw)) {
15
- return { ...DEFAULT_CONFIG };
16
- }
17
- const config = { ...DEFAULT_CONFIG };
18
- if (typeof raw.includeAgentPrompt === 'boolean') {
19
- config.includeAgentPrompt = raw.includeAgentPrompt;
20
- }
21
- if (typeof raw.includeInboundContext === 'boolean') {
22
- config.includeInboundContext = raw.includeInboundContext;
23
- }
24
- if (typeof raw.includeRouteSummary === 'boolean') {
25
- config.includeRouteSummary = raw.includeRouteSummary;
26
- }
27
- if (typeof raw.includeInboundInput === 'boolean') {
28
- config.includeInboundInput = raw.includeInboundInput;
29
- }
30
- return config;
31
- }
32
- function createPromptHash(input) {
33
- return createHash('sha256').update(`${input.role}\n${input.content}`).digest('hex');
34
- }
35
- function readPromptHashMarker(message) {
36
- const marker = readContextMessageMarker(message);
37
- return marker?.promptHash;
38
- }
39
- function readContextMessageMarker(message) {
40
- if (!isJsonObject(message.metadata)) {
41
- return undefined;
42
- }
43
- const rawMarker = message.metadata[CONTEXT_MESSAGE_MARKER_KEY];
44
- if (!isJsonObject(rawMarker)) {
45
- return undefined;
46
- }
47
- const promptHash = rawMarker.promptHash;
48
- if (typeof promptHash !== 'string' || promptHash.length === 0) {
49
- return undefined;
50
- }
51
- const marker = {
52
- promptHash,
53
- };
54
- if (rawMarker.role === 'system' || rawMarker.role === 'user') {
55
- marker.role = rawMarker.role;
56
- }
57
- if (Array.isArray(rawMarker.segmentIds)) {
58
- marker.segmentIds = rawMarker.segmentIds
59
- .filter((segmentId) => typeof segmentId === 'string' && segmentId.length > 0);
60
- }
61
- return marker;
62
- }
63
- function markerIncludesSegment(marker, segmentId) {
64
- if (!marker || !Array.isArray(marker.segmentIds)) {
65
- return false;
66
- }
67
- return marker.segmentIds.includes(segmentId);
68
- }
69
- function hasPromptHashMarker(messages, promptHash, role, content) {
70
- for (const message of messages) {
71
- const existingHash = readPromptHashMarker(message);
72
- if (existingHash === promptHash) {
73
- return true;
74
- }
75
- if (message.metadata.__createdBy === EXTENSION_NAME
76
- && message.data.role === role
77
- && message.data.content === content) {
78
- return true;
79
- }
80
- }
81
- return false;
82
- }
83
- function createMessageMarker(promptHash, role, segmentIds) {
84
- const marker = {
85
- promptHash,
86
- role,
87
- segmentIds,
88
- };
89
- return marker;
90
- }
91
- function createContextMessage(promptHash, role, content, segmentIds) {
92
- const metadata = {
93
- [CONTEXT_MESSAGE_MARKER_KEY]: createMessageMarker(promptHash, role, segmentIds),
94
- };
95
- if (role === 'system') {
96
- metadata.pinned = true;
97
- }
98
- metadata.__createdBy = EXTENSION_NAME;
99
- return {
100
- id: createId('msg'),
101
- data: {
102
- role,
103
- content,
104
- },
105
- metadata,
106
- createdAt: new Date(),
107
- };
108
- }
109
- function createInboundInputMetadata(ctx) {
110
- const inbound = ctx.runtime.inbound;
111
- const payload = {
112
- sourceKind: inbound.kind,
113
- sourceName: inbound.sourceName,
114
- eventName: inbound.eventType,
115
- };
116
- if (typeof inbound.connectionName === 'string' && inbound.connectionName.length > 0) {
117
- payload.connectionName = inbound.connectionName;
118
- }
119
- if (typeof inbound.conversationId === 'string' && inbound.conversationId.length > 0) {
120
- payload.conversationId = inbound.conversationId;
121
- }
122
- if (inbound.kind === 'connector') {
123
- if (Object.keys(inbound.properties).length > 0) {
124
- payload.properties = inbound.properties;
125
- }
126
- if (ctx.inputEvent.rawPayload !== undefined) {
127
- payload.rawPayload = ctx.inputEvent.rawPayload;
128
- }
129
- }
130
- return {
131
- [INBOUND_MESSAGE_METADATA_KEY]: payload,
132
- };
133
- }
134
- function createInboundInputMessage(ctx, content) {
135
- const metadata = createInboundInputMetadata(ctx);
136
- metadata.__createdBy = EXTENSION_NAME;
137
- return {
138
- id: createId('msg'),
139
- data: {
140
- role: 'user',
141
- content,
142
- },
143
- metadata,
144
- createdAt: new Date(),
145
- };
146
- }
147
- function renderInboundParts(parts) {
148
- const textBlocks = [];
149
- const attachmentBlocks = [];
150
- for (const part of parts) {
151
- if (part.type === 'text') {
152
- const trimmed = part.text.trim();
153
- if (trimmed.length > 0) {
154
- textBlocks.push(trimmed);
155
- }
156
- continue;
157
- }
158
- if (part.type === 'image') {
159
- const label = typeof part.alt === 'string' && part.alt.trim().length > 0 ? ` ${part.alt.trim()}` : '';
160
- attachmentBlocks.push(`[image]${label} ${part.url}`.trim());
161
- continue;
162
- }
163
- const mimeLabel = typeof part.mimeType === 'string' && part.mimeType.trim().length > 0
164
- ? ` (${part.mimeType.trim()})`
165
- : '';
166
- attachmentBlocks.push(`[file] ${part.name}${mimeLabel}: ${part.url}`);
167
- }
168
- return [...textBlocks, ...attachmentBlocks].join('\n\n').trim();
169
- }
170
- function appendRuntimeEvent(ctx, name, data = undefined) {
171
- const entries = Array.isArray(ctx.metadata[EXTENSION_EVENTS_METADATA_KEY])
172
- ? [...ctx.metadata[EXTENSION_EVENTS_METADATA_KEY]]
173
- : [];
174
- const entry = {
175
- name,
176
- actor: EXTENSION_NAME,
177
- at: new Date().toISOString(),
178
- };
179
- if (data !== undefined && Object.keys(data).length > 0) {
180
- entry.data = data;
181
- }
182
- entries.push(entry);
183
- ctx.metadata[EXTENSION_EVENTS_METADATA_KEY] = entries;
184
- }
185
- function resolveAgentPrompt(metadata) {
186
- const prompt = metadata.prompt;
187
- if (!prompt) {
188
- return null;
189
- }
190
- const inlinePrompt = typeof prompt.system === 'string' && prompt.system.trim().length > 0
191
- ? prompt.system
192
- : undefined;
193
- if (!inlinePrompt) {
194
- return null;
195
- }
196
- return inlinePrompt;
197
- }
198
- function stringOrUndefined(value) {
199
- if (typeof value !== 'string') {
200
- return undefined;
201
- }
202
- const trimmed = value.trim();
203
- if (trimmed.length === 0) {
204
- return undefined;
205
- }
206
- return trimmed;
207
- }
208
- function resolveInboundContextSegment(ctx) {
209
- const inbound = ctx.runtime.inbound;
210
- const lines = [
211
- '[runtime_inbound]',
212
- `eventId=${inbound.eventId}`,
213
- `eventType=${inbound.eventType}`,
214
- `kind=${inbound.kind}`,
215
- `sourceName=${inbound.sourceName}`,
216
- `createdAt=${inbound.createdAt}`,
217
- ];
218
- if (typeof inbound.connectionName === 'string' && inbound.connectionName.length > 0) {
219
- lines.push(`connectionName=${inbound.connectionName}`);
220
- }
221
- if (typeof inbound.conversationId === 'string' && inbound.conversationId.length > 0) {
222
- lines.push(`conversationId=${inbound.conversationId}`);
223
- }
224
- if (Object.keys(inbound.properties).length > 0) {
225
- lines.push(`properties=${JSON.stringify(inbound.properties)}`);
226
- }
227
- if (inbound.content.length > 0) {
228
- lines.push(`content=${JSON.stringify(inbound.content)}`);
229
- }
230
- if (inbound.rawPayload !== undefined) {
231
- lines.push(`rawPayload=${JSON.stringify(inbound.rawPayload)}`);
232
- }
233
- lines.push('[/runtime_inbound]');
234
- return {
235
- id: 'runtime.inbound',
236
- role: 'user',
237
- content: lines.join('\n'),
238
- };
239
- }
240
- function resolveRouteSummarySegment(ctx) {
241
- const inbound = ctx.runtime.inbound;
242
- const inboundConversationId = stringOrUndefined(inbound.conversationId);
243
- const lines = [
244
- '[runtime_route]',
245
- 'precedence=inbound',
246
- `senderKind=${inbound.kind}`,
247
- `senderName=${inbound.sourceName}`,
248
- `eventType=${inbound.eventType}`,
249
- `eventId=${inbound.eventId}`,
250
- ];
251
- if (inboundConversationId) {
252
- lines.push(`senderConversationId=${inboundConversationId}`);
253
- }
254
- lines.push('[/runtime_route]');
255
- return {
256
- id: 'runtime.route.summary',
257
- role: 'user',
258
- content: lines.join('\n'),
259
- };
260
- }
261
- const SEGMENT_ORDER = [
262
- 'agent.prompt.system',
263
- 'runtime.inbound',
264
- 'runtime.route.summary',
265
- ];
266
- function sortSegmentsByOrder(segments) {
267
- const order = new Map();
268
- SEGMENT_ORDER.forEach((id, index) => {
269
- order.set(id, index);
270
- });
271
- return [...segments].sort((left, right) => {
272
- const leftOrder = order.get(left.id) ?? Number.MAX_SAFE_INTEGER;
273
- const rightOrder = order.get(right.id) ?? Number.MAX_SAFE_INTEGER;
274
- if (leftOrder !== rightOrder) {
275
- return leftOrder - rightOrder;
276
- }
277
- return left.id.localeCompare(right.id);
278
- });
279
- }
280
- function resolveContextSegments(ctx, config) {
281
- const resolutions = [];
282
- const segments = [];
283
- if (config.includeAgentPrompt) {
284
- const system = resolveAgentPrompt({ prompt: ctx.runtime.agent.prompt });
285
- if (system && system.trim().length > 0) {
286
- segments.push({
287
- id: 'agent.prompt.system',
288
- role: 'system',
289
- content: system,
290
- });
291
- resolutions.push({ id: 'agent.prompt.system', included: true });
292
- }
293
- else {
294
- resolutions.push({ id: 'agent.prompt.system', included: false });
295
- }
296
- }
297
- if (config.includeInboundContext) {
298
- segments.push(resolveInboundContextSegment(ctx));
299
- resolutions.push({ id: 'runtime.inbound', included: true });
300
- }
301
- if (config.includeRouteSummary && config.includeInboundContext) {
302
- segments.push(resolveRouteSummarySegment(ctx));
303
- resolutions.push({ id: 'runtime.route.summary', included: true });
304
- }
305
- return {
306
- resolutions,
307
- segments: sortSegmentsByOrder(segments),
308
- };
309
- }
310
- function composeMessageGroups(segments) {
311
- const groups = [];
312
- for (const segment of segments) {
313
- const last = groups[groups.length - 1];
314
- if (last && last.role === segment.role) {
315
- last.content = `${last.content}\n\n${segment.content}`;
316
- last.segmentIds.push(segment.id);
317
- continue;
318
- }
319
- groups.push({
320
- role: segment.role,
321
- content: segment.content,
322
- segmentIds: [segment.id],
323
- });
324
- }
325
- return groups;
326
- }
327
- async function emitContextMessages(ctx, config) {
328
- const composed = resolveContextSegments(ctx, config);
329
- for (const resolution of composed.resolutions) {
330
- appendRuntimeEvent(ctx, 'context.segment.resolved', {
331
- id: resolution.id,
332
- included: resolution.included,
333
- });
334
- }
335
- if (composed.segments.length === 0) {
336
- appendRuntimeEvent(ctx, 'context.message.empty');
337
- return;
338
- }
339
- const existingMessages = ctx.conversationState.nextMessages;
340
- const groups = composeMessageGroups(composed.segments);
341
- const desiredSystemGroup = groups.find((group) => group.role === 'system' && group.segmentIds.includes('agent.prompt.system'));
342
- const desiredSystemHash = desiredSystemGroup
343
- ? createPromptHash({ role: desiredSystemGroup.role, content: desiredSystemGroup.content })
344
- : undefined;
345
- const pendingGroups = [];
346
- for (const group of groups) {
347
- const promptHash = createPromptHash({ role: group.role, content: group.content });
348
- if (hasPromptHashMarker(existingMessages, promptHash, group.role, group.content)) {
349
- appendRuntimeEvent(ctx, 'context.message.duplicate', {
350
- promptHash,
351
- role: group.role,
352
- });
353
- continue;
354
- }
355
- pendingGroups.push({ group, promptHash });
356
- }
357
- let emittedContextMutation = false;
358
- if (desiredSystemGroup && desiredSystemHash) {
359
- const existingSystems = existingMessages
360
- .filter((message) => message.data.role === 'system')
361
- .map((message) => ({
362
- message,
363
- marker: readContextMessageMarker(message),
364
- }));
365
- if (existingSystems.length > 0) {
366
- const preferred = existingSystems.find((entry) => entry.marker?.promptHash === desiredSystemHash)
367
- ?? existingSystems.find((entry) => markerIncludesSegment(entry.marker, 'agent.prompt.system'))
368
- ?? existingSystems[0];
369
- if (preferred) {
370
- const targetMessage = preferred.message;
371
- const targetMarker = preferred.marker;
372
- const targetMatchesDesired = targetMarker?.promptHash === desiredSystemHash
373
- || targetMessage.data.content === desiredSystemGroup.content;
374
- if (!targetMatchesDesired) {
375
- ctx.emitMessageEvent({
376
- type: 'replace',
377
- targetId: targetMessage.id,
378
- message: createContextMessage(desiredSystemHash, 'system', desiredSystemGroup.content, desiredSystemGroup.segmentIds),
379
- });
380
- appendRuntimeEvent(ctx, 'context.message.replaced', {
381
- targetId: targetMessage.id,
382
- promptHash: desiredSystemHash,
383
- role: 'system',
384
- segmentIds: desiredSystemGroup.segmentIds,
385
- });
386
- emittedContextMutation = true;
387
- }
388
- for (const entry of existingSystems) {
389
- if (entry.message.id === targetMessage.id) {
390
- continue;
391
- }
392
- ctx.emitMessageEvent({
393
- type: 'remove',
394
- targetId: entry.message.id,
395
- });
396
- appendRuntimeEvent(ctx, 'context.message.removed', {
397
- targetId: entry.message.id,
398
- role: 'system',
399
- });
400
- emittedContextMutation = true;
401
- }
402
- const duplicateSystemIndex = pendingGroups.findIndex((pending) => pending.group.role === 'system' && pending.group.segmentIds.includes('agent.prompt.system'));
403
- if (duplicateSystemIndex >= 0) {
404
- pendingGroups.splice(duplicateSystemIndex, 1);
405
- }
406
- }
407
- }
408
- }
409
- for (const pending of pendingGroups) {
410
- const group = pending.group;
411
- ctx.emitMessageEvent({
412
- type: 'append',
413
- message: createContextMessage(pending.promptHash, group.role, group.content, group.segmentIds),
414
- });
415
- appendRuntimeEvent(ctx, 'context.message.appended', {
416
- promptHash: pending.promptHash,
417
- role: group.role,
418
- segmentIds: group.segmentIds,
419
- });
420
- emittedContextMutation = true;
421
- }
422
- const renderedInboundInput = ctx.runtime.inbound.kind === 'connector'
423
- ? renderInboundParts(ctx.runtime.inbound.content)
424
- : '';
425
- const inboundInput = renderedInboundInput.trim().length > 0
426
- ? renderedInboundInput
427
- : (typeof ctx.inputEvent.input === 'string' ? ctx.inputEvent.input : '');
428
- if (config.includeInboundInput && inboundInput.trim().length > 0) {
429
- ctx.emitMessageEvent({
430
- type: 'append',
431
- message: createInboundInputMessage(ctx, inboundInput),
432
- });
433
- appendRuntimeEvent(ctx, 'context.inbound.appended');
434
- }
435
- if (!emittedContextMutation) {
436
- appendRuntimeEvent(ctx, 'context.message.empty');
437
- }
438
- }
439
- export function register(api, rawConfig) {
440
- const config = readConfig(rawConfig);
441
- api.pipeline.register('turn', async (ctx) => {
442
- await emitContextMessages(ctx, config);
443
- return ctx.next();
444
- });
445
- }
446
- //# sourceMappingURL=context-message.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-message.js","sourceRoot":"","sources":["../../src/extensions/context-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,cAAc,GAAG,iBAAiB,CAAC;AACzC,MAAM,6BAA6B,GAAG,kBAAkB,CAAC;AACzD,MAAM,0BAA0B,GAAG,yBAAyB,CAAC;AAC7D,MAAM,4BAA4B,GAAG,kBAAkB,CAAC;AAoCxD,MAAM,cAAc,GAA4C;IAC9D,kBAAkB,EAAE,IAAI;IACxB,qBAAqB,EAAE,KAAK;IAC5B,mBAAmB,EAAE,KAAK;IAC1B,mBAAmB,EAAE,IAAI;CAC1B,CAAC;AAEF,SAAS,UAAU,CAAC,GAAY;IAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,MAAM,GAA4C,EAAE,GAAG,cAAc,EAAE,CAAC;IAC9E,IAAI,OAAO,GAAG,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAChD,MAAM,CAAC,kBAAkB,GAAG,GAAG,CAAC,kBAAkB,CAAC;IACrD,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;QACnD,MAAM,CAAC,qBAAqB,GAAG,GAAG,CAAC,qBAAqB,CAAC;IAC3D,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,CAAC,mBAAmB,GAAG,GAAG,CAAC,mBAAmB,CAAC;IACvD,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,CAAC,mBAAmB,GAAG,GAAG,CAAC,mBAAmB,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAoD;IAC5E,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAgB;IAC5C,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,MAAM,EAAE,UAAU,CAAC;AAC5B,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAgB;IAChD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IAC/D,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;IACxC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAyB;QACnC,UAAU;KACX,CAAC;IACF,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7D,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC/B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU;aACrC,MAAM,CAAC,CAAC,SAAS,EAAuB,EAAE,CAAC,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAwC,EAAE,SAAiB;IACxF,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAAmB,EACnB,UAAkB,EAClB,IAAwB,EACxB,OAAe;IAEf,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IACE,OAAO,CAAC,QAAQ,CAAC,WAAW,KAAK,cAAc;eAC5C,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI;eAC1B,OAAO,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,EACnC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,UAAkB,EAAE,IAAwB,EAAE,UAAoB;IAC7F,MAAM,MAAM,GAAe;QACzB,UAAU;QACV,IAAI;QACJ,UAAU;KACX,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAC3B,UAAkB,EAClB,IAAwB,EACxB,OAAe,EACf,UAAoB;IAEpB,MAAM,QAAQ,GAA8B;QAC1C,CAAC,0BAA0B,CAAC,EAAE,mBAAmB,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC;KAChF,CAAC;IACF,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,QAAQ,CAAC,WAAW,GAAG,cAAc,CAAC;IAEtC,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC;QACnB,IAAI,EAAE;YACJ,IAAI;YACJ,OAAO;SACR;QACD,QAAQ;QACR,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,GAA0B;IAC5D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;IACpC,MAAM,OAAO,GAA8B;QACzC,UAAU,EAAE,OAAO,CAAC,IAAI;QACxB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;IACF,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpF,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpF,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAkC,CAAC;QAClE,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC5C,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO;QACL,CAAC,4BAA4B,CAAC,EAAE,OAAO;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,GAA0B,EAAE,OAAe;IAC5E,MAAM,QAAQ,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IACjD,QAAQ,CAAC,WAAW,GAAG,cAAc,CAAC;IAEtC,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC;QACnB,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM;YACZ,OAAO;SACR;QACD,QAAQ;QACR,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA2B;IACrD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,gBAAgB,GAAa,EAAE,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtG,gBAAgB,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YACpF,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG;YAC9B,CAAC,CAAC,EAAE,CAAC;QACP,gBAAgB,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,kBAAkB,CACzB,GAA0B,EAC1B,IAAY,EACZ,OAA+B,SAAS;IAExC,MAAM,OAAO,GAAgB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;QAClD,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,KAAK,GAAe;QACxB,IAAI;QACJ,KAAK,EAAE,cAAc;QACrB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAC7B,CAAC;IACF,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvD,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,GAAG,CAAC,QAAQ,CAAC,6BAA6B,CAAC,GAAG,OAAO,CAAC;AACxD,CAAC;AAED,SAAS,kBAAkB,CAAC,QAA8B;IACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACvF,CAAC,CAAC,MAAM,CAAC,MAAM;QACf,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,4BAA4B,CAAC,GAA0B;IAC9D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;IACpC,MAAM,KAAK,GAAa;QACtB,mBAAmB;QACnB,WAAW,OAAO,CAAC,OAAO,EAAE;QAC5B,aAAa,OAAO,CAAC,SAAS,EAAE;QAChC,QAAQ,OAAO,CAAC,IAAI,EAAE;QACtB,cAAc,OAAO,CAAC,UAAU,EAAE;QAClC,aAAa,OAAO,CAAC,SAAS,EAAE;KACjC,CAAC;IACF,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpF,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpF,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAEjC,OAAO;QACL,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,GAA0B;IAC5D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;IACpC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAExE,MAAM,KAAK,GAAa;QACtB,iBAAiB;QACjB,oBAAoB;QACpB,cAAc,OAAO,CAAC,IAAI,EAAE;QAC5B,cAAc,OAAO,CAAC,UAAU,EAAE;QAClC,aAAa,OAAO,CAAC,SAAS,EAAE;QAChC,WAAW,OAAO,CAAC,OAAO,EAAE;KAC7B,CAAC;IACF,IAAI,qBAAqB,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,wBAAwB,qBAAqB,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAE/B,OAAO;QACL,EAAE,EAAE,uBAAuB;QAC3B,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAa;IAC9B,qBAAqB;IACrB,iBAAiB;IACjB,uBAAuB;CACxB,CAAC;AAEF,SAAS,mBAAmB,CAAC,QAA0B;IACrD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;QAClC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC;QAChE,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC;QAClE,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,SAAS,GAAG,UAAU,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAC7B,GAA0B,EAC1B,MAA+C;IAK/C,MAAM,WAAW,GAAwB,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAqB,EAAE,CAAC;IAEtC,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACxE,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,qBAAqB;gBACzB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM;aAChB,CAAC,CAAC;YACH,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC/D,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,uBAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,OAAO;QACL,WAAW;QACX,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,CAAC;KACxC,CAAC;AACJ,CAAC;AAQD,SAAS,oBAAoB,CAAC,QAA0B;IACtD,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YACvD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjC,SAAS;QACX,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;SACzB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,GAA0B,EAC1B,MAA+C;IAE/C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrD,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC9C,kBAAkB,CAAC,GAAG,EAAE,0BAA0B,EAAE;YAClD,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,QAAQ,EAAE,UAAU,CAAC,QAAQ;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,kBAAkB,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,GAAG,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC;IAC5D,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CACpC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CACvF,CAAC;IACF,MAAM,iBAAiB,GAAG,kBAAkB;QAC1C,CAAC,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAC1F,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,aAAa,GAGd,EAAE,CAAC;IACR,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClF,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACjF,kBAAkB,CAAC,GAAG,EAAE,2BAA2B,EAAE;gBACnD,UAAU;gBACV,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,sBAAsB,GAAG,KAAK,CAAC;IACnC,IAAI,kBAAkB,IAAI,iBAAiB,EAAE,CAAC;QAC5C,MAAM,eAAe,GAAG,gBAAgB;aACrC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;aACnD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACjB,OAAO;YACP,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC;SAC1C,CAAC,CAAC,CAAC;QAEN,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,iBAAiB,CAAC;mBAC5F,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;mBAC3F,eAAe,CAAC,CAAC,CAAC,CAAC;YAExB,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC;gBACxC,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC;gBACtC,MAAM,oBAAoB,GAAG,YAAY,EAAE,UAAU,KAAK,iBAAiB;uBACtE,aAAa,CAAC,IAAI,CAAC,OAAO,KAAK,kBAAkB,CAAC,OAAO,CAAC;gBAE/D,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC1B,GAAG,CAAC,gBAAgB,CAAC;wBACnB,IAAI,EAAE,SAAS;wBACf,QAAQ,EAAE,aAAa,CAAC,EAAE;wBAC1B,OAAO,EAAE,oBAAoB,CAC3B,iBAAiB,EACjB,QAAQ,EACR,kBAAkB,CAAC,OAAO,EAC1B,kBAAkB,CAAC,UAAU,CAC9B;qBACF,CAAC,CAAC;oBACH,kBAAkB,CAAC,GAAG,EAAE,0BAA0B,EAAE;wBAClD,QAAQ,EAAE,aAAa,CAAC,EAAE;wBAC1B,UAAU,EAAE,iBAAiB;wBAC7B,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,kBAAkB,CAAC,UAAU;qBAC1C,CAAC,CAAC;oBACH,sBAAsB,GAAG,IAAI,CAAC;gBAChC,CAAC;gBAED,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;oBACpC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,EAAE,CAAC;wBAC1C,SAAS;oBACX,CAAC;oBACD,GAAG,CAAC,gBAAgB,CAAC;wBACnB,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;qBAC3B,CAAC,CAAC;oBACH,kBAAkB,CAAC,GAAG,EAAE,yBAAyB,EAAE;wBACjD,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;wBAC1B,IAAI,EAAE,QAAQ;qBACf,CAAC,CAAC;oBACH,sBAAsB,GAAG,IAAI,CAAC;gBAChC,CAAC;gBAED,MAAM,oBAAoB,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAC/D,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBAC/F,IAAI,oBAAoB,IAAI,CAAC,EAAE,CAAC;oBAC9B,aAAa,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,GAAG,CAAC,gBAAgB,CAAC;YACnB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,oBAAoB,CAC3B,OAAO,CAAC,UAAU,EAClB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,UAAU,CACjB;SACF,CAAC,CAAC;QAEH,kBAAkB,CAAC,GAAG,EAAE,0BAA0B,EAAE;YAClD,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;QACH,sBAAsB,GAAG,IAAI,CAAC;IAChC,CAAC;IAED,MAAM,oBAAoB,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;QACnE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QACjD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACzD,CAAC,CAAC,oBAAoB;QACtB,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,mBAAmB,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,gBAAgB,CAAC;YACnB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,yBAAyB,CAAC,GAAG,EAAE,YAAY,CAAC;SACtD,CAAC,CAAC;QACH,kBAAkB,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,kBAAkB,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAiB,EAAE,SAAmB;IAC7D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAErC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1C,MAAM,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,13 +0,0 @@
1
- export { register as registerLoggingExtension, registerLoggingExtension as createLoggingExtension, } from './logging.js';
2
- export type { LoggingExtensionConfig } from './logging.js';
3
- export { register as registerCompactionExtension, registerCompactionExtension as createCompactionExtension, } from './compaction.js';
4
- export type { CompactionExtensionConfig } from './compaction.js';
5
- export { register as registerMessageWindowExtension, registerMessageWindowExtension as createMessageWindowExtension, } from './message-window.js';
6
- export type { MessageWindowExtensionConfig } from './message-window.js';
7
- export { register as registerToolSearchExtension, registerToolSearchExtension as createToolSearchExtension, } from './tool-search.js';
8
- export type { ToolSearchExtensionConfig } from './tool-search.js';
9
- export { register as registerContextMessageExtension, register as createContextMessageExtension, } from './context-message.js';
10
- export type { ContextMessageExtensionConfig } from './context-message.js';
11
- export { register as registerRequiredToolsGuardExtension } from './required-tools-guard.js';
12
- export type { RequiredToolsGuardConfig } from './required-tools-guard.js';
13
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,IAAI,wBAAwB,EACpC,wBAAwB,IAAI,sBAAsB,GACnD,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EACL,QAAQ,IAAI,2BAA2B,EACvC,2BAA2B,IAAI,yBAAyB,GACzD,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EACL,QAAQ,IAAI,8BAA8B,EAC1C,8BAA8B,IAAI,4BAA4B,GAC/D,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EACL,QAAQ,IAAI,2BAA2B,EACvC,2BAA2B,IAAI,yBAAyB,GACzD,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,EACL,QAAQ,IAAI,+BAA+B,EAC3C,QAAQ,IAAI,6BAA6B,GAC1C,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAE1E,OAAO,EAAE,QAAQ,IAAI,mCAAmC,EAAE,MAAM,2BAA2B,CAAC;AAC5F,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1,7 +0,0 @@
1
- export { register as registerLoggingExtension, registerLoggingExtension as createLoggingExtension, } from './logging.js';
2
- export { register as registerCompactionExtension, registerCompactionExtension as createCompactionExtension, } from './compaction.js';
3
- export { register as registerMessageWindowExtension, registerMessageWindowExtension as createMessageWindowExtension, } from './message-window.js';
4
- export { register as registerToolSearchExtension, registerToolSearchExtension as createToolSearchExtension, } from './tool-search.js';
5
- export { register as registerContextMessageExtension, register as createContextMessageExtension, } from './context-message.js';
6
- export { register as registerRequiredToolsGuardExtension } from './required-tools-guard.js';
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,IAAI,wBAAwB,EACpC,wBAAwB,IAAI,sBAAsB,GACnD,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,QAAQ,IAAI,2BAA2B,EACvC,2BAA2B,IAAI,yBAAyB,GACzD,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,QAAQ,IAAI,8BAA8B,EAC1C,8BAA8B,IAAI,4BAA4B,GAC/D,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,QAAQ,IAAI,2BAA2B,EACvC,2BAA2B,IAAI,yBAAyB,GACzD,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,QAAQ,IAAI,+BAA+B,EAC3C,QAAQ,IAAI,6BAA6B,GAC1C,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,QAAQ,IAAI,mCAAmC,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1,11 +0,0 @@
1
- import type { ExtensionApi } from '../types.js';
2
- type LogLevel = 'debug' | 'info' | 'warn' | 'error';
3
- export interface LoggingExtensionConfig {
4
- level?: LogLevel;
5
- includeToolArgs?: boolean;
6
- includeTurnMetadata?: boolean;
7
- }
8
- export declare function registerLoggingExtension(api: ExtensionApi, config?: LoggingExtensionConfig): void;
9
- export declare function register(api: ExtensionApi, config?: LoggingExtensionConfig): void;
10
- export {};
11
- //# sourceMappingURL=logging.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/extensions/logging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAIb,MAAM,aAAa,CAAC;AAErB,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAsCD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,YAAY,EACjB,MAAM,GAAE,sBAA2B,GAClC,IAAI,CA0GN;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAEjF"}
@@ -1,140 +0,0 @@
1
- const LOG_LEVEL_WEIGHT = {
2
- debug: 10,
3
- info: 20,
4
- warn: 30,
5
- error: 40,
6
- };
7
- function toErrorMessage(error) {
8
- if (error instanceof Error) {
9
- return error.message;
10
- }
11
- return String(error);
12
- }
13
- function shouldLog(minimum, level) {
14
- return LOG_LEVEL_WEIGHT[level] >= LOG_LEVEL_WEIGHT[minimum];
15
- }
16
- function buildTurnMeta(ctx) {
17
- return {
18
- turnId: ctx.turnId,
19
- traceId: ctx.traceId,
20
- inputType: ctx.inputEvent.type,
21
- };
22
- }
23
- function buildToolMeta(ctx) {
24
- return {
25
- turnId: ctx.turnId,
26
- traceId: ctx.traceId,
27
- stepIndex: ctx.stepIndex,
28
- toolCallId: ctx.toolCallId,
29
- toolName: ctx.toolName,
30
- };
31
- }
32
- export function registerLoggingExtension(api, config = {}) {
33
- const level = config.level ?? 'info';
34
- const includeToolArgs = config.includeToolArgs ?? false;
35
- const includeTurnMetadata = config.includeTurnMetadata ?? true;
36
- api.pipeline.register('turn', async (ctx) => {
37
- const startedAt = Date.now();
38
- if (shouldLog(level, 'info')) {
39
- if (includeTurnMetadata) {
40
- api.logger.info('[logging.turn] start', buildTurnMeta(ctx));
41
- }
42
- else {
43
- api.logger.info(`[logging.turn] start turnId=${ctx.turnId}`);
44
- }
45
- }
46
- try {
47
- const result = await ctx.next();
48
- if (shouldLog(level, 'info')) {
49
- api.logger.info('[logging.turn] complete', {
50
- turnId: ctx.turnId,
51
- durationMs: Date.now() - startedAt,
52
- finishReason: result.finishReason,
53
- });
54
- }
55
- return result;
56
- }
57
- catch (error) {
58
- if (shouldLog(level, 'error')) {
59
- api.logger.error('[logging.turn] failed', {
60
- turnId: ctx.turnId,
61
- durationMs: Date.now() - startedAt,
62
- error: toErrorMessage(error),
63
- });
64
- }
65
- throw error;
66
- }
67
- });
68
- api.pipeline.register('step', async (ctx) => {
69
- const startedAt = Date.now();
70
- if (shouldLog(level, 'info')) {
71
- api.logger.info('[logging.step] start', {
72
- turnId: ctx.turnId,
73
- stepIndex: ctx.stepIndex,
74
- catalogSize: ctx.toolCatalog.length,
75
- });
76
- }
77
- try {
78
- const result = await ctx.next();
79
- if (shouldLog(level, 'info')) {
80
- api.logger.info('[logging.step] complete', {
81
- turnId: ctx.turnId,
82
- stepIndex: ctx.stepIndex,
83
- durationMs: Date.now() - startedAt,
84
- shouldContinue: result.shouldContinue,
85
- });
86
- }
87
- return result;
88
- }
89
- catch (error) {
90
- if (shouldLog(level, 'error')) {
91
- api.logger.error('[logging.step] failed', {
92
- turnId: ctx.turnId,
93
- stepIndex: ctx.stepIndex,
94
- durationMs: Date.now() - startedAt,
95
- error: toErrorMessage(error),
96
- });
97
- }
98
- throw error;
99
- }
100
- });
101
- api.pipeline.register('toolCall', async (ctx) => {
102
- const startedAt = Date.now();
103
- if (shouldLog(level, 'debug')) {
104
- if (includeToolArgs) {
105
- api.logger.debug('[logging.toolCall] start', {
106
- ...buildToolMeta(ctx),
107
- args: ctx.args,
108
- });
109
- }
110
- else {
111
- api.logger.debug('[logging.toolCall] start', buildToolMeta(ctx));
112
- }
113
- }
114
- try {
115
- const result = await ctx.next();
116
- if (shouldLog(level, 'debug')) {
117
- api.logger.debug('[logging.toolCall] complete', {
118
- ...buildToolMeta(ctx),
119
- durationMs: Date.now() - startedAt,
120
- status: result.status,
121
- });
122
- }
123
- return result;
124
- }
125
- catch (error) {
126
- if (shouldLog(level, 'error')) {
127
- api.logger.error('[logging.toolCall] failed', {
128
- ...buildToolMeta(ctx),
129
- durationMs: Date.now() - startedAt,
130
- error: toErrorMessage(error),
131
- });
132
- }
133
- throw error;
134
- }
135
- });
136
- }
137
- export function register(api, config) {
138
- registerLoggingExtension(api, config);
139
- }
140
- //# sourceMappingURL=logging.js.map