@contentful/experience-design-system-cli 2.34.2-dev-build-3cd48dd.0 → 2.34.2-dev-build-f52da46.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 +88 -27
- package/bin/cli.js +13 -5
- package/dist/package.json +1 -1
- package/dist/src/analytics/types.d.ts +1 -1
- package/dist/src/apply/tui/SelectView.d.ts +18 -0
- package/dist/src/generate/command.d.ts +1 -1
- package/dist/src/generate/edit/command.d.ts +2 -0
- package/dist/src/import/orchestrator.d.ts +7 -0
- package/dist/src/import/tui/WizardApp.d.ts +2 -1
- package/dist/src/index.js +2245 -1568
- package/dist/src/lib/command-options.d.ts +1 -0
- package/dist/src/lib/contentful-urls.d.ts +1 -1
- package/dist/src/session/db.d.ts +1 -1
- package/package.json +6 -6
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 →
|
|
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
|
|
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
|
-
|
|
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
|
|
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 (
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
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`,
|
|
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
|
|
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-
|
|
190
|
-
| `--no-
|
|
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
|
|
195
|
-
| `--
|
|
196
|
-
| `--
|
|
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
|
|
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
|
|
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`
|
|
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
|
|
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
|
-
|
|
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(
|
|
48
|
-
|
|
49
|
-
|
|
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,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
|
|
2
|
+
export declare function registerGenerateCommand(program: Command): 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;
|