@contentful/experience-design-system-cli 2.34.3-dev-build-e63f79c.0 → 2.34.3

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.
package/README.md CHANGED
@@ -36,20 +36,11 @@ All intermediate data flows through a local SQLite session database (`~/.content
36
36
 
37
37
  ## Composite components & composition
38
38
 
39
- A **composite component** is one that renders other components inside it — a `Card` that slots a `Button` and an `Icon`, a `Tabs` that slots `Tab` panels. When you import composite components, the CLI can populate each slot's `$allowedComponents` so the parent→child relationships survive into Contentful.
40
-
41
- ### Atomic vs. composite
42
-
43
- Imports are **atomic by default** — flat components, no embedded hierarchy. This is the right choice when you just want each component registered on its own. Opt into hierarchy resolution with `--composite` (or any composition flag, which implies it).
44
-
45
- | Mode | Flag | Behavior |
46
- |---|---|---|
47
- | Atomic | `--atomic` (default) | Flat import; composition stripped before push |
48
- | Composite | `--composite` | Resolve and import the parent→child hierarchy |
39
+ A **composite component** is one that renders other components inside it — a `Card` that slots a `Button` and an `Icon`, a `Tabs` that slots `Tab` panels. The CLI populates each slot's `$allowedComponents` so the parent→child relationships survive into Contentful.
49
40
 
50
41
  ### How composition is resolved
51
42
 
52
- Under `--composite`, relationships are resolved from the highest-confidence source available, in this precedence order:
43
+ Relationships are resolved from the highest-confidence source available, in this precedence order:
53
44
 
54
45
  1. **Typed slots (code)** — slots the source already declares, e.g. React `ReactElement<XProps>` / `children`, Svelte `Snippet<[XProps]>`, or an explicit `@allowedComponents` JSDoc tag. Fully deterministic; picked up automatically.
55
46
  2. **Mapping map** — a hand-authored parent→children interchange map you feed with `--composition-map <path>`. Use `--generate-map <path>` to emit a skeleton from whatever was resolved, then hand-edit it and feed it back.
@@ -121,8 +112,8 @@ experiences import [flags]
121
112
  ```
122
113
  welcome
123
114
 
124
- extracting — runs analyze extract (atomic by default; resolves composition
125
- under --composite, see below); spawns generate in parallel (prefetch)
115
+ extracting — runs analyze extract (resolves composition when a source
116
+ is provided; see below); spawns generate in parallel (prefetch)
126
117
 
127
118
  [auto-filter] — analyze select-agent runs automatically (skip with --no-auto-filter)
128
119
 
@@ -181,12 +172,10 @@ Pass `--select-prompt-path <path>` and/or `--generate-prompt-path <path>` to swa
181
172
  | `--model <name>` | agent default | Model name |
182
173
  | `--tokens <path>` | — | DTCG `tokens.json` to push alongside generated components |
183
174
  | `--auto-accept-scope` | off | Accept all extracted components without prompting (required for non-TTY without other headless flags) |
184
- | `--atomic` | **default** | Flat import, no embedded-component hierarchy (composition stripped on push) |
185
- | `--composite` | — | Import the embedded-component hierarchy (any composition flag implies this) |
186
- | `--composition-map <path>` | — | Consume a hand-authored parent→children interchange map (implies `--composite`) |
187
- | `--generate-map <path>` | — | Also write a composition-map skeleton from the resolved composition (implies `--composite`) |
188
- | `--composition-agent` | — | Opt into agentic resolution when deterministic sources find no groups (implies `--composite`) |
189
- | `--composition-refresh` | — | Bypass the composition cache and re-resolve from scratch, forcing the agent to run (implies `--composite`) |
175
+ | `--composition-map <path>` | | Consume a hand-authored parent→children interchange map |
176
+ | `--generate-map <path>` | — | Write a composition-map skeleton from the resolved composition |
177
+ | `--composition-agent` | — | Opt into agentic resolution when deterministic sources find no groups |
178
+ | `--composition-refresh` | — | Bypass the composition cache and re-resolve from scratch, forcing the agent to run |
190
179
  | `--composition-agent-mode <mode>` | `parser` | `parser` (agent writes a sandboxed parser) or `edges` (agent lists edges directly) |
191
180
  | `--prompt <stage=value>` | — | Override a stage prompt (repeatable); value is a file path or literal text, e.g. `--prompt composition=./p.md` |
192
181
  | `--auto-reject-cycles` | off (fail loud) | Auto-reject components in slot cycles and retry, instead of stopping with the cycle path |
@@ -285,12 +274,10 @@ experiences analyze extract --project <path> [--dir <src-dir>] [composition flag
285
274
  | `--project <path>` | _(required)_ | Path to the project root |
286
275
  | `--dir <path>` | `src` (falls back to project root) | Source directory relative to project root |
287
276
  | `--resolve-unreachable <mode>` | `auto` | Retry pass for unresolved Svelte `Props` types: `auto`, `always`, or `never` |
288
- | `--atomic` | **default** | Skip composition resolution flat components only |
289
- | `--composite` | — | Resolve embedded-component composition (any composition flag implies this) |
290
- | `--composition-map <path>` | — | Consume a hand-authored parent→children interchange map (implies `--composite`) |
291
- | `--generate-map <path>` | — | Write a skeleton interchange map from the resolved composition (implies `--composite`) |
292
- | `--composition-agent` | — | Opt into agentic resolution when deterministic sources find no groups (implies `--composite`) |
293
- | `--composition-refresh` | — | Bypass the composition cache and re-resolve from scratch, forcing the agent to run (implies `--composite`) |
277
+ | `--composition-map <path>` | | Consume a hand-authored parent→children interchange map |
278
+ | `--generate-map <path>` | — | Write a skeleton interchange map from the resolved composition |
279
+ | `--composition-agent` | — | Opt into agentic resolution when deterministic sources find no groups |
280
+ | `--composition-refresh` | — | Bypass the composition cache and re-resolve from scratch, forcing the agent to run |
294
281
  | `--composition-agent-mode <mode>` | `parser` | `parser` (agent writes a sandboxed parser — deterministic) or `edges` (agent lists edges directly) |
295
282
  | `--agent <name>` | saved by setup | Coding agent for composition resolution: `claude`, `codex`, `opencode`, `cursor`, `copilot` |
296
283
  | `--prompt <stage=value>` | — | Override a stage prompt (repeatable); value is a file path or literal text, e.g. `--prompt composition=./p.md` |
@@ -301,7 +288,7 @@ Writes extracted components to the session database and prints `session=<id>` to
301
288
 
302
289
  The deterministic non-authorable filter drops infrastructure components with no authoring surface (Context providers, refs-only wrappers, etc.); each drop is reported as a warning so the operator can audit.
303
290
 
304
- Extraction is **atomic by default** — flat components, no embedded hierarchy. See [Composite components & composition](#composite-components--composition) for how `--composite` and the composition flags resolve parent→child relationships.
291
+ See [Composite components & composition](#composite-components--composition) for how the composition flags resolve parent→child relationships.
305
292
 
306
293
  ---
307
294
 
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/experience-design-system-cli",
3
- "version": "2.34.3-dev-build-e63f79c.0",
3
+ "version": "2.34.3",
4
4
  "description": "Contentful Experiences design system import CLI",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,4 +1,3 @@
1
- import { type CompositionMode } from './lib/composition-mode.js';
2
1
  export type ExperiencesCredentials = {
3
2
  spaceId: string;
4
3
  environmentId: string;
@@ -15,12 +14,6 @@ export type ExperiencesCredentials = {
15
14
  debug?: boolean;
16
15
  /** Persisted opt-out for anonymous CLI usage analytics, set via `experiences setup`. */
17
16
  analyticsDisabled?: boolean;
18
- /**
19
- * Feature (atomic mode): default composition mode. `atomic` (default) imports
20
- * flat components with no embedded-component hierarchy; `composite` opts into
21
- * the slot-graph machinery. Resolved `flag > env > this > default`.
22
- */
23
- compositionMode?: CompositionMode;
24
17
  };
25
18
  /**
26
19
  * Read persisted Contentful credentials.
@@ -1,4 +1,3 @@
1
- import type { CompositionMode } from '../lib/composition-mode.js';
2
1
  export interface PipelineOptions {
3
2
  project: string;
4
3
  out: string;
@@ -28,7 +27,6 @@ export interface PipelineOptions {
28
27
  /** When true, auto-reject cycle participants and retry push instead of surfacing an error. */
29
28
  autoRejectCycles?: boolean;
30
29
  allowDeletions?: boolean;
31
- compositionMode?: CompositionMode;
32
30
  compositionMap?: string;
33
31
  compositionAgent?: boolean;
34
32
  compositionAgentMode?: string;
@@ -2,7 +2,6 @@ import React from 'react';
2
2
  import { type RunPickerSelection } from '../../runs/run-picker.js';
3
3
  import type { RunRecord } from '../../runs/store.js';
4
4
  import { type ConflictMode } from '../../runs/save-path-resolver.js';
5
- import type { CompositionMode } from '../../lib/composition-mode.js';
6
5
  export declare function buildSelectAgentArgs(opts: {
7
6
  sessionId: string;
8
7
  agent: string;
@@ -59,7 +58,6 @@ export type WizardAppProps = {
59
58
  host?: string;
60
59
  autoAcceptScope?: boolean;
61
60
  autoRejectCycles?: boolean;
62
- compositionMode?: CompositionMode;
63
61
  compositionMap?: string;
64
62
  compositionAgent?: boolean;
65
63
  compositionAgentMode?: string;
@@ -86,4 +84,4 @@ export type WizardAppProps = {
86
84
  onRunPicked?: (selection: RunPickerSelection) => void;
87
85
  allowDeletions?: boolean;
88
86
  };
89
- export declare function WizardApp({ initialSpaceId, initialEnvironmentId, initialCmaToken, initialHost, initialAgent, initialModel, bedrock, initialProjectPath, host, autoAcceptScope, autoRejectCycles, compositionMode, compositionMap, compositionAgent, compositionAgentMode, compositionRefresh, generateMap, promptOverrides, noCache, autoFilter, livePreview, noPush, noSave, outDirOverride, onConflictMode, selectPromptPath, generatePromptPath, skipMapTokens, seedExtractSessionId, seedGenerateSessionId, seedTokenSessionId, seedTokensPath, initialStep, initialRawTokensPath, initialRuns, onRunPicked, allowDeletions, }?: WizardAppProps): React.ReactElement;
87
+ export declare function WizardApp({ initialSpaceId, initialEnvironmentId, initialCmaToken, initialHost, initialAgent, initialModel, bedrock, initialProjectPath, host, autoAcceptScope, autoRejectCycles, compositionMap, compositionAgent, compositionAgentMode, compositionRefresh, generateMap, promptOverrides, noCache, autoFilter, livePreview, noPush, noSave, outDirOverride, onConflictMode, selectPromptPath, generatePromptPath, skipMapTokens, seedExtractSessionId, seedGenerateSessionId, seedTokenSessionId, seedTokensPath, initialStep, initialRawTokensPath, initialRuns, onRunPicked, allowDeletions, }?: WizardAppProps): React.ReactElement;
@@ -1,10 +1,8 @@
1
1
  import React from 'react';
2
- import type { CompositionMode } from '../../lib/composition-mode.js';
3
2
  import type { ReviewStepProps } from './review-step-props.js';
4
3
  export type FinalReviewHostProps = Omit<ReviewStepProps, 'extractSessionId'> & {
5
4
  extractSessionId: string | null;
6
5
  generatedCount: number;
7
6
  autoAccept: boolean;
8
- compositionMode?: CompositionMode;
9
7
  };
10
- export declare function FinalReviewHost({ extractSessionId, tokenSessionId, generatedCount, autoAccept, compositionMode, onFinalize, onQuit, livePreview, spaceId, environmentId, cmaToken, host, tokensPath, initialFinalizeError, allowDeletions, }: FinalReviewHostProps): React.ReactElement;
8
+ export declare function FinalReviewHost({ extractSessionId, tokenSessionId, generatedCount, autoAccept, onFinalize, onQuit, livePreview, spaceId, environmentId, cmaToken, host, tokensPath, initialFinalizeError, allowDeletions, }: FinalReviewHostProps): React.ReactElement;
@@ -1,12 +1,10 @@
1
1
  import React from 'react';
2
2
  import type { ScopeComponent } from './steps/ScopeGateStep.js';
3
- import type { CompositionMode } from '../../lib/composition-mode.js';
4
3
  export type { ScopeComponent };
5
4
  type AutoFilterStatus = 'idle' | 'running' | 'complete' | 'cancelled' | 'failed';
6
5
  export type ScopeGateHostProps = {
7
6
  components: ReadonlyArray<ScopeComponent>;
8
7
  autoAccept: boolean;
9
- compositionMode?: CompositionMode;
10
8
  onConfirm: (decisions: {
11
9
  accepted: string[];
12
10
  rejected: string[];
@@ -20,4 +18,4 @@ export type ScopeGateHostProps = {
20
18
  aiFilterError?: string | null;
21
19
  onCancelAutoFilter?: () => void;
22
20
  };
23
- export declare function ScopeGateHost({ components, autoAccept, compositionMode, onConfirm, onQuit, aiFilterStatus, aiFilterProgress, aiFilterError, onCancelAutoFilter, }: ScopeGateHostProps): React.ReactElement;
21
+ export declare function ScopeGateHost({ components, autoAccept, onConfirm, onQuit, aiFilterStatus, aiFilterProgress, aiFilterError, onCancelAutoFilter, }: ScopeGateHostProps): React.ReactElement;