@contentful/experience-design-system-cli 2.37.1-dev-build-ef8b693f.0 → 2.37.1-dev-build-a7704a7f.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 (177) hide show
  1. package/dist/app.js +262 -261
  2. package/dist/index.js +394 -467
  3. package/dist/package.json +1 -1
  4. package/dist/src/tui/home/home.theme.d.ts +8 -0
  5. package/dist/src/tui/import/steps/07-scope-gate/sidebar/theme.d.ts +6 -6
  6. package/dist/src/tui/import/steps/09-review/theme.d.ts +9 -0
  7. package/{legacy/dist/src/analyze/select/tui → dist/src/tui/import/steps/10-flow}/theme.d.ts +2 -7
  8. package/package.json +3 -3
  9. package/dist/src/commands/forwarded.d.ts +0 -2
  10. package/dist/src/legacy/forwarded-import-args.d.ts +0 -1
  11. package/dist/src/legacy/legacy-cli-path.d.ts +0 -1
  12. package/dist/src/legacy/run-legacy.d.ts +0 -1
  13. package/dist/src/tui/theme.d.ts +0 -19
  14. package/legacy/bin/cli.js +0 -58
  15. package/legacy/dist/package.json +0 -76
  16. package/legacy/dist/src/analytics/exit.d.ts +0 -4
  17. package/legacy/dist/src/analytics/index.d.ts +0 -3
  18. package/legacy/dist/src/analyze/composite-closure.d.ts +0 -26
  19. package/legacy/dist/src/analyze/composition/apply-mapping.d.ts +0 -22
  20. package/legacy/dist/src/analyze/composition/candidate-files.d.ts +0 -34
  21. package/legacy/dist/src/analyze/composition/composition-cache-key.d.ts +0 -18
  22. package/legacy/dist/src/analyze/composition/interchange-schema.d.ts +0 -17
  23. package/legacy/dist/src/analyze/composition/manifest-doc-evidence.d.ts +0 -49
  24. package/legacy/dist/src/analyze/composition/merge-edges.d.ts +0 -19
  25. package/legacy/dist/src/analyze/composition/parse-map-edges.d.ts +0 -16
  26. package/legacy/dist/src/analyze/composition/prompt-loader.d.ts +0 -3
  27. package/legacy/dist/src/analyze/composition/resolve-mapping-cli.d.ts +0 -10
  28. package/legacy/dist/src/analyze/composition/resolve-mapping.d.ts +0 -59
  29. package/legacy/dist/src/analyze/cycle-detection.d.ts +0 -27
  30. package/legacy/dist/src/analyze/extract-command.d.ts +0 -7
  31. package/legacy/dist/src/analyze/fuzzy-search.d.ts +0 -3
  32. package/legacy/dist/src/analyze/issue-inheritance.d.ts +0 -8
  33. package/legacy/dist/src/analyze/lineage.d.ts +0 -29
  34. package/legacy/dist/src/analyze/search-neighborhood.d.ts +0 -3
  35. package/legacy/dist/src/analyze/select/command.d.ts +0 -27
  36. package/legacy/dist/src/analyze/select/parser.d.ts +0 -6
  37. package/legacy/dist/src/analyze/select/persistence.d.ts +0 -22
  38. package/legacy/dist/src/analyze/select/preview-annotations.d.ts +0 -26
  39. package/legacy/dist/src/analyze/select/tui/LegacySelectApp.d.ts +0 -8
  40. package/legacy/dist/src/analyze/select/tui/components/ComponentDetail.d.ts +0 -19
  41. package/legacy/dist/src/analyze/select/tui/components/ComponentRationalePanel.d.ts +0 -10
  42. package/legacy/dist/src/analyze/select/tui/components/FieldEditor.d.ts +0 -67
  43. package/legacy/dist/src/analyze/select/tui/components/FinalizeDialog.d.ts +0 -22
  44. package/legacy/dist/src/analyze/select/tui/components/GotoBanner.d.ts +0 -31
  45. package/legacy/dist/src/analyze/select/tui/components/GroupedSidebar.d.ts +0 -94
  46. package/legacy/dist/src/analyze/select/tui/components/HelpOverlay.d.ts +0 -21
  47. package/legacy/dist/src/analyze/select/tui/components/HighlightedLine.d.ts +0 -9
  48. package/legacy/dist/src/analyze/select/tui/components/JsonEditor.d.ts +0 -10
  49. package/legacy/dist/src/analyze/select/tui/components/JsonPanel.d.ts +0 -11
  50. package/legacy/dist/src/analyze/select/tui/components/PreviewSummaryBar.d.ts +0 -8
  51. package/legacy/dist/src/analyze/select/tui/components/QuitDialog.d.ts +0 -8
  52. package/legacy/dist/src/analyze/select/tui/components/RationaleLine.d.ts +0 -21
  53. package/legacy/dist/src/analyze/select/tui/components/RationalePanel.d.ts +0 -15
  54. package/legacy/dist/src/analyze/select/tui/components/ScrollablePanel.d.ts +0 -14
  55. package/legacy/dist/src/analyze/select/tui/components/Sidebar.d.ts +0 -29
  56. package/legacy/dist/src/analyze/select/tui/components/SourcePanel.d.ts +0 -11
  57. package/legacy/dist/src/analyze/select/tui/components/StatusBar.d.ts +0 -11
  58. package/legacy/dist/src/analyze/select/tui/components/TokenReviewPanel.d.ts +0 -30
  59. package/legacy/dist/src/analyze/select/tui/components/TopBar.d.ts +0 -10
  60. package/legacy/dist/src/analyze/select/tui/components/removed-components-text.d.ts +0 -7
  61. package/legacy/dist/src/analyze/select/tui/components/wrap-text.d.ts +0 -1
  62. package/legacy/dist/src/analyze/select/tui/hooks/list-scroll-input.d.ts +0 -13
  63. package/legacy/dist/src/analyze/select/tui/hooks/scroll-offset.d.ts +0 -30
  64. package/legacy/dist/src/analyze/select/tui/hooks/useImmediateInput.d.ts +0 -19
  65. package/legacy/dist/src/analyze/select/tui/hooks/useKeymap.d.ts +0 -24
  66. package/legacy/dist/src/analyze/select/tui/hooks/useSession.d.ts +0 -19
  67. package/legacy/dist/src/analyze/select/tui/hooks/useUndo.d.ts +0 -8
  68. package/legacy/dist/src/analyze/select/types.d.ts +0 -54
  69. package/legacy/dist/src/analyze/selection-cascade.d.ts +0 -3
  70. package/legacy/dist/src/analyze/slot-graph.d.ts +0 -11
  71. package/legacy/dist/src/apply/api-client.d.ts +0 -64
  72. package/legacy/dist/src/apply/command.d.ts +0 -43
  73. package/legacy/dist/src/apply/preview-utils.d.ts +0 -12
  74. package/legacy/dist/src/apply/tokens.d.ts +0 -1
  75. package/legacy/dist/src/apply/tui/ServerApplyView.d.ts +0 -34
  76. package/legacy/dist/src/apply/tui/ServerPreviewView.d.ts +0 -9
  77. package/legacy/dist/src/credentials-store.d.ts +0 -18
  78. package/legacy/dist/src/doctor/checks.d.ts +0 -5
  79. package/legacy/dist/src/doctor/command.d.ts +0 -2
  80. package/legacy/dist/src/doctor/report.d.ts +0 -7
  81. package/legacy/dist/src/generate/command.d.ts +0 -2
  82. package/legacy/dist/src/generate/tui/GenerateView.d.ts +0 -12
  83. package/legacy/dist/src/helpers/build-contentful-management-client.d.ts +0 -7
  84. package/legacy/dist/src/helpers/fetch-and-persist-existing-contentful-entities.d.ts +0 -29
  85. package/legacy/dist/src/helpers/fetch-existing-contentful-entities.d.ts +0 -11
  86. package/legacy/dist/src/helpers/find-nearly-matching-component.d.ts +0 -7
  87. package/legacy/dist/src/helpers/read-existing-contentful-entities-from-session.d.ts +0 -7
  88. package/legacy/dist/src/helpers/summarize-existing-contentful-entities.d.ts +0 -50
  89. package/legacy/dist/src/host-utils.d.ts +0 -3
  90. package/legacy/dist/src/index.d.ts +0 -1
  91. package/legacy/dist/src/index.js +0 -25165
  92. package/legacy/dist/src/lib/agent-definitions.d.ts +0 -14
  93. package/legacy/dist/src/lib/agent-model-options.d.ts +0 -15
  94. package/legacy/dist/src/lib/agent-output.d.ts +0 -5
  95. package/legacy/dist/src/lib/cli-errors.d.ts +0 -2
  96. package/legacy/dist/src/lib/cli-path.d.ts +0 -4
  97. package/legacy/dist/src/lib/command-options.d.ts +0 -3
  98. package/legacy/dist/src/lib/component-patch.d.ts +0 -12
  99. package/legacy/dist/src/lib/contentful-urls.d.ts +0 -15
  100. package/legacy/dist/src/lib/debug-logger.d.ts +0 -39
  101. package/legacy/dist/src/lib/debug-preamble.d.ts +0 -7
  102. package/legacy/dist/src/lib/error-parser.d.ts +0 -40
  103. package/legacy/dist/src/lib/path-exists.d.ts +0 -1
  104. package/legacy/dist/src/lib/prompt-overrides.d.ts +0 -38
  105. package/legacy/dist/src/lib/terminal-capabilities.d.ts +0 -29
  106. package/legacy/dist/src/lib/user-agent.d.ts +0 -7
  107. package/legacy/dist/src/map-tokens/apply.d.ts +0 -12
  108. package/legacy/dist/src/map-tokens/command.d.ts +0 -2
  109. package/legacy/dist/src/map-tokens/resolve-defaults.d.ts +0 -32
  110. package/legacy/dist/src/map-tokens/tui/MapTokensView.d.ts +0 -13
  111. package/legacy/dist/src/output/format.d.ts +0 -23
  112. package/legacy/dist/src/print/command.d.ts +0 -11
  113. package/legacy/dist/src/print/validate/tui/ValidateView.d.ts +0 -15
  114. package/legacy/dist/src/print/validate/validators/cdf-validator.d.ts +0 -2
  115. package/legacy/dist/src/print/validate/validators/dtcg-validator.d.ts +0 -2
  116. package/legacy/dist/src/print/validate/validators/format-errors.d.ts +0 -12
  117. package/legacy/dist/src/print/validate/validators/read-json-file.d.ts +0 -10
  118. package/legacy/dist/src/program.d.ts +0 -25
  119. package/legacy/dist/src/runs/fingerprint.d.ts +0 -36
  120. package/legacy/dist/src/runs/save-path-resolver.d.ts +0 -11
  121. package/legacy/dist/src/runs/store.d.ts +0 -65
  122. package/legacy/dist/src/session/cache-keys.d.ts +0 -22
  123. package/legacy/dist/src/session/core/cdf/cdf-mappers.d.ts +0 -3
  124. package/legacy/dist/src/session/core/components/derive-component-id.d.ts +0 -1
  125. package/legacy/dist/src/session/core/components/hash-component-shape.d.ts +0 -5
  126. package/legacy/dist/src/session/core/shared/index-rows-by-key.d.ts +0 -1
  127. package/legacy/dist/src/session/core/tokens/build-dtcg-groups.d.ts +0 -12
  128. package/legacy/dist/src/session/core/tokens/build-dtcg-tokens.d.ts +0 -3
  129. package/legacy/dist/src/session/core/tokens/hash-token-content.d.ts +0 -1
  130. package/legacy/dist/src/session/db.d.ts +0 -200
  131. package/legacy/dist/src/session/migration.d.ts +0 -2
  132. package/legacy/dist/src/session/repositories/sessions/read.d.ts +0 -11
  133. package/legacy/dist/src/session/repositories/sessions/write.d.ts +0 -3
  134. package/legacy/dist/src/session/repositories/shared/with-transaction.d.ts +0 -2
  135. package/legacy/dist/src/session/repositories/steps/read.d.ts +0 -2
  136. package/legacy/dist/src/session/repositories/steps/write.d.ts +0 -5
  137. package/legacy/dist/src/session/repositories/tokens/read.d.ts +0 -15
  138. package/legacy/dist/src/session/repositories/tokens/write.d.ts +0 -16
  139. package/legacy/dist/src/session/resolve-session-id.d.ts +0 -1
  140. package/legacy/dist/src/session/services/session-resolver.d.ts +0 -9
  141. package/legacy/dist/src/session/services/tokens/apply-tool-calls.d.ts +0 -8
  142. package/legacy/dist/src/session/services/tokens/replace-raw-prop-token-paths.d.ts +0 -3
  143. package/legacy/dist/src/session/services/tokens/replace-raw-token-name-paths.d.ts +0 -3
  144. package/legacy/dist/src/session/services/tokens/store-dtcg-tokens.d.ts +0 -3
  145. package/legacy/dist/src/session/session-id.d.ts +0 -1
  146. package/legacy/dist/src/session/source-excerpt.d.ts +0 -26
  147. package/legacy/dist/src/setup/SetupScreen.d.ts +0 -28
  148. package/legacy/dist/src/setup/SetupStepper.d.ts +0 -7
  149. package/legacy/dist/src/setup/command.d.ts +0 -3
  150. package/legacy/dist/src/setup/lib/checks.d.ts +0 -57
  151. package/legacy/dist/src/setup/lib/shell.d.ts +0 -12
  152. package/legacy/dist/src/setup/steps/CodingAgentScreen.d.ts +0 -20
  153. package/legacy/dist/src/setup/steps/ContentfulCredentialsScreen.d.ts +0 -11
  154. package/legacy/dist/src/setup/steps/StepLayout.d.ts +0 -20
  155. package/legacy/dist/src/setup/steps/preferences/AnalyticsScreen.d.ts +0 -5
  156. package/legacy/dist/src/setup/steps/preferences/BooleanInput.d.ts +0 -21
  157. package/legacy/dist/src/setup/steps/preferences/ColorPreferenceScreen.d.ts +0 -5
  158. package/legacy/dist/src/setup/steps/preferences/CustomPromptScreen.d.ts +0 -14
  159. package/legacy/dist/src/setup/steps/preferences/DebugLogsScreen.d.ts +0 -5
  160. package/legacy/dist/src/setup/steps/preferences/PreferencesMenu.d.ts +0 -26
  161. package/legacy/dist/src/setup/steps/prerequisites/PrerequisitesScreen.d.ts +0 -16
  162. package/legacy/dist/src/setup/steps/prerequisites/build.d.ts +0 -2
  163. package/legacy/dist/src/setup/steps/prerequisites/deps.d.ts +0 -33
  164. package/legacy/dist/src/setup/steps/prerequisites/index.d.ts +0 -4
  165. package/legacy/dist/src/setup/steps/prerequisites/node.d.ts +0 -2
  166. package/legacy/dist/src/setup/steps/prerequisites/pnpm.d.ts +0 -2
  167. package/legacy/dist/src/tui/CommandCompletionView.d.ts +0 -13
  168. package/legacy/dist/src/tui/render-with-goodbye.d.ts +0 -7
  169. package/legacy/dist/src/tui/use-terminal-size.d.ts +0 -6
  170. package/legacy/dist/src/tui/windowed-panel.d.ts +0 -37
  171. package/legacy/dist/src/types.d.ts +0 -2
  172. package/legacy/package.json +0 -85
  173. package/legacy/prompts/composition-edges.md +0 -11
  174. package/legacy/skills/generate-components.md +0 -612
  175. package/legacy/skills/generate-tokens.md +0 -194
  176. package/legacy/skills/map-tokens.md +0 -102
  177. package/legacy/skills/select-components.md +0 -235
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/experience-design-system-cli",
3
- "version": "2.37.1-dev-build-ef8b693f.0",
3
+ "version": "2.37.1-dev-build-a7704a7f.0",
4
4
  "description": "Contentful Experiences design system import CLI",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,3 +1,11 @@
1
+ export declare const PALETTE: {
2
+ readonly accent: "#1773EB";
3
+ readonly success: "#00C459";
4
+ readonly error: "#E44F20";
5
+ readonly warning: "#FFDA00";
6
+ readonly muted: "#8B8D91";
7
+ readonly border: "#C4D1DE";
8
+ };
1
9
  export declare function brandBar(width: number, ramp?: readonly string[]): {
2
10
  text: string;
3
11
  color: string;
@@ -1,8 +1,8 @@
1
1
  export declare const PALETTE: {
2
- readonly info: "#40a0ff" | "#0059c8";
3
- readonly success: "#5DB057" | "#006D23";
4
- readonly error: "#ff707d" | "#bd002a";
5
- readonly warning: "#FFC835" | "#CC4500";
6
- readonly muted: "#aec1cc" | "#5A657C";
7
- readonly border: "#aec1cc" | "#5A657C";
2
+ readonly info: "#1773EB";
3
+ readonly success: "#00C459";
4
+ readonly error: "#E44F20";
5
+ readonly warning: "#FFDA00";
6
+ readonly muted: "#8B8D91";
7
+ readonly border: "#C4D1DE";
8
8
  };
@@ -0,0 +1,9 @@
1
+ export declare const PALETTE: {
2
+ readonly info: "#1773EB";
3
+ readonly success: "#00C459";
4
+ readonly error: "#E44F20";
5
+ readonly warning: "#FFDA00";
6
+ readonly muted: "#8B8D91";
7
+ readonly border: "#C4D1DE";
8
+ readonly inverse: "#FFFFFF";
9
+ };
@@ -1,18 +1,13 @@
1
- import type { ReviewComponentStatus } from '../types.js';
2
1
  export declare const PALETTE: {
3
- readonly info: "#1773EB";
4
2
  readonly link: "#58A6FF";
3
+ readonly info: "#1773EB";
5
4
  readonly success: "#00C459";
6
5
  readonly error: "#E44F20";
7
6
  readonly warning: "#FFDA00";
8
- readonly fg: "#000000";
9
- readonly inverse: "#FFFFFF";
10
7
  readonly muted: "#8B8D91";
11
8
  readonly border: "#C4D1DE";
12
- readonly subtle: "#DDE5EC";
13
- readonly bg: "#EFF2F6";
9
+ readonly inverse: "#FFFFFF";
14
10
  };
15
11
  export declare const INK_UI_THEME: {
16
12
  components: Record<string, import("@inkjs/ui").ComponentTheme>;
17
13
  };
18
- export declare function statusPaletteColor(status: ReviewComponentStatus, validationErrorCount: number, validationWarningCount: number): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/experience-design-system-cli",
3
- "version": "2.37.1-dev-build-ef8b693f.0",
3
+ "version": "2.37.1-dev-build-a7704a7f.0",
4
4
  "description": "Contentful Experiences design system import CLI",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -45,8 +45,8 @@
45
45
  "ts-morph": "^27.0.2",
46
46
  "typescript": "^5.9.3",
47
47
  "zod": "^4.6.5",
48
- "@contentful/experience-design-system-backend-pipeline": "2.37.1-dev-build-ef8b693f.0",
49
- "@contentful/experience-design-system-types": "2.37.1-dev-build-ef8b693f.0"
48
+ "@contentful/experience-design-system-backend-pipeline": "2.37.1-dev-build-a7704a7f.0",
49
+ "@contentful/experience-design-system-types": "2.37.1-dev-build-a7704a7f.0"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@tsconfig/node24": "^24.0.4",
@@ -1,2 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function registerForwardedCommands(program: Command): void;
@@ -1 +0,0 @@
1
- export declare function forwardedImportArgs(argv: string[]): string[];
@@ -1 +0,0 @@
1
- export declare function findLegacyCliPath(): string;
@@ -1 +0,0 @@
1
- export declare function runLegacy(args: string[]): Promise<number>;
@@ -1,19 +0,0 @@
1
- export type ColorMode = 'dark' | 'light';
2
- export declare function detectColorMode(env?: NodeJS.ProcessEnv): ColorMode;
3
- export declare const PALETTE: {
4
- readonly text: "#f7f9fa";
5
- readonly muted: "#aec1cc";
6
- readonly border: "#aec1cc";
7
- readonly accent: "#40a0ff";
8
- readonly error: "#ff707d";
9
- readonly success: "#5DB057";
10
- readonly warning: "#FFC835";
11
- } | {
12
- readonly text: "#111B2B";
13
- readonly muted: "#5A657C";
14
- readonly border: "#5A657C";
15
- readonly accent: "#0059c8";
16
- readonly error: "#bd002a";
17
- readonly success: "#006D23";
18
- readonly warning: "#CC4500";
19
- };
package/legacy/bin/cli.js DELETED
@@ -1,58 +0,0 @@
1
- #!/usr/bin/env node
2
- // Suppress the SQLite ExperimentalWarning before any modules load.
3
- // Must use dynamic import so this handler registers before sqlite is imported.
4
- process.removeAllListeners("warning");
5
- process.on("warning", (w) => {
6
- if (w.name === "ExperimentalWarning" && w.message.includes("SQLite")) return;
7
- process.stderr.write(`${w.name}: ${w.message}\n`);
8
- });
9
-
10
- // Auto-rebuild when running from source (dev mode only).
11
- // Skipped when src/ doesn't exist (e.g. npm-installed users).
12
- import { existsSync, statSync, readdirSync } from "node:fs";
13
- import { execFileSync } from "node:child_process";
14
- import { fileURLToPath } from "node:url";
15
- import { dirname, resolve, join } from "node:path";
16
-
17
- function newestMtime(dir, depth = 0) {
18
- if (depth > 10) return 0;
19
- let max = 0;
20
- for (const entry of readdirSync(dir, { withFileTypes: true })) {
21
- if (entry.isSymbolicLink()) continue;
22
- const full = join(dir, entry.name);
23
- if (entry.isDirectory()) {
24
- max = Math.max(max, newestMtime(full, depth + 1));
25
- } else if (entry.name.endsWith(".ts") || entry.name.endsWith(".tsx")) {
26
- max = Math.max(max, statSync(full).mtimeMs);
27
- }
28
- }
29
- return max;
30
- }
31
-
32
- const __dirname = dirname(fileURLToPath(import.meta.url));
33
- const pkgRoot = resolve(__dirname, "..");
34
- const srcDir = join(pkgRoot, "src");
35
- const distEntry = join(pkgRoot, "dist", "src", "index.js");
36
-
37
- if (
38
- existsSync(srcDir) &&
39
- existsSync(distEntry) &&
40
- process.env.NODE_ENV !== "test"
41
- ) {
42
- const distMtime = statSync(distEntry).mtimeMs;
43
- if (newestMtime(srcDir) > distMtime) {
44
- process.stderr.write("⚙ Source changed — rebuilding...\n");
45
- const tsc = join(pkgRoot, "node_modules", ".bin", "tsc");
46
- try {
47
- execFileSync(tsc, ["-p", join(pkgRoot, "tsconfig.build.json")], {
48
- stdio: ["ignore", "ignore", "inherit"],
49
- cwd: pkgRoot,
50
- });
51
- process.stderr.write("✓ Build complete\n");
52
- } catch {
53
- process.stderr.write("✗ Build failed — running with existing dist\n");
54
- }
55
- }
56
- }
57
-
58
- await import("../dist/src/index.js");
@@ -1,76 +0,0 @@
1
- {
2
- "name": "@contentful/experience-design-system-cli-legacy",
3
- "version": "2.35.0",
4
- "description": "Legacy Contentful Experiences import CLI (internal, not published; used by @contentful/experience-design-system-cli)",
5
- "license": "MIT",
6
- "private": true,
7
- "type": "module",
8
- "main": "./dist/src/index.js",
9
- "types": "./dist/src/index.d.ts",
10
- "exports": {
11
- ".": {
12
- "types": "./dist/src/index.d.ts",
13
- "import": "./dist/src/index.js",
14
- "node": "./dist/src/index.js"
15
- }
16
- },
17
- "files": [
18
- "bin/",
19
- "dist/",
20
- "prompts/",
21
- "skills/"
22
- ],
23
- "scripts": {
24
- "build": "nx build experience-design-system-cli-legacy",
25
- "typecheck": "nx typecheck experience-design-system-cli-legacy",
26
- "clean": "nx clean experience-design-system-cli-legacy",
27
- "test": "nx test experience-design-system-cli-legacy",
28
- "test:watch": "nx test:watch experience-design-system-cli-legacy",
29
- "lint": "nx lint experience-design-system-cli-legacy",
30
- "lint:fix": "nx lint:fix experience-design-system-cli-legacy"
31
- },
32
- "dependencies": {
33
- "@contentful/experience-design-system-backend-pipeline": "workspace:*",
34
- "@contentful/experience-design-system-types": "workspace:*",
35
- "@inkjs/ui": "^2.0.0",
36
- "@segment/analytics-node": "^3.0.0",
37
- "@vue/compiler-sfc": "^3.5.31",
38
- "ajv": "^8.17.1",
39
- "commander": "^13.1.0",
40
- "contentful-management": "^12.17.0",
41
- "figures": "6.1.0",
42
- "ink": "^5.2.1",
43
- "react": "^18.3.1",
44
- "react-devtools-core": "^4.19.1",
45
- "svelte": "^5.56.4",
46
- "ts-morph": "^27.0.2",
47
- "typescript": "^5.9.3",
48
- "zod": "^4.3.6"
49
- },
50
- "devDependencies": {
51
- "@contentful/experience-design-system-client": "workspace:*",
52
- "@contentful/experience-design-system-extraction": "workspace:*",
53
- "@contentful/experience-design-system-generation": "workspace:*",
54
- "@tsconfig/node24": "^24.0.4",
55
- "@types/node": "^24.0.3",
56
- "@types/react": "^18.3.24",
57
- "eslint": "^9.39.5",
58
- "eslint-config-prettier": "^10.1.8",
59
- "eslint-plugin-prettier": "^5.5.6",
60
- "ink-testing-library": "^4.0.0",
61
- "typescript-eslint": "^8.67.0",
62
- "vitest": "^4.0.16"
63
- },
64
- "repository": {
65
- "type": "git",
66
- "url": "git+https://github.com/contentful/experience-design-system-sdk-public.git",
67
- "directory": "packages/experience-design-system-cli-legacy"
68
- },
69
- "homepage": "https://github.com/contentful/experience-design-system-sdk-public#readme",
70
- "bugs": {
71
- "url": "https://github.com/contentful/experience-design-system-sdk-public/issues"
72
- },
73
- "engines": {
74
- "node": ">=24"
75
- }
76
- }
@@ -1,4 +0,0 @@
1
- import { type CommandFailure } from '@contentful/experience-design-system-backend-pipeline';
2
- import type { ApiError } from '../apply/api-client.js';
3
- export declare function exitWithAnalytics(code: number, fields?: CommandFailure): Promise<never>;
4
- export declare function failureFromApiError(error: ApiError): CommandFailure;
@@ -1,3 +0,0 @@
1
- export { bindAnalyticsSessionId, completeActiveCommand, emitSessionStarted, enrichCommandResult, failActiveCommand, flushAnalytics, isPipelineAnalyticsChild, noteCommandStart, recordApplyOutcome, recordContentfulContext, setCliVersion, setPersistedAnalyticsDisabled, } from '@contentful/experience-design-system-backend-pipeline';
2
- export type { CommandFailure } from '@contentful/experience-design-system-backend-pipeline';
3
- export { exitWithAnalytics, failureFromApiError } from './exit.js';
@@ -1,26 +0,0 @@
1
- export interface ComponentGraphNode {
2
- name: string;
3
- slots: Array<{
4
- name: string;
5
- allowedComponents?: string[];
6
- }>;
7
- }
8
- interface ClosureNode {
9
- name: string;
10
- depth: number;
11
- path: string[];
12
- parents: string[];
13
- }
14
- export interface Closure {
15
- root: string;
16
- nodes: ClosureNode[];
17
- containsCycle: boolean;
18
- cyclePath?: string[];
19
- }
20
- export type NodeStatus = 'ok' | 'warning' | 'error';
21
- export declare function findRoots(components: ComponentGraphNode[], selected?: Set<string>): string[];
22
- export declare function computeClosure(root: string, components: ComponentGraphNode[]): Closure;
23
- export declare function computeAllClosures(components: ComponentGraphNode[], selected?: Set<string>): Map<string, Closure>;
24
- export declare function aggregateStatus(closure: Closure, perNodeStatus: Map<string, NodeStatus>): NodeStatus;
25
- export declare function findSharedDeps(closures: Map<string, Closure>): Map<string, string[]>;
26
- export {};
@@ -1,22 +0,0 @@
1
- import type { RawComponentDefinition } from '../../types.js';
2
- import type { CompositionEdge } from './interchange-schema.js';
3
- export type ApplyMappingResult = {
4
- components: RawComponentDefinition[];
5
- warnings: string[];
6
- };
7
- /**
8
- * Enrichment pass (spec T7): merge a resolved composition edge list into the
9
- * extracted components' `allowedComponents`. Runs AFTER extraction; it is the
10
- * mapping resolver's entire job — populating the one field every downstream
11
- * graph consumer reads.
12
- *
13
- * Slot targeting:
14
- * - edge.slot present + slot exists → write there.
15
- * - edge.slot present + slot missing → synthesize for high-trust
16
- * (typed-slot / adapter) edges; drop-and-warn for `agent` edges.
17
- * - edge.slot absent → default slot (isDefault), synthesized if none exists.
18
- *
19
- * Edges naming unknown parents/children are dropped-and-warned (§1.3). Inputs
20
- * are not mutated; a deep-enough clone of touched slots is returned.
21
- */
22
- export declare function applyMapping(components: RawComponentDefinition[], edges: CompositionEdge[]): ApplyMappingResult;
@@ -1,34 +0,0 @@
1
- export declare const CANDIDATE_NAME_PATTERNS: RegExp[];
2
- export declare const CANDIDATE_CONTENT_MARKERS: string[];
3
- export declare const CANDIDATE_TOKEN_BUDGET = 6000;
4
- /**
5
- * Token ceiling for the candidate set INLINED into a single agent prompt.
6
- * Sized to stay under a 200k-context model once the agent's own system prompt
7
- * + tool definitions (~105k observed) are added, so a large design system
8
- * (hundreds of components → many matched files) can't overflow the request and
9
- * fail resolution. Files beyond the budget are dropped (with a warning), not
10
- * silently truncated. Distinct from `CANDIDATE_TOKEN_BUDGET`, which sizes the
11
- * unused per-batch chunking.
12
- */
13
- export declare const PROMPT_CANDIDATE_TOKEN_BUDGET = 80000;
14
- export type CandidateFile = {
15
- path: string;
16
- content: string;
17
- };
18
- export type SelectedCandidate = CandidateFile & {
19
- reason: string;
20
- };
21
- export declare function selectCandidateFiles(files: CandidateFile[]): SelectedCandidate[];
22
- /**
23
- * Cap a candidate set to what fits in a single agent prompt (see
24
- * `PROMPT_CANDIDATE_TOKEN_BUDGET`). Files are kept smallest-first so the budget
25
- * admits the most declarations; deterministic tie-break by path. Returns the
26
- * kept files plus the paths dropped so the caller can warn (silent truncation
27
- * would read as "resolved everything" when it didn't).
28
- */
29
- export declare function capCandidatesToPromptBudget<T extends CandidateFile>(files: T[], budget?: number): {
30
- kept: T[];
31
- dropped: T[];
32
- };
33
- export declare function sliceDeclarationRegions(content: string, markers?: string[], window?: number): string[];
34
- export declare function batchCandidates(files: CandidateFile[], budget?: number): CandidateFile[][];
@@ -1,18 +0,0 @@
1
- /**
2
- * Derive the `input_hash` for a composition-cache entry (stored in the pipeline
3
- * DB's `composition_cache` table). Content-addresses the candidate file set
4
- * (order-independent) plus the producing agent, so a re-run over unchanged
5
- * files reuses the (token-costly) agent output.
6
- *
7
- * Content-hashing — not mtime — means a no-op `git checkout` that only bumps
8
- * mtime is still a hit. Prompt/skill changes are handled by the `cli_version`
9
- * column on the row (see `getCliCacheVersion`), so no separate resolver-version
10
- * constant is needed here.
11
- */
12
- export declare function buildCompositionInputHash(input: {
13
- files: Array<{
14
- path: string;
15
- content: string;
16
- }>;
17
- agent: string;
18
- }): string;
@@ -1,17 +0,0 @@
1
- /**
2
- * The CLI-owned composition interchange format (spec T1).
3
- *
4
- * `CompositionEdge[]` is the flat internal runtime view, one edge per
5
- * parent→child relationship, carrying optional `slot` (T7), `confidence`,
6
- * and `provenance`. It is easier to merge and dedupe across sources (T2).
7
- */
8
- export type EdgeProvenance = 'typed-slot' | 'structural' | 'manifest' | 'doc' | `adapter:${string}` | 'agent';
9
- export type CompositionEdge = {
10
- parent: string;
11
- child: string;
12
- /** Optional named slot (T7). Default slot when omitted. */
13
- slot?: string;
14
- /** 1–5 scale, same as select/reject agent tools. */
15
- confidence?: number;
16
- provenance: EdgeProvenance;
17
- };
@@ -1,49 +0,0 @@
1
- import type { CompositionEdge } from './interchange-schema.js';
2
- type CandidateFile = {
3
- path: string;
4
- content: string;
5
- };
6
- type ComponentRef = {
7
- name: string;
8
- sourcePath?: string;
9
- };
10
- /**
11
- * Prompt-injection safeguard for this signal: both parsers below are plain
12
- * deterministic code, never an LLM prompt. `manifest.json`/`AGENTS.md`
13
- * content is attacker-adjacent (Figma-authored / free-form prose respectively)
14
- * but it only ever flows through JSON field access and a fixed regex, then is
15
- * validated against the real `componentNames` allowlist before an edge is
16
- * emitted — there is no path from this file's content to model instructions.
17
- */
18
- /** Figma/manifest names are kebab-case (`blue-accordion-item`); React exports are PascalCase. */
19
- export declare function kebabToPascal(name: string): string;
20
- /**
21
- * Deterministic parse of a Figma-exported `manifest.json` — no LLM involved.
22
- * Schema (confirmed against a real design-system manifest):
23
- * { component: { name: "blue-accordion" },
24
- * variantsMeta: { componentPropertyDefinitions: {
25
- * "Slot#1533:33": { type: "SLOT", preferredValues: [{ name: "blue-accordion-item" }] }
26
- * } } }
27
- * The manifest's own `component.name` identifies its owning/parent component
28
- * (more robust than inferring from directory proximity, since manifest.json
29
- * typically lives one level below the component's source file, e.g. in a
30
- * sibling `design/` directory).
31
- */
32
- export declare function collectManifestEdges(files: CandidateFile[], componentNames: ReadonlySet<string>): CompositionEdge[];
33
- /**
34
- * Deterministic parse of a component-level `AGENTS.md` — no LLM involved.
35
- * Only a bold-backtick component mention (`` **`ComponentName`** ``) on a
36
- * line that ALSO carries a composition keyword is accepted, e.g. "Direct
37
- * **`AccordionItem`** children only." A bare cross-reference mention (no
38
- * composition keyword on the same line, e.g. "see `other-component`") is
39
- * rejected — it isn't asserting a parent-child relationship.
40
- *
41
- * The doc's owning component is resolved by directory colocation: the
42
- * component whose `sourcePath` sits in the same directory as the doc file
43
- * (the real-world convention — `<component>/AGENTS.md` next to
44
- * `<component>/Component.tsx`).
45
- */
46
- export declare function collectAgentsDocEdges(files: CandidateFile[], components: ComponentRef[], componentNames: ReadonlySet<string>): CompositionEdge[];
47
- /** Both deterministic sources, combined for the `extraEdges` wiring in command.ts. */
48
- export declare function collectManifestDocEdges(files: CandidateFile[], components: ComponentRef[], componentNames: ReadonlySet<string>): CompositionEdge[];
49
- export {};
@@ -1,19 +0,0 @@
1
- import type { CompositionEdge, EdgeProvenance } from './interchange-schema.js';
2
- export type EdgeConflict = {
3
- parent: string;
4
- child: string;
5
- winner: EdgeProvenance;
6
- loser: EdgeProvenance;
7
- };
8
- export type MergeResult = {
9
- edges: CompositionEdge[];
10
- conflicts: EdgeConflict[];
11
- };
12
- /**
13
- * Union all edges, resolving conflicts by provenance rank. A conflict is two
14
- * edges that share `parent::child` but disagree on existence-detail (here:
15
- * slot placement). The higher-ranked edge wins; the loser is recorded (never
16
- * silently dropped) so the review UI can surface it. Identical edges (same
17
- * parent/child/slot) collapse to the highest-ranked copy with no conflict.
18
- */
19
- export declare function mergeEdges(all: CompositionEdge[]): MergeResult;
@@ -1,16 +0,0 @@
1
- import type { CompositionEdge } from './interchange-schema.js';
2
- /**
3
- * Lenient JSONL parser for the composition-mapping agent's tool-call output
4
- * (spec T4). Mirrors `parseSelectToolCallLines` / `parseToolCallLines` in
5
- * `@contentful/experience-design-system-generation`'s `agent-runner.ts`: one JSON object per line, each with a `tool`
6
- * field from a fixed allowlist. A line that fails JSON.parse or validation is
7
- * DROPPED into `warnings[]` (with a reason) and parsing CONTINUES — no retry,
8
- * no throw. Non-`{` prose and blank lines are skipped silently.
9
- */
10
- export type ParseMapEdgesResult = {
11
- edges: CompositionEdge[];
12
- warnings: string[];
13
- };
14
- export declare function parseMapEdges(raw: string, opts: {
15
- componentNames: Set<string>;
16
- }): ParseMapEdgesResult;
@@ -1,3 +0,0 @@
1
- /** Resolve a bundled composition prompt from the package-root prompts directory. */
2
- export declare function resolvePromptPath(fileName: string): string;
3
- export declare function loadPrompt(fileName: string): string;
@@ -1,10 +0,0 @@
1
- export type CompositionCliOptions = {
2
- /** `--composition-refresh` — force edge emission to run even over resolved residue. */
3
- compositionRefresh?: boolean;
4
- /** `--no-cache` — force the composition agent to rerun with the rest of the pipeline. */
5
- noCache?: boolean;
6
- };
7
- export type ResolvedCompositionSources = {
8
- forceAgent: boolean;
9
- };
10
- export declare function resolveCompositionSources(opts: CompositionCliOptions): ResolvedCompositionSources;
@@ -1,59 +0,0 @@
1
- import type { RawComponentDefinition } from '../../types.js';
2
- import type { CompositionEdge } from './interchange-schema.js';
3
- import { type EdgeConflict } from './merge-edges.js';
4
- export type ResolveMappingResult = {
5
- components: RawComponentDefinition[];
6
- edges: CompositionEdge[];
7
- conflicts: EdgeConflict[];
8
- warnings: string[];
9
- };
10
- /**
11
- * Orchestrate composition-edge acquisition and enrichment.
12
- *
13
- * Sources by rank: typed-slot / "code slots" (2) > structural usage evidence
14
- * (3) > manifest (4) > doc (5) > adapter-resolved / extraEdges (6) >
15
- * edge-emitting agent (7). Manifest/doc edges are computed deterministically outside
16
- * this function (see manifest-doc-evidence.ts) and joined via `extraEdges`.
17
- * ALL sources — including the code slots already on the incoming components —
18
- * are fed into one ranked merge and unioned; non-conflicting edges from every
19
- * source survive, and on a conflict (same parent+child, different slot) the
20
- * higher-rank source wins and the loser is recorded. The edge-emitting agent runs only when
21
- * `forceAgent` is set OR there is residue a higher-rank source
22
- * didn't cover (routing/cost optimization) — `forceAgent` bypasses that
23
- * suppression but never changes rank.
24
- *
25
- * `runAgentFn` is injected (returns the agent's raw stdout) so this is
26
- * testable without spawning a subprocess.
27
- */
28
- export declare function resolveMapping(input: {
29
- components: RawComponentDefinition[];
30
- forceAgent?: boolean;
31
- files: Array<{
32
- path: string;
33
- content: string;
34
- }>;
35
- runAgentFn: (opts: {
36
- prompt: string;
37
- files: Array<{
38
- path: string;
39
- content: string;
40
- }>;
41
- }) => Promise<string>;
42
- buildPrompt?: (files: Array<{
43
- path: string;
44
- content: string;
45
- }>, componentNames: string[]) => string;
46
- /**
47
- * Custom instruction preamble (from `--prompt composition=...`). Replaces the
48
- * default guidance line ONLY; the machine-readable output contract + the
49
- * component-name allowlist + candidate files are always appended so the
50
- * JSONL parser keeps working regardless of the override.
51
- */
52
- promptOverride?: string;
53
- /**
54
- * Pre-resolved edges from an external source (e.g. manifest or documentation)
55
- * path). They join the ranked merge at their own provenance rank alongside
56
- * code slots and other automatic mapping sources.
57
- */
58
- extraEdges?: CompositionEdge[];
59
- }): Promise<ResolveMappingResult>;
@@ -1,27 +0,0 @@
1
- /** A directed edge in the slot-dependency graph. */
2
- export interface SlotEdge {
3
- fromComponent: string;
4
- slotName: string;
5
- toComponent: string;
6
- }
7
- /** A single elementary cycle, with `path[0] === path[path.length - 1]`. */
8
- export interface SlotCycle {
9
- path: string[];
10
- edges: SlotEdge[];
11
- }
12
- /** Input shape mirroring the slot definition on CDFComponentEntry. */
13
- export interface ComponentSlotInfo {
14
- name: string;
15
- slots: Array<{
16
- name: string;
17
- allowedComponents?: string[];
18
- }>;
19
- }
20
- export declare function findSlotCycles(components: ComponentSlotInfo[]): SlotCycle[];
21
- export declare function suggestCycleBreakEdge(cycle: SlotCycle, allCycles: SlotCycle[]): SlotEdge;
22
- export declare function formatCyclePath(cycle: SlotCycle, maxHops?: number): string;
23
- export interface CyclePathSegment {
24
- kind: 'component' | 'slot' | 'arrow';
25
- text: string;
26
- }
27
- export declare function formatCyclePathSegments(cycle: SlotCycle, maxHops?: number): CyclePathSegment[];
@@ -1,7 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function resolveExtractNoCache(opts: {
3
- cache?: boolean;
4
- noCache?: boolean;
5
- }): boolean;
6
- export declare function collectSourceFiles(directory: string, onProgress?: (scannedCount: number) => void): Promise<string[]>;
7
- export declare function registerInternalExtractCommand(program: Command): void;
@@ -1,3 +0,0 @@
1
- export declare function fuzzyMatches(query: string, text: string): boolean;
2
- export declare function fuzzyScore(query: string, text: string): number | null;
3
- export declare function fuzzyFilter(query: string, candidates: string[]): string[];
@@ -1,8 +0,0 @@
1
- import type { Closure, NodeStatus } from './composite-closure.js';
2
- export interface RenderStatus {
3
- status: NodeStatus;
4
- isOwn: boolean;
5
- sourceComponents: string[];
6
- }
7
- export declare function computeRenderStatuses(closure: Closure, directIssues: Map<string, NodeStatus>): Map<string, RenderStatus>;
8
- export declare function pickDrillTarget(ancestor: string, closure: Closure, directIssues: Map<string, NodeStatus>): string | null;
@@ -1,29 +0,0 @@
1
- import type { ComponentGraphNode } from './composite-closure.js';
2
- export interface LineageParentEdge {
3
- parent: string;
4
- slotName: string;
5
- }
6
- export interface LineageEdge {
7
- from: string;
8
- slotName: string;
9
- to: string;
10
- }
11
- export type LineageChain = LineageEdge[];
12
- export declare function findDirectParents(target: string, components: ComponentGraphNode[]): LineageParentEdge[];
13
- export declare function findAllAncestors(target: string, components: ComponentGraphNode[]): Set<string>;
14
- export declare function findAllAncestorChains(target: string, components: ComponentGraphNode[]): LineageChain[];
15
- export interface AncestorTreeNode {
16
- name: string;
17
- incomingSlotName?: string;
18
- depth: number;
19
- shared: boolean;
20
- cycle: boolean;
21
- parents: AncestorTreeNode[];
22
- }
23
- export declare function buildAncestorTree(target: string, components: ComponentGraphNode[]): AncestorTreeNode;
24
- export interface AncestorTreeLine {
25
- text: string;
26
- jumpTarget?: string;
27
- depth: number;
28
- }
29
- export declare function renderAncestorTree(node: AncestorTreeNode): AncestorTreeLine[];
@@ -1,3 +0,0 @@
1
- import type { ComponentGraphNode } from './composite-closure.js';
2
- export declare function computeDirectNeighborhood(matches: Iterable<string>, graph: ComponentGraphNode[]): Set<string>;
3
- export declare function findAllAncestors(target: string, graph: ComponentGraphNode[]): Set<string>;