@contentful/experience-design-system-cli 2.35.0 → 2.35.1-dev-build-d5a8fc4d.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 (277) hide show
  1. package/bin/cli.js +1 -57
  2. package/dist/app.d.ts +9 -0
  3. package/dist/app.js +983 -0
  4. package/dist/index.js +1201 -0
  5. package/dist/package.json +10 -15
  6. package/dist/program.d.ts +2 -0
  7. package/dist/src/legacy/legacy-cli-path.d.ts +1 -0
  8. package/dist/src/legacy/run-legacy.d.ts +1 -0
  9. package/dist/src/tui/debug-store.d.ts +14 -0
  10. package/dist/src/tui/help/PageContainer.d.ts +4 -0
  11. package/dist/src/tui/home/home.d.ts +5 -0
  12. package/dist/src/tui/home/home.theme.d.ts +14 -0
  13. package/dist/src/tui/import/PageContainer.d.ts +5 -0
  14. package/dist/src/tui/import/spawn-v1-import.d.ts +28 -0
  15. package/dist/src/tui/import/terminal-input.d.ts +2 -0
  16. package/dist/src/tui/package-root.d.ts +9 -0
  17. package/dist/src/tui/settings/PageContainer.d.ts +6 -0
  18. package/dist/src/tui/settings/contentful-configuration/ContentfulConfigScreen.d.ts +4 -0
  19. package/dist/src/tui/settings/contentful-configuration/config-store.d.ts +9 -0
  20. package/dist/src/tui/settings/debug-mode/debug-mode-store.d.ts +5 -0
  21. package/dist/src/tui/settings/debug-mode/screen.d.ts +4 -0
  22. package/dist/src/tui/settings/opt-in-analytics/analytics-store.d.ts +5 -0
  23. package/dist/src/tui/settings/opt-in-analytics/screen.d.ts +4 -0
  24. package/dist/src/tui/settings/utils/v1-store.d.ts +2 -0
  25. package/dist/src/tui/upgrade/PageContainer.d.ts +4 -0
  26. package/dist/src/tui/upgrade/version.d.ts +12 -0
  27. package/dist/src/tui/use-terminal-width.d.ts +1 -0
  28. package/legacy/bin/cli.js +58 -0
  29. package/legacy/dist/package.json +73 -0
  30. package/legacy/dist/src/index.d.ts +1 -0
  31. package/{dist → legacy/dist}/src/index.js +465 -457
  32. package/legacy/package.json +77 -0
  33. package/package.json +12 -17
  34. package/README.md +0 -245
  35. /package/dist/{src/index.d.ts → index.d.ts} +0 -0
  36. /package/{dist → legacy/dist}/src/analytics/apply.d.ts +0 -0
  37. /package/{dist → legacy/dist}/src/analytics/client.d.ts +0 -0
  38. /package/{dist → legacy/dist}/src/analytics/constants.d.ts +0 -0
  39. /package/{dist → legacy/dist}/src/analytics/exit.d.ts +0 -0
  40. /package/{dist → legacy/dist}/src/analytics/index.d.ts +0 -0
  41. /package/{dist → legacy/dist}/src/analytics/normalize.d.ts +0 -0
  42. /package/{dist → legacy/dist}/src/analytics/os.d.ts +0 -0
  43. /package/{dist → legacy/dist}/src/analytics/session.d.ts +0 -0
  44. /package/{dist → legacy/dist}/src/analytics/tracker.d.ts +0 -0
  45. /package/{dist → legacy/dist}/src/analytics/types.d.ts +0 -0
  46. /package/{dist → legacy/dist}/src/analyze/composite-closure.d.ts +0 -0
  47. /package/{dist → legacy/dist}/src/analyze/composition/apply-mapping.d.ts +0 -0
  48. /package/{dist → legacy/dist}/src/analyze/composition/candidate-files.d.ts +0 -0
  49. /package/{dist → legacy/dist}/src/analyze/composition/composition-cache-key.d.ts +0 -0
  50. /package/{dist → legacy/dist}/src/analyze/composition/interchange-schema.d.ts +0 -0
  51. /package/{dist → legacy/dist}/src/analyze/composition/manifest-doc-evidence.d.ts +0 -0
  52. /package/{dist → legacy/dist}/src/analyze/composition/merge-edges.d.ts +0 -0
  53. /package/{dist → legacy/dist}/src/analyze/composition/parse-map-edges.d.ts +0 -0
  54. /package/{dist → legacy/dist}/src/analyze/composition/prompt-loader.d.ts +0 -0
  55. /package/{dist → legacy/dist}/src/analyze/composition/resolve-mapping-cli.d.ts +0 -0
  56. /package/{dist → legacy/dist}/src/analyze/composition/resolve-mapping.d.ts +0 -0
  57. /package/{dist → legacy/dist}/src/analyze/cycle-detection.d.ts +0 -0
  58. /package/{dist → legacy/dist}/src/analyze/cycle-view.d.ts +0 -0
  59. /package/{dist → legacy/dist}/src/analyze/extract-command.d.ts +0 -0
  60. /package/{dist → legacy/dist}/src/analyze/fuzzy-search.d.ts +0 -0
  61. /package/{dist → legacy/dist}/src/analyze/issue-inheritance.d.ts +0 -0
  62. /package/{dist → legacy/dist}/src/analyze/lineage.d.ts +0 -0
  63. /package/{dist → legacy/dist}/src/analyze/scope-gate-cascade.d.ts +0 -0
  64. /package/{dist → legacy/dist}/src/analyze/search-neighborhood.d.ts +0 -0
  65. /package/{dist → legacy/dist}/src/analyze/select/command.d.ts +0 -0
  66. /package/{dist → legacy/dist}/src/analyze/select/parser.d.ts +0 -0
  67. /package/{dist → legacy/dist}/src/analyze/select/persistence.d.ts +0 -0
  68. /package/{dist → legacy/dist}/src/analyze/select/preview-annotations.d.ts +0 -0
  69. /package/{dist → legacy/dist}/src/analyze/select/tui/LegacySelectApp.d.ts +0 -0
  70. /package/{dist → legacy/dist}/src/analyze/select/tui/components/ComponentDetail.d.ts +0 -0
  71. /package/{dist → legacy/dist}/src/analyze/select/tui/components/ComponentRationalePanel.d.ts +0 -0
  72. /package/{dist → legacy/dist}/src/analyze/select/tui/components/FieldEditor.d.ts +0 -0
  73. /package/{dist → legacy/dist}/src/analyze/select/tui/components/FinalizeDialog.d.ts +0 -0
  74. /package/{dist → legacy/dist}/src/analyze/select/tui/components/GotoBanner.d.ts +0 -0
  75. /package/{dist → legacy/dist}/src/analyze/select/tui/components/GroupedSidebar.d.ts +0 -0
  76. /package/{dist → legacy/dist}/src/analyze/select/tui/components/HelpOverlay.d.ts +0 -0
  77. /package/{dist → legacy/dist}/src/analyze/select/tui/components/HighlightedLine.d.ts +0 -0
  78. /package/{dist → legacy/dist}/src/analyze/select/tui/components/JsonEditor.d.ts +0 -0
  79. /package/{dist → legacy/dist}/src/analyze/select/tui/components/JsonPanel.d.ts +0 -0
  80. /package/{dist → legacy/dist}/src/analyze/select/tui/components/PreviewSummaryBar.d.ts +0 -0
  81. /package/{dist → legacy/dist}/src/analyze/select/tui/components/QuitDialog.d.ts +0 -0
  82. /package/{dist → legacy/dist}/src/analyze/select/tui/components/RationaleLine.d.ts +0 -0
  83. /package/{dist → legacy/dist}/src/analyze/select/tui/components/RationalePanel.d.ts +0 -0
  84. /package/{dist → legacy/dist}/src/analyze/select/tui/components/ScrollablePanel.d.ts +0 -0
  85. /package/{dist → legacy/dist}/src/analyze/select/tui/components/Sidebar.d.ts +0 -0
  86. /package/{dist → legacy/dist}/src/analyze/select/tui/components/SourcePanel.d.ts +0 -0
  87. /package/{dist → legacy/dist}/src/analyze/select/tui/components/StatusBar.d.ts +0 -0
  88. /package/{dist → legacy/dist}/src/analyze/select/tui/components/TokenReviewPanel.d.ts +0 -0
  89. /package/{dist → legacy/dist}/src/analyze/select/tui/components/TopBar.d.ts +0 -0
  90. /package/{dist → legacy/dist}/src/analyze/select/tui/components/removed-components-text.d.ts +0 -0
  91. /package/{dist → legacy/dist}/src/analyze/select/tui/components/wrap-text.d.ts +0 -0
  92. /package/{dist → legacy/dist}/src/analyze/select/tui/hooks/list-scroll-input.d.ts +0 -0
  93. /package/{dist → legacy/dist}/src/analyze/select/tui/hooks/scroll-offset.d.ts +0 -0
  94. /package/{dist → legacy/dist}/src/analyze/select/tui/hooks/useImmediateInput.d.ts +0 -0
  95. /package/{dist → legacy/dist}/src/analyze/select/tui/hooks/useKeymap.d.ts +0 -0
  96. /package/{dist → legacy/dist}/src/analyze/select/tui/hooks/useSession.d.ts +0 -0
  97. /package/{dist → legacy/dist}/src/analyze/select/tui/hooks/useUndo.d.ts +0 -0
  98. /package/{dist → legacy/dist}/src/analyze/select/tui/theme.d.ts +0 -0
  99. /package/{dist → legacy/dist}/src/analyze/select/types.d.ts +0 -0
  100. /package/{dist → legacy/dist}/src/analyze/selection-cascade.d.ts +0 -0
  101. /package/{dist → legacy/dist}/src/analyze/slot-graph.d.ts +0 -0
  102. /package/{dist → legacy/dist}/src/apply/api-client.d.ts +0 -0
  103. /package/{dist → legacy/dist}/src/apply/command.d.ts +0 -0
  104. /package/{dist → legacy/dist}/src/apply/preview-utils.d.ts +0 -0
  105. /package/{dist → legacy/dist}/src/apply/tokens.d.ts +0 -0
  106. /package/{dist → legacy/dist}/src/apply/tui/ServerApplyView.d.ts +0 -0
  107. /package/{dist → legacy/dist}/src/apply/tui/ServerPreviewView.d.ts +0 -0
  108. /package/{dist → legacy/dist}/src/credentials-store.d.ts +0 -0
  109. /package/{dist → legacy/dist}/src/doctor/checks.d.ts +0 -0
  110. /package/{dist → legacy/dist}/src/doctor/command.d.ts +0 -0
  111. /package/{dist → legacy/dist}/src/doctor/report.d.ts +0 -0
  112. /package/{dist → legacy/dist}/src/generate/command.d.ts +0 -0
  113. /package/{dist → legacy/dist}/src/generate/tui/GenerateView.d.ts +0 -0
  114. /package/{dist → legacy/dist}/src/helpers/build-contentful-management-client.d.ts +0 -0
  115. /package/{dist → legacy/dist}/src/helpers/fetch-and-persist-existing-contentful-entities.d.ts +0 -0
  116. /package/{dist → legacy/dist}/src/helpers/fetch-existing-contentful-entities.d.ts +0 -0
  117. /package/{dist → legacy/dist}/src/helpers/find-nearly-matching-component.d.ts +0 -0
  118. /package/{dist → legacy/dist}/src/helpers/read-existing-contentful-entities-from-session.d.ts +0 -0
  119. /package/{dist → legacy/dist}/src/helpers/summarize-existing-contentful-entities.d.ts +0 -0
  120. /package/{dist → legacy/dist}/src/host-utils.d.ts +0 -0
  121. /package/{dist → legacy/dist}/src/import/agent-model-resolve.d.ts +0 -0
  122. /package/{dist → legacy/dist}/src/import/command.d.ts +0 -0
  123. /package/{dist → legacy/dist}/src/import/composition-options.d.ts +0 -0
  124. /package/{dist → legacy/dist}/src/import/cycle-auto-reject.d.ts +0 -0
  125. /package/{dist → legacy/dist}/src/import/path-utils.d.ts +0 -0
  126. /package/{dist → legacy/dist}/src/import/tui/CustomPromptBanner.d.ts +0 -0
  127. /package/{dist → legacy/dist}/src/import/tui/WizardApp.d.ts +0 -0
  128. /package/{dist → legacy/dist}/src/import/tui/ai-flag.d.ts +0 -0
  129. /package/{dist → legacy/dist}/src/import/tui/autocomplete.d.ts +0 -0
  130. /package/{dist → legacy/dist}/src/import/tui/components/CompactControlBar.d.ts +0 -0
  131. /package/{dist → legacy/dist}/src/import/tui/components/CounterStrip.d.ts +0 -0
  132. /package/{dist → legacy/dist}/src/import/tui/components/LegendEntry.d.ts +0 -0
  133. /package/{dist → legacy/dist}/src/import/tui/components/LivePreviewSummary.d.ts +0 -0
  134. /package/{dist → legacy/dist}/src/import/tui/components/ReviewComponentPanel.d.ts +0 -0
  135. /package/{dist → legacy/dist}/src/import/tui/components/ReviewDetailsEditor.d.ts +0 -0
  136. /package/{dist → legacy/dist}/src/import/tui/components/ReviewDialogs.d.ts +0 -0
  137. /package/{dist → legacy/dist}/src/import/tui/components/ReviewStatus.d.ts +0 -0
  138. /package/{dist → legacy/dist}/src/import/tui/components/SearchMatchSummary.d.ts +0 -0
  139. /package/{dist → legacy/dist}/src/import/tui/components/SpaceEnvironment.d.ts +0 -0
  140. /package/{dist → legacy/dist}/src/import/tui/components/StepHeader.d.ts +0 -0
  141. /package/{dist → legacy/dist}/src/import/tui/cycle-panel-scroll.d.ts +0 -0
  142. /package/{dist → legacy/dist}/src/import/tui/group-collapse.d.ts +0 -0
  143. /package/{dist → legacy/dist}/src/import/tui/history.d.ts +0 -0
  144. /package/{dist → legacy/dist}/src/import/tui/hooks/review-input.d.ts +0 -0
  145. /package/{dist → legacy/dist}/src/import/tui/hooks/sidebar-search-state.d.ts +0 -0
  146. /package/{dist → legacy/dist}/src/import/tui/hooks/useOverlayPanel.d.ts +0 -0
  147. /package/{dist → legacy/dist}/src/import/tui/hooks/useReviewEditor.d.ts +0 -0
  148. /package/{dist → legacy/dist}/src/import/tui/hooks/useReviewPreview.d.ts +0 -0
  149. /package/{dist → legacy/dist}/src/import/tui/hooks/useReviewSession.d.ts +0 -0
  150. /package/{dist → legacy/dist}/src/import/tui/hooks/useReviewSurfaceState.d.ts +0 -0
  151. /package/{dist → legacy/dist}/src/import/tui/lineage-layout.d.ts +0 -0
  152. /package/{dist → legacy/dist}/src/import/tui/preview-confirmation-input.d.ts +0 -0
  153. /package/{dist → legacy/dist}/src/import/tui/push-progress.d.ts +0 -0
  154. /package/{dist → legacy/dist}/src/import/tui/run-print-files-helpers.d.ts +0 -0
  155. /package/{dist → legacy/dist}/src/import/tui/run-selection-agent.d.ts +0 -0
  156. /package/{dist → legacy/dist}/src/import/tui/run-teaser.d.ts +0 -0
  157. /package/{dist → legacy/dist}/src/import/tui/runLivePreview.d.ts +0 -0
  158. /package/{dist → legacy/dist}/src/import/tui/runScopeGate.d.ts +0 -0
  159. /package/{dist → legacy/dist}/src/import/tui/scope-gate-columns.d.ts +0 -0
  160. /package/{dist → legacy/dist}/src/import/tui/sidebar-help.d.ts +0 -0
  161. /package/{dist → legacy/dist}/src/import/tui/sidebar-input.d.ts +0 -0
  162. /package/{dist → legacy/dist}/src/import/tui/sidebar-navigation.d.ts +0 -0
  163. /package/{dist → legacy/dist}/src/import/tui/sidebar-width.d.ts +0 -0
  164. /package/{dist → legacy/dist}/src/import/tui/spawn-generate.d.ts +0 -0
  165. /package/{dist → legacy/dist}/src/import/tui/step-filters.d.ts +0 -0
  166. /package/{dist → legacy/dist}/src/import/tui/steps/CredentialsStep.d.ts +0 -0
  167. /package/{dist → legacy/dist}/src/import/tui/steps/DoneStep.d.ts +0 -0
  168. /package/{dist → legacy/dist}/src/import/tui/steps/ErrorStep.d.ts +0 -0
  169. /package/{dist → legacy/dist}/src/import/tui/steps/GateStep.d.ts +0 -0
  170. /package/{dist → legacy/dist}/src/import/tui/steps/GenerateReviewStep.d.ts +0 -0
  171. /package/{dist → legacy/dist}/src/import/tui/steps/PathValidationStep.d.ts +0 -0
  172. /package/{dist → legacy/dist}/src/import/tui/steps/PreviewValidationErrorStep.d.ts +0 -0
  173. /package/{dist → legacy/dist}/src/import/tui/steps/PushingStep.d.ts +0 -0
  174. /package/{dist → legacy/dist}/src/import/tui/steps/RunningStep.d.ts +0 -0
  175. /package/{dist → legacy/dist}/src/import/tui/steps/ScopeGateStep.d.ts +0 -0
  176. /package/{dist → legacy/dist}/src/import/tui/steps/TokenInputStep.d.ts +0 -0
  177. /package/{dist → legacy/dist}/src/import/tui/steps/WelcomeStep.d.ts +0 -0
  178. /package/{dist → legacy/dist}/src/import/tui/steps/WizardPreviewStep.d.ts +0 -0
  179. /package/{dist → legacy/dist}/src/import/tui/steps/auto-reject-decision.d.ts +0 -0
  180. /package/{dist → legacy/dist}/src/import/tui/steps/breaking-change-format.d.ts +0 -0
  181. /package/{dist → legacy/dist}/src/import/tui/steps/enumerate-cycle-breaks.d.ts +0 -0
  182. /package/{dist → legacy/dist}/src/import/tui/steps/preview-diff.d.ts +0 -0
  183. /package/{dist → legacy/dist}/src/import/tui/steps/review-details-panel.d.ts +0 -0
  184. /package/{dist → legacy/dist}/src/import/tui/steps/review-json-panel.d.ts +0 -0
  185. /package/{dist → legacy/dist}/src/import/tui/useFinalizePreview.d.ts +0 -0
  186. /package/{dist → legacy/dist}/src/import/tui/useLivePreview.d.ts +0 -0
  187. /package/{dist → legacy/dist}/src/import/tui/wizard-422-helpers.d.ts +0 -0
  188. /package/{dist → legacy/dist}/src/import/tui/wizard-generate-progress.d.ts +0 -0
  189. /package/{dist → legacy/dist}/src/import/tui/wizard-state-transitions.d.ts +0 -0
  190. /package/{dist → legacy/dist}/src/lib/agent-definitions.d.ts +0 -0
  191. /package/{dist → legacy/dist}/src/lib/agent-model-options.d.ts +0 -0
  192. /package/{dist → legacy/dist}/src/lib/agent-output.d.ts +0 -0
  193. /package/{dist → legacy/dist}/src/lib/cli-errors.d.ts +0 -0
  194. /package/{dist → legacy/dist}/src/lib/cli-path.d.ts +0 -0
  195. /package/{dist → legacy/dist}/src/lib/command-options.d.ts +0 -0
  196. /package/{dist → legacy/dist}/src/lib/component-patch.d.ts +0 -0
  197. /package/{dist → legacy/dist}/src/lib/contentful-urls.d.ts +0 -0
  198. /package/{dist → legacy/dist}/src/lib/debug-logger.d.ts +0 -0
  199. /package/{dist → legacy/dist}/src/lib/debug-preamble.d.ts +0 -0
  200. /package/{dist → legacy/dist}/src/lib/error-parser.d.ts +0 -0
  201. /package/{dist → legacy/dist}/src/lib/path-exists.d.ts +0 -0
  202. /package/{dist → legacy/dist}/src/lib/prompt-overrides.d.ts +0 -0
  203. /package/{dist → legacy/dist}/src/lib/terminal-capabilities.d.ts +0 -0
  204. /package/{dist → legacy/dist}/src/lib/user-agent.d.ts +0 -0
  205. /package/{dist → legacy/dist}/src/map-tokens/apply.d.ts +0 -0
  206. /package/{dist → legacy/dist}/src/map-tokens/command.d.ts +0 -0
  207. /package/{dist → legacy/dist}/src/map-tokens/resolve-defaults.d.ts +0 -0
  208. /package/{dist → legacy/dist}/src/map-tokens/tui/MapTokensView.d.ts +0 -0
  209. /package/{dist → legacy/dist}/src/output/format.d.ts +0 -0
  210. /package/{dist → legacy/dist}/src/print/command.d.ts +0 -0
  211. /package/{dist → legacy/dist}/src/print/validate/tui/ValidateView.d.ts +0 -0
  212. /package/{dist → legacy/dist}/src/print/validate/validators/cdf-validator.d.ts +0 -0
  213. /package/{dist → legacy/dist}/src/print/validate/validators/dtcg-validator.d.ts +0 -0
  214. /package/{dist → legacy/dist}/src/print/validate/validators/format-errors.d.ts +0 -0
  215. /package/{dist → legacy/dist}/src/print/validate/validators/read-json-file.d.ts +0 -0
  216. /package/{dist → legacy/dist}/src/program.d.ts +0 -0
  217. /package/{dist → legacy/dist}/src/runs/fingerprint.d.ts +0 -0
  218. /package/{dist → legacy/dist}/src/runs/path-prompt.d.ts +0 -0
  219. /package/{dist → legacy/dist}/src/runs/save-path-resolver.d.ts +0 -0
  220. /package/{dist → legacy/dist}/src/runs/store.d.ts +0 -0
  221. /package/{dist → legacy/dist}/src/session/cache-keys.d.ts +0 -0
  222. /package/{dist → legacy/dist}/src/session/core/cdf/cdf-mappers.d.ts +0 -0
  223. /package/{dist → legacy/dist}/src/session/core/components/derive-component-id.d.ts +0 -0
  224. /package/{dist → legacy/dist}/src/session/core/components/hash-component-shape.d.ts +0 -0
  225. /package/{dist → legacy/dist}/src/session/core/shared/index-rows-by-key.d.ts +0 -0
  226. /package/{dist → legacy/dist}/src/session/core/tokens/build-dtcg-groups.d.ts +0 -0
  227. /package/{dist → legacy/dist}/src/session/core/tokens/build-dtcg-tokens.d.ts +0 -0
  228. /package/{dist → legacy/dist}/src/session/core/tokens/hash-token-content.d.ts +0 -0
  229. /package/{dist → legacy/dist}/src/session/db.d.ts +0 -0
  230. /package/{dist → legacy/dist}/src/session/migration.d.ts +0 -0
  231. /package/{dist → legacy/dist}/src/session/repositories/sessions/read.d.ts +0 -0
  232. /package/{dist → legacy/dist}/src/session/repositories/sessions/write.d.ts +0 -0
  233. /package/{dist → legacy/dist}/src/session/repositories/shared/with-transaction.d.ts +0 -0
  234. /package/{dist → legacy/dist}/src/session/repositories/steps/read.d.ts +0 -0
  235. /package/{dist → legacy/dist}/src/session/repositories/steps/write.d.ts +0 -0
  236. /package/{dist → legacy/dist}/src/session/repositories/tokens/read.d.ts +0 -0
  237. /package/{dist → legacy/dist}/src/session/repositories/tokens/write.d.ts +0 -0
  238. /package/{dist → legacy/dist}/src/session/resolve-session-id.d.ts +0 -0
  239. /package/{dist → legacy/dist}/src/session/services/session-resolver.d.ts +0 -0
  240. /package/{dist → legacy/dist}/src/session/services/tokens/apply-tool-calls.d.ts +0 -0
  241. /package/{dist → legacy/dist}/src/session/services/tokens/replace-raw-prop-token-paths.d.ts +0 -0
  242. /package/{dist → legacy/dist}/src/session/services/tokens/replace-raw-token-name-paths.d.ts +0 -0
  243. /package/{dist → legacy/dist}/src/session/services/tokens/store-dtcg-tokens.d.ts +0 -0
  244. /package/{dist → legacy/dist}/src/session/session-id.d.ts +0 -0
  245. /package/{dist → legacy/dist}/src/session/source-excerpt.d.ts +0 -0
  246. /package/{dist → legacy/dist}/src/setup/SetupScreen.d.ts +0 -0
  247. /package/{dist → legacy/dist}/src/setup/SetupStepper.d.ts +0 -0
  248. /package/{dist → legacy/dist}/src/setup/command.d.ts +0 -0
  249. /package/{dist → legacy/dist}/src/setup/lib/checks.d.ts +0 -0
  250. /package/{dist → legacy/dist}/src/setup/lib/shell.d.ts +0 -0
  251. /package/{dist → legacy/dist}/src/setup/steps/CodingAgentScreen.d.ts +0 -0
  252. /package/{dist → legacy/dist}/src/setup/steps/ContentfulCredentialsScreen.d.ts +0 -0
  253. /package/{dist → legacy/dist}/src/setup/steps/StepLayout.d.ts +0 -0
  254. /package/{dist → legacy/dist}/src/setup/steps/preferences/AnalyticsScreen.d.ts +0 -0
  255. /package/{dist → legacy/dist}/src/setup/steps/preferences/BooleanInput.d.ts +0 -0
  256. /package/{dist → legacy/dist}/src/setup/steps/preferences/ColorPreferenceScreen.d.ts +0 -0
  257. /package/{dist → legacy/dist}/src/setup/steps/preferences/CustomPromptScreen.d.ts +0 -0
  258. /package/{dist → legacy/dist}/src/setup/steps/preferences/DebugLogsScreen.d.ts +0 -0
  259. /package/{dist → legacy/dist}/src/setup/steps/preferences/PreferencesMenu.d.ts +0 -0
  260. /package/{dist → legacy/dist}/src/setup/steps/prerequisites/PrerequisitesScreen.d.ts +0 -0
  261. /package/{dist → legacy/dist}/src/setup/steps/prerequisites/build.d.ts +0 -0
  262. /package/{dist → legacy/dist}/src/setup/steps/prerequisites/deps.d.ts +0 -0
  263. /package/{dist → legacy/dist}/src/setup/steps/prerequisites/index.d.ts +0 -0
  264. /package/{dist → legacy/dist}/src/setup/steps/prerequisites/node.d.ts +0 -0
  265. /package/{dist → legacy/dist}/src/setup/steps/prerequisites/pnpm.d.ts +0 -0
  266. /package/{dist → legacy/dist}/src/tui/CommandCompletionView.d.ts +0 -0
  267. /package/{dist → legacy/dist}/src/tui/render-with-goodbye.d.ts +0 -0
  268. /package/{dist → legacy/dist}/src/tui/use-blinking-cursor.d.ts +0 -0
  269. /package/{dist → legacy/dist}/src/tui/use-terminal-size.d.ts +0 -0
  270. /package/{dist → legacy/dist}/src/tui/use-timed-spinner.d.ts +0 -0
  271. /package/{dist → legacy/dist}/src/tui/windowed-panel.d.ts +0 -0
  272. /package/{dist → legacy/dist}/src/types.d.ts +0 -0
  273. /package/{prompts → legacy/prompts}/composition-edges.md +0 -0
  274. /package/{skills → legacy/skills}/generate-components.md +0 -0
  275. /package/{skills → legacy/skills}/generate-tokens.md +0 -0
  276. /package/{skills → legacy/skills}/map-tokens.md +0 -0
  277. /package/{skills → legacy/skills}/select-components.md +0 -0
package/dist/index.js ADDED
@@ -0,0 +1,1201 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __esm = (fn, res) => function __init() {
4
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
5
+ };
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+
11
+ // packages/experience-design-system-cli/src/tui/package-root.ts
12
+ import { existsSync, readFileSync } from "node:fs";
13
+ import { dirname, join } from "node:path";
14
+ import { fileURLToPath } from "node:url";
15
+ function findPackageRoot(startUrl, packageName) {
16
+ let dir = dirname(fileURLToPath(startUrl));
17
+ let found;
18
+ while (true) {
19
+ const manifestPath = join(dir, "package.json");
20
+ if (existsSync(manifestPath)) {
21
+ const pkg2 = JSON.parse(readFileSync(manifestPath, "utf8"));
22
+ if (pkg2.name === packageName) found = dir;
23
+ }
24
+ const parent = dirname(dir);
25
+ if (parent === dir) return found ?? dir;
26
+ dir = parent;
27
+ }
28
+ }
29
+ var init_package_root = __esm({
30
+ "packages/experience-design-system-cli/src/tui/package-root.ts"() {
31
+ "use strict";
32
+ }
33
+ });
34
+
35
+ // packages/experience-design-system-cli/src/legacy/legacy-cli-path.ts
36
+ import { existsSync as existsSync2 } from "node:fs";
37
+ import { join as join2 } from "node:path";
38
+ function findLegacyCliPath() {
39
+ const root = findPackageRoot(import.meta.url, PACKAGE_NAME);
40
+ const candidates = [
41
+ join2(root, "legacy", "bin", "cli.js"),
42
+ join2(root, "..", "experience-design-system-cli-legacy", "bin", "cli.js")
43
+ ];
44
+ const found = candidates.find((candidate) => existsSync2(candidate));
45
+ if (!found) {
46
+ throw new Error(`Legacy CLI not found. Looked in:
47
+ ${candidates.join("\n")}`);
48
+ }
49
+ return found;
50
+ }
51
+ var PACKAGE_NAME;
52
+ var init_legacy_cli_path = __esm({
53
+ "packages/experience-design-system-cli/src/legacy/legacy-cli-path.ts"() {
54
+ "use strict";
55
+ init_package_root();
56
+ PACKAGE_NAME = "@contentful/experience-design-system-cli";
57
+ }
58
+ });
59
+
60
+ // packages/experience-design-system-cli/src/tui/home/home.theme.ts
61
+ function brandBar(width, ramp = BRAND_RAMP) {
62
+ if (width <= 0 || ramp.length === 0) return [];
63
+ const base = Math.floor(width / ramp.length);
64
+ const remainder = width % ramp.length;
65
+ return ramp.map((color, i) => ({
66
+ text: BAR_CELL.repeat(base + (i < remainder ? 1 : 0)),
67
+ color
68
+ })).filter((segment) => segment.text.length > 0);
69
+ }
70
+ var BRAND, PALETTE, BRAND_RAMP, BAR_CELL, FOCUS_MARKER;
71
+ var init_home_theme = __esm({
72
+ "packages/experience-design-system-cli/src/tui/home/home.theme.ts"() {
73
+ "use strict";
74
+ BRAND = {
75
+ blue: "#1773EB",
76
+ green: "#00C459",
77
+ orange: "#E44F20",
78
+ yellow: "#FFDA00",
79
+ white: "#FFFFFF",
80
+ slate: "#A6B5C7",
81
+ steel: "#C4D1DE",
82
+ mist: "#DDE5EC",
83
+ fog: "#EFF2F6"
84
+ };
85
+ PALETTE = {
86
+ accent: BRAND.blue,
87
+ heading: BRAND.white,
88
+ success: BRAND.green,
89
+ error: BRAND.orange,
90
+ warning: BRAND.yellow,
91
+ muted: BRAND.slate,
92
+ border: BRAND.steel
93
+ };
94
+ BRAND_RAMP = [BRAND.blue, BRAND.orange, BRAND.yellow];
95
+ BAR_CELL = "\u2501";
96
+ FOCUS_MARKER = "\u276F";
97
+ }
98
+ });
99
+
100
+ // packages/experience-design-system-cli/src/tui/upgrade/version.ts
101
+ import { readFileSync as readFileSync2 } from "node:fs";
102
+ import { join as join3 } from "node:path";
103
+ import semver from "semver";
104
+ function readPackageVersion() {
105
+ const root = findPackageRoot(import.meta.url, PACKAGE_NAME2);
106
+ const pkg2 = JSON.parse(readFileSync2(join3(root, "package.json"), "utf8"));
107
+ return pkg2.version ?? "unknown";
108
+ }
109
+ function parseVersionTag(tag) {
110
+ const match = /^v(\d+\.\d+\.\d+)$/.exec(tag);
111
+ return match ? match[1] : void 0;
112
+ }
113
+ async function checkForUpgrade() {
114
+ const current = readPackageVersion();
115
+ try {
116
+ const response = await fetch(TAGS_URL);
117
+ if (!response.ok) return { status: "error" };
118
+ const tags = await response.json();
119
+ const versions = tags.map((tag) => tag.name ? parseVersionTag(tag.name) : void 0).filter((v) => v !== void 0);
120
+ if (versions.length === 0) return { status: "error" };
121
+ const latest = versions.reduce((best, v) => semver.gt(v, best) ? v : best);
122
+ if (!semver.valid(current)) return { status: "error" };
123
+ if (semver.gt(latest, current)) {
124
+ return { status: "update-available", current, latest };
125
+ }
126
+ return { status: "up-to-date", current };
127
+ } catch {
128
+ return { status: "error" };
129
+ }
130
+ }
131
+ var PACKAGE_NAME2, TAGS_URL;
132
+ var init_version = __esm({
133
+ "packages/experience-design-system-cli/src/tui/upgrade/version.ts"() {
134
+ "use strict";
135
+ init_package_root();
136
+ PACKAGE_NAME2 = "@contentful/experience-design-system-cli";
137
+ TAGS_URL = "https://api.github.com/repos/contentful/experience-design-system-sdk-public/tags?per_page=10";
138
+ }
139
+ });
140
+
141
+ // packages/experience-design-system-cli/src/tui/use-terminal-width.ts
142
+ import { useEffect, useState } from "react";
143
+ import { useStdout } from "ink";
144
+ function readColumns(stdout) {
145
+ const columns = stdout?.columns ?? 0;
146
+ return columns > 0 ? columns : FALLBACK_COLUMNS;
147
+ }
148
+ function useTerminalWidth() {
149
+ const { stdout } = useStdout();
150
+ const [columns, setColumns] = useState(() => readColumns(stdout));
151
+ useEffect(() => {
152
+ if (!stdout) return;
153
+ const onResize = () => setColumns(readColumns(stdout));
154
+ onResize();
155
+ stdout.on("resize", onResize);
156
+ return () => {
157
+ stdout.off("resize", onResize);
158
+ };
159
+ }, [stdout]);
160
+ return columns;
161
+ }
162
+ var FALLBACK_COLUMNS;
163
+ var init_use_terminal_width = __esm({
164
+ "packages/experience-design-system-cli/src/tui/use-terminal-width.ts"() {
165
+ "use strict";
166
+ FALLBACK_COLUMNS = 80;
167
+ }
168
+ });
169
+
170
+ // packages/experience-design-system-cli/src/tui/home/home.tsx
171
+ import { useEffect as useEffect2, useState as useState2 } from "react";
172
+ import { Box, Text, useApp, useInput } from "ink";
173
+ import { jsx, jsxs } from "react/jsx-runtime";
174
+ function upgradeItemDisplay(upgradeCheck) {
175
+ if (upgradeCheck?.status === "update-available") {
176
+ return { label: `Upgrade Version (v${upgradeCheck.latest} available)`, color: PALETTE.success };
177
+ }
178
+ if (upgradeCheck?.status === "up-to-date") {
179
+ return { label: "Upgrade Version (up to date)", color: PALETTE.muted };
180
+ }
181
+ return { label: "Upgrade Version" };
182
+ }
183
+ function HomeScreen({ onNavigate }) {
184
+ const [focusIdx, setFocusIdx] = useState2(0);
185
+ const [upgradeCheck, setUpgradeCheck] = useState2();
186
+ const { exit } = useApp();
187
+ const terminalWidth = useTerminalWidth();
188
+ const tooNarrow = terminalWidth < MIN_TERMINAL_WIDTH;
189
+ const upgradeDisabled = upgradeCheck?.status === "up-to-date";
190
+ useEffect2(() => {
191
+ checkForUpgrade().then(setUpgradeCheck).catch(() => setUpgradeCheck({ status: "error" }));
192
+ }, []);
193
+ useInput((input, key) => {
194
+ if (input === "q" || key.escape) {
195
+ exit();
196
+ return;
197
+ }
198
+ if (tooNarrow) return;
199
+ if (key.upArrow) {
200
+ setFocusIdx((i) => (i - 1 + START_ITEMS.length) % START_ITEMS.length);
201
+ return;
202
+ }
203
+ if (key.downArrow) {
204
+ setFocusIdx((i) => (i + 1) % START_ITEMS.length);
205
+ return;
206
+ }
207
+ if (key.return) {
208
+ const item = START_ITEMS[focusIdx];
209
+ if (item.screen === "upgrade" && upgradeDisabled) return;
210
+ onNavigate(item.screen);
211
+ return;
212
+ }
213
+ });
214
+ if (tooNarrow) {
215
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
216
+ /* @__PURE__ */ jsx(Text, { bold: true, color: PALETTE.warning, children: "Terminal too small" }),
217
+ /* @__PURE__ */ jsx(Text, { color: PALETTE.muted, children: "Press q to quit, make your terminal full screen, then run experiences import again." })
218
+ ] });
219
+ }
220
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
221
+ /* @__PURE__ */ jsxs(Box, { flexDirection: "column", alignItems: "center", children: [
222
+ /* @__PURE__ */ jsx(Text, { bold: true, color: PALETTE.heading, children: HEADING }),
223
+ /* @__PURE__ */ jsx(Text, { children: brandBar(HEADING.length).map((segment, i) => /* @__PURE__ */ jsx(Text, { color: segment.color, children: segment.text }, i)) }),
224
+ /* @__PURE__ */ jsx(Text, { color: PALETTE.muted, children: SUBTITLE }),
225
+ /* @__PURE__ */ jsxs(Text, { color: PALETTE.muted, children: [
226
+ "v",
227
+ VERSION
228
+ ] })
229
+ ] }),
230
+ /* @__PURE__ */ jsx(Box, { marginTop: 1, justifyContent: "center", children: /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: START_ITEMS.map((item, i) => {
231
+ const focused = i === focusIdx;
232
+ const isUpgradeItem = item.screen === "upgrade";
233
+ const display = isUpgradeItem ? upgradeItemDisplay(upgradeCheck) : { label: item.label };
234
+ const dimmed = isUpgradeItem && upgradeDisabled;
235
+ return /* @__PURE__ */ jsxs(
236
+ Text,
237
+ {
238
+ bold: focused && !dimmed,
239
+ dimColor: dimmed,
240
+ color: focused && !dimmed ? PALETTE.accent : display.color,
241
+ children: [
242
+ focused ? `${FOCUS_MARKER} ` : " ",
243
+ display.label
244
+ ]
245
+ },
246
+ item.label
247
+ );
248
+ }) }) }),
249
+ /* @__PURE__ */ jsx(Box, { marginTop: 1, justifyContent: "center", children: /* @__PURE__ */ jsx(Text, { color: PALETTE.muted, children: "\u2191/\u2193 move \xB7 \u23CE select \xB7 q quit" }) })
250
+ ] });
251
+ }
252
+ var VERSION, HEADING, SUBTITLE, MIN_TERMINAL_WIDTH, START_ITEMS;
253
+ var init_home = __esm({
254
+ "packages/experience-design-system-cli/src/tui/home/home.tsx"() {
255
+ "use strict";
256
+ init_home_theme();
257
+ init_version();
258
+ init_use_terminal_width();
259
+ VERSION = readPackageVersion();
260
+ HEADING = "Contentful Experiences";
261
+ SUBTITLE = "Let's import your design system into Contentful";
262
+ MIN_TERMINAL_WIDTH = 164;
263
+ START_ITEMS = [
264
+ { label: "Import", screen: "import" },
265
+ { label: "Upgrade Version", screen: "upgrade" },
266
+ { label: "Settings", screen: "settings" },
267
+ { label: "Help", screen: "help" }
268
+ ];
269
+ }
270
+ });
271
+
272
+ // packages/experience-design-system-cli/src/tui/import/PageContainer.tsx
273
+ import { Box as Box2, Text as Text2, useInput as useInput2 } from "ink";
274
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
275
+ function ImportScreen({ exitCode, onDone }) {
276
+ useInput2((input, key) => {
277
+ if (key.return || key.escape || input === "q") {
278
+ onDone();
279
+ }
280
+ });
281
+ const isSuccess = exitCode === 0;
282
+ return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
283
+ /* @__PURE__ */ jsx2(Text2, { bold: true, children: "Import" }),
284
+ /* @__PURE__ */ jsx2(Text2, { children: " " }),
285
+ isSuccess ? /* @__PURE__ */ jsx2(Text2, { color: PALETTE.success, children: "\u2713 Import complete" }) : /* @__PURE__ */ jsxs2(Text2, { color: PALETTE.error, children: [
286
+ "\u2717 Import failed: process exited with code ",
287
+ exitCode ?? "unknown"
288
+ ] }),
289
+ /* @__PURE__ */ jsx2(Text2, { children: " " }),
290
+ /* @__PURE__ */ jsx2(Text2, { dimColor: true, children: "[Enter] Back to Start" })
291
+ ] });
292
+ }
293
+ var init_PageContainer = __esm({
294
+ "packages/experience-design-system-cli/src/tui/import/PageContainer.tsx"() {
295
+ "use strict";
296
+ init_home_theme();
297
+ }
298
+ });
299
+
300
+ // packages/experience-design-system-cli/src/tui/import/spawn-v1-import.ts
301
+ import { spawn as spawn2 } from "node:child_process";
302
+ function buildArgs(options) {
303
+ const args = ["import"];
304
+ if (options.project) {
305
+ args.push("--project", options.project);
306
+ }
307
+ return args;
308
+ }
309
+ async function spawnV1Import(options = {}) {
310
+ const cliPath = findLegacyCliPath();
311
+ const args = buildArgs(options);
312
+ return new Promise((resolvePromise) => {
313
+ const child = spawn2("node", [cliPath, ...args], {
314
+ stdio: "inherit"
315
+ });
316
+ child.on("close", (code) => {
317
+ resolvePromise({ exitCode: code ?? 1, result: void 0, stdout: "", stderr: "" });
318
+ });
319
+ child.on("error", (err) => {
320
+ resolvePromise({ exitCode: 1, result: void 0, stdout: "", stderr: err.message });
321
+ });
322
+ });
323
+ }
324
+ var init_spawn_v1_import = __esm({
325
+ "packages/experience-design-system-cli/src/tui/import/spawn-v1-import.ts"() {
326
+ "use strict";
327
+ init_legacy_cli_path();
328
+ }
329
+ });
330
+
331
+ // packages/experience-design-system-cli/src/tui/import/terminal-input.ts
332
+ function getTerminalHandle() {
333
+ return process.stdin._handle;
334
+ }
335
+ async function stopReadingTerminal() {
336
+ await new Promise((resolve) => setImmediate(resolve));
337
+ const handle = getTerminalHandle();
338
+ if (!handle?.readStop) return;
339
+ handle.reading = false;
340
+ handle.readStop();
341
+ }
342
+ function startReadingTerminal() {
343
+ const handle = getTerminalHandle();
344
+ if (!handle?.readStart) return;
345
+ handle.reading = true;
346
+ handle.readStart();
347
+ }
348
+ var init_terminal_input = __esm({
349
+ "packages/experience-design-system-cli/src/tui/import/terminal-input.ts"() {
350
+ "use strict";
351
+ }
352
+ });
353
+
354
+ // packages/experience-design-system-cli/src/tui/settings/debug-mode/debug-mode-store.ts
355
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
356
+ import { dirname as dirname2, join as join4 } from "node:path";
357
+ function debugModeSettingPath() {
358
+ return join4(findPackageRoot(import.meta.url, PACKAGE_NAME3), ".contentful", "config", "debug_mode.json");
359
+ }
360
+ async function readDebugModeSetting() {
361
+ try {
362
+ const raw = await readFile(debugModeSettingPath(), "utf8");
363
+ const parsed = JSON.parse(raw);
364
+ return { ...DEFAULT_DEBUG_MODE_SETTING, ...parsed };
365
+ } catch {
366
+ return { ...DEFAULT_DEBUG_MODE_SETTING };
367
+ }
368
+ }
369
+ async function writeDebugModeSetting(setting) {
370
+ const path = debugModeSettingPath();
371
+ await mkdir(dirname2(path), { recursive: true });
372
+ await writeFile(path, `${JSON.stringify(setting, null, 2)}
373
+ `, { mode: 384 });
374
+ }
375
+ var PACKAGE_NAME3, DEFAULT_DEBUG_MODE_SETTING;
376
+ var init_debug_mode_store = __esm({
377
+ "packages/experience-design-system-cli/src/tui/settings/debug-mode/debug-mode-store.ts"() {
378
+ "use strict";
379
+ init_package_root();
380
+ PACKAGE_NAME3 = "@contentful/experience-design-system-cli";
381
+ DEFAULT_DEBUG_MODE_SETTING = {
382
+ enabled: true
383
+ };
384
+ }
385
+ });
386
+
387
+ // packages/experience-design-system-cli/src/tui/debug-store.ts
388
+ import { mkdir as mkdir2, writeFile as writeFile2 } from "node:fs/promises";
389
+ import { existsSync as existsSync3, readdirSync } from "node:fs";
390
+ import { join as join5 } from "node:path";
391
+ function generateRunId() {
392
+ const now = /* @__PURE__ */ new Date();
393
+ const pad = (n) => String(n).padStart(2, "0");
394
+ return `${now.getFullYear()}${pad(now.getMonth() + 1)}${pad(now.getDate())}-${pad(now.getHours())}${pad(now.getMinutes())}${pad(now.getSeconds())}`;
395
+ }
396
+ function sessionsRootDir() {
397
+ return join5(findPackageRoot(import.meta.url, PACKAGE_NAME4), ".contentful", "debug", "sessions");
398
+ }
399
+ function datePrefix(now = /* @__PURE__ */ new Date()) {
400
+ const pad = (n) => String(n).padStart(2, "0");
401
+ return `${pad(now.getMonth() + 1)}-${pad(now.getDate())}-${now.getFullYear()}`;
402
+ }
403
+ function slugify(value) {
404
+ return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
405
+ }
406
+ function generateSessionId() {
407
+ const today = datePrefix();
408
+ const root = sessionsRootDir();
409
+ const existing = existsSync3(root) ? readdirSync(root) : [];
410
+ const seqPattern = new RegExp(`^${today}-session-(\\d+)$`);
411
+ const maxSeq = existing.reduce((max, entry) => {
412
+ const match = seqPattern.exec(entry);
413
+ return match ? Math.max(max, Number(match[1])) : max;
414
+ }, 0);
415
+ return `${today}-session-${maxSeq + 1}`;
416
+ }
417
+ function sessionDebugDir() {
418
+ return join5(sessionsRootDir(), SESSION_ID);
419
+ }
420
+ async function isDebugModeEnabled() {
421
+ try {
422
+ return (await readDebugModeSetting()).enabled;
423
+ } catch {
424
+ return true;
425
+ }
426
+ }
427
+ function redact(value) {
428
+ const clone = { ...value };
429
+ if ("cma_token" in clone) {
430
+ const raw = clone.cma_token;
431
+ clone.cma_token = typeof raw === "string" && raw.length > 0 ? `[present, ${raw.length} chars]` : "[not set]";
432
+ }
433
+ return clone;
434
+ }
435
+ function startDebugRun({
436
+ flow,
437
+ step,
438
+ menuOption,
439
+ inputs
440
+ }) {
441
+ const runId = generateRunId();
442
+ const startedAt = Date.now();
443
+ const redactedInputs = redact(inputs);
444
+ isDebugModeEnabled().then((enabled) => {
445
+ if (!enabled) return;
446
+ pendingRun = { flow, step, runId, menuOption, inputs: redactedInputs, startedAt };
447
+ });
448
+ }
449
+ async function finishDebugRun({
450
+ outputs,
451
+ status,
452
+ exitMethod
453
+ }) {
454
+ const run = pendingRun;
455
+ if (!run) return;
456
+ pendingRun = void 0;
457
+ const durationMs = Date.now() - run.startedAt;
458
+ const content = renderMarkdown(run, { outputs: redact(outputs), status, exitMethod, durationMs });
459
+ const flowSegments = run.flow.split("/");
460
+ const dir = join5(sessionDebugDir(), ...flowSegments);
461
+ await mkdir2(dir, { recursive: true });
462
+ const filename = nextAttemptFilename(dir, run.menuOption);
463
+ await writeFile2(join5(dir, filename), content, { mode: 384 });
464
+ }
465
+ function nextAttemptFilename(dir, menuOption) {
466
+ const today = datePrefix();
467
+ const optionSlug = slugify(menuOption);
468
+ const existing = existsSync3(dir) ? readdirSync(dir) : [];
469
+ const attemptPattern = new RegExp(`^${today}-${optionSlug}-attempt-(\\d+)\\.md$`);
470
+ const maxAttempt = existing.reduce((max, entry) => {
471
+ const match = attemptPattern.exec(entry);
472
+ return match ? Math.max(max, Number(match[1])) : max;
473
+ }, 0);
474
+ return `${today}-${optionSlug}-attempt-${maxAttempt + 1}.md`;
475
+ }
476
+ function renderMarkdown(run, finish) {
477
+ const stepMatch = /^(\d+)-(.+)$/.exec(run.step);
478
+ const stepLabel = stepMatch ? `${stepMatch[1]} - ${stepMatch[2]}` : run.step;
479
+ const flowSlug = run.flow.split("/").join("-");
480
+ return `# Debug Log
481
+
482
+ - Run ID: ${run.runId}
483
+ - Flow: ${flowSlug}
484
+ - Step: ${stepLabel}
485
+ - Menu option: ${run.menuOption}
486
+ - Date: ${(/* @__PURE__ */ new Date()).toISOString()}
487
+ - CLI version: ${readPackageVersion()}
488
+ - Platform: ${process.platform} / Node ${process.version}
489
+ - Duration on screen: ${finish.durationMs}ms
490
+ - Status: ${finish.status}
491
+ - Exit method: ${finish.exitMethod}
492
+
493
+ ## Inputs
494
+ \`\`\`json
495
+ ${JSON.stringify(run.inputs, null, 2)}
496
+ \`\`\`
497
+
498
+ ## Outputs
499
+ \`\`\`json
500
+ ${JSON.stringify(finish.outputs, null, 2)}
501
+ \`\`\`
502
+ `;
503
+ }
504
+ function handleCrash() {
505
+ return finishDebugRun({ outputs: {}, status: "error", exitMethod: "crashed" });
506
+ }
507
+ var PACKAGE_NAME4, pendingRun, SESSION_ID;
508
+ var init_debug_store = __esm({
509
+ "packages/experience-design-system-cli/src/tui/debug-store.ts"() {
510
+ "use strict";
511
+ init_package_root();
512
+ init_version();
513
+ init_debug_mode_store();
514
+ PACKAGE_NAME4 = "@contentful/experience-design-system-cli";
515
+ SESSION_ID = generateSessionId();
516
+ void isDebugModeEnabled().then((enabled) => {
517
+ if (!enabled) return void 0;
518
+ return mkdir2(sessionDebugDir(), { recursive: true });
519
+ });
520
+ process.once("uncaughtException", (err) => {
521
+ void handleCrash().finally(() => {
522
+ throw err;
523
+ });
524
+ });
525
+ process.once("unhandledRejection", (reason) => {
526
+ void handleCrash().finally(() => {
527
+ throw reason;
528
+ });
529
+ });
530
+ process.once("SIGINT", () => {
531
+ void handleCrash().finally(() => {
532
+ process.exit(130);
533
+ });
534
+ });
535
+ }
536
+ });
537
+
538
+ // packages/experience-design-system-cli/src/tui/help/PageContainer.tsx
539
+ import { useEffect as useEffect3 } from "react";
540
+ import { Box as Box3, Text as Text3, useInput as useInput3 } from "ink";
541
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
542
+ function HelpScreen({ onDone }) {
543
+ useEffect3(() => {
544
+ startDebugRun({ flow: "help", step: "01-help", menuOption: "Help", inputs: {} });
545
+ }, []);
546
+ const leave = (exitMethod) => {
547
+ void finishDebugRun({ outputs: {}, status: "success", exitMethod });
548
+ onDone();
549
+ };
550
+ useInput3((input, key) => {
551
+ if (key.return) {
552
+ leave("saved");
553
+ return;
554
+ }
555
+ if (key.escape || input === "q") {
556
+ leave("discarded");
557
+ return;
558
+ }
559
+ });
560
+ return /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
561
+ /* @__PURE__ */ jsx3(Text3, { bold: true, children: "Help" }),
562
+ /* @__PURE__ */ jsx3(Text3, { children: " " }),
563
+ /* @__PURE__ */ jsx3(Text3, { children: "This is a placeholder screen for v2 help content." }),
564
+ /* @__PURE__ */ jsx3(Text3, { children: " " }),
565
+ /* @__PURE__ */ jsx3(Text3, { dimColor: true, children: "[Enter] Complete [Esc/q] Exit \u2014 both return to Start" })
566
+ ] });
567
+ }
568
+ var init_PageContainer2 = __esm({
569
+ "packages/experience-design-system-cli/src/tui/help/PageContainer.tsx"() {
570
+ "use strict";
571
+ init_debug_store();
572
+ }
573
+ });
574
+
575
+ // packages/experience-design-system-cli/src/tui/settings/PageContainer.tsx
576
+ import { useState as useState3 } from "react";
577
+ import { Box as Box4, Text as Text4, useInput as useInput4 } from "ink";
578
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
579
+ function SettingsScreen({
580
+ onNavigate,
581
+ onBack
582
+ }) {
583
+ const [focusIdx, setFocusIdx] = useState3(0);
584
+ const items = [
585
+ { label: "Configuration", screen: "settings-configuration" },
586
+ { label: "Opt-in Analytics", screen: "settings-opt-in-analytics" },
587
+ { label: "Debug Mode", screen: "settings-debug-mode" }
588
+ ];
589
+ useInput4((input, key) => {
590
+ if (key.upArrow) {
591
+ setFocusIdx((i) => (i - 1 + items.length) % items.length);
592
+ return;
593
+ }
594
+ if (key.downArrow) {
595
+ setFocusIdx((i) => (i + 1) % items.length);
596
+ return;
597
+ }
598
+ if (key.return) {
599
+ const screen = items[focusIdx].screen;
600
+ if (screen) {
601
+ onNavigate(screen);
602
+ }
603
+ return;
604
+ }
605
+ if (key.escape || input === "q") {
606
+ onBack();
607
+ }
608
+ });
609
+ return /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
610
+ /* @__PURE__ */ jsx4(Text4, { bold: true, children: "Settings" }),
611
+ /* @__PURE__ */ jsx4(Text4, { children: " " }),
612
+ items.map((item, i) => /* @__PURE__ */ jsxs4(Text4, { color: i === focusIdx ? "cyan" : void 0, children: [
613
+ i === focusIdx ? "> " : " ",
614
+ item.label
615
+ ] }, item.label)),
616
+ /* @__PURE__ */ jsx4(Text4, { children: " " }),
617
+ /* @__PURE__ */ jsx4(Text4, { dimColor: true, children: "[\u2191/\u2193] Navigate [Enter] Select [Esc/q] Back to Start" })
618
+ ] });
619
+ }
620
+ var init_PageContainer3 = __esm({
621
+ "packages/experience-design-system-cli/src/tui/settings/PageContainer.tsx"() {
622
+ "use strict";
623
+ }
624
+ });
625
+
626
+ // packages/experience-design-system-cli/src/tui/settings/utils/v1-store.ts
627
+ import { readFile as readFile2, writeFile as writeFile3, mkdir as mkdir3 } from "node:fs/promises";
628
+ import { join as join6 } from "node:path";
629
+ import { homedir } from "node:os";
630
+ async function readV1Store() {
631
+ try {
632
+ const raw = await readFile2(V1_STORE_PATH, "utf8");
633
+ return JSON.parse(raw);
634
+ } catch {
635
+ return {};
636
+ }
637
+ }
638
+ async function writeV1Store(data) {
639
+ await mkdir3(join6(homedir(), ".config", "experiences"), { recursive: true });
640
+ await writeFile3(V1_STORE_PATH, `${JSON.stringify(data, null, 2)}
641
+ `, { mode: 384 });
642
+ }
643
+ var V1_STORE_PATH;
644
+ var init_v1_store = __esm({
645
+ "packages/experience-design-system-cli/src/tui/settings/utils/v1-store.ts"() {
646
+ "use strict";
647
+ V1_STORE_PATH = join6(homedir(), ".config", "experiences", "credentials.json");
648
+ }
649
+ });
650
+
651
+ // packages/experience-design-system-cli/src/tui/settings/contentful-configuration/config-store.ts
652
+ async function readCredentials() {
653
+ const store = await readV1Store();
654
+ return {
655
+ spaceId: store.spaceId || "",
656
+ environmentId: store.environmentId || "",
657
+ cmaToken: store.cmaToken || "",
658
+ host: store.host || ""
659
+ };
660
+ }
661
+ async function writeCredentials(config) {
662
+ const existing = await readV1Store();
663
+ const merged = {
664
+ ...existing,
665
+ ...config
666
+ };
667
+ Object.keys(merged).forEach((k) => {
668
+ if (!merged[k]) delete merged[k];
669
+ });
670
+ await writeV1Store(merged);
671
+ }
672
+ var init_config_store = __esm({
673
+ "packages/experience-design-system-cli/src/tui/settings/contentful-configuration/config-store.ts"() {
674
+ "use strict";
675
+ init_v1_store();
676
+ }
677
+ });
678
+
679
+ // packages/experience-design-system-cli/src/tui/settings/contentful-configuration/ContentfulConfigScreen.tsx
680
+ import { useEffect as useEffect4, useState as useState4 } from "react";
681
+ import { Box as Box5, Text as Text5, useInput as useInput5 } from "ink";
682
+ import { Fragment, jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
683
+ function debugFields(config) {
684
+ return {
685
+ space_id: config?.spaceId ?? "",
686
+ environment_id: config?.environmentId ?? "",
687
+ cma_token: config?.cmaToken ?? "",
688
+ host: config?.host ?? ""
689
+ };
690
+ }
691
+ function ConfigurationScreen({ onDone }) {
692
+ const [stage, setStage] = useState4("loading");
693
+ const [config, setConfig] = useState4(null);
694
+ const [activeField, setActiveField] = useState4("spaceId");
695
+ const [message, setMessage] = useState4(null);
696
+ useEffect4(() => {
697
+ readCredentials().then((cfg) => {
698
+ setConfig(cfg);
699
+ setStage("form");
700
+ startDebugRun({
701
+ flow: "settings/contentful-configuration",
702
+ step: "01-configuration",
703
+ menuOption: "Configuration",
704
+ inputs: debugFields(cfg)
705
+ });
706
+ });
707
+ }, []);
708
+ function fieldValue(field) {
709
+ if (!config) return "";
710
+ return config[field] || "";
711
+ }
712
+ function setFieldValue(field, value) {
713
+ if (!config) return;
714
+ setConfig({ ...config, [field]: value });
715
+ }
716
+ function handleSave() {
717
+ if (!config) return;
718
+ setStage("saving");
719
+ setMessage(null);
720
+ writeCredentials(config).then(() => {
721
+ setStage("saved");
722
+ setMessage("Configuration saved");
723
+ }).catch((err) => {
724
+ setMessage(err instanceof Error ? err.message : "Failed to save");
725
+ setStage("form");
726
+ });
727
+ }
728
+ useInput5((input, key) => {
729
+ if (stage === "loading" || stage === "saving") return;
730
+ if (stage === "saved") {
731
+ if (key.return || key.escape || input === "q") {
732
+ void finishDebugRun({ outputs: debugFields(config), status: "success", exitMethod: "saved" });
733
+ onDone();
734
+ }
735
+ return;
736
+ }
737
+ if (key.escape || input === "q") {
738
+ void finishDebugRun({ outputs: {}, status: "success", exitMethod: "discarded" });
739
+ onDone();
740
+ return;
741
+ }
742
+ if (key.tab || key.downArrow) {
743
+ const idx = FIELD_ORDER.indexOf(activeField);
744
+ setActiveField(FIELD_ORDER[(idx + 1) % FIELD_ORDER.length]);
745
+ return;
746
+ }
747
+ if (key.upArrow) {
748
+ const idx = FIELD_ORDER.indexOf(activeField);
749
+ setActiveField(FIELD_ORDER[(idx - 1 + FIELD_ORDER.length) % FIELD_ORDER.length]);
750
+ return;
751
+ }
752
+ if (key.return) {
753
+ const idx = FIELD_ORDER.indexOf(activeField);
754
+ if (idx < FIELD_ORDER.length - 1) {
755
+ setActiveField(FIELD_ORDER[idx + 1]);
756
+ } else {
757
+ handleSave();
758
+ }
759
+ return;
760
+ }
761
+ if (key.backspace || key.delete) {
762
+ const current = fieldValue(activeField);
763
+ setFieldValue(activeField, current.slice(0, -1));
764
+ return;
765
+ }
766
+ if (input && !key.ctrl && !key.meta) {
767
+ setFieldValue(activeField, fieldValue(activeField) + input);
768
+ }
769
+ });
770
+ if (stage === "loading") {
771
+ return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
772
+ /* @__PURE__ */ jsx5(Text5, { bold: true, children: "Configuration" }),
773
+ /* @__PURE__ */ jsx5(Text5, { children: " " }),
774
+ /* @__PURE__ */ jsx5(Text5, { color: PALETTE.accent, children: "Loading..." })
775
+ ] });
776
+ }
777
+ if (stage === "saved") {
778
+ return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
779
+ /* @__PURE__ */ jsx5(Text5, { bold: true, children: "Configuration" }),
780
+ /* @__PURE__ */ jsx5(Text5, { children: " " }),
781
+ /* @__PURE__ */ jsxs5(Text5, { color: PALETTE.success, children: [
782
+ "\u2713 ",
783
+ message
784
+ ] }),
785
+ /* @__PURE__ */ jsx5(Text5, { children: " " }),
786
+ /* @__PURE__ */ jsx5(Text5, { dimColor: true, children: "[Enter] Back to Settings" })
787
+ ] });
788
+ }
789
+ return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
790
+ /* @__PURE__ */ jsx5(Text5, { bold: true, children: "Configuration" }),
791
+ /* @__PURE__ */ jsx5(Text5, { children: " " }),
792
+ /* @__PURE__ */ jsx5(Text5, { children: "Contentful API Credentials" }),
793
+ /* @__PURE__ */ jsx5(Text5, { children: " " }),
794
+ /* @__PURE__ */ jsx5(Box5, { flexDirection: "column", children: FIELD_ORDER.map((field) => {
795
+ const isActive = activeField === field;
796
+ const value = fieldValue(field);
797
+ const display = field === "cmaToken" ? "\u2022".repeat(value.length) : value;
798
+ return /* @__PURE__ */ jsxs5(Box5, { gap: 1, children: [
799
+ /* @__PURE__ */ jsx5(Text5, { color: isActive ? PALETTE.accent : void 0, children: isActive ? "\u276F" : " " }),
800
+ /* @__PURE__ */ jsxs5(Text5, { bold: isActive, children: [
801
+ FIELD_LABELS[field],
802
+ ":"
803
+ ] }),
804
+ /* @__PURE__ */ jsx5(Text5, { children: display || /* @__PURE__ */ jsx5(Text5, { dimColor: true, children: "(empty)" }) })
805
+ ] }, field);
806
+ }) }),
807
+ message && /* @__PURE__ */ jsxs5(Fragment, { children: [
808
+ /* @__PURE__ */ jsx5(Text5, { children: " " }),
809
+ /* @__PURE__ */ jsxs5(Text5, { color: PALETTE.error, children: [
810
+ "\u2717 ",
811
+ message
812
+ ] })
813
+ ] }),
814
+ /* @__PURE__ */ jsx5(Text5, { children: " " }),
815
+ /* @__PURE__ */ jsx5(Text5, { dimColor: true, children: "[\u2191/\u2193] Switch field \xB7 [Enter] Save/Next \xB7 [Esc/q] Back" })
816
+ ] });
817
+ }
818
+ var FIELD_ORDER, FIELD_LABELS;
819
+ var init_ContentfulConfigScreen = __esm({
820
+ "packages/experience-design-system-cli/src/tui/settings/contentful-configuration/ContentfulConfigScreen.tsx"() {
821
+ "use strict";
822
+ init_home_theme();
823
+ init_config_store();
824
+ init_debug_store();
825
+ FIELD_ORDER = ["spaceId", "environmentId", "cmaToken", "host"];
826
+ FIELD_LABELS = {
827
+ spaceId: "Space ID",
828
+ environmentId: "Environment ID",
829
+ cmaToken: "CMA Token",
830
+ host: "API Host (optional)"
831
+ };
832
+ }
833
+ });
834
+
835
+ // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/analytics-store.ts
836
+ async function readAnalyticsSetting() {
837
+ const store = await readV1Store();
838
+ const analyticsDisabled = store.analyticsDisabled;
839
+ return { enabled: analyticsDisabled !== true };
840
+ }
841
+ async function writeAnalyticsSetting(setting) {
842
+ const existing = await readV1Store();
843
+ const updated = {
844
+ ...existing,
845
+ analyticsDisabled: !setting.enabled
846
+ };
847
+ await writeV1Store(updated);
848
+ }
849
+ var init_analytics_store = __esm({
850
+ "packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/analytics-store.ts"() {
851
+ "use strict";
852
+ init_v1_store();
853
+ }
854
+ });
855
+
856
+ // packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/screen.tsx
857
+ import { useEffect as useEffect5, useState as useState5 } from "react";
858
+ import { Box as Box6, Text as Text6, useInput as useInput6 } from "ink";
859
+ import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
860
+ function OptInAnalyticsScreen({ onDone }) {
861
+ const [loading, setLoading] = useState5(true);
862
+ const [enabled, setEnabled] = useState5(true);
863
+ useEffect5(() => {
864
+ readAnalyticsSetting().then((setting) => {
865
+ setEnabled(setting.enabled);
866
+ setLoading(false);
867
+ startDebugRun({
868
+ flow: "settings/opt-in-analytics",
869
+ step: "01-opt-in-analytics",
870
+ menuOption: "Opt-in Analytics",
871
+ inputs: { enabled: setting.enabled }
872
+ });
873
+ });
874
+ }, []);
875
+ useInput6((input, key) => {
876
+ if (loading) return;
877
+ if (key.return || input === " ") {
878
+ setEnabled((current) => {
879
+ const next = !current;
880
+ void writeAnalyticsSetting({ enabled: next });
881
+ return next;
882
+ });
883
+ return;
884
+ }
885
+ if (key.escape || input === "q") {
886
+ void finishDebugRun({ outputs: { enabled }, status: "success", exitMethod: "saved" });
887
+ onDone();
888
+ }
889
+ });
890
+ return /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
891
+ /* @__PURE__ */ jsx6(Text6, { bold: true, children: "Settings \u203A Opt-in Analytics" }),
892
+ /* @__PURE__ */ jsx6(Text6, { children: " " }),
893
+ loading ? /* @__PURE__ */ jsx6(Text6, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs6(Fragment2, { children: [
894
+ /* @__PURE__ */ jsxs6(Text6, { children: [
895
+ "Share anonymous usage data:",
896
+ " ",
897
+ /* @__PURE__ */ jsx6(Text6, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
898
+ ] }),
899
+ /* @__PURE__ */ jsx6(Text6, { children: " " }),
900
+ /* @__PURE__ */ jsx6(Text6, { dimColor: true, children: "Shares which CLI commands are used and where imports succeed or fail." }),
901
+ /* @__PURE__ */ jsx6(Text6, { dimColor: true, children: "Never includes source code, file paths, credentials, or authored content." })
902
+ ] }),
903
+ /* @__PURE__ */ jsx6(Text6, { children: " " }),
904
+ /* @__PURE__ */ jsx6(Text6, { dimColor: true, children: "[Enter/Space] Toggle [Esc/q] Back to Settings" })
905
+ ] });
906
+ }
907
+ var init_screen = __esm({
908
+ "packages/experience-design-system-cli/src/tui/settings/opt-in-analytics/screen.tsx"() {
909
+ "use strict";
910
+ init_home_theme();
911
+ init_analytics_store();
912
+ init_debug_store();
913
+ }
914
+ });
915
+
916
+ // packages/experience-design-system-cli/src/tui/upgrade/PageContainer.tsx
917
+ import { useEffect as useEffect6, useState as useState6 } from "react";
918
+ import { Box as Box7, Text as Text7, useInput as useInput7 } from "ink";
919
+ import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
920
+ function UpgradeScreen({ onDone }) {
921
+ const [upgradeCheck, setUpgradeCheck] = useState6();
922
+ useEffect6(() => {
923
+ startDebugRun({
924
+ flow: "upgrade",
925
+ step: "01-upgrade",
926
+ menuOption: "Upgrade",
927
+ inputs: { currentVersion: readPackageVersion() }
928
+ });
929
+ checkForUpgrade().then(setUpgradeCheck).catch(() => setUpgradeCheck({ status: "error" }));
930
+ }, []);
931
+ useInput7((_input, key) => {
932
+ if (key.return) {
933
+ void finishDebugRun({
934
+ outputs: upgradeCheck ?? {},
935
+ status: upgradeCheck?.status === "error" ? "error" : "success",
936
+ exitMethod: "saved"
937
+ });
938
+ onDone();
939
+ return;
940
+ }
941
+ });
942
+ return /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
943
+ /* @__PURE__ */ jsx7(Text7, { bold: true, children: "Upgrade" }),
944
+ /* @__PURE__ */ jsx7(Text7, { children: " " }),
945
+ renderBody(upgradeCheck),
946
+ /* @__PURE__ */ jsx7(Text7, { children: " " }),
947
+ /* @__PURE__ */ jsxs7(Text7, { bold: true, color: PALETTE.accent, children: [
948
+ FOCUS_MARKER,
949
+ " Go Back"
950
+ ] })
951
+ ] });
952
+ }
953
+ function renderBody(upgradeCheck) {
954
+ if (!upgradeCheck) {
955
+ return /* @__PURE__ */ jsx7(Text7, { color: PALETTE.muted, children: "Checking for updates\u2026" });
956
+ }
957
+ if (upgradeCheck.status === "error") {
958
+ return /* @__PURE__ */ jsx7(Text7, { color: PALETTE.warning, children: "Couldn't check for updates \u2014 check your network connection and try again." });
959
+ }
960
+ if (upgradeCheck.status === "up-to-date") {
961
+ return /* @__PURE__ */ jsxs7(Text7, { color: PALETTE.success, children: [
962
+ "You're already on the latest version (v",
963
+ upgradeCheck.current,
964
+ ")."
965
+ ] });
966
+ }
967
+ return /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", children: [
968
+ /* @__PURE__ */ jsxs7(Text7, { color: PALETTE.muted, children: [
969
+ /* @__PURE__ */ jsxs7(Text7, { bold: true, color: PALETTE.success, children: [
970
+ "v",
971
+ upgradeCheck.latest
972
+ ] }),
973
+ " ",
974
+ "is available (you're on ",
975
+ /* @__PURE__ */ jsxs7(Text7, { bold: true, children: [
976
+ "v",
977
+ upgradeCheck.current
978
+ ] }),
979
+ "). Exit this program, cd into the root of your local clone of contentful/experience-design-system-sdk-public, then run:"
980
+ ] }),
981
+ /* @__PURE__ */ jsx7(Text7, { children: " " }),
982
+ /* @__PURE__ */ jsx7(Box7, { flexDirection: "column", borderStyle: "round", borderColor: PALETTE.border, paddingX: 1, children: UPGRADE_COMMANDS.map((cmd) => /* @__PURE__ */ jsx7(Text7, { bold: true, children: cmd }, cmd)) })
983
+ ] });
984
+ }
985
+ var UPGRADE_COMMANDS;
986
+ var init_PageContainer4 = __esm({
987
+ "packages/experience-design-system-cli/src/tui/upgrade/PageContainer.tsx"() {
988
+ "use strict";
989
+ init_home_theme();
990
+ init_version();
991
+ init_debug_store();
992
+ UPGRADE_COMMANDS = ["git pull", "pnpm install", "pnpm build"];
993
+ }
994
+ });
995
+
996
+ // packages/experience-design-system-cli/src/tui/settings/debug-mode/screen.tsx
997
+ import { useEffect as useEffect7, useState as useState7 } from "react";
998
+ import { Box as Box8, Text as Text8, useInput as useInput8 } from "ink";
999
+ import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
1000
+ function DebugModeScreen({ onDone }) {
1001
+ const [loading, setLoading] = useState7(true);
1002
+ const [enabled, setEnabled] = useState7(true);
1003
+ useEffect7(() => {
1004
+ readDebugModeSetting().then((setting) => {
1005
+ setEnabled(setting.enabled);
1006
+ setLoading(false);
1007
+ startDebugRun({
1008
+ flow: "settings/debug-mode",
1009
+ step: "01-debug-mode",
1010
+ menuOption: "Debug Mode",
1011
+ inputs: { enabled: setting.enabled }
1012
+ });
1013
+ });
1014
+ }, []);
1015
+ useInput8((input, key) => {
1016
+ if (loading) return;
1017
+ if (key.return || input === " ") {
1018
+ setEnabled((current) => {
1019
+ const next = !current;
1020
+ void writeDebugModeSetting({ enabled: next });
1021
+ return next;
1022
+ });
1023
+ return;
1024
+ }
1025
+ if (key.escape || input === "q") {
1026
+ void finishDebugRun({ outputs: { enabled }, status: "success", exitMethod: "saved" });
1027
+ onDone();
1028
+ }
1029
+ });
1030
+ return /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
1031
+ /* @__PURE__ */ jsx8(Text8, { bold: true, children: "Settings \u203A Debug Mode" }),
1032
+ /* @__PURE__ */ jsx8(Text8, { children: " " }),
1033
+ loading ? /* @__PURE__ */ jsx8(Text8, { color: PALETTE.muted, children: "Loading\u2026" }) : /* @__PURE__ */ jsxs8(Text8, { children: [
1034
+ "Debug logging:",
1035
+ " ",
1036
+ /* @__PURE__ */ jsx8(Text8, { bold: true, color: enabled ? PALETTE.success : PALETTE.muted, children: enabled ? "On" : "Off" })
1037
+ ] }),
1038
+ /* @__PURE__ */ jsx8(Text8, { children: " " }),
1039
+ /* @__PURE__ */ jsx8(Text8, { dimColor: true, children: "[Enter/Space] Toggle [Esc/q] Back to Settings" })
1040
+ ] });
1041
+ }
1042
+ var init_screen2 = __esm({
1043
+ "packages/experience-design-system-cli/src/tui/settings/debug-mode/screen.tsx"() {
1044
+ "use strict";
1045
+ init_home_theme();
1046
+ init_debug_mode_store();
1047
+ init_debug_store();
1048
+ }
1049
+ });
1050
+
1051
+ // packages/experience-design-system-cli/app.tsx
1052
+ var app_exports = {};
1053
+ __export(app_exports, {
1054
+ runApp: () => runApp
1055
+ });
1056
+ import { useState as useState8 } from "react";
1057
+ import { jsx as jsx9 } from "react/jsx-runtime";
1058
+ function App({ onLaunchImport, importExitCode }) {
1059
+ const returnedFromImport = importExitCode !== void 0;
1060
+ const [screen, setScreen] = useState8(returnedFromImport ? "import" : "start");
1061
+ const goToStart = () => setScreen("start");
1062
+ const goToSettings = () => setScreen("settings");
1063
+ const navigateFromHome = (next) => {
1064
+ if (next === "import" && onLaunchImport) {
1065
+ onLaunchImport();
1066
+ return;
1067
+ }
1068
+ setScreen(next);
1069
+ };
1070
+ switch (screen) {
1071
+ case "import":
1072
+ return /* @__PURE__ */ jsx9(ImportScreen, { exitCode: importExitCode, onDone: goToStart });
1073
+ case "help":
1074
+ return /* @__PURE__ */ jsx9(HelpScreen, { onDone: goToStart });
1075
+ case "upgrade":
1076
+ return /* @__PURE__ */ jsx9(UpgradeScreen, { onDone: goToStart });
1077
+ case "settings":
1078
+ return /* @__PURE__ */ jsx9(SettingsScreen, { onNavigate: setScreen, onBack: goToStart });
1079
+ case "settings-configuration":
1080
+ return /* @__PURE__ */ jsx9(ConfigurationScreen, { onDone: goToSettings });
1081
+ case "settings-opt-in-analytics":
1082
+ return /* @__PURE__ */ jsx9(OptInAnalyticsScreen, { onDone: goToSettings });
1083
+ case "settings-debug-mode":
1084
+ return /* @__PURE__ */ jsx9(DebugModeScreen, { onDone: goToSettings });
1085
+ case "start":
1086
+ return /* @__PURE__ */ jsx9(HomeScreen, { onNavigate: navigateFromHome });
1087
+ }
1088
+ }
1089
+ async function renderUntilImportRequestedOrExit(renderApp, importExitCode) {
1090
+ let importRequested = false;
1091
+ const instance = renderApp(
1092
+ /* @__PURE__ */ jsx9(
1093
+ App,
1094
+ {
1095
+ importExitCode,
1096
+ onLaunchImport: () => {
1097
+ importRequested = true;
1098
+ instance.unmount();
1099
+ }
1100
+ }
1101
+ )
1102
+ );
1103
+ await instance.waitUntilExit();
1104
+ await stopReadingTerminal();
1105
+ return importRequested;
1106
+ }
1107
+ async function runApp(renderApp) {
1108
+ let importExitCode;
1109
+ while (await renderUntilImportRequestedOrExit(renderApp, importExitCode)) {
1110
+ importExitCode = (await spawnV1Import({})).exitCode;
1111
+ startReadingTerminal();
1112
+ }
1113
+ }
1114
+ var init_app = __esm({
1115
+ "packages/experience-design-system-cli/app.tsx"() {
1116
+ "use strict";
1117
+ init_home();
1118
+ init_PageContainer();
1119
+ init_spawn_v1_import();
1120
+ init_terminal_input();
1121
+ init_PageContainer2();
1122
+ init_PageContainer3();
1123
+ init_ContentfulConfigScreen();
1124
+ init_screen();
1125
+ init_PageContainer4();
1126
+ init_screen2();
1127
+ }
1128
+ });
1129
+
1130
+ // packages/experience-design-system-cli/program.ts
1131
+ import { readFileSync as readFileSync3 } from "node:fs";
1132
+ import { Command } from "commander";
1133
+
1134
+ // packages/experience-design-system-cli/src/legacy/run-legacy.ts
1135
+ init_legacy_cli_path();
1136
+ import { spawn } from "node:child_process";
1137
+ function runLegacy(args) {
1138
+ return new Promise((resolvePromise) => {
1139
+ let cliPath;
1140
+ try {
1141
+ cliPath = findLegacyCliPath();
1142
+ } catch (err) {
1143
+ process.stderr.write(`${err instanceof Error ? err.message : String(err)}
1144
+ `);
1145
+ resolvePromise(1);
1146
+ return;
1147
+ }
1148
+ const child = spawn("node", [cliPath, ...args], { stdio: "inherit" });
1149
+ child.on("close", (code) => resolvePromise(code ?? 1));
1150
+ child.on("error", (err) => {
1151
+ process.stderr.write(`${err.message}
1152
+ `);
1153
+ resolvePromise(1);
1154
+ });
1155
+ });
1156
+ }
1157
+
1158
+ // packages/experience-design-system-cli/program.ts
1159
+ var pkg = JSON.parse(readFileSync3(new URL("../package.json", import.meta.url), "utf8"));
1160
+ var FORWARDED_COMMANDS = [
1161
+ {
1162
+ name: "apply",
1163
+ description: "Apply a CDF file of components and design tokens to Contentful"
1164
+ },
1165
+ {
1166
+ name: "setup",
1167
+ description: "Configure prerequisites, credentials and the coding agent"
1168
+ },
1169
+ { name: "doctor", description: "Check prerequisites and configuration" },
1170
+ { name: "print", hidden: true },
1171
+ { name: "map", hidden: true },
1172
+ { name: "__extract", hidden: true },
1173
+ { name: "__generate", hidden: true }
1174
+ ];
1175
+ function registerForwardedCommands(program) {
1176
+ for (const entry of FORWARDED_COMMANDS) {
1177
+ const hidden = "hidden" in entry;
1178
+ const command = program.command(entry.name, { hidden });
1179
+ if (!hidden) command.description(entry.description);
1180
+ command.allowUnknownOption().allowExcessArguments().helpOption(false).argument("[args...]").action(async () => {
1181
+ process.exit(await runLegacy(process.argv.slice(2)));
1182
+ });
1183
+ }
1184
+ }
1185
+ function createProgram() {
1186
+ const program = new Command().name("experiences").description("Contentful Experiences design system import CLI").version(pkg.version, "--version", "Print version number");
1187
+ program.command("import", { isDefault: true }).description("Launch the Experiences CLI").action(async () => {
1188
+ const { render } = await import("ink");
1189
+ const { runApp: runApp2 } = await Promise.resolve().then(() => (init_app(), app_exports));
1190
+ await runApp2(render);
1191
+ });
1192
+ registerForwardedCommands(program);
1193
+ return program;
1194
+ }
1195
+
1196
+ // packages/experience-design-system-cli/index.ts
1197
+ createProgram().parseAsync().catch((err) => {
1198
+ process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}
1199
+ `);
1200
+ process.exit(1);
1201
+ });