@agentuity/cli 0.0.51 → 0.0.52

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 (299) hide show
  1. package/dist/api.js +68 -0
  2. package/dist/api.js.map +1 -0
  3. package/dist/auth.js +225 -0
  4. package/dist/auth.js.map +1 -0
  5. package/dist/banner.js +35 -0
  6. package/dist/banner.js.map +1 -0
  7. package/dist/cli-logger.js +72 -0
  8. package/dist/cli-logger.js.map +1 -0
  9. package/dist/cli.js +822 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/cmd/ai/capabilities/index.js +10 -0
  12. package/dist/cmd/ai/capabilities/index.js.map +1 -0
  13. package/dist/cmd/ai/capabilities/show.js +221 -0
  14. package/dist/cmd/ai/capabilities/show.js.map +1 -0
  15. package/dist/cmd/ai/index.js +11 -0
  16. package/dist/cmd/ai/index.js.map +1 -0
  17. package/dist/cmd/ai/prompt/index.js +10 -0
  18. package/dist/cmd/ai/prompt/index.js.map +1 -0
  19. package/dist/cmd/ai/prompt/llm.js +365 -0
  20. package/dist/cmd/ai/prompt/llm.js.map +1 -0
  21. package/dist/cmd/ai/schema/index.js +10 -0
  22. package/dist/cmd/ai/schema/index.js.map +1 -0
  23. package/dist/cmd/ai/schema/show.js +23 -0
  24. package/dist/cmd/ai/schema/show.js.map +1 -0
  25. package/dist/cmd/auth/api.js +85 -0
  26. package/dist/cmd/auth/api.js.map +1 -0
  27. package/dist/cmd/auth/index.js +13 -0
  28. package/dist/cmd/auth/index.js.map +1 -0
  29. package/dist/cmd/auth/login.js +84 -0
  30. package/dist/cmd/auth/login.js.map +1 -0
  31. package/dist/cmd/auth/logout.js +17 -0
  32. package/dist/cmd/auth/logout.js.map +1 -0
  33. package/dist/cmd/auth/signup.js +55 -0
  34. package/dist/cmd/auth/signup.js.map +1 -0
  35. package/dist/cmd/auth/ssh/add.js +239 -0
  36. package/dist/cmd/auth/ssh/add.js.map +1 -0
  37. package/dist/cmd/auth/ssh/api.js +53 -0
  38. package/dist/cmd/auth/ssh/api.js.map +1 -0
  39. package/dist/cmd/auth/ssh/delete.js +126 -0
  40. package/dist/cmd/auth/ssh/delete.js.map +1 -0
  41. package/dist/cmd/auth/ssh/index.js +11 -0
  42. package/dist/cmd/auth/ssh/index.js.map +1 -0
  43. package/dist/cmd/auth/ssh/list.js +70 -0
  44. package/dist/cmd/auth/ssh/list.js.map +1 -0
  45. package/dist/cmd/auth/whoami.js +68 -0
  46. package/dist/cmd/auth/whoami.js.map +1 -0
  47. package/dist/cmd/build/ast.js +608 -0
  48. package/dist/cmd/build/ast.js.map +1 -0
  49. package/dist/cmd/build/ast.test.js +389 -0
  50. package/dist/cmd/build/ast.test.js.map +1 -0
  51. package/dist/cmd/build/bundler.js +304 -0
  52. package/dist/cmd/build/bundler.js.map +1 -0
  53. package/dist/cmd/build/file.js +10 -0
  54. package/dist/cmd/build/file.js.map +1 -0
  55. package/dist/cmd/build/fix-duplicate-exports.js +167 -0
  56. package/dist/cmd/build/fix-duplicate-exports.js.map +1 -0
  57. package/dist/cmd/build/fix-duplicate-exports.test.js +300 -0
  58. package/dist/cmd/build/fix-duplicate-exports.test.js.map +1 -0
  59. package/dist/cmd/build/index.d.ts.map +1 -1
  60. package/dist/cmd/build/index.js +79 -0
  61. package/dist/cmd/build/index.js.map +1 -0
  62. package/dist/cmd/build/patch/_util.js +42 -0
  63. package/dist/cmd/build/patch/_util.js.map +1 -0
  64. package/dist/cmd/build/patch/aisdk.js +65 -0
  65. package/dist/cmd/build/patch/aisdk.js.map +1 -0
  66. package/dist/cmd/build/patch/index.js +97 -0
  67. package/dist/cmd/build/patch/index.js.map +1 -0
  68. package/dist/cmd/build/patch/llm.js +18 -0
  69. package/dist/cmd/build/patch/llm.js.map +1 -0
  70. package/dist/cmd/build/plugin.d.ts.map +1 -1
  71. package/dist/cmd/build/plugin.js +556 -0
  72. package/dist/cmd/build/plugin.js.map +1 -0
  73. package/dist/cmd/cloud/agents/index.js +133 -0
  74. package/dist/cmd/cloud/agents/index.js.map +1 -0
  75. package/dist/cmd/cloud/deploy.js +341 -0
  76. package/dist/cmd/cloud/deploy.js.map +1 -0
  77. package/dist/cmd/cloud/deployment/index.js +20 -0
  78. package/dist/cmd/cloud/deployment/index.js.map +1 -0
  79. package/dist/cmd/cloud/deployment/list.js +89 -0
  80. package/dist/cmd/cloud/deployment/list.js.map +1 -0
  81. package/dist/cmd/cloud/deployment/remove.js +60 -0
  82. package/dist/cmd/cloud/deployment/remove.js.map +1 -0
  83. package/dist/cmd/cloud/deployment/rollback.js +80 -0
  84. package/dist/cmd/cloud/deployment/rollback.js.map +1 -0
  85. package/dist/cmd/cloud/deployment/show.js +106 -0
  86. package/dist/cmd/cloud/deployment/show.js.map +1 -0
  87. package/dist/cmd/cloud/deployment/undeploy.js +45 -0
  88. package/dist/cmd/cloud/deployment/undeploy.js.map +1 -0
  89. package/dist/cmd/cloud/deployment/utils.js +10 -0
  90. package/dist/cmd/cloud/deployment/utils.js.map +1 -0
  91. package/dist/cmd/cloud/domain.js +77 -0
  92. package/dist/cmd/cloud/domain.js.map +1 -0
  93. package/dist/cmd/cloud/env/delete.js +50 -0
  94. package/dist/cmd/cloud/env/delete.js.map +1 -0
  95. package/dist/cmd/cloud/env/get.js +65 -0
  96. package/dist/cmd/cloud/env/get.js.map +1 -0
  97. package/dist/cmd/cloud/env/import.js +113 -0
  98. package/dist/cmd/cloud/env/import.js.map +1 -0
  99. package/dist/cmd/cloud/env/index.js +24 -0
  100. package/dist/cmd/cloud/env/index.js.map +1 -0
  101. package/dist/cmd/cloud/env/list.js +58 -0
  102. package/dist/cmd/cloud/env/list.js.map +1 -0
  103. package/dist/cmd/cloud/env/pull.js +81 -0
  104. package/dist/cmd/cloud/env/pull.js.map +1 -0
  105. package/dist/cmd/cloud/env/push.js +61 -0
  106. package/dist/cmd/cloud/env/push.js.map +1 -0
  107. package/dist/cmd/cloud/env/set.js +73 -0
  108. package/dist/cmd/cloud/env/set.js.map +1 -0
  109. package/dist/cmd/cloud/index.js +31 -0
  110. package/dist/cmd/cloud/index.js.map +1 -0
  111. package/dist/cmd/cloud/keyvalue/create-namespace.js +41 -0
  112. package/dist/cmd/cloud/keyvalue/create-namespace.js.map +1 -0
  113. package/dist/cmd/cloud/keyvalue/delete-namespace.js +64 -0
  114. package/dist/cmd/cloud/keyvalue/delete-namespace.js.map +1 -0
  115. package/dist/cmd/cloud/keyvalue/delete.js +47 -0
  116. package/dist/cmd/cloud/keyvalue/delete.js.map +1 -0
  117. package/dist/cmd/cloud/keyvalue/get.js +65 -0
  118. package/dist/cmd/cloud/keyvalue/get.js.map +1 -0
  119. package/dist/cmd/cloud/keyvalue/index.js +32 -0
  120. package/dist/cmd/cloud/keyvalue/index.js.map +1 -0
  121. package/dist/cmd/cloud/keyvalue/keys.js +50 -0
  122. package/dist/cmd/cloud/keyvalue/keys.js.map +1 -0
  123. package/dist/cmd/cloud/keyvalue/list-namespaces.js +37 -0
  124. package/dist/cmd/cloud/keyvalue/list-namespaces.js.map +1 -0
  125. package/dist/cmd/cloud/keyvalue/repl.js +277 -0
  126. package/dist/cmd/cloud/keyvalue/repl.js.map +1 -0
  127. package/dist/cmd/cloud/keyvalue/search.js +72 -0
  128. package/dist/cmd/cloud/keyvalue/search.js.map +1 -0
  129. package/dist/cmd/cloud/keyvalue/set.js +59 -0
  130. package/dist/cmd/cloud/keyvalue/set.js.map +1 -0
  131. package/dist/cmd/cloud/keyvalue/stats.js +82 -0
  132. package/dist/cmd/cloud/keyvalue/stats.js.map +1 -0
  133. package/dist/cmd/cloud/keyvalue/util.js +19 -0
  134. package/dist/cmd/cloud/keyvalue/util.js.map +1 -0
  135. package/dist/cmd/cloud/objectstore/delete-bucket.js +66 -0
  136. package/dist/cmd/cloud/objectstore/delete-bucket.js.map +1 -0
  137. package/dist/cmd/cloud/objectstore/delete.js +56 -0
  138. package/dist/cmd/cloud/objectstore/delete.js.map +1 -0
  139. package/dist/cmd/cloud/objectstore/get.js +64 -0
  140. package/dist/cmd/cloud/objectstore/get.js.map +1 -0
  141. package/dist/cmd/cloud/objectstore/index.js +28 -0
  142. package/dist/cmd/cloud/objectstore/index.js.map +1 -0
  143. package/dist/cmd/cloud/objectstore/list-buckets.js +37 -0
  144. package/dist/cmd/cloud/objectstore/list-buckets.js.map +1 -0
  145. package/dist/cmd/cloud/objectstore/list-keys.js +52 -0
  146. package/dist/cmd/cloud/objectstore/list-keys.js.map +1 -0
  147. package/dist/cmd/cloud/objectstore/put.js +57 -0
  148. package/dist/cmd/cloud/objectstore/put.js.map +1 -0
  149. package/dist/cmd/cloud/objectstore/repl.js +219 -0
  150. package/dist/cmd/cloud/objectstore/repl.js.map +1 -0
  151. package/dist/cmd/cloud/objectstore/url.js +55 -0
  152. package/dist/cmd/cloud/objectstore/url.js.map +1 -0
  153. package/dist/cmd/cloud/objectstore/util.js +18 -0
  154. package/dist/cmd/cloud/objectstore/util.js.map +1 -0
  155. package/dist/cmd/cloud/resource/add.js +70 -0
  156. package/dist/cmd/cloud/resource/add.js.map +1 -0
  157. package/dist/cmd/cloud/resource/delete.js +126 -0
  158. package/dist/cmd/cloud/resource/delete.js.map +1 -0
  159. package/dist/cmd/cloud/resource/index.js +12 -0
  160. package/dist/cmd/cloud/resource/index.js.map +1 -0
  161. package/dist/cmd/cloud/resource/list.js +89 -0
  162. package/dist/cmd/cloud/resource/list.js.map +1 -0
  163. package/dist/cmd/cloud/scp/download.js +72 -0
  164. package/dist/cmd/cloud/scp/download.js.map +1 -0
  165. package/dist/cmd/cloud/scp/index.js +10 -0
  166. package/dist/cmd/cloud/scp/index.js.map +1 -0
  167. package/dist/cmd/cloud/scp/upload.js +75 -0
  168. package/dist/cmd/cloud/scp/upload.js.map +1 -0
  169. package/dist/cmd/cloud/secret/delete.js +50 -0
  170. package/dist/cmd/cloud/secret/delete.js.map +1 -0
  171. package/dist/cmd/cloud/secret/get.js +69 -0
  172. package/dist/cmd/cloud/secret/get.js.map +1 -0
  173. package/dist/cmd/cloud/secret/import.js +88 -0
  174. package/dist/cmd/cloud/secret/import.js.map +1 -0
  175. package/dist/cmd/cloud/secret/index.js +24 -0
  176. package/dist/cmd/cloud/secret/index.js.map +1 -0
  177. package/dist/cmd/cloud/secret/list.js +58 -0
  178. package/dist/cmd/cloud/secret/list.js.map +1 -0
  179. package/dist/cmd/cloud/secret/pull.js +81 -0
  180. package/dist/cmd/cloud/secret/pull.js.map +1 -0
  181. package/dist/cmd/cloud/secret/push.js +61 -0
  182. package/dist/cmd/cloud/secret/push.js.map +1 -0
  183. package/dist/cmd/cloud/secret/set.js +57 -0
  184. package/dist/cmd/cloud/secret/set.js.map +1 -0
  185. package/dist/cmd/cloud/session/get.d.ts.map +1 -1
  186. package/dist/cmd/cloud/session/get.js +155 -0
  187. package/dist/cmd/cloud/session/get.js.map +1 -0
  188. package/dist/cmd/cloud/session/index.js +11 -0
  189. package/dist/cmd/cloud/session/index.js.map +1 -0
  190. package/dist/cmd/cloud/session/list.js +132 -0
  191. package/dist/cmd/cloud/session/list.js.map +1 -0
  192. package/dist/cmd/cloud/session/logs.js +56 -0
  193. package/dist/cmd/cloud/session/logs.js.map +1 -0
  194. package/dist/cmd/cloud/ssh.js +67 -0
  195. package/dist/cmd/cloud/ssh.js.map +1 -0
  196. package/dist/cmd/dev/agents.js +103 -0
  197. package/dist/cmd/dev/agents.js.map +1 -0
  198. package/dist/cmd/dev/api.js +26 -0
  199. package/dist/cmd/dev/api.js.map +1 -0
  200. package/dist/cmd/dev/download.js +77 -0
  201. package/dist/cmd/dev/download.js.map +1 -0
  202. package/dist/cmd/dev/index.js +745 -0
  203. package/dist/cmd/dev/index.js.map +1 -0
  204. package/dist/cmd/dev/sync.js +229 -0
  205. package/dist/cmd/dev/sync.js.map +1 -0
  206. package/dist/cmd/dev/templates.js +75 -0
  207. package/dist/cmd/dev/templates.js.map +1 -0
  208. package/dist/cmd/index.js +49 -0
  209. package/dist/cmd/index.js.map +1 -0
  210. package/dist/cmd/profile/create.js +89 -0
  211. package/dist/cmd/profile/create.js.map +1 -0
  212. package/dist/cmd/profile/delete.js +63 -0
  213. package/dist/cmd/profile/delete.js.map +1 -0
  214. package/dist/cmd/profile/index.js +14 -0
  215. package/dist/cmd/profile/index.js.map +1 -0
  216. package/dist/cmd/profile/list.js +28 -0
  217. package/dist/cmd/profile/list.js.map +1 -0
  218. package/dist/cmd/profile/show.js +68 -0
  219. package/dist/cmd/profile/show.js.map +1 -0
  220. package/dist/cmd/profile/use.js +37 -0
  221. package/dist/cmd/profile/use.js.map +1 -0
  222. package/dist/cmd/project/create.js +92 -0
  223. package/dist/cmd/project/create.js.map +1 -0
  224. package/dist/cmd/project/delete.js +117 -0
  225. package/dist/cmd/project/delete.js.map +1 -0
  226. package/dist/cmd/project/download.js +217 -0
  227. package/dist/cmd/project/download.js.map +1 -0
  228. package/dist/cmd/project/index.js +12 -0
  229. package/dist/cmd/project/index.js.map +1 -0
  230. package/dist/cmd/project/list.js +51 -0
  231. package/dist/cmd/project/list.js.map +1 -0
  232. package/dist/cmd/project/show.js +54 -0
  233. package/dist/cmd/project/show.js.map +1 -0
  234. package/dist/cmd/project/template-flow.js +315 -0
  235. package/dist/cmd/project/template-flow.js.map +1 -0
  236. package/dist/cmd/project/templates.js +31 -0
  237. package/dist/cmd/project/templates.js.map +1 -0
  238. package/dist/cmd/repl/index.js +444 -0
  239. package/dist/cmd/repl/index.js.map +1 -0
  240. package/dist/cmd/version/index.js +29 -0
  241. package/dist/cmd/version/index.js.map +1 -0
  242. package/dist/command-prefix.js +37 -0
  243. package/dist/command-prefix.js.map +1 -0
  244. package/dist/config.js +536 -0
  245. package/dist/config.js.map +1 -0
  246. package/dist/crypto/box.js +382 -0
  247. package/dist/crypto/box.js.map +1 -0
  248. package/dist/crypto/box.test.js +317 -0
  249. package/dist/crypto/box.test.js.map +1 -0
  250. package/dist/download.js +64 -0
  251. package/dist/download.js.map +1 -0
  252. package/dist/env-util.js +219 -0
  253. package/dist/env-util.js.map +1 -0
  254. package/dist/env-util.test.js +146 -0
  255. package/dist/env-util.test.js.map +1 -0
  256. package/dist/errors.js +177 -0
  257. package/dist/errors.js.map +1 -0
  258. package/dist/explain.js +90 -0
  259. package/dist/explain.js.map +1 -0
  260. package/dist/index.js +23 -0
  261. package/dist/index.js.map +1 -0
  262. package/dist/json.js +29 -0
  263. package/dist/json.js.map +1 -0
  264. package/dist/legacy-check.js +104 -0
  265. package/dist/legacy-check.js.map +1 -0
  266. package/dist/output.js +207 -0
  267. package/dist/output.js.map +1 -0
  268. package/dist/repl.js +1176 -0
  269. package/dist/repl.js.map +1 -0
  270. package/dist/runtime.js +19 -0
  271. package/dist/runtime.js.map +1 -0
  272. package/dist/schema-generator.js +289 -0
  273. package/dist/schema-generator.js.map +1 -0
  274. package/dist/schema-parser.js +145 -0
  275. package/dist/schema-parser.js.map +1 -0
  276. package/dist/sound.js +44 -0
  277. package/dist/sound.js.map +1 -0
  278. package/dist/steps.js +293 -0
  279. package/dist/steps.js.map +1 -0
  280. package/dist/terminal.js +130 -0
  281. package/dist/terminal.js.map +1 -0
  282. package/dist/tui.js +1124 -0
  283. package/dist/tui.js.map +1 -0
  284. package/dist/types.js +163 -0
  285. package/dist/types.js.map +1 -0
  286. package/dist/utils/detectSubagent.js +25 -0
  287. package/dist/utils/detectSubagent.js.map +1 -0
  288. package/dist/utils/format.js +21 -0
  289. package/dist/utils/format.js.map +1 -0
  290. package/dist/utils/zip.js +33 -0
  291. package/dist/utils/zip.js.map +1 -0
  292. package/dist/version.js +24 -0
  293. package/dist/version.js.map +1 -0
  294. package/package.json +6 -6
  295. package/src/banner.ts +1 -1
  296. package/src/cmd/build/index.ts +15 -21
  297. package/src/cmd/build/plugin.ts +2 -1
  298. package/src/cmd/cloud/session/get.ts +20 -14
  299. package/src/cmd/cloud/session/list.ts +1 -1
package/dist/steps.js ADDED
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Step progress UI component for showing animated steps with callbacks
3
+ *
4
+ * Displays a checklist where each step animates in place with a spinner,
5
+ * then shows success, skipped, or error icon based on callback result.
6
+ */
7
+ /**
8
+ * Get the appropriate exit function (Bun.exit or process.exit)
9
+ */
10
+ function getExitFn() {
11
+ const bunExit = globalThis.Bun?.exit;
12
+ return typeof bunExit === 'function' ? bunExit : process.exit.bind(process);
13
+ }
14
+ /**
15
+ * Install interrupt handlers (SIGINT/SIGTERM + TTY raw mode for Ctrl+C)
16
+ */
17
+ function installInterruptHandlers(onInterrupt) {
18
+ const cleanupFns = [];
19
+ const sigHandler = () => onInterrupt();
20
+ process.on('SIGINT', sigHandler);
21
+ process.on('SIGTERM', sigHandler);
22
+ cleanupFns.push(() => {
23
+ process.off('SIGINT', sigHandler);
24
+ process.off('SIGTERM', sigHandler);
25
+ });
26
+ // TTY raw mode fallback for Bun/Windows/inconsistent SIGINT delivery
27
+ const stdin = process.stdin;
28
+ if (stdin && stdin.isTTY) {
29
+ const onData = (buf) => {
30
+ // Ctrl+C is ASCII ETX (0x03)
31
+ if (buf.length === 1 && buf[0] === 0x03)
32
+ onInterrupt();
33
+ };
34
+ try {
35
+ stdin.setRawMode?.(true);
36
+ }
37
+ catch {
38
+ // ignore if not supported
39
+ }
40
+ stdin.resume?.();
41
+ stdin.on('data', onData);
42
+ cleanupFns.push(() => {
43
+ stdin.off?.('data', onData);
44
+ stdin.pause?.();
45
+ try {
46
+ stdin.setRawMode?.(false);
47
+ }
48
+ catch {
49
+ // ignore if setRawMode fails
50
+ }
51
+ });
52
+ }
53
+ return () => {
54
+ for (const fn of cleanupFns.splice(0))
55
+ fn();
56
+ };
57
+ }
58
+ // Spinner frames
59
+ const FRAMES = ['◐', '◓', '◑', '◒'];
60
+ // Icons
61
+ const ICONS = {
62
+ success: '✓',
63
+ skipped: '○',
64
+ error: '✗',
65
+ pending: '☐',
66
+ };
67
+ // Color definitions (light/dark adaptive)
68
+ const COLORS = {
69
+ cyan: { light: '\x1b[36m', dark: '\x1b[96m' },
70
+ blue: { light: '\x1b[34m', dark: '\x1b[94m' },
71
+ magenta: { light: '\x1b[35m', dark: '\x1b[95m' },
72
+ green: { light: '\x1b[32m', dark: '\x1b[92m' },
73
+ yellow: { light: '\x1b[33m', dark: '\x1b[93m' },
74
+ red: { light: '\x1b[31m', dark: '\x1b[91m' },
75
+ gray: { light: '\x1b[90m', dark: '\x1b[37m' },
76
+ bold: '\x1b[1m',
77
+ strikethrough: '\x1b[9m',
78
+ reset: '\x1b[0m',
79
+ };
80
+ // Spinner color sequence
81
+ const SPINNER_COLORS = ['cyan', 'blue', 'magenta', 'cyan'];
82
+ let currentColorScheme = process.env.CI ? 'light' : 'dark';
83
+ export function setStepsColorScheme(scheme) {
84
+ currentColorScheme = scheme;
85
+ }
86
+ function getColor(colorKey) {
87
+ const color = COLORS[colorKey];
88
+ if (typeof color === 'string') {
89
+ return color;
90
+ }
91
+ return color[currentColorScheme];
92
+ }
93
+ /**
94
+ * Helper functions for creating step outcomes
95
+ */
96
+ export const stepSuccess = () => ({ status: 'success' });
97
+ export const stepSkipped = (reason) => ({ status: 'skipped', reason });
98
+ export const stepError = (message) => ({ status: 'error', message });
99
+ /**
100
+ * Run a series of steps with animated progress
101
+ *
102
+ * Each step runs its callback while showing a spinner animation.
103
+ * Steps can complete with success, skipped, or error status.
104
+ * Exits with code 1 if any step errors.
105
+ *
106
+ * When there's no TTY or log level is debug/trace, uses plain output instead of TUI.
107
+ */
108
+ export async function runSteps(steps, logLevel) {
109
+ const state = steps.map((s) => {
110
+ const stepType = s.type === 'progress' ? 'progress' : 'simple';
111
+ return stepType === 'progress'
112
+ ? {
113
+ type: 'progress',
114
+ label: s.label,
115
+ run: s.run,
116
+ }
117
+ : { type: 'simple', label: s.label, run: s.run };
118
+ });
119
+ // Detect if we should use TUI (animated) or plain mode
120
+ const useTUI = process.stdout.isTTY && (!logLevel || ['info', 'warn', 'error'].includes(logLevel));
121
+ if (useTUI) {
122
+ await runStepsTUI(state);
123
+ }
124
+ else {
125
+ await runStepsPlain(state);
126
+ }
127
+ }
128
+ /**
129
+ * Run steps with animated TUI (original behavior)
130
+ */
131
+ async function runStepsTUI(state) {
132
+ // Hide cursor
133
+ process.stdout.write('\x1B[?25l');
134
+ // Track active interval and interrupted state
135
+ let activeInterval = null;
136
+ let interrupted = false;
137
+ // Set up Ctrl+C handler for graceful exit
138
+ const exit = getExitFn();
139
+ const onInterrupt = () => {
140
+ if (interrupted)
141
+ return;
142
+ interrupted = true;
143
+ if (activeInterval)
144
+ clearInterval(activeInterval);
145
+ process.stdout.write('\x1B[?25h\n'); // Show cursor
146
+ exit(130);
147
+ };
148
+ const restoreInterrupts = installInterruptHandlers(onInterrupt);
149
+ try {
150
+ // Initial render
151
+ process.stdout.write(renderSteps(state, -1) + '\n');
152
+ for (let stepIndex = 0; stepIndex < state.length; stepIndex++) {
153
+ if (interrupted)
154
+ break;
155
+ const step = state[stepIndex];
156
+ let frameIndex = 0;
157
+ let currentFrame = '';
158
+ // Start spinner animation
159
+ activeInterval = setInterval(() => {
160
+ const colorKey = SPINNER_COLORS[frameIndex % SPINNER_COLORS.length];
161
+ const color = getColor(colorKey);
162
+ currentFrame = `${color}${COLORS.bold}${FRAMES[frameIndex % FRAMES.length]}${COLORS.reset}`;
163
+ // Move cursor up to the top of checklist
164
+ process.stdout.write(`\x1B[${state.length}A`);
165
+ process.stdout.write(renderSteps(state, stepIndex, currentFrame) + '\n');
166
+ frameIndex++;
167
+ }, 120);
168
+ // Run the step with progress tracking
169
+ const progressCallback = (progress) => {
170
+ step.progress = Math.min(100, Math.max(0, progress));
171
+ // Move cursor up and render with current spinner frame
172
+ process.stdout.write(`\x1B[${state.length}A`);
173
+ process.stdout.write(renderSteps(state, stepIndex, currentFrame) + '\n');
174
+ };
175
+ try {
176
+ // Use discriminant to determine if step has progress callback
177
+ const outcome = step.type === 'progress' ? await step.run(progressCallback) : await step.run();
178
+ step.outcome = outcome;
179
+ }
180
+ catch (err) {
181
+ step.outcome = {
182
+ status: 'error',
183
+ message: err instanceof Error ? err.message : String(err),
184
+ };
185
+ }
186
+ if (activeInterval) {
187
+ clearInterval(activeInterval);
188
+ activeInterval = null;
189
+ }
190
+ // Clear progress and final render with outcome
191
+ step.progress = undefined;
192
+ process.stdout.write(`\x1B[${state.length}A`);
193
+ process.stdout.write(renderSteps(state, -1) + '\n');
194
+ // If error, show error message and exit
195
+ if (step.outcome?.status === 'error') {
196
+ const errorColor = getColor('red');
197
+ console.error(`\n${errorColor}Error: ${step.outcome.message}${COLORS.reset}\n`);
198
+ process.stdout.write('\x1B[?25h'); // Show cursor
199
+ process.exit(1);
200
+ }
201
+ }
202
+ // Show cursor again
203
+ process.stdout.write('\x1B[?25h');
204
+ }
205
+ catch (err) {
206
+ // Ensure cursor is shown even if something goes wrong
207
+ process.stdout.write('\x1B[?25h');
208
+ throw err;
209
+ }
210
+ finally {
211
+ // Remove signal/TTY handlers
212
+ restoreInterrupts();
213
+ }
214
+ }
215
+ /**
216
+ * Run steps in plain mode (no TUI animations)
217
+ */
218
+ async function runStepsPlain(state) {
219
+ const grayColor = getColor('gray');
220
+ const greenColor = getColor('green');
221
+ const yellowColor = getColor('yellow');
222
+ const redColor = getColor('red');
223
+ for (const step of state) {
224
+ // Run the step (no progress callback for plain mode)
225
+ try {
226
+ const outcome = step.type === 'progress' ? await step.run(() => { }) : await step.run();
227
+ step.outcome = outcome;
228
+ }
229
+ catch (err) {
230
+ step.outcome = {
231
+ status: 'error',
232
+ message: err instanceof Error ? err.message : String(err),
233
+ };
234
+ }
235
+ // Print final state only
236
+ if (step.outcome?.status === 'success') {
237
+ console.log(`${greenColor}${ICONS.success}${COLORS.reset} ${step.label}`);
238
+ }
239
+ else if (step.outcome?.status === 'skipped') {
240
+ const reason = step.outcome.reason
241
+ ? ` ${grayColor}(${step.outcome.reason})${COLORS.reset}`
242
+ : '';
243
+ console.log(`${yellowColor}${ICONS.skipped}${COLORS.reset} ${step.label}${reason}`);
244
+ }
245
+ else if (step.outcome?.status === 'error') {
246
+ console.log(`${redColor}${ICONS.error}${COLORS.reset} ${step.label}`);
247
+ const errorColor = getColor('red');
248
+ console.error(`\n${errorColor}Error: ${step.outcome.message}${COLORS.reset}\n`);
249
+ process.exit(1);
250
+ }
251
+ }
252
+ }
253
+ /**
254
+ * Render a progress indicator
255
+ */
256
+ function renderProgress(progress) {
257
+ const cyanColor = getColor('cyan');
258
+ const percentage = `${Math.floor(progress)}%`;
259
+ return ` ${cyanColor}${percentage}${COLORS.reset}`;
260
+ }
261
+ /**
262
+ * Render all steps as a multiline string
263
+ */
264
+ function renderSteps(steps, activeIndex, spinner) {
265
+ const grayColor = getColor('gray');
266
+ const greenColor = getColor('green');
267
+ const yellowColor = getColor('yellow');
268
+ const redColor = getColor('red');
269
+ const lines = [];
270
+ steps.forEach((s, i) => {
271
+ // Don't show progress indicator for steps with outcomes (success/skipped/error)
272
+ if (s.outcome?.status === 'success') {
273
+ lines.push(`${greenColor}${ICONS.success}${COLORS.reset} ${grayColor}${COLORS.strikethrough}${s.label}${COLORS.reset}`);
274
+ }
275
+ else if (s.outcome?.status === 'skipped') {
276
+ const reason = s.outcome.reason ? ` ${grayColor}(${s.outcome.reason})${COLORS.reset}` : '';
277
+ lines.push(`${yellowColor}${ICONS.skipped}${COLORS.reset} ${grayColor}${COLORS.strikethrough}${s.label}${COLORS.reset}${reason}`);
278
+ }
279
+ else if (s.outcome?.status === 'error') {
280
+ lines.push(`${redColor}${ICONS.error}${COLORS.reset} ${s.label}`);
281
+ }
282
+ else if (i === activeIndex && spinner) {
283
+ // Only show progress for active step with spinner
284
+ const progressIndicator = s.progress !== undefined ? renderProgress(s.progress) : '';
285
+ lines.push(`${spinner} ${s.label}${progressIndicator}`);
286
+ }
287
+ else {
288
+ lines.push(`${grayColor}${ICONS.pending}${COLORS.reset} ${s.label}`);
289
+ }
290
+ });
291
+ return lines.join('\n');
292
+ }
293
+ //# sourceMappingURL=steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steps.js","sourceRoot":"","sources":["../src/steps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ const defaultMode = process.env.CI ? 'light' : 'dark';
2
+ export async function detectColorScheme() {
3
+ const debug = process.env.DEBUG_COLORS === 'true';
4
+ // Check for explicit override
5
+ if (process.env.COLOR_SCHEME === 'light') {
6
+ if (debug)
7
+ console.log('[DEBUG] Using COLOR_SCHEME=light override');
8
+ return 'light';
9
+ }
10
+ if (process.env.COLOR_SCHEME === 'dark') {
11
+ if (debug)
12
+ console.log('[DEBUG] Using COLOR_SCHEME=dark override');
13
+ return 'dark';
14
+ }
15
+ // Check if we have stdout TTY at minimum
16
+ if (process.stdout.isTTY) {
17
+ if (debug)
18
+ console.log('[DEBUG] stdout is a TTY, defaulting to dark');
19
+ // Try to query terminal background color using OSC 11 (most reliable)
20
+ if (debug)
21
+ console.log('[DEBUG] Querying terminal background with OSC 11...');
22
+ try {
23
+ const bgColor = await queryTerminalBackground();
24
+ if (bgColor) {
25
+ const luminance = calculateLuminance(bgColor);
26
+ const scheme = luminance > 0.5 ? 'light' : 'dark';
27
+ if (debug)
28
+ console.log(`[DEBUG] OSC 11 response: rgb(${bgColor.r},${bgColor.g},${bgColor.b}), luminance: ${luminance.toFixed(2)}, scheme: ${scheme}`);
29
+ return scheme;
30
+ }
31
+ else {
32
+ if (debug)
33
+ console.log('[DEBUG] OSC 11 query timed out or no response');
34
+ }
35
+ }
36
+ catch (error) {
37
+ if (debug)
38
+ console.log('[DEBUG] OSC 11 query failed:', error);
39
+ }
40
+ }
41
+ // Fall back to COLORFGBG environment variable (less reliable)
42
+ if (process.env.COLORFGBG) {
43
+ // COLORFGBG format is "foreground;background"
44
+ // This is unreliable but better than nothing
45
+ const parts = process.env.COLORFGBG.split(';');
46
+ const fg = parseInt(parts[0] || '7', 10);
47
+ const bg = parseInt(parts[1] || '0', 10);
48
+ // Heuristic: if background is 0 (black) and foreground is light (>=7), it's likely dark mode
49
+ // if background is light (>=7) and foreground is dark (<7), it's likely light mode
50
+ const scheme = bg >= 7 || bg > fg ? 'light' : 'dark';
51
+ if (debug)
52
+ console.log(`[DEBUG] COLORFGBG fallback: ${process.env.COLORFGBG} (fg:${fg}, bg:${bg}), scheme: ${scheme}`);
53
+ return scheme;
54
+ }
55
+ if (debug)
56
+ console.log('[DEBUG] Defaulting to %s', defaultMode);
57
+ return defaultMode;
58
+ }
59
+ async function queryTerminalBackground() {
60
+ // Skip if stdin is not available or not a TTY
61
+ if (!process.stdin.isTTY) {
62
+ return null;
63
+ }
64
+ return new Promise((resolve) => {
65
+ const timeout = setTimeout(() => {
66
+ cleanup();
67
+ resolve(null);
68
+ }, 100); // 100ms timeout
69
+ let response = '';
70
+ const onData = (data) => {
71
+ response += data.toString();
72
+ // Look for OSC 11 response patterns:
73
+ // Pattern 1: ESC ] 11 ; rgb:RRRR/GGGG/BBBB ESC \ (xterm with ESC \ terminator)
74
+ // Pattern 2: ESC ] 11 ; rgb:RRRR/GGGG/BBBB BEL (xterm with BEL terminator)
75
+ // The color values can be 8-bit (RR), 12-bit (RRR), or 16-bit (RRRR)
76
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: Control characters needed for ANSI escape sequences
77
+ const match = response.match(
78
+ // eslint-disable-next-line no-control-regex
79
+ /\x1b\]11;rgb:([0-9a-f]+)\/([0-9a-f]+)\/([0-9a-f]+)(?:\x1b\\|\x07)/i);
80
+ if (match) {
81
+ cleanup();
82
+ clearTimeout(timeout);
83
+ // Parse RGB values - they can be different bit depths
84
+ // Normalize to 8-bit (0-255) by taking the most significant bits
85
+ const parseColorValue = (hex) => {
86
+ if (hex.length === 4) {
87
+ // 16-bit: RRRR -> take first 2 chars
88
+ return parseInt(hex.slice(0, 2), 16);
89
+ }
90
+ else if (hex.length === 3) {
91
+ // 12-bit: RRR -> take first 2 chars
92
+ return parseInt(hex.slice(0, 2), 16);
93
+ }
94
+ else {
95
+ // 8-bit: RR
96
+ return parseInt(hex, 16);
97
+ }
98
+ };
99
+ const r = parseColorValue(match[1]);
100
+ const g = parseColorValue(match[2]);
101
+ const b = parseColorValue(match[3]);
102
+ resolve({ r, g, b });
103
+ }
104
+ };
105
+ const cleanup = () => {
106
+ process.stdin.setRawMode(false);
107
+ process.stdin.removeListener('data', onData);
108
+ process.stdin.pause(); // Pause stdin to allow process to exit
109
+ };
110
+ // Set stdin to raw mode to read escape sequences
111
+ process.stdin.setRawMode(true);
112
+ process.stdin.resume(); // Resume to receive data
113
+ process.stdin.on('data', onData);
114
+ // Send OSC 11 query with BEL terminator (more widely supported)
115
+ // Using BEL (\x07) as terminator instead of ESC \ for better compatibility
116
+ process.stdout.write('\x1b]11;?\x07');
117
+ });
118
+ }
119
+ function calculateLuminance(color) {
120
+ // Convert RGB to relative luminance using the formula from WCAG
121
+ // https://www.w3.org/TR/WCAG20/#relativeluminancedef
122
+ const rsRGB = color.r / 255;
123
+ const gsRGB = color.g / 255;
124
+ const bsRGB = color.b / 255;
125
+ const r = rsRGB <= 0.03928 ? rsRGB / 12.92 : Math.pow((rsRGB + 0.055) / 1.055, 2.4);
126
+ const g = gsRGB <= 0.03928 ? gsRGB / 12.92 : Math.pow((gsRGB + 0.055) / 1.055, 2.4);
127
+ const b = bsRGB <= 0.03928 ? bsRGB / 12.92 : Math.pow((bsRGB + 0.055) / 1.055, 2.4);
128
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
129
+ }
130
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM,CAAC;IAElD,8BAA8B;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;QAC1C,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACpE,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;QACzC,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACnE,OAAO,MAAM,CAAC;IACf,CAAC;IAED,yCAAyC;IACzC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAEtE,sEAAsE;QACtE,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QAC9E,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,uBAAuB,EAAE,CAAC;YAChD,IAAI,OAAO,EAAE,CAAC;gBACb,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAC9C,MAAM,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;gBAClD,IAAI,KAAK;oBACR,OAAO,CAAC,GAAG,CACV,gCAAgC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,iBAAiB,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,MAAM,EAAE,CAC7H,CAAC;gBACH,OAAO,MAAM,CAAC;YACf,CAAC;iBAAM,CAAC;gBACP,IAAI,KAAK;oBAAE,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YACzE,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC;IAED,8DAA8D;IAC9D,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QAC3B,8CAA8C;QAC9C,6CAA6C;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAEzC,6FAA6F;QAC7F,mFAAmF;QACnF,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QACrD,IAAI,KAAK;YACR,OAAO,CAAC,GAAG,CACV,+BAA+B,OAAO,CAAC,GAAG,CAAC,SAAS,QAAQ,EAAE,QAAQ,EAAE,cAAc,MAAM,EAAE,CAC9F,CAAC;QACH,OAAO,MAAM,CAAC;IACf,CAAC;IAED,IAAI,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,WAAW,CAAC,CAAC;IAChE,OAAO,WAAW,CAAC;AACpB,CAAC;AAQD,KAAK,UAAU,uBAAuB;IACrC,8CAA8C;IAC9C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC/B,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,gBAAgB;QAEzB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;YAC/B,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE5B,qCAAqC;YACrC,+EAA+E;YAC/E,2EAA2E;YAC3E,qEAAqE;YACrE,+GAA+G;YAC/G,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;YAC3B,4CAA4C;YAC5C,oEAAoE,CACpE,CAAC;YACF,IAAI,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,CAAC;gBACV,YAAY,CAAC,OAAO,CAAC,CAAC;gBAEtB,sDAAsD;gBACtD,iEAAiE;gBACjE,MAAM,eAAe,GAAG,CAAC,GAAW,EAAU,EAAE;oBAC/C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACtB,qCAAqC;wBACrC,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtC,CAAC;yBAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC7B,oCAAoC;wBACpC,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtC,CAAC;yBAAM,CAAC;wBACP,YAAY;wBACZ,OAAO,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC1B,CAAC;gBACF,CAAC,CAAC;gBAEF,MAAM,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEpC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;QACF,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,uCAAuC;QAC/D,CAAC,CAAC;QAEF,iDAAiD;QACjD,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,yBAAyB;QACjD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEjC,gEAAgE;QAChE,2EAA2E;QAC3E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAe;IAC1C,gEAAgE;IAChE,qDAAqD;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;IAE5B,MAAM,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC;IACpF,MAAM,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC;IACpF,MAAM,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC;IAEpF,OAAO,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;AAC7C,CAAC"}