@k8slens/ai-tools-contracts 1.0.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 (69) hide show
  1. package/dist/index.d.ts +34 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +642 -0
  4. package/dist/src/ai-tool-configuration.d.ts +51 -0
  5. package/dist/src/ai-tool-configuration.d.ts.map +1 -0
  6. package/dist/src/ai-tool-description.d.ts +25 -0
  7. package/dist/src/ai-tool-description.d.ts.map +1 -0
  8. package/dist/src/ai-tool-detection.d.ts +20 -0
  9. package/dist/src/ai-tool-detection.d.ts.map +1 -0
  10. package/dist/src/ai-tool-display-name.d.ts +18 -0
  11. package/dist/src/ai-tool-display-name.d.ts.map +1 -0
  12. package/dist/src/ai-tool-icon.d.ts +577 -0
  13. package/dist/src/ai-tool-icon.d.ts.map +1 -0
  14. package/dist/src/ai-tool-injection-token.d.ts +10 -0
  15. package/dist/src/ai-tool-injection-token.d.ts.map +1 -0
  16. package/dist/src/ai-tool-installation-instructions.d.ts +20 -0
  17. package/dist/src/ai-tool-installation-instructions.d.ts.map +1 -0
  18. package/dist/src/ai-tool-installed-via-cli-command.d.ts +17 -0
  19. package/dist/src/ai-tool-installed-via-cli-command.d.ts.map +1 -0
  20. package/dist/src/ai-tool-instructions-filename.d.ts +20 -0
  21. package/dist/src/ai-tool-instructions-filename.d.ts.map +1 -0
  22. package/dist/src/ai-tool-instructions-filenames.d.ts +13 -0
  23. package/dist/src/ai-tool-instructions-filenames.d.ts.map +1 -0
  24. package/dist/src/ai-tool-is-configured.d.ts +17 -0
  25. package/dist/src/ai-tool-is-configured.d.ts.map +1 -0
  26. package/dist/src/ai-tool-name.d.ts +17 -0
  27. package/dist/src/ai-tool-name.d.ts.map +1 -0
  28. package/dist/src/ai-tool-order-number.d.ts +16 -0
  29. package/dist/src/ai-tool-order-number.d.ts.map +1 -0
  30. package/dist/src/ai-tool-selection-row.d.ts +18 -0
  31. package/dist/src/ai-tool-selection-row.d.ts.map +1 -0
  32. package/dist/src/ai-tool-settings.d.ts +18 -0
  33. package/dist/src/ai-tool-settings.d.ts.map +1 -0
  34. package/dist/src/ai-tool-top-bar-menu.d.ts +46 -0
  35. package/dist/src/ai-tool-top-bar-menu.d.ts.map +1 -0
  36. package/dist/src/ai-tool.d.ts +64 -0
  37. package/dist/src/ai-tool.d.ts.map +1 -0
  38. package/dist/src/ai-tools-injection-token.d.ts +12 -0
  39. package/dist/src/ai-tools-injection-token.d.ts.map +1 -0
  40. package/dist/src/ai-tools-open-externally.d.ts +17 -0
  41. package/dist/src/ai-tools-open-externally.d.ts.map +1 -0
  42. package/dist/src/build-external-terminal-command.d.ts +33 -0
  43. package/dist/src/build-external-terminal-command.d.ts.map +1 -0
  44. package/dist/src/current-shell-family.d.ts +13 -0
  45. package/dist/src/current-shell-family.d.ts.map +1 -0
  46. package/dist/src/default-ai-tool-icon.d.ts +8 -0
  47. package/dist/src/default-ai-tool-icon.d.ts.map +1 -0
  48. package/dist/src/detected-ai-tools.d.ts +15 -0
  49. package/dist/src/detected-ai-tools.d.ts.map +1 -0
  50. package/dist/src/get-ai-command-for-terminal.d.ts +17 -0
  51. package/dist/src/get-ai-command-for-terminal.d.ts.map +1 -0
  52. package/dist/src/get-ai-tool-injectable-bunch.d.ts +534 -0
  53. package/dist/src/get-ai-tool-injectable-bunch.d.ts.map +1 -0
  54. package/dist/src/get-ai-tool-is-installed-cli-command.d.ts +20 -0
  55. package/dist/src/get-ai-tool-is-installed-cli-command.d.ts.map +1 -0
  56. package/dist/src/get-open-tool-in-external-terminal-for-tool.d.ts +17 -0
  57. package/dist/src/get-open-tool-in-external-terminal-for-tool.d.ts.map +1 -0
  58. package/dist/src/get-resume-ai-command-for-terminal.d.ts +23 -0
  59. package/dist/src/get-resume-ai-command-for-terminal.d.ts.map +1 -0
  60. package/dist/src/operating-system-specific.d.ts +16 -0
  61. package/dist/src/operating-system-specific.d.ts.map +1 -0
  62. package/dist/src/os-and-shell-specific.d.ts +133 -0
  63. package/dist/src/os-and-shell-specific.d.ts.map +1 -0
  64. package/dist/src/resolve-llm-command.d.ts +16 -0
  65. package/dist/src/resolve-llm-command.d.ts.map +1 -0
  66. package/dist/src/selected-ai-tool-injection-tokens.d.ts +363 -0
  67. package/dist/src/selected-ai-tool-injection-tokens.d.ts.map +1 -0
  68. package/dist/tsconfig.tsbuildinfo +1 -0
  69. package/package.json +63 -0
@@ -0,0 +1,534 @@
1
+ import { type DropDownMenuItem } from "@k8slens/drop-down-menu-contracts";
2
+ import React from "react";
3
+ import type { SvgProps } from "@k8slens/element-components";
4
+ import type { AiToolKind, GetCliCommand, GetAiToolIsInstalledCliCommand, GetOpenToolInExternalTerminalCliCommand } from "./ai-tool";
5
+ import { type MaybeOperatingSystemAndShellSpecific } from "./os-and-shell-specific";
6
+ import { type AiToolDescriptionProps } from "./ai-tool-description";
7
+ export interface AiToolBunchParams {
8
+ readonly kind: AiToolKind;
9
+ /** Lower comes first; the lowest-numbered installed tool is the default. */
10
+ readonly orderNumber: number;
11
+ /**
12
+ * Builds the in-app launch command (knows how to pass `{prompt}`). A single
13
+ * OS-agnostic builder, or one per operating system.
14
+ */
15
+ readonly getCliCommand: MaybeOperatingSystemAndShellSpecific<GetCliCommand>;
16
+ /**
17
+ * Builds the command that *resumes* the tool when its tab's session is
18
+ * re-established (e.g. after an app restart) rather than first opened — e.g.
19
+ * `claude --continue || claude`, which continues the prior session and falls
20
+ * back to a fresh launch when there is none. A tool with no dedicated resume
21
+ * invocation passes its launch command. Usually ignores `prompt`. OS-agnostic,
22
+ * or one builder per operating system.
23
+ */
24
+ readonly getResumeCliCommand: MaybeOperatingSystemAndShellSpecific<GetCliCommand>;
25
+ /**
26
+ * Builds the command that checks whether the tool is installed (e.g.
27
+ * `command -v claude` / `where claude`), run on the host with exit code 0
28
+ * meaning installed. OS-agnostic, or one builder per operating system. Omit for
29
+ * an always-available tool (e.g. the free-text Custom command), which is then
30
+ * reported as installed.
31
+ */
32
+ readonly getAiToolIsInstalledCliCommand?: MaybeOperatingSystemAndShellSpecific<GetAiToolIsInstalledCliCommand>;
33
+ /**
34
+ * Builds the command that opens the tool in a fresh external terminal window —
35
+ * typically wrapping the tool's invocation with a `build{Mac,Windows,Linux}ExternalTerminalCommand`
36
+ * helper. OS-agnostic, or one builder per operating system.
37
+ */
38
+ readonly getOpenToolInExternalTerminalCliCommand: MaybeOperatingSystemAndShellSpecific<GetOpenToolInExternalTerminalCliCommand>;
39
+ /** Canonical plain-text display name, e.g. `"Claude Code"`. Drives string-only slots and the default name component. Defaults to `kind`. */
40
+ readonly name?: string;
41
+ /** Optional rich display-name component; defaults to a fragment of the display name. */
42
+ readonly Name?: React.ComponentType;
43
+ /** Short blurb introducing the tool (e.g. `"The coding assistant by Anthropic"`), shown as the selector's secondary line. Receives the tool's `isInstalled` state so it may opt to show a "Not found in PATH" message instead. A component so it may include markup/links. Defaults to nothing. */
44
+ readonly Description?: React.ComponentType<AiToolDescriptionProps>;
45
+ /** Icon component (defaults to a generic terminal glyph). Accepts `SvgProps` so call sites can size it. */
46
+ readonly Icon?: React.ComponentType<SvgProps>;
47
+ /** Settings component shown below the selector when this kind is selected (e.g. the custom command input). */
48
+ readonly Settings?: React.ComponentType;
49
+ /** Instructions shown below the selector when this kind is not installed, so it appears disabled with guidance instead of hidden. May contain links. */
50
+ readonly InstallationInstructions?: React.ComponentType;
51
+ /** Filename the tool auto-discovers in its working directory (e.g. `"CLAUDE.md"`). Omit when the tool reads no such file; the launcher always writes the canonical `AGENTS.md`. */
52
+ readonly instructionsFilename?: string;
53
+ }
54
+ /**
55
+ * Register a typical LLM CLI tool: its kind, order, the commands (launch, resume,
56
+ * install-check, open-externally), display name, and icon. Each command may be a
57
+ * single agnostic builder, or vary per operating system and/or shell — registered
58
+ * via `getOsAndShellAwareInjectable`: the OS is filtered at registration (host-only
59
+ * `*-only` tags) and the shell is selected at runtime (`resolveForShell`), since
60
+ * the configured shell is async. The detected tools list runs the install-check
61
+ * command via
62
+ * `aiToolInstalledViaCliCommandInjectionToken` (omit the command for an
63
+ * always-available tool). Bundle several with
64
+ * `getInjectableBunch([ getAiToolInjectableBunch(...), ... ])`.
65
+ */
66
+ export declare const getAiToolInjectableBunch: (params: AiToolBunchParams) => {
67
+ aiTool: import("@k8slens/injectable").Injectable2<() => AiToolKind>;
68
+ orderNumber: import("@k8slens/injectable").Injectable2<() => number>;
69
+ getCliCommand: {
70
+ posix: import("@k8slens/injectable").Injectable2<() => {
71
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
72
+ value: GetCliCommand;
73
+ }>;
74
+ fish: import("@k8slens/injectable").Injectable2<() => {
75
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
76
+ value: GetCliCommand;
77
+ }>;
78
+ cmd: import("@k8slens/injectable").Injectable2<() => {
79
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
80
+ value: GetCliCommand;
81
+ }>;
82
+ powershell: import("@k8slens/injectable").Injectable2<() => {
83
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
84
+ value: GetCliCommand;
85
+ }>;
86
+ } | {
87
+ macos: {
88
+ posix: import("@k8slens/injectable").Injectable2<() => {
89
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
90
+ value: GetCliCommand;
91
+ }>;
92
+ fish: import("@k8slens/injectable").Injectable2<() => {
93
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
94
+ value: GetCliCommand;
95
+ }>;
96
+ cmd: import("@k8slens/injectable").Injectable2<() => {
97
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
98
+ value: GetCliCommand;
99
+ }>;
100
+ powershell: import("@k8slens/injectable").Injectable2<() => {
101
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
102
+ value: GetCliCommand;
103
+ }>;
104
+ };
105
+ windows: {
106
+ posix: import("@k8slens/injectable").Injectable2<() => {
107
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
108
+ value: GetCliCommand;
109
+ }>;
110
+ fish: import("@k8slens/injectable").Injectable2<() => {
111
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
112
+ value: GetCliCommand;
113
+ }>;
114
+ cmd: import("@k8slens/injectable").Injectable2<() => {
115
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
116
+ value: GetCliCommand;
117
+ }>;
118
+ powershell: import("@k8slens/injectable").Injectable2<() => {
119
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
120
+ value: GetCliCommand;
121
+ }>;
122
+ };
123
+ linux: {
124
+ posix: import("@k8slens/injectable").Injectable2<() => {
125
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
126
+ value: GetCliCommand;
127
+ }>;
128
+ fish: import("@k8slens/injectable").Injectable2<() => {
129
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
130
+ value: GetCliCommand;
131
+ }>;
132
+ cmd: import("@k8slens/injectable").Injectable2<() => {
133
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
134
+ value: GetCliCommand;
135
+ }>;
136
+ powershell: import("@k8slens/injectable").Injectable2<() => {
137
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
138
+ value: GetCliCommand;
139
+ }>;
140
+ };
141
+ unitTesting: {
142
+ posix: import("@k8slens/injectable").Injectable2<() => {
143
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
144
+ value: GetCliCommand;
145
+ }>;
146
+ fish: import("@k8slens/injectable").Injectable2<() => {
147
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
148
+ value: GetCliCommand;
149
+ }>;
150
+ cmd: import("@k8slens/injectable").Injectable2<() => {
151
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
152
+ value: GetCliCommand;
153
+ }>;
154
+ powershell: import("@k8slens/injectable").Injectable2<() => {
155
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
156
+ value: GetCliCommand;
157
+ }>;
158
+ };
159
+ };
160
+ getResumeCliCommand: {
161
+ posix: import("@k8slens/injectable").Injectable2<() => {
162
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
163
+ value: GetCliCommand;
164
+ }>;
165
+ fish: import("@k8slens/injectable").Injectable2<() => {
166
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
167
+ value: GetCliCommand;
168
+ }>;
169
+ cmd: import("@k8slens/injectable").Injectable2<() => {
170
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
171
+ value: GetCliCommand;
172
+ }>;
173
+ powershell: import("@k8slens/injectable").Injectable2<() => {
174
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
175
+ value: GetCliCommand;
176
+ }>;
177
+ } | {
178
+ macos: {
179
+ posix: import("@k8slens/injectable").Injectable2<() => {
180
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
181
+ value: GetCliCommand;
182
+ }>;
183
+ fish: import("@k8slens/injectable").Injectable2<() => {
184
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
185
+ value: GetCliCommand;
186
+ }>;
187
+ cmd: import("@k8slens/injectable").Injectable2<() => {
188
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
189
+ value: GetCliCommand;
190
+ }>;
191
+ powershell: import("@k8slens/injectable").Injectable2<() => {
192
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
193
+ value: GetCliCommand;
194
+ }>;
195
+ };
196
+ windows: {
197
+ posix: import("@k8slens/injectable").Injectable2<() => {
198
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
199
+ value: GetCliCommand;
200
+ }>;
201
+ fish: import("@k8slens/injectable").Injectable2<() => {
202
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
203
+ value: GetCliCommand;
204
+ }>;
205
+ cmd: import("@k8slens/injectable").Injectable2<() => {
206
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
207
+ value: GetCliCommand;
208
+ }>;
209
+ powershell: import("@k8slens/injectable").Injectable2<() => {
210
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
211
+ value: GetCliCommand;
212
+ }>;
213
+ };
214
+ linux: {
215
+ posix: import("@k8slens/injectable").Injectable2<() => {
216
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
217
+ value: GetCliCommand;
218
+ }>;
219
+ fish: import("@k8slens/injectable").Injectable2<() => {
220
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
221
+ value: GetCliCommand;
222
+ }>;
223
+ cmd: import("@k8slens/injectable").Injectable2<() => {
224
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
225
+ value: GetCliCommand;
226
+ }>;
227
+ powershell: import("@k8slens/injectable").Injectable2<() => {
228
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
229
+ value: GetCliCommand;
230
+ }>;
231
+ };
232
+ unitTesting: {
233
+ posix: import("@k8slens/injectable").Injectable2<() => {
234
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
235
+ value: GetCliCommand;
236
+ }>;
237
+ fish: import("@k8slens/injectable").Injectable2<() => {
238
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
239
+ value: GetCliCommand;
240
+ }>;
241
+ cmd: import("@k8slens/injectable").Injectable2<() => {
242
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
243
+ value: GetCliCommand;
244
+ }>;
245
+ powershell: import("@k8slens/injectable").Injectable2<() => {
246
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
247
+ value: GetCliCommand;
248
+ }>;
249
+ };
250
+ };
251
+ getOpenToolInExternalTerminalCliCommand: {
252
+ posix: import("@k8slens/injectable").Injectable2<() => {
253
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
254
+ value: GetOpenToolInExternalTerminalCliCommand;
255
+ }>;
256
+ fish: import("@k8slens/injectable").Injectable2<() => {
257
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
258
+ value: GetOpenToolInExternalTerminalCliCommand;
259
+ }>;
260
+ cmd: import("@k8slens/injectable").Injectable2<() => {
261
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
262
+ value: GetOpenToolInExternalTerminalCliCommand;
263
+ }>;
264
+ powershell: import("@k8slens/injectable").Injectable2<() => {
265
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
266
+ value: GetOpenToolInExternalTerminalCliCommand;
267
+ }>;
268
+ } | {
269
+ macos: {
270
+ posix: import("@k8slens/injectable").Injectable2<() => {
271
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
272
+ value: GetOpenToolInExternalTerminalCliCommand;
273
+ }>;
274
+ fish: import("@k8slens/injectable").Injectable2<() => {
275
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
276
+ value: GetOpenToolInExternalTerminalCliCommand;
277
+ }>;
278
+ cmd: import("@k8slens/injectable").Injectable2<() => {
279
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
280
+ value: GetOpenToolInExternalTerminalCliCommand;
281
+ }>;
282
+ powershell: import("@k8slens/injectable").Injectable2<() => {
283
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
284
+ value: GetOpenToolInExternalTerminalCliCommand;
285
+ }>;
286
+ };
287
+ windows: {
288
+ posix: import("@k8slens/injectable").Injectable2<() => {
289
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
290
+ value: GetOpenToolInExternalTerminalCliCommand;
291
+ }>;
292
+ fish: import("@k8slens/injectable").Injectable2<() => {
293
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
294
+ value: GetOpenToolInExternalTerminalCliCommand;
295
+ }>;
296
+ cmd: import("@k8slens/injectable").Injectable2<() => {
297
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
298
+ value: GetOpenToolInExternalTerminalCliCommand;
299
+ }>;
300
+ powershell: import("@k8slens/injectable").Injectable2<() => {
301
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
302
+ value: GetOpenToolInExternalTerminalCliCommand;
303
+ }>;
304
+ };
305
+ linux: {
306
+ posix: import("@k8slens/injectable").Injectable2<() => {
307
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
308
+ value: GetOpenToolInExternalTerminalCliCommand;
309
+ }>;
310
+ fish: import("@k8slens/injectable").Injectable2<() => {
311
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
312
+ value: GetOpenToolInExternalTerminalCliCommand;
313
+ }>;
314
+ cmd: import("@k8slens/injectable").Injectable2<() => {
315
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
316
+ value: GetOpenToolInExternalTerminalCliCommand;
317
+ }>;
318
+ powershell: import("@k8slens/injectable").Injectable2<() => {
319
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
320
+ value: GetOpenToolInExternalTerminalCliCommand;
321
+ }>;
322
+ };
323
+ unitTesting: {
324
+ posix: import("@k8slens/injectable").Injectable2<() => {
325
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
326
+ value: GetOpenToolInExternalTerminalCliCommand;
327
+ }>;
328
+ fish: import("@k8slens/injectable").Injectable2<() => {
329
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
330
+ value: GetOpenToolInExternalTerminalCliCommand;
331
+ }>;
332
+ cmd: import("@k8slens/injectable").Injectable2<() => {
333
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
334
+ value: GetOpenToolInExternalTerminalCliCommand;
335
+ }>;
336
+ powershell: import("@k8slens/injectable").Injectable2<() => {
337
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
338
+ value: GetOpenToolInExternalTerminalCliCommand;
339
+ }>;
340
+ };
341
+ };
342
+ name: import("@k8slens/injectable").Injectable2<() => React.ComponentType<{}>>;
343
+ displayName: import("@k8slens/injectable").Injectable2<() => string>;
344
+ description: import("@k8slens/injectable").Injectable2<() => React.ComponentType<AiToolDescriptionProps>>;
345
+ icon: import("@k8slens/injectable").Injectable2<() => React.ComponentType<{
346
+ $className?: import("@k8slens/public-utilities").IClassName;
347
+ className?: string;
348
+ $block?: boolean | "inline";
349
+ $cursor?: import("@k8slens/element-components").$CursorProps;
350
+ readonly $color?: import("@k8slens/element-components").TextColor | import("@k8slens/element-components").$ColorProps;
351
+ $backgroundColor?: import("@k8slens/element-components").BackgroundColor | import("@k8slens/element-components").$BackgroundColorProps;
352
+ $border?: import("@k8slens/element-components").$BorderProps;
353
+ $padding?: boolean | import("@k8slens/element-components").DirectionalPadding | import("@k8slens/element-components").TShirtSize;
354
+ $margin?: boolean | import("@k8slens/element-components").DirectionalMargin | import("@k8slens/element-components").TShirtSize | "auto";
355
+ $overflow?: import("@k8slens/element-components").Overflow | {
356
+ x?: import("@k8slens/element-components").Overflow;
357
+ y?: import("@k8slens/element-components").Overflow;
358
+ hideScrollbar?: boolean;
359
+ };
360
+ readonly $anchor?: boolean;
361
+ readonly $anchoredAt?: import("@k8slens/element-components").AnchoredAt;
362
+ readonly children?: React.ReactNode;
363
+ readonly $onOutsideClick?: (event: PointerEvent) => void;
364
+ $textAlign?: "left" | "center" | "right";
365
+ $ref?: import("@k8slens/element-components").$RefProp<HTMLElement>;
366
+ ref?: import("@k8slens/element-components").RefLike<HTMLElement>;
367
+ $focusable?: {
368
+ context: import("@k8slens/element-components").AnyFocusableContext<any>;
369
+ item: any;
370
+ orderNumber?: number;
371
+ } | undefined;
372
+ onFocus?: React.FocusEventHandler<HTMLElement> | undefined;
373
+ onBlur?: React.FocusEventHandler<HTMLElement> | undefined;
374
+ onKeyDown?: React.KeyboardEventHandler<HTMLElement> | undefined;
375
+ tabIndex?: HTMLElement["tabIndex"];
376
+ $grayscale?: boolean;
377
+ $style?: React.CSSProperties;
378
+ style?: React.CSSProperties;
379
+ $tint?: string;
380
+ $faded?: boolean;
381
+ $outline?: {
382
+ focusVisible?: import("@k8slens/element-components").$OutlineProps;
383
+ };
384
+ readonly $floating?: import("@k8slens/element-components").$FloatingProps;
385
+ $boxShadow?: boolean | "elevated" | "subtle";
386
+ readonly $hoverable?: import("@k8slens/public-utilities").SingleOrMany<import("@k8slens/element-components").$HoverableProps>;
387
+ onMouseEnter?: React.MouseEventHandler<HTMLElement> | undefined;
388
+ onMouseLeave?: React.MouseEventHandler<HTMLElement> | undefined;
389
+ $hoverableByDragging?: import("@k8slens/public-utilities").SingleOrMany<import("@k8slens/element-components").$HoverableByDraggingProps<any>> | undefined;
390
+ $absolute?: import("@k8slens/element-components").AbsolutePosition | boolean;
391
+ $hidden?: boolean;
392
+ $noPointerEvents?: boolean;
393
+ $offset?: {
394
+ direction: import("@k8slens/element-components").Direction;
395
+ size: import("@k8slens/element-components").TShirtSize;
396
+ };
397
+ $offsetChildren?: {
398
+ direction: import("@k8slens/element-components").Direction;
399
+ size: import("@k8slens/element-components").TShirtSize;
400
+ };
401
+ $relative?: boolean;
402
+ $fixed?: boolean;
403
+ $transition?: boolean;
404
+ $visuallyHidden?: boolean;
405
+ $displayContents?: boolean;
406
+ $draggable?: {
407
+ context: import("@k8slens/element-components").DraggableContext<any>;
408
+ item: any;
409
+ } | undefined;
410
+ $droppable?: {
411
+ context: import("@k8slens/element-components").DraggableContext<any>;
412
+ onDrop: (item: any) => void;
413
+ } | undefined;
414
+ $font?: boolean | {
415
+ size?: import("@k8slens/element-components").FontSize;
416
+ italic?: boolean;
417
+ bold?: boolean | "600";
418
+ lineHeight?: import("@k8slens/element-components").FontLineHeight;
419
+ forceWrap?: boolean;
420
+ noWrap?: boolean;
421
+ uppercase?: boolean;
422
+ underline?: boolean;
423
+ textOverflow?: "clip" | "ellipsis" | "default";
424
+ };
425
+ $tooltip?: string | import("@k8slens/element-components").$TooltipProps<any> | null;
426
+ $width?: import("@k8slens/element-components").TShirtSize | "full" | "stretch" | import("@k8slens/element-components").$WidthProps;
427
+ $height?: import("@k8slens/element-components").TShirtSize | "full" | "auto" | "stretch" | import("@k8slens/element-components").$HeightProps;
428
+ $size?: import("@k8slens/element-components").TShirtSize | "full" | import("@k8slens/element-components").$SizeProps;
429
+ $grid?: import("@k8slens/element-components").GridProps;
430
+ $flex?: import("@k8slens/element-components").SimpleFlexProp | import("@k8slens/element-components").MaximalFlexProps;
431
+ $gradient?: boolean;
432
+ $flexChild?: boolean | number | "shrinkable" | "fixed";
433
+ $area?: boolean;
434
+ $areaContent?: boolean;
435
+ $invisibleBackdrop?: boolean;
436
+ } & React.SVGProps<SVGSVGElement>>>;
437
+ settings: import("@k8slens/injectable").Injectable2<() => React.ComponentType>;
438
+ installationInstructions: import("@k8slens/injectable").Injectable2<() => React.ComponentType>;
439
+ instructionsFilename: import("@k8slens/injectable").Injectable2<() => string | undefined>;
440
+ installedSelectionRow: import("@k8slens/injectable").Injectable2<() => DropDownMenuItem<void>>;
441
+ notInstalledSelectionRow: import("@k8slens/injectable").Injectable2<() => DropDownMenuItem<void>>;
442
+ aiToolIsInstalledCliCommand?: {
443
+ posix: import("@k8slens/injectable").Injectable2<() => {
444
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
445
+ value: GetAiToolIsInstalledCliCommand;
446
+ }>;
447
+ fish: import("@k8slens/injectable").Injectable2<() => {
448
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
449
+ value: GetAiToolIsInstalledCliCommand;
450
+ }>;
451
+ cmd: import("@k8slens/injectable").Injectable2<() => {
452
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
453
+ value: GetAiToolIsInstalledCliCommand;
454
+ }>;
455
+ powershell: import("@k8slens/injectable").Injectable2<() => {
456
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
457
+ value: GetAiToolIsInstalledCliCommand;
458
+ }>;
459
+ } | {
460
+ macos: {
461
+ posix: import("@k8slens/injectable").Injectable2<() => {
462
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
463
+ value: GetAiToolIsInstalledCliCommand;
464
+ }>;
465
+ fish: import("@k8slens/injectable").Injectable2<() => {
466
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
467
+ value: GetAiToolIsInstalledCliCommand;
468
+ }>;
469
+ cmd: import("@k8slens/injectable").Injectable2<() => {
470
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
471
+ value: GetAiToolIsInstalledCliCommand;
472
+ }>;
473
+ powershell: import("@k8slens/injectable").Injectable2<() => {
474
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
475
+ value: GetAiToolIsInstalledCliCommand;
476
+ }>;
477
+ };
478
+ windows: {
479
+ posix: import("@k8slens/injectable").Injectable2<() => {
480
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
481
+ value: GetAiToolIsInstalledCliCommand;
482
+ }>;
483
+ fish: import("@k8slens/injectable").Injectable2<() => {
484
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
485
+ value: GetAiToolIsInstalledCliCommand;
486
+ }>;
487
+ cmd: import("@k8slens/injectable").Injectable2<() => {
488
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
489
+ value: GetAiToolIsInstalledCliCommand;
490
+ }>;
491
+ powershell: import("@k8slens/injectable").Injectable2<() => {
492
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
493
+ value: GetAiToolIsInstalledCliCommand;
494
+ }>;
495
+ };
496
+ linux: {
497
+ posix: import("@k8slens/injectable").Injectable2<() => {
498
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
499
+ value: GetAiToolIsInstalledCliCommand;
500
+ }>;
501
+ fish: import("@k8slens/injectable").Injectable2<() => {
502
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
503
+ value: GetAiToolIsInstalledCliCommand;
504
+ }>;
505
+ cmd: import("@k8slens/injectable").Injectable2<() => {
506
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
507
+ value: GetAiToolIsInstalledCliCommand;
508
+ }>;
509
+ powershell: import("@k8slens/injectable").Injectable2<() => {
510
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
511
+ value: GetAiToolIsInstalledCliCommand;
512
+ }>;
513
+ };
514
+ unitTesting: {
515
+ posix: import("@k8slens/injectable").Injectable2<() => {
516
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
517
+ value: GetAiToolIsInstalledCliCommand;
518
+ }>;
519
+ fish: import("@k8slens/injectable").Injectable2<() => {
520
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
521
+ value: GetAiToolIsInstalledCliCommand;
522
+ }>;
523
+ cmd: import("@k8slens/injectable").Injectable2<() => {
524
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
525
+ value: GetAiToolIsInstalledCliCommand;
526
+ }>;
527
+ powershell: import("@k8slens/injectable").Injectable2<() => {
528
+ shellFamily: import("@k8slens/public-utilities").ShellFamily;
529
+ value: GetAiToolIsInstalledCliCommand;
530
+ }>;
531
+ };
532
+ } | undefined;
533
+ };
534
+ //# sourceMappingURL=get-ai-tool-injectable-bunch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-ai-tool-injectable-bunch.d.ts","sourceRoot":"","sources":["../../src/get-ai-tool-injectable-bunch.ts"],"names":[],"mappings":"AACA,OAAO,EAAkC,KAAK,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE1G,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EACV,UAAU,EAEV,aAAa,EACb,8BAA8B,EAC9B,uCAAuC,EACxC,MAAM,WAAW,CAAC;AACnB,OAAO,EAAgC,KAAK,oCAAoC,EAAE,MAAM,yBAAyB,CAAC;AAQlH,OAAO,EAAmC,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAWrG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,oCAAoC,CAAC,aAAa,CAAC,CAAC;IAC5E;;;;;;;OAOG;IACH,QAAQ,CAAC,mBAAmB,EAAE,oCAAoC,CAAC,aAAa,CAAC,CAAC;IAClF;;;;;;OAMG;IACH,QAAQ,CAAC,8BAA8B,CAAC,EAAE,oCAAoC,CAAC,8BAA8B,CAAC,CAAC;IAC/G;;;;OAIG;IACH,QAAQ,CAAC,uCAAuC,EAAE,oCAAoC,CAAC,uCAAuC,CAAC,CAAC;IAChI,4IAA4I;IAC5I,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,mSAAmS;IACnS,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;IACnE,2GAA2G;IAC3G,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC9C,8GAA8G;IAC9G,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACxC,wJAAwJ;IACxJ,QAAQ,CAAC,wBAAwB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACxD,mLAAmL;IACnL,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC;AAcD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,WAAY,iBAAiB;4DAgBrC,UAAU;iEAMV,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8DAgDN,KAAK,CAAC,aAAa;8EAMnB,KAAK,CAAC,aAAa;0EAMnB,MAAM,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8D9C,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { ShellScoped } from "@k8slens/platform-specific-injectables";
2
+ import type { AiToolKind, GetAiToolIsInstalledCliCommand } from "./ai-tool";
3
+ /**
4
+ * Per-kind builder for the command that detects whether an AI tool is installed
5
+ * (e.g. `command -v claude` / `where claude`). Contributed per tool by
6
+ * `getAiToolInjectableBunch` (the host OS's variant when the tool's
7
+ * `getAiToolIsInstalledCliCommand` is operating-system specific). The detected
8
+ * tools list runs it via `aiToolInstalledViaCliCommandInjectionToken` (exit code
9
+ * 0 ⇒ installed). Not contributed for always-available tools (e.g. Custom),
10
+ * which are then reported as installed.
11
+ */
12
+ export declare const getAiToolIsInstalledCliCommandInjectionToken: import("@k8slens/injectable").InjectionToken2Base<() => ShellScoped<GetAiToolIsInstalledCliCommand>, () => ShellScoped<GetAiToolIsInstalledCliCommand>[], "zero-or-many", () => import("@k8slens/injectable").InjectionInstanceWithMeta<ShellScoped<GetAiToolIsInstalledCliCommand>>, () => import("@k8slens/injectable").InjectionInstanceWithMeta<ShellScoped<GetAiToolIsInstalledCliCommand>>[]> & {
13
+ readonly __abstract: true;
14
+ for: (kind: AiToolKind) => import("@k8slens/injectable").InjectionToken2Base<() => ShellScoped<GetAiToolIsInstalledCliCommand>, () => ShellScoped<GetAiToolIsInstalledCliCommand>[], "zero-or-many", () => import("@k8slens/injectable").InjectionInstanceWithMeta<ShellScoped<GetAiToolIsInstalledCliCommand>>, () => import("@k8slens/injectable").InjectionInstanceWithMeta<ShellScoped<GetAiToolIsInstalledCliCommand>>[]> & {
15
+ readonly __abstract?: never;
16
+ } & {
17
+ speciality: any;
18
+ };
19
+ };
20
+ //# sourceMappingURL=get-ai-tool-is-installed-cli-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-ai-tool-is-installed-cli-command.d.ts","sourceRoot":"","sources":["../../src/get-ai-tool-is-installed-cli-command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,8BAA8B,EAAE,MAAM,WAAW,CAAC;AAE5E;;;;;;;;GAQG;AACH,eAAO,MAAM,4CAA4C,0DAClC,WAAW,CAAC,8BAA8B,CAAC;;gBAIxD,UAAU,6DAEK,WAAW,CAAC,8BAA8B,CAAC;;;;;CAOnE,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ShellScoped } from "@k8slens/platform-specific-injectables";
2
+ import type { AiToolKind, GetOpenToolInExternalTerminalCliCommand } from "./ai-tool";
3
+ /**
4
+ * Per-kind builder for the host command that opens an AI tool in a fresh external
5
+ * terminal window. Contributed per tool by `getAiToolInjectableBunch` (resolved
6
+ * to the host OS's variant from the tool's `getOpenToolInExternalTerminalCliCommand`
7
+ * param). Consumed via the derived `selectedAiToolOpenInExternalTerminalCommandInjectionToken`.
8
+ */
9
+ export declare const getOpenToolInExternalTerminalForToolInjectionToken: import("@k8slens/injectable").InjectionToken2Base<() => ShellScoped<GetOpenToolInExternalTerminalCliCommand>, () => ShellScoped<GetOpenToolInExternalTerminalCliCommand>[], "zero-or-many", () => import("@k8slens/injectable").InjectionInstanceWithMeta<ShellScoped<GetOpenToolInExternalTerminalCliCommand>>, () => import("@k8slens/injectable").InjectionInstanceWithMeta<ShellScoped<GetOpenToolInExternalTerminalCliCommand>>[]> & {
10
+ readonly __abstract: true;
11
+ for: (kind: AiToolKind) => import("@k8slens/injectable").InjectionToken2Base<() => ShellScoped<GetOpenToolInExternalTerminalCliCommand>, () => ShellScoped<GetOpenToolInExternalTerminalCliCommand>[], "zero-or-many", () => import("@k8slens/injectable").InjectionInstanceWithMeta<ShellScoped<GetOpenToolInExternalTerminalCliCommand>>, () => import("@k8slens/injectable").InjectionInstanceWithMeta<ShellScoped<GetOpenToolInExternalTerminalCliCommand>>[]> & {
12
+ readonly __abstract?: never;
13
+ } & {
14
+ speciality: any;
15
+ };
16
+ };
17
+ //# sourceMappingURL=get-open-tool-in-external-terminal-for-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-open-tool-in-external-terminal-for-tool.d.ts","sourceRoot":"","sources":["../../src/get-open-tool-in-external-terminal-for-tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,uCAAuC,EAAE,MAAM,WAAW,CAAC;AAErF;;;;;GAKG;AACH,eAAO,MAAM,kDAAkD,0DACxC,WAAW,CAAC,uCAAuC,CAAC;;gBAIjE,UAAU,6DAEK,WAAW,CAAC,uCAAuC,CAAC;;;;;CAO5E,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { ShellScoped } from "@k8slens/platform-specific-injectables";
2
+ import type { AiToolKind, GetCliCommand } from "./ai-tool";
3
+ /**
4
+ * Per-kind builder for the command that *resumes* an AI tool in a terminal —
5
+ * run instead of {@link getAiCommandForTerminalInjectionToken} when the tab's
6
+ * session is re-established (e.g. after an app restart) rather than first
7
+ * opened, so the tool continues its previous session (e.g. `claude --continue
8
+ * || claude`, which falls back to a fresh launch when there is no session).
9
+ *
10
+ * Resolves to a {@link GetCliCommand} (the launch-command signature); resume
11
+ * builders typically ignore `prompt` (they continue the prior session rather
12
+ * than starting a new one). Every tool contributes one via `.for(kind)` — a tool
13
+ * with no dedicated resume invocation passes its launch command.
14
+ */
15
+ export declare const getResumeAiCommandForTerminalInjectionToken: import("@k8slens/injectable").InjectionToken2Base<() => ShellScoped<GetCliCommand>, () => ShellScoped<GetCliCommand>[], "zero-or-many", () => import("@k8slens/injectable").InjectionInstanceWithMeta<ShellScoped<GetCliCommand>>, () => import("@k8slens/injectable").InjectionInstanceWithMeta<ShellScoped<GetCliCommand>>[]> & {
16
+ readonly __abstract: true;
17
+ for: (kind: AiToolKind) => import("@k8slens/injectable").InjectionToken2Base<() => ShellScoped<GetCliCommand>, () => ShellScoped<GetCliCommand>[], "zero-or-many", () => import("@k8slens/injectable").InjectionInstanceWithMeta<ShellScoped<GetCliCommand>>, () => import("@k8slens/injectable").InjectionInstanceWithMeta<ShellScoped<GetCliCommand>>[]> & {
18
+ readonly __abstract?: never;
19
+ } & {
20
+ speciality: any;
21
+ };
22
+ };
23
+ //# sourceMappingURL=get-resume-ai-command-for-terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-resume-ai-command-for-terminal.d.ts","sourceRoot":"","sources":["../../src/get-resume-ai-command-for-terminal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE3D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,2CAA2C,0DACjC,WAAW,CAAC,aAAa,CAAC;;gBAIvC,UAAU,6DAEK,WAAW,CAAC,aAAa,CAAC;;;;;CAOlD,CAAC"}
@@ -0,0 +1,16 @@
1
+ /** A value provided separately for each supported operating system. */
2
+ export interface OperatingSystemSpecific<T> {
3
+ readonly macos: T;
4
+ readonly windows: T;
5
+ readonly linux: T;
6
+ }
7
+ /**
8
+ * A value that is either OS-agnostic (the value itself) or operating-system
9
+ * specific (an {@link OperatingSystemSpecific} object). Used for the AI-tool CLI
10
+ * commands on `AiToolBunchParams`, each of which may differ per OS or not.
11
+ *
12
+ * `T` is expected to be a function, so that the agnostic form is the function
13
+ * itself and a consumer can discriminate the two via `typeof`.
14
+ */
15
+ export type MaybeOperatingSystemSpecific<T> = T | OperatingSystemSpecific<T>;
16
+ //# sourceMappingURL=operating-system-specific.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operating-system-specific.d.ts","sourceRoot":"","sources":["../../src/operating-system-specific.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,4BAA4B,CAAC,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC"}