@amplitude/wizard 1.0.0-beta.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 (333) hide show
  1. package/LICENSE +47 -0
  2. package/README.md +119 -0
  3. package/dist/bin.d.ts +2 -0
  4. package/dist/bin.js +763 -0
  5. package/dist/package.json +144 -0
  6. package/dist/src/frameworks/android/android-wizard-agent.d.ts +6 -0
  7. package/dist/src/frameworks/android/android-wizard-agent.js +72 -0
  8. package/dist/src/frameworks/android/utils.d.ts +11 -0
  9. package/dist/src/frameworks/android/utils.js +32 -0
  10. package/dist/src/frameworks/django/django-wizard-agent.d.ts +8 -0
  11. package/dist/src/frameworks/django/django-wizard-agent.js +171 -0
  12. package/dist/src/frameworks/django/utils.d.ts +31 -0
  13. package/dist/src/frameworks/django/utils.js +305 -0
  14. package/dist/src/frameworks/fastapi/fastapi-wizard-agent.d.ts +11 -0
  15. package/dist/src/frameworks/fastapi/fastapi-wizard-agent.js +189 -0
  16. package/dist/src/frameworks/fastapi/utils.d.ts +26 -0
  17. package/dist/src/frameworks/fastapi/utils.js +257 -0
  18. package/dist/src/frameworks/flask/flask-wizard-agent.d.ts +8 -0
  19. package/dist/src/frameworks/flask/flask-wizard-agent.js +177 -0
  20. package/dist/src/frameworks/flask/utils.d.ts +28 -0
  21. package/dist/src/frameworks/flask/utils.js +343 -0
  22. package/dist/src/frameworks/flutter/flutter-wizard-agent.d.ts +4 -0
  23. package/dist/src/frameworks/flutter/flutter-wizard-agent.js +57 -0
  24. package/dist/src/frameworks/flutter/utils.d.ts +7 -0
  25. package/dist/src/frameworks/flutter/utils.js +64 -0
  26. package/dist/src/frameworks/generic/generic-wizard-agent.d.ts +2 -0
  27. package/dist/src/frameworks/generic/generic-wizard-agent.js +176 -0
  28. package/dist/src/frameworks/go/go-wizard-agent.d.ts +4 -0
  29. package/dist/src/frameworks/go/go-wizard-agent.js +57 -0
  30. package/dist/src/frameworks/go/utils.d.ts +5 -0
  31. package/dist/src/frameworks/go/utils.js +44 -0
  32. package/dist/src/frameworks/java/java-wizard-agent.d.ts +7 -0
  33. package/dist/src/frameworks/java/java-wizard-agent.js +73 -0
  34. package/dist/src/frameworks/java/utils.d.ts +15 -0
  35. package/dist/src/frameworks/java/utils.js +64 -0
  36. package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.d.ts +4 -0
  37. package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.js +57 -0
  38. package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.d.ts +3 -0
  39. package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.js +151 -0
  40. package/dist/src/frameworks/javascript-web/utils.d.ts +28 -0
  41. package/dist/src/frameworks/javascript-web/utils.js +153 -0
  42. package/dist/src/frameworks/nextjs/nextjs-wizard-agent.d.ts +7 -0
  43. package/dist/src/frameworks/nextjs/nextjs-wizard-agent.js +98 -0
  44. package/dist/src/frameworks/nextjs/utils.d.ts +12 -0
  45. package/dist/src/frameworks/nextjs/utils.js +51 -0
  46. package/dist/src/frameworks/python/python-wizard-agent.d.ts +7 -0
  47. package/dist/src/frameworks/python/python-wizard-agent.js +193 -0
  48. package/dist/src/frameworks/python/utils.d.ts +28 -0
  49. package/dist/src/frameworks/python/utils.js +146 -0
  50. package/dist/src/frameworks/react-native/react-native-wizard-agent.d.ts +6 -0
  51. package/dist/src/frameworks/react-native/react-native-wizard-agent.js +84 -0
  52. package/dist/src/frameworks/react-native/utils.d.ts +21 -0
  53. package/dist/src/frameworks/react-native/utils.js +82 -0
  54. package/dist/src/frameworks/react-router/react-router-wizard-agent.d.ts +7 -0
  55. package/dist/src/frameworks/react-router/react-router-wizard-agent.js +98 -0
  56. package/dist/src/frameworks/react-router/utils.d.ts +13 -0
  57. package/dist/src/frameworks/react-router/utils.js +160 -0
  58. package/dist/src/frameworks/swift/swift-wizard-agent.d.ts +7 -0
  59. package/dist/src/frameworks/swift/swift-wizard-agent.js +72 -0
  60. package/dist/src/frameworks/swift/utils.d.ts +12 -0
  61. package/dist/src/frameworks/swift/utils.js +82 -0
  62. package/dist/src/frameworks/unity/unity-wizard-agent.d.ts +6 -0
  63. package/dist/src/frameworks/unity/unity-wizard-agent.js +79 -0
  64. package/dist/src/frameworks/unity/utils.d.ts +12 -0
  65. package/dist/src/frameworks/unity/utils.js +66 -0
  66. package/dist/src/frameworks/unreal/unreal-wizard-agent.d.ts +6 -0
  67. package/dist/src/frameworks/unreal/unreal-wizard-agent.js +77 -0
  68. package/dist/src/frameworks/unreal/utils.d.ts +10 -0
  69. package/dist/src/frameworks/unreal/utils.js +29 -0
  70. package/dist/src/frameworks/vue/vue-wizard-agent.d.ts +4 -0
  71. package/dist/src/frameworks/vue/vue-wizard-agent.js +64 -0
  72. package/dist/src/lib/agent-hooks.d.ts +26 -0
  73. package/dist/src/lib/agent-hooks.js +118 -0
  74. package/dist/src/lib/agent-interface.d.ts +175 -0
  75. package/dist/src/lib/agent-interface.js +1217 -0
  76. package/dist/src/lib/agent-runner.d.ts +9 -0
  77. package/dist/src/lib/agent-runner.js +415 -0
  78. package/dist/src/lib/ampli-config.d.ts +105 -0
  79. package/dist/src/lib/ampli-config.js +178 -0
  80. package/dist/src/lib/api.d.ts +107 -0
  81. package/dist/src/lib/api.js +442 -0
  82. package/dist/src/lib/commandments.d.ts +1 -0
  83. package/dist/src/lib/commandments.js +24 -0
  84. package/dist/src/lib/console-query.d.ts +27 -0
  85. package/dist/src/lib/console-query.js +121 -0
  86. package/dist/src/lib/constants.d.ts +124 -0
  87. package/dist/src/lib/constants.js +170 -0
  88. package/dist/src/lib/detect-amplitude.d.ts +31 -0
  89. package/dist/src/lib/detect-amplitude.js +407 -0
  90. package/dist/src/lib/framework-config.d.ts +188 -0
  91. package/dist/src/lib/framework-config.js +21 -0
  92. package/dist/src/lib/health-checks/endpoints.d.ts +3 -0
  93. package/dist/src/lib/health-checks/endpoints.js +45 -0
  94. package/dist/src/lib/health-checks/index.d.ts +4 -0
  95. package/dist/src/lib/health-checks/index.js +22 -0
  96. package/dist/src/lib/health-checks/readiness.d.ts +24 -0
  97. package/dist/src/lib/health-checks/readiness.js +118 -0
  98. package/dist/src/lib/health-checks/statuspage.d.ts +9 -0
  99. package/dist/src/lib/health-checks/statuspage.js +104 -0
  100. package/dist/src/lib/health-checks/types.d.ts +31 -0
  101. package/dist/src/lib/health-checks/types.js +9 -0
  102. package/dist/src/lib/helper-functions.d.ts +1 -0
  103. package/dist/src/lib/helper-functions.js +5 -0
  104. package/dist/src/lib/middleware/benchmark.d.ts +54 -0
  105. package/dist/src/lib/middleware/benchmark.js +48 -0
  106. package/dist/src/lib/middleware/benchmarks/cache-tracker.d.ts +44 -0
  107. package/dist/src/lib/middleware/benchmarks/cache-tracker.js +80 -0
  108. package/dist/src/lib/middleware/benchmarks/compaction-tracker.d.ts +29 -0
  109. package/dist/src/lib/middleware/benchmarks/compaction-tracker.js +59 -0
  110. package/dist/src/lib/middleware/benchmarks/context-size-tracker.d.ts +26 -0
  111. package/dist/src/lib/middleware/benchmarks/context-size-tracker.js +55 -0
  112. package/dist/src/lib/middleware/benchmarks/cost-tracker.d.ts +16 -0
  113. package/dist/src/lib/middleware/benchmarks/cost-tracker.js +75 -0
  114. package/dist/src/lib/middleware/benchmarks/duration-tracker.d.ts +20 -0
  115. package/dist/src/lib/middleware/benchmarks/duration-tracker.js +39 -0
  116. package/dist/src/lib/middleware/benchmarks/index.d.ts +9 -0
  117. package/dist/src/lib/middleware/benchmarks/index.js +67 -0
  118. package/dist/src/lib/middleware/benchmarks/json-writer.d.ts +15 -0
  119. package/dist/src/lib/middleware/benchmarks/json-writer.js +144 -0
  120. package/dist/src/lib/middleware/benchmarks/summary.d.ts +9 -0
  121. package/dist/src/lib/middleware/benchmarks/summary.js +105 -0
  122. package/dist/src/lib/middleware/benchmarks/token-tracker.d.ts +40 -0
  123. package/dist/src/lib/middleware/benchmarks/token-tracker.js +76 -0
  124. package/dist/src/lib/middleware/benchmarks/turn-counter.d.ts +34 -0
  125. package/dist/src/lib/middleware/benchmarks/turn-counter.js +58 -0
  126. package/dist/src/lib/middleware/config.d.ts +24 -0
  127. package/dist/src/lib/middleware/config.js +96 -0
  128. package/dist/src/lib/middleware/index.d.ts +11 -0
  129. package/dist/src/lib/middleware/index.js +17 -0
  130. package/dist/src/lib/middleware/phase-detector.d.ts +8 -0
  131. package/dist/src/lib/middleware/phase-detector.js +63 -0
  132. package/dist/src/lib/middleware/pipeline.d.ts +29 -0
  133. package/dist/src/lib/middleware/pipeline.js +81 -0
  134. package/dist/src/lib/middleware/schemas.d.ts +27 -0
  135. package/dist/src/lib/middleware/schemas.js +84 -0
  136. package/dist/src/lib/middleware/types.d.ts +94 -0
  137. package/dist/src/lib/middleware/types.js +8 -0
  138. package/dist/src/lib/package-manager-detection.d.ts +42 -0
  139. package/dist/src/lib/package-manager-detection.js +292 -0
  140. package/dist/src/lib/registry.d.ts +3 -0
  141. package/dist/src/lib/registry.js +42 -0
  142. package/dist/src/lib/safe-tools.d.ts +2 -0
  143. package/dist/src/lib/safe-tools.js +214 -0
  144. package/dist/src/lib/wizard-session.d.ts +220 -0
  145. package/dist/src/lib/wizard-session.js +127 -0
  146. package/dist/src/lib/wizard-tools.d.ts +82 -0
  147. package/dist/src/lib/wizard-tools.js +499 -0
  148. package/dist/src/run.d.ts +19 -0
  149. package/dist/src/run.js +151 -0
  150. package/dist/src/steps/add-mcp-server-to-clients/MCPClient.d.ts +30 -0
  151. package/dist/src/steps/add-mcp-server-to-clients/MCPClient.js +141 -0
  152. package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.d.ts +29 -0
  153. package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.js +180 -0
  154. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.d.ts +20 -0
  155. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.js +63 -0
  156. package/dist/src/steps/add-mcp-server-to-clients/clients/codex.d.ts +28 -0
  157. package/dist/src/steps/add-mcp-server-to-clients/clients/codex.js +77 -0
  158. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.d.ts +24 -0
  159. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js +60 -0
  160. package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.d.ts +27 -0
  161. package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.js +101 -0
  162. package/dist/src/steps/add-mcp-server-to-clients/clients/zed.d.ts +26 -0
  163. package/dist/src/steps/add-mcp-server-to-clients/clients/zed.js +102 -0
  164. package/dist/src/steps/add-mcp-server-to-clients/defaults.d.ts +44 -0
  165. package/dist/src/steps/add-mcp-server-to-clients/defaults.js +123 -0
  166. package/dist/src/steps/add-mcp-server-to-clients/index.d.ts +19 -0
  167. package/dist/src/steps/add-mcp-server-to-clients/index.js +110 -0
  168. package/dist/src/steps/add-or-update-environment-variables.d.ts +10 -0
  169. package/dist/src/steps/add-or-update-environment-variables.js +188 -0
  170. package/dist/src/steps/index.d.ts +4 -0
  171. package/dist/src/steps/index.js +20 -0
  172. package/dist/src/steps/run-prettier.d.ts +5 -0
  173. package/dist/src/steps/run-prettier.js +90 -0
  174. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.d.ts +11 -0
  175. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js +11 -0
  176. package/dist/src/steps/upload-environment-variables/index.d.ts +6 -0
  177. package/dist/src/steps/upload-environment-variables/index.js +37 -0
  178. package/dist/src/steps/upload-environment-variables/providers/vercel.d.ts +15 -0
  179. package/dist/src/steps/upload-environment-variables/providers/vercel.js +145 -0
  180. package/dist/src/telemetry.d.ts +2 -0
  181. package/dist/src/telemetry.js +12 -0
  182. package/dist/src/ui/index.d.ts +8 -0
  183. package/dist/src/ui/index.js +16 -0
  184. package/dist/src/ui/logging-ui.d.ts +56 -0
  185. package/dist/src/ui/logging-ui.js +157 -0
  186. package/dist/src/ui/tui/App.d.ts +6 -0
  187. package/dist/src/ui/tui/App.js +34 -0
  188. package/dist/src/ui/tui/components/AmplitudeLogo.d.ts +5 -0
  189. package/dist/src/ui/tui/components/AmplitudeLogo.js +81 -0
  190. package/dist/src/ui/tui/components/AmplitudeTextLogo.d.ts +3 -0
  191. package/dist/src/ui/tui/components/AmplitudeTextLogo.js +31 -0
  192. package/dist/src/ui/tui/components/ConsoleView.d.ts +23 -0
  193. package/dist/src/ui/tui/components/ConsoleView.js +220 -0
  194. package/dist/src/ui/tui/components/TitleBar.d.ts +6 -0
  195. package/dist/src/ui/tui/components/TitleBar.js +16 -0
  196. package/dist/src/ui/tui/console-commands.d.ts +16 -0
  197. package/dist/src/ui/tui/console-commands.js +31 -0
  198. package/dist/src/ui/tui/context/CommandModeContext.d.ts +2 -0
  199. package/dist/src/ui/tui/context/CommandModeContext.js +3 -0
  200. package/dist/src/ui/tui/flows.d.ts +48 -0
  201. package/dist/src/ui/tui/flows.js +154 -0
  202. package/dist/src/ui/tui/hooks/useScreenInput.d.ts +13 -0
  203. package/dist/src/ui/tui/hooks/useScreenInput.js +18 -0
  204. package/dist/src/ui/tui/hooks/useStdoutDimensions.d.ts +9 -0
  205. package/dist/src/ui/tui/hooks/useStdoutDimensions.js +29 -0
  206. package/dist/src/ui/tui/ink-ui.d.ts +62 -0
  207. package/dist/src/ui/tui/ink-ui.js +142 -0
  208. package/dist/src/ui/tui/primitives/CardLayout.d.ts +12 -0
  209. package/dist/src/ui/tui/primitives/CardLayout.js +9 -0
  210. package/dist/src/ui/tui/primitives/ConfirmationInput.d.ts +13 -0
  211. package/dist/src/ui/tui/primitives/ConfirmationInput.js +35 -0
  212. package/dist/src/ui/tui/primitives/DissolveTransition.d.ts +21 -0
  213. package/dist/src/ui/tui/primitives/DissolveTransition.js +143 -0
  214. package/dist/src/ui/tui/primitives/EventPlanViewer.d.ts +9 -0
  215. package/dist/src/ui/tui/primitives/EventPlanViewer.js +9 -0
  216. package/dist/src/ui/tui/primitives/KagiSmallWebViewer.d.ts +7 -0
  217. package/dist/src/ui/tui/primitives/KagiSmallWebViewer.js +101 -0
  218. package/dist/src/ui/tui/primitives/LoadingBox.d.ts +8 -0
  219. package/dist/src/ui/tui/primitives/LoadingBox.js +9 -0
  220. package/dist/src/ui/tui/primitives/LogViewer.d.ts +11 -0
  221. package/dist/src/ui/tui/primitives/LogViewer.js +55 -0
  222. package/dist/src/ui/tui/primitives/PickerMenu.d.ts +20 -0
  223. package/dist/src/ui/tui/primitives/PickerMenu.js +212 -0
  224. package/dist/src/ui/tui/primitives/ProgressList.d.ts +15 -0
  225. package/dist/src/ui/tui/primitives/ProgressList.js +29 -0
  226. package/dist/src/ui/tui/primitives/PromptLabel.d.ts +11 -0
  227. package/dist/src/ui/tui/primitives/PromptLabel.js +12 -0
  228. package/dist/src/ui/tui/primitives/ReportViewer.d.ts +12 -0
  229. package/dist/src/ui/tui/primitives/ReportViewer.js +99 -0
  230. package/dist/src/ui/tui/primitives/ScreenErrorBoundary.d.ts +26 -0
  231. package/dist/src/ui/tui/primitives/ScreenErrorBoundary.js +29 -0
  232. package/dist/src/ui/tui/primitives/SlashCommandInput.d.ts +21 -0
  233. package/dist/src/ui/tui/primitives/SlashCommandInput.js +85 -0
  234. package/dist/src/ui/tui/primitives/SnakeGame.d.ts +1 -0
  235. package/dist/src/ui/tui/primitives/SnakeGame.js +1 -0
  236. package/dist/src/ui/tui/primitives/SplitView.d.ts +11 -0
  237. package/dist/src/ui/tui/primitives/SplitView.js +8 -0
  238. package/dist/src/ui/tui/primitives/TabContainer.d.ts +18 -0
  239. package/dist/src/ui/tui/primitives/TabContainer.js +30 -0
  240. package/dist/src/ui/tui/primitives/index.d.ts +23 -0
  241. package/dist/src/ui/tui/primitives/index.js +19 -0
  242. package/dist/src/ui/tui/router.d.ts +61 -0
  243. package/dist/src/ui/tui/router.js +104 -0
  244. package/dist/src/ui/tui/screen-registry.d.ts +19 -0
  245. package/dist/src/ui/tui/screen-registry.js +56 -0
  246. package/dist/src/ui/tui/screens/ActivationOptionsScreen.d.ts +12 -0
  247. package/dist/src/ui/tui/screens/ActivationOptionsScreen.js +57 -0
  248. package/dist/src/ui/tui/screens/AuthScreen.d.ts +18 -0
  249. package/dist/src/ui/tui/screens/AuthScreen.js +107 -0
  250. package/dist/src/ui/tui/screens/ChecklistScreen.d.ts +22 -0
  251. package/dist/src/ui/tui/screens/ChecklistScreen.js +122 -0
  252. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.d.ts +24 -0
  253. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.js +113 -0
  254. package/dist/src/ui/tui/screens/DataSetupScreen.d.ts +17 -0
  255. package/dist/src/ui/tui/screens/DataSetupScreen.js +73 -0
  256. package/dist/src/ui/tui/screens/IntroScreen.d.ts +16 -0
  257. package/dist/src/ui/tui/screens/IntroScreen.js +86 -0
  258. package/dist/src/ui/tui/screens/LoginScreen.d.ts +15 -0
  259. package/dist/src/ui/tui/screens/LoginScreen.js +65 -0
  260. package/dist/src/ui/tui/screens/LogoutScreen.d.ts +12 -0
  261. package/dist/src/ui/tui/screens/LogoutScreen.js +28 -0
  262. package/dist/src/ui/tui/screens/McpScreen.d.ts +26 -0
  263. package/dist/src/ui/tui/screens/McpScreen.js +148 -0
  264. package/dist/src/ui/tui/screens/OutageScreen.d.ts +10 -0
  265. package/dist/src/ui/tui/screens/OutageScreen.js +17 -0
  266. package/dist/src/ui/tui/screens/OutroScreen.d.ts +11 -0
  267. package/dist/src/ui/tui/screens/OutroScreen.js +69 -0
  268. package/dist/src/ui/tui/screens/RegionSelectScreen.d.ts +17 -0
  269. package/dist/src/ui/tui/screens/RegionSelectScreen.js +40 -0
  270. package/dist/src/ui/tui/screens/RunScreen.d.ts +16 -0
  271. package/dist/src/ui/tui/screens/RunScreen.js +212 -0
  272. package/dist/src/ui/tui/screens/SettingsOverrideScreen.d.ts +10 -0
  273. package/dist/src/ui/tui/screens/SettingsOverrideScreen.js +23 -0
  274. package/dist/src/ui/tui/screens/SetupScreen.d.ts +13 -0
  275. package/dist/src/ui/tui/screens/SetupScreen.js +73 -0
  276. package/dist/src/ui/tui/screens/SlackScreen.d.ts +25 -0
  277. package/dist/src/ui/tui/screens/SlackScreen.js +97 -0
  278. package/dist/src/ui/tui/services/mcp-installer.d.ts +25 -0
  279. package/dist/src/ui/tui/services/mcp-installer.js +82 -0
  280. package/dist/src/ui/tui/start-tui.d.ts +10 -0
  281. package/dist/src/ui/tui/start-tui.js +50 -0
  282. package/dist/src/ui/tui/store.d.ts +231 -0
  283. package/dist/src/ui/tui/store.js +568 -0
  284. package/dist/src/ui/tui/styles.d.ts +31 -0
  285. package/dist/src/ui/tui/styles.js +33 -0
  286. package/dist/src/ui/wizard-ui.d.ts +110 -0
  287. package/dist/src/ui/wizard-ui.js +18 -0
  288. package/dist/src/utils/ampli-settings.d.ts +37 -0
  289. package/dist/src/utils/ampli-settings.js +182 -0
  290. package/dist/src/utils/analytics.d.ts +35 -0
  291. package/dist/src/utils/analytics.js +133 -0
  292. package/dist/src/utils/anthropic-status.d.ts +17 -0
  293. package/dist/src/utils/anthropic-status.js +51 -0
  294. package/dist/src/utils/api-key-store.d.ts +35 -0
  295. package/dist/src/utils/api-key-store.js +176 -0
  296. package/dist/src/utils/bash.d.ts +2 -0
  297. package/dist/src/utils/bash.js +53 -0
  298. package/dist/src/utils/custom-headers.d.ts +9 -0
  299. package/dist/src/utils/custom-headers.js +23 -0
  300. package/dist/src/utils/debug.d.ts +23 -0
  301. package/dist/src/utils/debug.js +86 -0
  302. package/dist/src/utils/environment.d.ts +4 -0
  303. package/dist/src/utils/environment.js +76 -0
  304. package/dist/src/utils/file-utils.d.ts +2 -0
  305. package/dist/src/utils/file-utils.js +16 -0
  306. package/dist/src/utils/get-api-key.d.ts +17 -0
  307. package/dist/src/utils/get-api-key.js +50 -0
  308. package/dist/src/utils/logging.d.ts +9 -0
  309. package/dist/src/utils/logging.js +48 -0
  310. package/dist/src/utils/oauth.d.ts +53 -0
  311. package/dist/src/utils/oauth.js +354 -0
  312. package/dist/src/utils/package-json.d.ts +25 -0
  313. package/dist/src/utils/package-json.js +26 -0
  314. package/dist/src/utils/package-manager.d.ts +21 -0
  315. package/dist/src/utils/package-manager.js +208 -0
  316. package/dist/src/utils/semver.d.ts +21 -0
  317. package/dist/src/utils/semver.js +61 -0
  318. package/dist/src/utils/setup-utils.d.ts +82 -0
  319. package/dist/src/utils/setup-utils.js +467 -0
  320. package/dist/src/utils/shell-completions.d.ts +10 -0
  321. package/dist/src/utils/shell-completions.js +199 -0
  322. package/dist/src/utils/string.d.ts +1 -0
  323. package/dist/src/utils/string.js +8 -0
  324. package/dist/src/utils/types.d.ts +72 -0
  325. package/dist/src/utils/types.js +2 -0
  326. package/dist/src/utils/urls.d.ts +14 -0
  327. package/dist/src/utils/urls.js +69 -0
  328. package/dist/src/utils/vendor/is-unicorn-supported.d.ts +1 -0
  329. package/dist/src/utils/vendor/is-unicorn-supported.js +23 -0
  330. package/dist/src/utils/wizard-abort.d.ts +13 -0
  331. package/dist/src/utils/wizard-abort.js +56 -0
  332. package/man/amplitude-wizard.1 +170 -0
  333. package/package.json +144 -0
@@ -0,0 +1,568 @@
1
+ /**
2
+ * WizardStore — Nanostore-backed reactive store for the TUI.
3
+ * React components subscribe via useSyncExternalStore.
4
+ *
5
+ * Navigation is delegated to WizardRouter.
6
+ * The active screen is derived from session state — not imperatively set.
7
+ * Overlays (outage, etc.) are the only imperative navigation.
8
+ *
9
+ * All session mutations that affect screen resolution go through
10
+ * explicit setters so emitChange() is always called.
11
+ */
12
+ import { atom, map } from 'nanostores';
13
+ import { TaskStatus } from '../wizard-ui.js';
14
+ import { AdditionalFeature, McpOutcome, SlackOutcome, RunPhase, buildSession, } from '../../lib/wizard-session.js';
15
+ import { WizardRouter, Screen, Overlay, Flow, } from './router.js';
16
+ import { analytics, sessionProperties } from '../../utils/analytics.js';
17
+ export { TaskStatus, Screen, Overlay, Flow, RunPhase, McpOutcome, SlackOutcome, };
18
+ export class WizardStore {
19
+ // ── Internal nanostore atoms ─────────────────────────────────────
20
+ $session = map(buildSession({}));
21
+ $statusMessages = atom([]);
22
+ $tasks = atom([]);
23
+ $eventPlan = atom([]);
24
+ $version = atom(0);
25
+ /** True while the user is typing a slash command in the command bar. */
26
+ $commandMode = atom(false);
27
+ /** Transient feedback message shown in the command bar after a command runs. */
28
+ $commandFeedback = atom(null);
29
+ /** Error caught by the app error boundary — shown in ConsoleView. */
30
+ $screenError = atom(null);
31
+ $screenErrorRetry = atom(0);
32
+ /** Tab id to switch to imperatively (e.g. from a slash command). */
33
+ $requestedTab = atom(null);
34
+ /** Last screen seen — used to detect screen transitions for analytics. */
35
+ _lastScreen = null;
36
+ /** Hooks run when transitioning onto a screen. */
37
+ _enterScreenHooks = new Map();
38
+ version = '';
39
+ /** Navigation router — resolves active screen from session state. */
40
+ router;
41
+ /**
42
+ * Setup promise — IntroScreen resolves this when the user confirms.
43
+ * bin.ts awaits it before calling runWizard.
44
+ */
45
+ _resolveSetup;
46
+ setupComplete = new Promise((resolve) => {
47
+ this._resolveSetup = resolve;
48
+ });
49
+ /** Blocks agent execution until the settings-override overlay is dismissed. */
50
+ _resolveSettingsOverride = null;
51
+ _backupAndFixSettings = null;
52
+ /** Pending confirmation or choice prompt from the agent. */
53
+ $pendingPrompt = atom(null);
54
+ constructor(flow = Flow.Wizard) {
55
+ this.router = new WizardRouter(flow);
56
+ }
57
+ // ── State accessors (read from atoms) ────────────────────────────
58
+ get session() {
59
+ return this.$session.get();
60
+ }
61
+ set session(value) {
62
+ this.$session.set(value);
63
+ }
64
+ get commandMode() {
65
+ return this.$commandMode.get();
66
+ }
67
+ get commandFeedback() {
68
+ return this.$commandFeedback.get();
69
+ }
70
+ get screenError() {
71
+ return this.$screenError.get();
72
+ }
73
+ get screenErrorRetry() {
74
+ return this.$screenErrorRetry.get();
75
+ }
76
+ get requestedTab() {
77
+ return this.$requestedTab.get();
78
+ }
79
+ get statusMessages() {
80
+ return this.$statusMessages.get();
81
+ }
82
+ get tasks() {
83
+ return this.$tasks.get();
84
+ }
85
+ get eventPlan() {
86
+ return this.$eventPlan.get();
87
+ }
88
+ get pendingPrompt() {
89
+ return this.$pendingPrompt.get();
90
+ }
91
+ // ── Session setters ─────────────────────────────────────────────
92
+ // Every setter that affects screen resolution calls emitChange().
93
+ // Business logic calls these instead of mutating session directly.
94
+ /** Advances the flow past IntroScreen. Does not start the agent. */
95
+ concludeIntro() {
96
+ this.$session.setKey('introConcluded', true);
97
+ this.emitChange();
98
+ }
99
+ /**
100
+ * Unblocks bin.ts via the setupComplete promise, signalling that the agent
101
+ * can start. Called by bin.ts via onEnterScreen(Screen.Run) so it fires at
102
+ * the right point in the flow — after auth, data check, and setup questions.
103
+ */
104
+ completeSetup() {
105
+ this.$session.setKey('setupConfirmed', true);
106
+ analytics.wizardCapture('setup confirmed', sessionProperties(this.session));
107
+ this._resolveSetup();
108
+ this.emitChange();
109
+ }
110
+ setRunPhase(phase) {
111
+ this.$session.setKey('runPhase', phase);
112
+ this.emitChange();
113
+ }
114
+ setCredentials(credentials) {
115
+ this.$session.setKey('credentials', credentials);
116
+ if (credentials?.projectId) {
117
+ analytics.setDistinctId(String(credentials.projectId));
118
+ }
119
+ analytics.wizardCapture('auth complete', {
120
+ project_id: credentials?.projectId,
121
+ });
122
+ analytics.wizardCapture('credentials updated', {
123
+ project_id: credentials?.projectId,
124
+ region: this.session.region,
125
+ });
126
+ this.emitChange();
127
+ }
128
+ setFrameworkConfig(integration, config) {
129
+ this.$session.setKey('integration', integration);
130
+ this.$session.setKey('frameworkConfig', config);
131
+ this.emitChange();
132
+ }
133
+ setDetectionComplete() {
134
+ this.$session.setKey('detectionComplete', true);
135
+ this.emitChange();
136
+ }
137
+ setDetectedFramework(label) {
138
+ this.$session.setKey('detectedFrameworkLabel', label);
139
+ this.emitChange();
140
+ }
141
+ setLoginUrl(url) {
142
+ this.$session.setKey('loginUrl', url);
143
+ this.emitChange();
144
+ }
145
+ setRegion(region) {
146
+ this.$session.setKey('region', region);
147
+ this.$session.setKey('regionForced', false);
148
+ this.emitChange();
149
+ }
150
+ /** Force the RegionSelect screen to re-appear (/region command). */
151
+ setRegionForced() {
152
+ this.$session.setKey('regionForced', true);
153
+ // Reset data check so it re-runs after region changes
154
+ this.$session.setKey('projectHasData', null);
155
+ this.emitChange();
156
+ }
157
+ _retryResolve = null;
158
+ setScreenError(error) {
159
+ this.$screenError.set(error);
160
+ this.$version.set(this.$version.get() + 1);
161
+ }
162
+ clearScreenError() {
163
+ this.$screenError.set(null);
164
+ this.$screenErrorRetry.set(this.$screenErrorRetry.get() + 1);
165
+ this.$version.set(this.$version.get() + 1);
166
+ this._retryResolve?.();
167
+ this._retryResolve = null;
168
+ }
169
+ /**
170
+ * Returns a Promise that resolves the next time clearScreenError() is called
171
+ * (i.e. the user presses R). Used by InkUI.setRunError to block until retry.
172
+ */
173
+ waitForRetry() {
174
+ return new Promise((resolve) => {
175
+ this._retryResolve = resolve;
176
+ });
177
+ }
178
+ /** Show a confirmation prompt. Resolves with true (yes) or false (no / skipped). */
179
+ promptConfirm(message) {
180
+ return new Promise((resolve) => {
181
+ this.$pendingPrompt.set({ kind: 'confirm', message, resolve });
182
+ this.$version.set(this.$version.get() + 1);
183
+ });
184
+ }
185
+ /** Show a multiple-choice prompt. Resolves with the chosen option or empty string if skipped. */
186
+ promptChoice(message, options) {
187
+ return new Promise((resolve) => {
188
+ this.$pendingPrompt.set({ kind: 'choice', message, options, resolve });
189
+ this.$version.set(this.$version.get() + 1);
190
+ });
191
+ }
192
+ /** Resolve a confirm or choice pending prompt. */
193
+ resolvePrompt(answer) {
194
+ const prompt = this.$pendingPrompt.get();
195
+ if (!prompt || prompt.kind === 'event-plan')
196
+ return;
197
+ analytics.wizardCapture('prompt response', {
198
+ prompt_kind: prompt.kind,
199
+ response: String(answer),
200
+ });
201
+ this.$pendingPrompt.set(null);
202
+ this.$version.set(this.$version.get() + 1);
203
+ if (prompt.kind === 'confirm') {
204
+ prompt.resolve(answer);
205
+ }
206
+ else {
207
+ prompt.resolve(answer);
208
+ }
209
+ }
210
+ /** Show an event-plan confirmation. Resolves when the user approves, skips, or gives feedback. */
211
+ promptEventPlan(events) {
212
+ return new Promise((resolve) => {
213
+ this.$pendingPrompt.set({ kind: 'event-plan', events, resolve });
214
+ this.$version.set(this.$version.get() + 1);
215
+ });
216
+ }
217
+ /** Resolve the pending event-plan prompt. */
218
+ resolveEventPlan(decision) {
219
+ const prompt = this.$pendingPrompt.get();
220
+ if (!prompt || prompt.kind !== 'event-plan')
221
+ return;
222
+ analytics.wizardCapture('prompt response', {
223
+ prompt_kind: 'event-plan',
224
+ response: typeof decision === 'object' ? 'feedback' : String(decision),
225
+ });
226
+ this.$pendingPrompt.set(null);
227
+ this.$version.set(this.$version.get() + 1);
228
+ prompt.resolve(decision);
229
+ }
230
+ /** Enter or exit slash command mode. */
231
+ setCommandMode(active) {
232
+ this.$commandMode.set(active);
233
+ this.$version.set(this.$version.get() + 1);
234
+ }
235
+ showSnakeOverlay() {
236
+ this.pushOverlay(Overlay.Snake);
237
+ }
238
+ hideSnakeOverlay() {
239
+ this.popOverlay();
240
+ }
241
+ showMcpOverlay() {
242
+ this.pushOverlay(Overlay.Mcp);
243
+ }
244
+ hideMcpOverlay() {
245
+ this.popOverlay();
246
+ }
247
+ showSlackOverlay() {
248
+ this.pushOverlay(Overlay.Slack);
249
+ }
250
+ hideSlackOverlay() {
251
+ this.popOverlay();
252
+ }
253
+ showLogoutOverlay() {
254
+ this.pushOverlay(Overlay.Logout);
255
+ }
256
+ hideLogoutOverlay() {
257
+ this.popOverlay();
258
+ }
259
+ showLoginOverlay() {
260
+ this.pushOverlay(Overlay.Login);
261
+ }
262
+ hideLoginOverlay() {
263
+ this.popOverlay();
264
+ }
265
+ /** Update just the access token in credentials without triggering auth analytics. */
266
+ updateAccessToken(accessToken) {
267
+ const creds = this.$session.get().credentials;
268
+ if (!creds)
269
+ return;
270
+ this.$session.setKey('credentials', { ...creds, accessToken });
271
+ this.$version.set(this.$version.get() + 1);
272
+ }
273
+ /** Request the TabContainer to switch to a tab by id. Clears after consumption. */
274
+ setRequestedTab(id) {
275
+ this.$requestedTab.set(id);
276
+ this.$version.set(this.$version.get() + 1);
277
+ }
278
+ clearRequestedTab() {
279
+ this.$requestedTab.set(null);
280
+ }
281
+ /** Show a transient feedback message in the command bar. Clears after ms. */
282
+ setCommandFeedback(message, ms = 3000) {
283
+ this.$commandFeedback.set(message);
284
+ this.$version.set(this.$version.get() + 1);
285
+ setTimeout(() => {
286
+ this.$commandFeedback.set(null);
287
+ this.$version.set(this.$version.get() + 1);
288
+ }, ms);
289
+ }
290
+ setProjectHasData(value) {
291
+ this.$session.setKey('projectHasData', value);
292
+ this.emitChange();
293
+ }
294
+ setActivationLevel(level) {
295
+ this.$session.setKey('activationLevel', level);
296
+ // Keep projectHasData in sync so existing routing still works
297
+ this.$session.setKey('projectHasData', level === 'full' ? true : false);
298
+ this.emitChange();
299
+ }
300
+ setSnippetConfigured(value) {
301
+ this.$session.setKey('snippetConfigured', value);
302
+ this.emitChange();
303
+ }
304
+ setDataIngestionConfirmed() {
305
+ this.$session.setKey('dataIngestionConfirmed', true);
306
+ analytics.wizardCapture('data ingestion confirmed', sessionProperties(this.session));
307
+ this.emitChange();
308
+ }
309
+ setChecklistChartComplete() {
310
+ this.$session.setKey('checklistChartComplete', true);
311
+ this.emitChange();
312
+ }
313
+ setChecklistDashboardComplete() {
314
+ this.$session.setKey('checklistDashboardComplete', true);
315
+ this.emitChange();
316
+ }
317
+ setChecklistComplete() {
318
+ this.$session.setKey('checklistComplete', true);
319
+ analytics.wizardCapture('checklist completed', {
320
+ chart_complete: this.session.checklistChartComplete,
321
+ dashboard_complete: this.session.checklistDashboardComplete,
322
+ ...sessionProperties(this.session),
323
+ });
324
+ this.emitChange();
325
+ }
326
+ setActivationOptionsComplete() {
327
+ this.$session.setKey('activationOptionsComplete', true);
328
+ this.emitChange();
329
+ }
330
+ /**
331
+ * Called from bin.ts when OAuth completes (browser redirect done).
332
+ * Stores auth tokens + org list so AuthScreen can show the SUSI pickers.
333
+ * Also sets region from the detected cloud zone.
334
+ */
335
+ setOAuthComplete(data) {
336
+ this.$session.setKey('pendingAuthAccessToken', data.accessToken);
337
+ this.$session.setKey('pendingAuthIdToken', data.idToken);
338
+ this.$session.setKey('pendingAuthCloudRegion', data.cloudRegion);
339
+ this.$session.setKey('pendingOrgs', data.orgs);
340
+ // Auto-set region — skips RegionSelect for users whose zone is detected.
341
+ if (data.cloudRegion) {
342
+ this.$session.setKey('region', data.cloudRegion);
343
+ }
344
+ this.emitChange();
345
+ }
346
+ /**
347
+ * Called from AuthScreen when the user finishes org + workspace selection.
348
+ * Writes ampli.json and records org/workspace on the session.
349
+ */
350
+ setOrgAndWorkspace(org, workspace, installDir) {
351
+ this.$session.setKey('selectedOrgId', org.id);
352
+ this.$session.setKey('selectedOrgName', org.name);
353
+ this.$session.setKey('selectedWorkspaceId', workspace.id);
354
+ this.$session.setKey('selectedWorkspaceName', workspace.name);
355
+ // Write ampli.json to the project directory
356
+ void import('../../lib/ampli-config.js').then(({ writeAmpliConfig }) => {
357
+ const zone = this.$session.get().pendingAuthCloudRegion ?? 'us';
358
+ writeAmpliConfig(installDir, {
359
+ OrgId: org.id,
360
+ WorkspaceId: workspace.id,
361
+ Zone: zone,
362
+ });
363
+ });
364
+ this.emitChange();
365
+ }
366
+ setServiceStatus(status) {
367
+ this.$session.setKey('serviceStatus', status);
368
+ this.emitChange();
369
+ }
370
+ /**
371
+ * Push the settings-override overlay and return a promise that blocks
372
+ * until the user dismisses it via backupAndFixSettingsOverride().
373
+ */
374
+ showSettingsOverride(keys, backupAndFix) {
375
+ this.$session.setKey('settingsOverrideKeys', keys);
376
+ this._backupAndFixSettings = backupAndFix;
377
+ this.pushOverlay(Overlay.SettingsOverride);
378
+ return new Promise((resolve) => {
379
+ this._resolveSettingsOverride = resolve;
380
+ });
381
+ }
382
+ /**
383
+ * Back up .claude/settings.json. Dismisses the overlay on success.
384
+ */
385
+ backupAndFixSettingsOverride() {
386
+ const ok = this._backupAndFixSettings?.() ?? false;
387
+ if (ok) {
388
+ this.$session.setKey('settingsOverrideKeys', null);
389
+ this.popOverlay();
390
+ this._resolveSettingsOverride?.();
391
+ this._resolveSettingsOverride = null;
392
+ this._backupAndFixSettings = null;
393
+ }
394
+ return ok;
395
+ }
396
+ addDiscoveredFeature(feature) {
397
+ if (!this.session.discoveredFeatures.includes(feature)) {
398
+ this.session.discoveredFeatures.push(feature);
399
+ this.emitChange();
400
+ }
401
+ }
402
+ /**
403
+ * Enable an additional feature: enqueue it for the stop hook
404
+ * and set any feature-specific session flags.
405
+ */
406
+ enableFeature(feature) {
407
+ if (!this.session.additionalFeatureQueue.includes(feature)) {
408
+ this.session.additionalFeatureQueue.push(feature);
409
+ }
410
+ // Feature-specific flags
411
+ if (feature === AdditionalFeature.LLM) {
412
+ this.session.llmOptIn = true;
413
+ }
414
+ analytics.wizardCapture('feature enabled', { feature });
415
+ this.emitChange();
416
+ }
417
+ setAmplitudePreDetected() {
418
+ this.$session.setKey('amplitudePreDetected', true);
419
+ this.emitChange();
420
+ }
421
+ setMcpComplete(outcome = McpOutcome.Skipped, installedClients = []) {
422
+ this.$session.setKey('mcpComplete', true);
423
+ this.$session.setKey('mcpOutcome', outcome);
424
+ this.$session.setKey('mcpInstalledClients', installedClients);
425
+ analytics.wizardCapture('mcp complete', {
426
+ mcp_outcome: outcome,
427
+ mcp_installed_clients: installedClients,
428
+ ...sessionProperties(this.session),
429
+ });
430
+ this.emitChange();
431
+ }
432
+ setSlackComplete(outcome = SlackOutcome.Skipped) {
433
+ this.$session.setKey('slackComplete', true);
434
+ this.$session.setKey('slackOutcome', outcome);
435
+ analytics.wizardCapture('slack complete', {
436
+ slack_outcome: outcome,
437
+ ...sessionProperties(this.session),
438
+ });
439
+ this.emitChange();
440
+ }
441
+ setOutroData(data) {
442
+ this.$session.setKey('outroData', data);
443
+ this.emitChange();
444
+ }
445
+ setFrameworkContext(key, value) {
446
+ const ctx = { ...this.$session.get().frameworkContext, [key]: value };
447
+ this.$session.setKey('frameworkContext', ctx);
448
+ this.emitChange();
449
+ }
450
+ // ── Derived state ───────────────────────────────────────────────
451
+ /**
452
+ * The screen that should be rendered right now.
453
+ * Derived from session state via the router.
454
+ */
455
+ get currentScreen() {
456
+ return this.router.resolve(this.session);
457
+ }
458
+ /** Direction hint for screen transitions. */
459
+ get lastNavDirection() {
460
+ return this.router.lastNavDirection;
461
+ }
462
+ // ── Change notification ─────────────────────────────────────────
463
+ getVersion() {
464
+ return this.$version.get();
465
+ }
466
+ /**
467
+ * Notify React that state has changed.
468
+ * The router re-resolves the active screen on next render.
469
+ */
470
+ emitChange() {
471
+ this.router._setDirection('push');
472
+ this.$version.set(this.$version.get() + 1);
473
+ this._detectTransition();
474
+ }
475
+ // ── Overlay navigation ──────────────────────────────────────────
476
+ pushOverlay(overlay) {
477
+ this.router._setDirection('push');
478
+ this.router.pushOverlay(overlay);
479
+ this.$version.set(this.$version.get() + 1);
480
+ this._detectTransition();
481
+ }
482
+ popOverlay() {
483
+ this.router._setDirection('pop');
484
+ this.router.popOverlay();
485
+ this.$version.set(this.$version.get() + 1);
486
+ this._detectTransition();
487
+ }
488
+ // ── Screen transition analytics ─────────────────────────────────
489
+ /**
490
+ * Register a callback to run when transitioning onto the given screen.
491
+ * Fires after every transition that lands on this screen.
492
+ */
493
+ onEnterScreen(screen, fn) {
494
+ const list = this._enterScreenHooks.get(screen) ?? [];
495
+ list.push(fn);
496
+ this._enterScreenHooks.set(screen, list);
497
+ }
498
+ /**
499
+ * Detect screen transitions, run enter-screen hooks, and fire analytics.
500
+ * Called at the end of emitChange/pushOverlay/popOverlay.
501
+ */
502
+ _detectTransition() {
503
+ const next = this.router.resolve(this.session);
504
+ const prev = this._lastScreen;
505
+ // Update _lastScreen before invoking hooks so re-entrant emitChange calls
506
+ // (e.g. completeSetup inside an onEnterScreen hook) see prev === next and
507
+ // don't re-fire the same hooks, preventing infinite recursion.
508
+ this._lastScreen = next;
509
+ if (prev !== null && next !== prev) {
510
+ const hooks = this._enterScreenHooks.get(next);
511
+ if (hooks) {
512
+ for (const fn of hooks)
513
+ fn();
514
+ }
515
+ analytics.wizardCapture(`screen ${next}`, {
516
+ from_screen: prev,
517
+ ...sessionProperties(this.session),
518
+ });
519
+ }
520
+ }
521
+ // ── Agent observation state ─────────────────────────────────────
522
+ pushStatus(message) {
523
+ this.$statusMessages.set([...this.$statusMessages.get(), message]);
524
+ this.emitChange();
525
+ }
526
+ setTasks(tasks) {
527
+ this.$tasks.set(tasks);
528
+ this.emitChange();
529
+ }
530
+ updateTask(index, done) {
531
+ const tasks = this.$tasks.get();
532
+ if (tasks[index]) {
533
+ const updated = [...tasks];
534
+ updated[index] = {
535
+ ...updated[index],
536
+ done,
537
+ status: done ? TaskStatus.Completed : TaskStatus.Pending,
538
+ };
539
+ this.$tasks.set(updated);
540
+ this.emitChange();
541
+ }
542
+ }
543
+ setEventPlan(events) {
544
+ this.$eventPlan.set(events);
545
+ this.emitChange();
546
+ }
547
+ syncTodos(todos) {
548
+ const incoming = todos.map((t) => ({
549
+ label: t.content,
550
+ activeForm: t.activeForm,
551
+ status: t.status || TaskStatus.Pending,
552
+ done: t.status === TaskStatus.Completed,
553
+ }));
554
+ const incomingLabels = new Set(incoming.map((t) => t.label));
555
+ const retained = this.$tasks
556
+ .get()
557
+ .filter((t) => t.done && !incomingLabels.has(t.label));
558
+ this.$tasks.set([...retained, ...incoming]);
559
+ this.emitChange();
560
+ }
561
+ // ── React integration ───────────────────────────────────────────
562
+ subscribe(callback) {
563
+ return this.$version.listen(() => callback());
564
+ }
565
+ getSnapshot() {
566
+ return this.$version.get();
567
+ }
568
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Shared style constants for TUI layout primitives.
3
+ */
4
+ export declare enum HAlign {
5
+ Left = "flex-start",
6
+ Center = "center",
7
+ Right = "flex-end"
8
+ }
9
+ export declare enum VAlign {
10
+ Top = "flex-start",
11
+ Center = "center",
12
+ Bottom = "flex-end"
13
+ }
14
+ export declare const Colors: {
15
+ readonly primary: "#1e61f0";
16
+ readonly accent: "#1e61f0";
17
+ readonly success: "green";
18
+ readonly error: "red";
19
+ readonly muted: "#cccccc";
20
+ };
21
+ export declare const Icons: {
22
+ readonly diamond: "◆";
23
+ readonly diamondOpen: "◇";
24
+ readonly check: "✔";
25
+ readonly warning: "⚠";
26
+ readonly squareFilled: "◼";
27
+ readonly squareOpen: "◻";
28
+ readonly triangleRight: "▶";
29
+ readonly triangleSmallRight: "▸";
30
+ readonly bullet: "•";
31
+ };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Shared style constants for TUI layout primitives.
3
+ */
4
+ export var HAlign;
5
+ (function (HAlign) {
6
+ HAlign["Left"] = "flex-start";
7
+ HAlign["Center"] = "center";
8
+ HAlign["Right"] = "flex-end";
9
+ })(HAlign || (HAlign = {}));
10
+ export var VAlign;
11
+ (function (VAlign) {
12
+ VAlign["Top"] = "flex-start";
13
+ VAlign["Center"] = "center";
14
+ VAlign["Bottom"] = "flex-end";
15
+ })(VAlign || (VAlign = {}));
16
+ export const Colors = {
17
+ primary: '#1e61f0',
18
+ accent: '#1e61f0',
19
+ success: 'green',
20
+ error: 'red',
21
+ muted: '#cccccc',
22
+ };
23
+ export const Icons = {
24
+ diamond: '\u25C6',
25
+ diamondOpen: '\u25C7',
26
+ check: '\u2714',
27
+ warning: '\u26A0',
28
+ squareFilled: '\u25FC',
29
+ squareOpen: '\u25FB',
30
+ triangleRight: '\u25B6',
31
+ triangleSmallRight: '\u25B8',
32
+ bullet: '\u2022',
33
+ };