@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 +13 -26
- package/dist/package.json +1 -1
- package/dist/src/credentials-store.d.ts +0 -7
- package/dist/src/import/orchestrator.d.ts +0 -2
- package/dist/src/import/tui/WizardApp.d.ts +1 -3
- package/dist/src/import/tui/final-review-host.d.ts +1 -3
- package/dist/src/import/tui/scope-gate-host.d.ts +1 -3
- package/dist/src/index.js +900 -1685
- package/dist/src/lib/command-options.d.ts +0 -1
- package/dist/src/runs/modify-launcher.d.ts +0 -4
- package/dist/src/runs/store.d.ts +0 -5
- package/package.json +6 -6
- package/dist/src/import/strip-allowed-components.d.ts +0 -18
- package/dist/src/import/tui/steps/AtomicGenerateReviewStep.d.ts +0 -28
- package/dist/src/import/tui/steps/AtomicScopeGateStep.d.ts +0 -3
- package/dist/src/lib/composition-mode.d.ts +0 -30
- package/dist/src/setup/composition-mode-prompt.d.ts +0 -14
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.
|
|
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
|
-
|
|
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 (
|
|
125
|
-
|
|
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
|
-
| `--
|
|
185
|
-
| `--
|
|
186
|
-
| `--composition-
|
|
187
|
-
| `--
|
|
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
|
-
| `--
|
|
289
|
-
| `--
|
|
290
|
-
| `--composition-
|
|
291
|
-
| `--
|
|
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
|
-
|
|
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,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,
|
|
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,
|
|
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,
|
|
21
|
+
export declare function ScopeGateHost({ components, autoAccept, onConfirm, onQuit, aiFilterStatus, aiFilterProgress, aiFilterError, onCancelAutoFilter, }: ScopeGateHostProps): React.ReactElement;
|