@goondan/openharness-base 0.0.1-alpha5 → 0.1.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 (80) hide show
  1. package/dist/extensions/compaction.d.ts +12 -0
  2. package/dist/extensions/compaction.d.ts.map +1 -0
  3. package/dist/extensions/compaction.js +159 -0
  4. package/dist/extensions/compaction.js.map +1 -0
  5. package/dist/extensions/context-message.d.ts +9 -0
  6. package/dist/extensions/context-message.d.ts.map +1 -0
  7. package/dist/extensions/context-message.js +446 -0
  8. package/dist/extensions/context-message.js.map +1 -0
  9. package/dist/extensions/index.d.ts +13 -0
  10. package/dist/extensions/index.d.ts.map +1 -0
  11. package/dist/extensions/index.js +7 -0
  12. package/dist/extensions/index.js.map +1 -0
  13. package/dist/extensions/logging.d.ts +11 -0
  14. package/dist/extensions/logging.d.ts.map +1 -0
  15. package/dist/extensions/logging.js +140 -0
  16. package/dist/extensions/logging.js.map +1 -0
  17. package/dist/extensions/message-integrity.d.ts +8 -0
  18. package/dist/extensions/message-integrity.d.ts.map +1 -0
  19. package/dist/extensions/message-integrity.js +88 -0
  20. package/dist/extensions/message-integrity.js.map +1 -0
  21. package/dist/extensions/message-window.d.ts +7 -0
  22. package/dist/extensions/message-window.d.ts.map +1 -0
  23. package/dist/extensions/message-window.js +60 -0
  24. package/dist/extensions/message-window.js.map +1 -0
  25. package/dist/extensions/required-tools-guard.d.ts +9 -0
  26. package/dist/extensions/required-tools-guard.d.ts.map +1 -0
  27. package/dist/extensions/required-tools-guard.js +74 -0
  28. package/dist/extensions/required-tools-guard.js.map +1 -0
  29. package/dist/extensions/tool-search.d.ts +10 -0
  30. package/dist/extensions/tool-search.d.ts.map +1 -0
  31. package/dist/extensions/tool-search.js +198 -0
  32. package/dist/extensions/tool-search.js.map +1 -0
  33. package/dist/harness.yaml +503 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/manifests/base.d.ts +8 -0
  37. package/dist/manifests/base.d.ts.map +1 -0
  38. package/dist/manifests/base.js +352 -0
  39. package/dist/manifests/base.js.map +1 -0
  40. package/dist/manifests/index.d.ts +3 -0
  41. package/dist/manifests/index.d.ts.map +1 -0
  42. package/dist/manifests/index.js +2 -0
  43. package/dist/manifests/index.js.map +1 -0
  44. package/dist/tools/bash.d.ts +8 -0
  45. package/dist/tools/bash.d.ts.map +1 -0
  46. package/dist/tools/bash.js +119 -0
  47. package/dist/tools/bash.js.map +1 -0
  48. package/dist/tools/file-system.d.ts +12 -0
  49. package/dist/tools/file-system.d.ts.map +1 -0
  50. package/dist/tools/file-system.js +117 -0
  51. package/dist/tools/file-system.js.map +1 -0
  52. package/dist/tools/http-fetch.d.ts +8 -0
  53. package/dist/tools/http-fetch.d.ts.map +1 -0
  54. package/dist/tools/http-fetch.js +149 -0
  55. package/dist/tools/http-fetch.js.map +1 -0
  56. package/dist/tools/index.d.ts +7 -0
  57. package/dist/tools/index.d.ts.map +1 -0
  58. package/dist/tools/index.js +7 -0
  59. package/dist/tools/index.js.map +1 -0
  60. package/dist/tools/json-query.d.ts +12 -0
  61. package/dist/tools/json-query.d.ts.map +1 -0
  62. package/dist/tools/json-query.js +176 -0
  63. package/dist/tools/json-query.js.map +1 -0
  64. package/dist/tools/text-transform.d.ts +16 -0
  65. package/dist/tools/text-transform.d.ts.map +1 -0
  66. package/dist/tools/text-transform.js +127 -0
  67. package/dist/tools/text-transform.js.map +1 -0
  68. package/dist/tools/wait.d.ts +6 -0
  69. package/dist/tools/wait.d.ts.map +1 -0
  70. package/dist/tools/wait.js +32 -0
  71. package/dist/tools/wait.js.map +1 -0
  72. package/dist/types.d.ts +4 -0
  73. package/dist/types.d.ts.map +1 -0
  74. package/dist/types.js +6 -0
  75. package/dist/types.js.map +1 -0
  76. package/dist/utils.d.ts +17 -0
  77. package/dist/utils.d.ts.map +1 -0
  78. package/dist/utils.js +159 -0
  79. package/dist/utils.js.map +1 -0
  80. package/package.json +13 -10
@@ -0,0 +1,198 @@
1
+ import { isJsonObject, optionalNumber, requireString, } from '../utils.js';
2
+ const DEFAULT_CONFIG = {
3
+ toolName: 'tool-search__search',
4
+ maxResults: 10,
5
+ minQueryLength: 1,
6
+ persistSelection: true,
7
+ };
8
+ function readStringArray(value) {
9
+ if (!Array.isArray(value)) {
10
+ return [];
11
+ }
12
+ const output = [];
13
+ for (const item of value) {
14
+ if (typeof item === 'string') {
15
+ output.push(item);
16
+ }
17
+ }
18
+ return output;
19
+ }
20
+ function readSnapshot(value) {
21
+ if (!Array.isArray(value)) {
22
+ return [];
23
+ }
24
+ const snapshot = [];
25
+ for (const item of value) {
26
+ if (!isJsonObject(item)) {
27
+ continue;
28
+ }
29
+ const name = item.name;
30
+ const description = item.description;
31
+ if (typeof name !== 'string') {
32
+ continue;
33
+ }
34
+ if (description !== undefined && typeof description !== 'string') {
35
+ continue;
36
+ }
37
+ snapshot.push({ name, description });
38
+ }
39
+ return snapshot;
40
+ }
41
+ function readState(raw) {
42
+ if (!isJsonObject(raw)) {
43
+ return {
44
+ selectedTools: [],
45
+ catalogSnapshot: [],
46
+ };
47
+ }
48
+ const selectedTools = readStringArray(raw.selectedTools);
49
+ const catalogSnapshot = readSnapshot(raw.catalogSnapshot);
50
+ const lastQuery = typeof raw.lastQuery === 'string' ? raw.lastQuery : undefined;
51
+ return {
52
+ selectedTools,
53
+ catalogSnapshot,
54
+ lastQuery,
55
+ };
56
+ }
57
+ function writeState(state) {
58
+ const serializedSnapshot = [];
59
+ for (const item of state.catalogSnapshot) {
60
+ const row = { name: item.name };
61
+ if (item.description) {
62
+ row.description = item.description;
63
+ }
64
+ serializedSnapshot.push(row);
65
+ }
66
+ const output = {
67
+ selectedTools: state.selectedTools,
68
+ catalogSnapshot: serializedSnapshot,
69
+ };
70
+ if (state.lastQuery) {
71
+ output.lastQuery = state.lastQuery;
72
+ }
73
+ return output;
74
+ }
75
+ function normalizeQuery(query) {
76
+ return query.trim().toLowerCase();
77
+ }
78
+ function searchSnapshot(snapshot, query, limit) {
79
+ if (query.length === 0) {
80
+ return [];
81
+ }
82
+ const matched = [];
83
+ for (const item of snapshot) {
84
+ const nameMatch = item.name.toLowerCase().includes(query);
85
+ const descriptionMatch = item.description
86
+ ? item.description.toLowerCase().includes(query)
87
+ : false;
88
+ if (!nameMatch && !descriptionMatch) {
89
+ continue;
90
+ }
91
+ matched.push(item);
92
+ if (matched.length >= limit) {
93
+ break;
94
+ }
95
+ }
96
+ return matched;
97
+ }
98
+ function toJsonResults(items) {
99
+ return items.map((item) => {
100
+ const output = {
101
+ name: item.name,
102
+ };
103
+ if (item.description) {
104
+ output.description = item.description;
105
+ }
106
+ return output;
107
+ });
108
+ }
109
+ function createSearchHandler(api, config) {
110
+ return async (_ctx, input) => {
111
+ const query = requireString(input, 'query');
112
+ const normalizedQuery = normalizeQuery(query);
113
+ if (normalizedQuery.length < config.minQueryLength) {
114
+ return {
115
+ query,
116
+ results: [],
117
+ selectedTools: [],
118
+ };
119
+ }
120
+ const requestedLimit = optionalNumber(input, 'limit', config.maxResults) ?? config.maxResults;
121
+ const safeLimit = Math.max(1, Math.min(config.maxResults, Math.floor(requestedLimit)));
122
+ const currentState = readState(await api.state.get());
123
+ const results = searchSnapshot(currentState.catalogSnapshot, normalizedQuery, safeLimit);
124
+ const selectedTools = results.map((item) => item.name);
125
+ if (config.persistSelection) {
126
+ const nextState = {
127
+ selectedTools,
128
+ catalogSnapshot: currentState.catalogSnapshot,
129
+ lastQuery: query,
130
+ };
131
+ await api.state.set(writeState(nextState));
132
+ }
133
+ return {
134
+ query,
135
+ results: toJsonResults(results),
136
+ selectedTools,
137
+ };
138
+ };
139
+ }
140
+ function snapshotCatalog(catalog) {
141
+ return catalog.map((item) => ({
142
+ name: item.name,
143
+ description: item.description,
144
+ }));
145
+ }
146
+ function filterCatalog(ctx, selectedTools, searchToolName) {
147
+ if (selectedTools.length === 0) {
148
+ return;
149
+ }
150
+ const allow = new Set();
151
+ for (const toolName of selectedTools) {
152
+ allow.add(toolName);
153
+ }
154
+ allow.add(searchToolName);
155
+ ctx.toolCatalog = ctx.toolCatalog.filter((item) => allow.has(item.name));
156
+ }
157
+ function mergeConfig(config) {
158
+ return {
159
+ toolName: config?.toolName ?? DEFAULT_CONFIG.toolName,
160
+ maxResults: config?.maxResults ?? DEFAULT_CONFIG.maxResults,
161
+ minQueryLength: config?.minQueryLength ?? DEFAULT_CONFIG.minQueryLength,
162
+ persistSelection: config?.persistSelection ?? DEFAULT_CONFIG.persistSelection,
163
+ };
164
+ }
165
+ export function registerToolSearchExtension(api, config) {
166
+ const settings = mergeConfig(config);
167
+ api.tools.register({
168
+ name: settings.toolName,
169
+ description: 'Search available tools and store next-step catalog selection',
170
+ parameters: {
171
+ type: 'object',
172
+ properties: {
173
+ query: { type: 'string' },
174
+ limit: { type: 'number' },
175
+ },
176
+ required: ['query'],
177
+ },
178
+ source: {
179
+ type: 'extension',
180
+ name: 'tool-search',
181
+ },
182
+ }, createSearchHandler(api, settings));
183
+ api.pipeline.register('step', async (ctx) => {
184
+ const previousState = readState(await api.state.get());
185
+ filterCatalog(ctx, previousState.selectedTools, settings.toolName);
186
+ const nextState = {
187
+ selectedTools: previousState.selectedTools,
188
+ lastQuery: previousState.lastQuery,
189
+ catalogSnapshot: snapshotCatalog(ctx.toolCatalog),
190
+ };
191
+ await api.state.set(writeState(nextState));
192
+ return ctx.next();
193
+ });
194
+ }
195
+ export function register(api, config) {
196
+ registerToolSearchExtension(api, config);
197
+ }
198
+ //# sourceMappingURL=tool-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-search.js","sourceRoot":"","sources":["../../src/extensions/tool-search.ts"],"names":[],"mappings":"AASA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,GACd,MAAM,aAAa,CAAC;AAoBrB,MAAM,cAAc,GAAwC;IAC1D,QAAQ,EAAE,qBAAqB;IAC/B,UAAU,EAAE,EAAE;IACd,cAAc,EAAE,CAAC;IACjB,gBAAgB,EAAE,IAAI;CACvB,CAAC;AAEF,SAAS,eAAe,CAAC,KAA4B;IACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,KAA4B;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAErC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,IAAI,WAAW,KAAK,SAAS,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACjE,SAAS;QACX,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAAC,GAAqB;IACtC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,aAAa,EAAE,EAAE;YACjB,eAAe,EAAE,EAAE;SACpB,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhF,OAAO;QACL,aAAa;QACb,eAAe;QACf,SAAS;KACV,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAsB;IACxC,MAAM,kBAAkB,GAAiB,EAAE,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QACzC,MAAM,GAAG,GAAe,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,CAAC;QACD,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,MAAM,GAAe;QACzB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,eAAe,EAAE,kBAAkB;KACpC,CAAC;IAEF,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IACrC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,cAAc,CACrB,QAAkC,EAClC,KAAa,EACb,KAAa;IAEb,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAA6B,EAAE,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW;YACvC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAChD,CAAC,CAAC,KAAK,CAAC;QAEV,IAAI,CAAC,SAAS,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpC,SAAS;QACX,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;YAC5B,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,KAA+B;IACpD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,MAAM,GAAe;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;QACF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACxC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAC1B,GAAiB,EACjB,MAA2C;IAE3C,OAAO,KAAK,EAAE,IAAiB,EAAE,KAAiB,EAAsB,EAAE;QACxE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAE9C,IAAI,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;YACnD,OAAO;gBACL,KAAK;gBACL,OAAO,EAAE,EAAE;gBACX,aAAa,EAAE,EAAE;aAClB,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC;QAC9F,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAEvF,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,cAAc,CAAC,YAAY,CAAC,eAAe,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;QACzF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAoB;gBACjC,aAAa;gBACb,eAAe,EAAE,YAAY,CAAC,eAAe;gBAC7C,SAAS,EAAE,KAAK;aACjB,CAAC;YACF,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO;YACL,KAAK;YACL,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;YAC/B,aAAa;SACd,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,OAA0B;IACjD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CACpB,GAA0B,EAC1B,aAAuB,EACvB,cAAsB;IAEtB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAE1B,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,WAAW,CAAC,MAAkC;IACrD,OAAO;QACL,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,cAAc,CAAC,QAAQ;QACrD,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,cAAc,CAAC,UAAU;QAC3D,cAAc,EAAE,MAAM,EAAE,cAAc,IAAI,cAAc,CAAC,cAAc;QACvE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,IAAI,cAAc,CAAC,gBAAgB;KAC9E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,GAAiB,EACjB,MAAkC;IAElC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAErC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAChB;QACE,IAAI,EAAE,QAAQ,CAAC,QAAQ;QACvB,WAAW,EAAE,8DAA8D;QAC3E,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC1B;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,aAAa;SACpB;KACF,EACD,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC,CACnC,CAAC;IAEF,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1C,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QAEvD,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEnE,MAAM,SAAS,GAAoB;YACjC,aAAa,EAAE,aAAa,CAAC,aAAa;YAC1C,SAAS,EAAE,aAAa,CAAC,SAAS;YAClC,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC;SAClD,CAAC;QAEF,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAiB,EAAE,MAAkC;IAC5E,2BAA2B,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC"}