@contentful/experience-design-system-cli 2.34.2-dev-build-3cd48dd.0 → 2.34.2-dev-build-286f2f7.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.
package/README.md CHANGED
@@ -18,17 +18,17 @@ The rest of this README uses `experiences`.
18
18
 
19
19
  There are two ways to use the CLI:
20
20
 
21
- 1. **`experiences import`** — the wizard. Drives the full pipeline (extract → AI select → scope-gate → internal generation → final-review → save/push) from a single command. Works in two modes: a full-screen interactive TUI in a real terminal and a non-interactive headless mode when you pass credentials or `--no-push`. **This is the recommended path for almost everyone.**
21
+ 1. **`experiences import`** — the wizard. Drives the full pipeline (extract → AI select → scope-gate → generate → final-review → save/push) from a single command. Works in two modes: a full-screen interactive TUI in a real terminal, and a non-interactive headless mode when you pass `--auto-accept-scope` plus credentials. **This is the recommended path for almost everyone.**
22
22
 
23
23
  2. **Standalone subcommands** — for piping into other tools, CI parity with the wizard, or for debugging individual steps:
24
24
 
25
25
  ```
26
- analyze extract → analyze select-agent → apply push
26
+ analyze extract → analyze select-agent → generate components → apply push
27
27
  ```
28
28
 
29
29
  `analyze select-agent` is the agent-driven selection step the wizard uses. You can replace it with `analyze select` for the older manual JsonEditor TUI.
30
30
 
31
- **Determinism boundary.** `analyze extract` is fully deterministic: ts-morph AST parsing produces the same component list and prop shape on every run, then a deterministic pre-classifier and a structural non-authorable filter shape the output. AI enters the pipeline at `analyze select-agent` and the import wizard's generation step. This split keeps the extracted artifact reproducible — if an extracted component looks wrong, the cause is in the rules, not in agent variability.
31
+ **Determinism boundary.** `analyze extract` is fully deterministic: ts-morph AST parsing produces the same component list and prop shape on every run, then a deterministic pre-classifier and a structural non-authorable filter shape the output. AI enters the pipeline at `analyze select-agent` and `generate components`, where coding agents make per-component decisions. This split keeps the extracted artifact reproducible — if an extracted component looks wrong, the cause is in the rules, not in agent variability.
32
32
 
33
33
  All intermediate data flows through a local SQLite session database (`~/.contentful/experience-design-system-cli/pipeline.db`). No JSON files are written between steps — each command reads its inputs from the session and writes its outputs back to it. Use `print` to export session data to JSON files on demand. The wizard additionally maintains a separate **runs.json** file (`~/.config/experiences/runs.json`) that records each successful wizard session so it can be replayed later with `--push-from-run` or `--modify`.
34
34
 
@@ -70,7 +70,7 @@ Because the agent path spawns a coding agent, it adds latency and cost and is be
70
70
 
71
71
  ### Slot cycles
72
72
 
73
- If the resolved graph contains a circular slot dependency (A slots B, B slots A), it is detected before push. `apply push` and the wizard's push path **refuse to send a manifest with cycles**; the cycle path is reported so you can break it.
73
+ If the resolved graph contains a circular slot dependency (A slots B, B slots A), it is detected before push. `apply push` and the wizard's push path **refuse to send a manifest with cycles**; the cycle path is reported so you can break it. In headless `import`, pass `--auto-reject-cycles` to auto-reject the components in a cycle and retry instead of failing.
74
74
 
75
75
  ---
76
76
 
@@ -78,7 +78,7 @@ If the resolved graph contains a circular slot dependency (A slots B, B slots A)
78
78
 
79
79
  ### Coding agent
80
80
 
81
- The import wizard's generation steps require a coding agent CLI in your `$PATH`. Choose one:
81
+ `generate components` (and `generate tokens`) requires a coding agent CLI in your `$PATH`. Choose one:
82
82
 
83
83
  | Agent | Install | Auth |
84
84
  |---|---|---|
@@ -94,7 +94,7 @@ The CLI invokes the agent non-interactively in a subprocess. If the binary is no
94
94
 
95
95
  ### Contentful credentials
96
96
 
97
- `apply push` and `import` (when pushing) require access to a Contentful space. Set these environment variables or pass the equivalent flags:
97
+ `apply preview`, `apply select`, `apply push`, and `import` (when pushing) require access to a Contentful space. Set these environment variables or pass the equivalent flags:
98
98
 
99
99
  ```bash
100
100
  export CONTENTFUL_MANAGEMENT_TOKEN=<your-cma-token> # required
@@ -114,7 +114,7 @@ In the wizard's credentials step you can press `[s] Skip` to save-only without p
114
114
  experiences import [flags]
115
115
  ```
116
116
 
117
- `experiences import` is the primary entry point. In a TTY it launches a full-screen wizard. In headless mode (with credentials or `--no-push`) it runs non-interactively. Without a supported headless entry point, it fails loud rather than hanging.
117
+ `experiences import` is the primary entry point. In a TTY it launches a full-screen wizard. In headless mode (any of `--auto-accept-scope`, `--skip-apply`, `--skip-analyze`, `--skip-generate`, `--yes`, `--dry-run`, or credential flags) it runs non-interactively. Without either, it fails loud rather than hanging.
118
118
 
119
119
  ### Wizard step machine
120
120
 
@@ -122,13 +122,13 @@ experiences import [flags]
122
122
  welcome
123
123
  ↓
124
124
  extracting — runs analyze extract (atomic by default; resolves composition
125
- under --composite, see below); spawns internal generation in parallel (prefetch)
125
+ under --composite, see below); spawns generate in parallel (prefetch)
126
126
  ↓
127
- [auto-filter] — analyze select-agent runs automatically
127
+ [auto-filter] — analyze select-agent runs automatically (skip with --no-auto-filter)
128
128
  ↓
129
129
  scope-gate — single human review gate: confirm AI selection, toggle components
130
130
  ↓
131
- credentials — operator types space-id / env / token (internal generation is already running)
131
+ credentials — operator types space-id / env / token (generate is already running)
132
132
  press [s] Skip to save-only without pushing
133
133
  ↓
134
134
  final-review — minimum-viable port of the JsonEditor; edit names, $description,
@@ -145,11 +145,11 @@ There is now a single human review gate (`scope-gate`) before generation; the le
145
145
 
146
146
  ### Configurable AI auto-filter
147
147
 
148
- The auto-filter (`analyze select-agent` invoked before scope-gate) is on by default. Override per-run with `--auto-filter`; the value selected in setup is persisted to `credentials.json` so subsequent runs default to your saved preference.
148
+ The auto-filter (`analyze select-agent` invoked before scope-gate) is on by default. Override per-run with `--auto-filter` / `--no-auto-filter`; the value last selected in the wizard is persisted to `credentials.json` so subsequent runs default to your last choice.
149
149
 
150
150
  ### Save-and-push default
151
151
 
152
- The push-decision-gate defaults to **save AND push**: it writes `components.json` and `tokens.json` to disk *and* pushes to Contentful in one step. Use `--no-push` to save without pushing. `--out-dir <path>` picks the save directory non-interactively (otherwise the wizard prompts).
152
+ The push-decision-gate defaults to **save AND push**: it writes `components.json` and `tokens.json` to disk *and* pushes to Contentful in one step. Use `--no-save` to push-only or `--no-push` to save-only. `--out-dir <path>` picks the save directory non-interactively (otherwise the wizard prompts).
153
153
 
154
154
  ### Replaying prior runs
155
155
 
@@ -157,8 +157,9 @@ After every successful wizard session, the CLI appends a record to `~/.config/ex
157
157
 
158
158
  | Flag | What it does |
159
159
  | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
160
- | `--push-from-run <id-or-path>` | Re-push the recorded session to Contentful without re-opening the wizard or writing to disk. Mutually exclusive with `--modify`, `--project`, and `--no-push`. |
161
- | `--modify <id-or-path>` | Re-open the wizard at final-review with the prior run pre-populated. |
160
+ | `--push-from-run <id-or-path>` | Re-push the recorded session to Contentful without re-opening the wizard or writing to disk. Mutually exclusive with `--modify`, `--project`, `--no-save`, `--no-push`. |
161
+ | `--modify <id-or-path>` | Re-open the wizard at final-review with the prior run pre-populated. Pair with `--overwrite` (save back to recorded `savePath`) or `--save-as-new` (prompt for new path). |
162
+ | `--overwrite` / `--save-as-new` | Save-mode selector for `--modify`; mutually exclusive with each other. |
162
163
 
163
164
  Both flags accept either a run id or a filesystem path that matches a recorded `savePath`.
164
165
 
@@ -170,14 +171,16 @@ Pass `--select-prompt-path <path>` and/or `--generate-prompt-path <path>` to swa
170
171
 
171
172
  | Flag | Default | Description |
172
173
  | --------------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
173
- | `--space-id <id>` | `CONTENTFUL_SPACE_ID` env / saved | Contentful space ID (required unless `--no-push`) |
174
+ | `--space-id <id>` | `CONTENTFUL_SPACE_ID` env / saved | Contentful space ID (required unless `--skip-apply` / `--no-push`) |
174
175
  | `--environment-id <id>` | `CONTENTFUL_ENVIRONMENT_ID` env | Contentful environment ID |
175
176
  | `--cma-token <token>` | `CONTENTFUL_MANAGEMENT_TOKEN` env | CMA personal access token |
176
177
  | `--project <path>` | `.` | Project root to analyze |
177
178
  | `--out <path>` | `<project>/.contentful` | Headless-mode output directory |
178
179
  | `--out-dir <path>` | _(prompt)_ | Save directory for `components.json` / `tokens.json`; bypasses inline save-path prompt |
179
- | `--agent <name>` | saved by setup / `claude` | Agent for `analyze select-agent` and internal generation |
180
+ | `--agent <name>` | saved by setup / `claude` | Agent for `analyze select-agent` and `generate components` |
180
181
  | `--model <name>` | agent default | Model name |
182
+ | `--tokens <path>` | — | DTCG `tokens.json` to push alongside generated components |
183
+ | `--auto-accept-scope` | off | Accept all extracted components without prompting (required for non-TTY without other headless flags) |
181
184
  | `--atomic` | **default** | Flat import, no embedded-component hierarchy (composition stripped on push) |
182
185
  | `--composite` | — | Import the embedded-component hierarchy (any composition flag implies this) |
183
186
  | `--composition-map <path>` | — | Consume a hand-authored parent→children interchange map (implies `--composite`) |
@@ -186,17 +189,35 @@ Pass `--select-prompt-path <path>` and/or `--generate-prompt-path <path>` to swa
186
189
  | `--composition-refresh` | — | Bypass the composition cache and re-resolve from scratch, forcing the agent to run (implies `--composite`) |
187
190
  | `--composition-agent-mode <mode>` | `parser` | `parser` (agent writes a sandboxed parser) or `edges` (agent lists edges directly) |
188
191
  | `--prompt <stage=value>` | — | Override a stage prompt (repeatable); value is a file path or literal text, e.g. `--prompt composition=./p.md` |
189
- | `--auto-filter` | persisted in `credentials.json` | Force AI auto-filter on; overrides the saved preference |
190
- | `--no-push` | push on | Run extract → scope-gate → internal generation → final-review and exit without pushing |
192
+ | `--auto-reject-cycles` | off (fail loud) | Auto-reject components in slot cycles and retry, instead of stopping with the cycle path |
193
+ | `--auto-filter` / `--no-auto-filter` | persisted in `credentials.json` | Force AI auto-filter on or off; overrides saved preference |
194
+ | `--no-live-preview` | live preview on | Skip the automatic preview re-run after each FieldEditor save |
195
+ | `--no-push` | push on | Run extract → scope-gate → generate → final-review and exit without pushing |
196
+ | `--no-save` | save on | Push without writing `components.json` / `tokens.json` to disk |
191
197
  | `--push-from-run <id-or-path>` | — | Re-push a prior run; never writes to disk |
192
198
  | `--modify <id-or-path>` | — | Re-open the wizard at final-review with a prior run loaded |
199
+ | `--overwrite` | — | With `--modify`: save back to recorded `savePath` |
200
+ | `--save-as-new` | — | With `--modify`: always save to a new path |
193
201
  | `--select-prompt-path <path>` | saved by setup | Custom `.md` skill prompt for `analyze select-agent` |
194
- | `--generate-prompt-path <path>` | saved by setup | Custom `.md` skill prompt for internal component generation |
195
- | `--skip-map-tokens` | — | Skip the `map tokens` step between internal generation and apply |
196
- | `--no-cache` | cache on | Bypass extract/select/internal-generation/map-tokens fine-grained caches and force re-run |
202
+ | `--generate-prompt-path <path>` | saved by setup | Custom `.md` skill prompt for `generate components` |
203
+ | `--select-all` | — | Headless: accept all extracted components (bypasses agentic select) |
204
+ | `--select <pattern>` | — | Headless: accept components matching pattern (repeatable; bypasses agentic select) |
205
+ | `--deselect <pattern>` | — | Headless: reject components matching pattern (repeatable; bypasses agentic select) |
206
+ | `--skip-analyze` | — | Reuse most recent `analyze extract` session |
207
+ | `--skip-generate` | — | Reuse most recent `generate components` session |
208
+ | `--print` | — | Headless: write `components.json` to `--out` after generation |
209
+ | `--skip-map-tokens` | — | Skip the `map tokens` step between generate and apply |
210
+ | `--skip-apply` | — | Stop after generate; do not push |
211
+ | `--no-cache` | cache on | Bypass extract/select/generate/map-tokens fine-grained caches and force re-run; forwarded to `analyze select-agent`, `generate components`, and `map tokens` |
212
+ | `--yes` | — | Skip interactive confirmation in `apply push` |
213
+ | `--verbose` | — | Show full agent output and all entity progress |
197
214
  | `--exclude-invalid` | off (fail loud) | Auto-reject components with validation errors instead of refusing to proceed |
215
+ | `--viewports <path>` | catch-all viewport | JSON file with viewport array (passed to `apply push`) |
198
216
  | `--host <url>` | `https://api.contentful.com` | Override API base URL |
217
+ | `--on-conflict <mode>` | _(prompt via `<SaveConflictGate>`)_ | Headless conflict resolution when a file already exists at the save path: `overwrite`, `skip`, or `fail`. Bypasses the wizard's interactive save-conflict gate. Mutex with `--no-save`. |
218
+ | `--print-prompt` | — | Print the generate prompt to stdout and exit. Replaces the prompt-print semantics of `--dry-run`. |
199
219
  | `--allow-deletions` | off (non-destructive) | Allow the push to delete remote ComponentTypes/DesignTokens missing from the manifest. Default skips them instead of deleting. Without this flag, preview responses suppress the removed-entity list and return a count instead; interactive confirm screens show an opt-out toggle (never opt-in) only when the flag is passed. Forwarded to headless subprocess pushes and `--push-from-run`. |
220
+ | `--dry-run` | _(deprecated)_ | Deprecated alias for `--print-prompt`. Emits a stderr deprecation notice; prompt-print semantics will be removed in a future release. |
200
221
 
201
222
  ### Run-picker at wizard start
202
223
 
@@ -210,7 +231,7 @@ The mount decision is deterministic — passing any of `--push-from-run`, `--mod
210
231
 
211
232
  ### `--modify` end-to-end behavior
212
233
 
213
- `--modify <id-or-path>` is fully wired: the wizard loads the recorded session from `pipeline.db` (skipping extract and internal generation), pre-fills credentials from the run record's `pushedTo` target, and lands directly on `final-review` — or on `scope-gate` if the run record carries an `entryStep` hint.
234
+ `--modify <id-or-path>` is fully wired: the wizard loads the recorded session from `pipeline.db` (skipping extract and generate entirely), pre-fills credentials from the run record's `pushedTo` target, and lands directly on `final-review` — or on `scope-gate` if the run record carries an `entryStep` hint. Pair with `--overwrite` or `--save-as-new` to control the save target.
214
235
 
215
236
  ### `--model` and `--agent` overrides
216
237
 
@@ -332,10 +353,48 @@ experiences analyze select-agent [--agent <name>] [--session <id>]
332
353
  | `--show-rationale` | — | Read-only mode. Print the recorded accept / reject rationale for every component in the session and exit. Reads `raw_components.reject_reason` from the pipeline DB — no LLM call, no schema change. |
333
354
  | `--json` | — | With `--show-rationale`: emit the rationale rows as JSON for scripting. |
334
355
 
335
- Decisions are written to the same review state file used by `analyze select`, so the import wizard's generation step picks them up automatically. Each `(component-hash, prompt-hash, cli-version)` triple is cached; changing the prompt file via `--select-prompt-path` already busts the corresponding cache entries.
356
+ Decisions are written to the same review state file used by `analyze select`, so `generate components` picks them up automatically. Each `(component-hash, prompt-hash, cli-version)` triple is cached; changing the prompt file via `--select-prompt-path` already busts the corresponding cache entries.
336
357
 
337
358
  `--show-rationale` is a separate read-only mode — it does not invoke the agent and is safe to run against a completed session at any time. Pair with `--session <id>` to target a specific session; otherwise it auto-resolves to the most recent completed `analyze extract`.
338
359
 
360
+ ---
361
+
362
+ ### `generate components`
363
+
364
+ Invoke a coding agent to generate CDF component definitions. Results are stored in the session database.
365
+
366
+ ```bash
367
+ experiences generate components [--agent <name>] [--session <id>]
368
+ ```
369
+
370
+ | Option | Default | Description |
371
+ |---|---|---|
372
+ | `--agent <name>` | saved by setup | Agent: `claude`, `codex`, `opencode`, `cursor`, or `copilot` |
373
+ | `--session <id>` | most recent completed `analyze extract` | Session ID from `analyze extract` |
374
+ | `--tokens <path>` | — | Path to `tokens.json` for token-linked prop resolution |
375
+ | `--token-map <path>` | — | Path to `token-name-map.json` sidecar |
376
+ | `--model <name>` | agent default | Model to use |
377
+ | `--verbose` | — | Show full agent output |
378
+ | `--dry-run` | — | Print the prompt without invoking the agent |
379
+ | `--generate-prompt-path <path>` | saved by setup | Custom `.md` skill prompt; emits a banner at invocation |
380
+ | `--no-cache` | cache on | Bypass all fine-grained caches and force re-run |
381
+
382
+ Raw components are loaded from the session database and embedded directly in the prompt — no intermediate file is read. The agent emits one JSON tool-call object per line; per-component results (CDF body + LLM rationale + source location) are persisted to the session DB.
383
+
384
+ ---
385
+
386
+ ### `generate components edit` / `generate tokens edit`
387
+
388
+ Non-interactive correction of generated output via `--accept-all`, `--reject`, or `--patch`. The interactive TUI variant is not currently shipped.
389
+
390
+ ---
391
+
392
+ ### `generate tokens`
393
+
394
+ Same shape as `generate components`, plus `--raw-tokens <path>`.
395
+
396
+ ---
397
+
339
398
  ### `print components` / `print tokens` / `print validate`
340
399
 
341
400
  Unchanged from prior releases.
@@ -350,17 +409,19 @@ experiences print validate [--components <path>] [--tokens <path>]
350
409
 
351
410
  ---
352
411
 
353
- ### `apply push`
412
+ ### `apply preview` / `apply select` / `apply push`
354
413
 
355
414
  These subcommands are the non-wizard route to the same diff and push logic. Flag surfaces are unchanged.
356
415
 
357
- `apply push` emits a Contentful webapp view URL for the imported components in its JSON summary (`viewUrl`) so callers can deep-link into the management UI after a successful push.
416
+ `apply push` and `apply select` now emit a Contentful webapp view URL for the imported components in their JSON summary (`viewUrl`) so callers can deep-link into the management UI after a successful push.
358
417
 
359
418
  ```bash
419
+ experiences apply preview --space-id <id> --environment-id <env> --session <id>
420
+ experiences apply select --space-id <id> --environment-id <env> --session <id>
360
421
  experiences apply push --space-id <id> --environment-id <env> --session <id> [--yes]
361
422
  ```
362
423
 
363
- Shared flags: `--components`, `--tokens`, `--session`, `--space-id`, `--environment-id`, `--cma-token`, `--host`, `--viewports`. `apply push` adds `--yes`, `--verbose`, `--force`, `--dry-run`, `--allow-deletions`. By default, remote ComponentTypes and DesignTokens missing from the pushed manifest are skipped, not deleted; pass `--allow-deletions` to restore the prior delete behavior.
424
+ Shared flags: `--components`, `--tokens`, `--session`, `--space-id`, `--environment-id`, `--cma-token`, `--host`, `--viewports`. `apply preview` adds `--include-unchanged`. `apply select` adds `--select-all`, `--select`, `--deselect`, `--force`, `--allow-deletions`. `apply push` adds `--yes`, `--verbose`, `--force`, `--dry-run`, `--allow-deletions`. By default, remote ComponentTypes and DesignTokens missing from the pushed manifest are skipped, not deleted; pass `--allow-deletions` to restore the prior delete behavior.
364
425
 
365
426
  Design tokens are written first (component types may reference token kinds). Each entity write is recorded in the session database atomically — interrupted pushes resume from where they left off.
366
427
 
@@ -388,7 +449,7 @@ Wizard run history is separate: `~/.config/experiences/runs.json`.
388
449
  - `NO_COLOR=1` suppresses all ANSI color output
389
450
  - Interactive views require both stdin and stdout to be TTYs and stdin to support raw mode. Read-only views fall back to plain or JSON output when those capabilities are unavailable; commands that require input stop with the relevant non-interactive flags in the error message.
390
451
  - On Windows, use Windows Terminal with PowerShell. Older ConEmu and cmd.exe hosts may not provide the raw-mode support the interactive UI needs.
391
- - To avoid the interactive UI, use `import` with credentials or `--no-push`, and use `apply push --yes` for a non-interactive push.
452
+ - To avoid the interactive UI, use the command's non-interactive options: `import --yes` (with credentials) or `import --no-push --auto-accept-scope`, `analyze select --select-all`, `apply select --select-all`, and `apply push --yes`.
392
453
 
393
454
  ---
394
455
 
package/bin/cli.js CHANGED
@@ -11,6 +11,7 @@ process.on("warning", (w) => {
11
11
  // Skipped when src/ doesn't exist (e.g. npm-installed users).
12
12
  import { existsSync, statSync, readdirSync } from "node:fs";
13
13
  import { execFileSync } from "node:child_process";
14
+ import { createRequire } from "node:module";
14
15
  import { fileURLToPath } from "node:url";
15
16
  import { dirname, resolve, join } from "node:path";
16
17
 
@@ -42,12 +43,19 @@ if (
42
43
  const distMtime = statSync(distEntry).mtimeMs;
43
44
  if (newestMtime(srcDir) > distMtime) {
44
45
  process.stderr.write("⚙ Source changed — rebuilding...\n");
45
- const tsc = join(pkgRoot, "node_modules", ".bin", "tsc");
46
+ // Run the compiler's own entry script with this Node rather than the
47
+ // node_modules/.bin/tsc shim: on Windows the extensionless shim is a POSIX
48
+ // sh script (the runnable one is tsc.CMD), so exec'ing it fails there.
49
+ const tsc = createRequire(import.meta.url).resolve("typescript/bin/tsc");
46
50
  try {
47
- execFileSync(tsc, ["-p", join(pkgRoot, "tsconfig.build.json")], {
48
- stdio: ["ignore", "ignore", "inherit"],
49
- cwd: pkgRoot,
50
- });
51
+ execFileSync(
52
+ process.execPath,
53
+ [tsc, "-p", join(pkgRoot, "tsconfig.build.json")],
54
+ {
55
+ stdio: ["ignore", "ignore", "inherit"],
56
+ cwd: pkgRoot,
57
+ },
58
+ );
51
59
  process.stderr.write("✓ Build complete\n");
52
60
  } catch {
53
61
  process.stderr.write("✗ Build failed — running with existing dist\n");
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/experience-design-system-cli",
3
- "version": "2.34.2-dev-build-3cd48dd.0",
3
+ "version": "2.34.2-dev-build-286f2f7.0",
4
4
  "description": "Contentful Experiences design system import CLI",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,5 +1,5 @@
1
1
  /** Tracked CLI commands — closed set aligned with the published event schema. */
2
- export type DsiCliCommand = 'analyze_extract' | 'analyze_select' | 'generate_components' | 'generate_tokens' | 'generate_edit' | 'map_tokens' | 'apply_push' | 'print_components' | 'print_tokens' | 'import';
2
+ export type DsiCliCommand = 'analyze_extract' | 'analyze_select' | 'generate_components' | 'generate_tokens' | 'generate_edit' | 'map_tokens' | 'apply_preview' | 'apply_select' | 'apply_push' | 'print_components' | 'print_tokens' | 'import';
3
3
  export type EntryCommand = 'analyze_extract' | 'import';
4
4
  export type OsName = 'macOS' | 'Linux' | 'Windows' | 'Android' | 'other';
5
5
  export type WriteResult = {
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ export interface SelectableEntity {
3
+ id: string;
4
+ kind: 'token' | 'component';
5
+ status: 'new' | 'changed';
6
+ isBreaking?: boolean;
7
+ }
8
+ export declare function makeSelectKey(kind: 'token' | 'component', id: string): string;
9
+ interface SelectViewProps {
10
+ entities: SelectableEntity[];
11
+ spaceId: string;
12
+ environmentId: string;
13
+ selectedIndex: number;
14
+ selected: Set<string>;
15
+ importing: boolean;
16
+ }
17
+ export declare function SelectView({ entities, spaceId, environmentId, selectedIndex, selected, importing, }: SelectViewProps): React.ReactElement;
18
+ export {};
@@ -1,2 +1,2 @@
1
1
  import type { Command } from 'commander';
2
- export declare function registerInternalGenerateCommand(program: Command): void;
2
+ export declare function registerGenerateCommand(program: Command): void;
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerGenerateEditCommand(parent: Command, skill: string): void;
@@ -10,12 +10,19 @@ export interface PipelineOptions {
10
10
  bedrock?: boolean;
11
11
  skipAnalyze: boolean;
12
12
  skipGenerate: boolean;
13
+ print: boolean;
13
14
  skipApply: boolean;
14
15
  noCache: boolean;
15
16
  yes: boolean;
17
+ verbose: boolean;
18
+ tokens?: string;
19
+ viewports?: string;
16
20
  host?: string;
17
21
  dryRun?: boolean;
18
22
  excludeInvalid?: boolean;
23
+ selectAll?: boolean;
24
+ select?: string[];
25
+ deselect?: string[];
19
26
  /** Forwarded to the spawned `analyze select-agent` subprocess. */
20
27
  selectPromptPath?: string;
21
28
  /** When true, auto-reject cycle participants and retry push instead of surfacing an error. */
@@ -70,6 +70,7 @@ export type WizardAppProps = {
70
70
  autoFilter?: boolean;
71
71
  livePreview?: boolean;
72
72
  noPush?: boolean;
73
+ noSave?: boolean;
73
74
  outDirOverride?: string;
74
75
  onConflictMode?: ConflictMode;
75
76
  selectPromptPath?: string;
@@ -85,4 +86,4 @@ export type WizardAppProps = {
85
86
  onRunPicked?: (selection: RunPickerSelection) => void;
86
87
  allowDeletions?: boolean;
87
88
  };
88
- 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, outDirOverride, onConflictMode, selectPromptPath, generatePromptPath, skipMapTokens, seedExtractSessionId, seedGenerateSessionId, seedTokenSessionId, seedTokensPath, initialStep, initialRawTokensPath, initialRuns, onRunPicked, allowDeletions, }?: WizardAppProps): React.ReactElement;
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;