@embeddables/cli 0.9.6 → 0.11.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 (85) hide show
  1. package/.prompts/embeddables-cli.md +66 -3
  2. package/README.md +1 -0
  3. package/dist/assets-manifest.d.ts +31 -0
  4. package/dist/assets-manifest.d.ts.map +1 -0
  5. package/dist/assets-manifest.js +59 -0
  6. package/dist/assets-manifest.js.map +1 -0
  7. package/dist/cli.js +119 -1
  8. package/dist/cli.js.map +1 -1
  9. package/dist/command-history.d.ts +13 -0
  10. package/dist/command-history.d.ts.map +1 -0
  11. package/dist/command-history.js +35 -0
  12. package/dist/command-history.js.map +1 -0
  13. package/dist/commands/assets-sync.d.ts +6 -0
  14. package/dist/commands/assets-sync.d.ts.map +1 -0
  15. package/dist/commands/assets-sync.js +35 -0
  16. package/dist/commands/assets-sync.js.map +1 -0
  17. package/dist/commands/assets-upload.d.ts +13 -0
  18. package/dist/commands/assets-upload.d.ts.map +1 -0
  19. package/dist/commands/assets-upload.js +475 -0
  20. package/dist/commands/assets-upload.js.map +1 -0
  21. package/dist/commands/diff.d.ts +90 -0
  22. package/dist/commands/diff.d.ts.map +1 -0
  23. package/dist/commands/diff.js +738 -0
  24. package/dist/commands/diff.js.map +1 -0
  25. package/dist/commands/experiments-connect.js +22 -19
  26. package/dist/commands/experiments-connect.js.map +1 -1
  27. package/dist/commands/feedback.d.ts +29 -0
  28. package/dist/commands/feedback.d.ts.map +1 -0
  29. package/dist/commands/feedback.js +275 -0
  30. package/dist/commands/feedback.js.map +1 -0
  31. package/dist/commands/init.d.ts.map +1 -1
  32. package/dist/commands/init.js +11 -90
  33. package/dist/commands/init.js.map +1 -1
  34. package/dist/commands/pull.d.ts.map +1 -1
  35. package/dist/commands/pull.js +3 -0
  36. package/dist/commands/pull.js.map +1 -1
  37. package/dist/compiler/errors.d.ts +7 -0
  38. package/dist/compiler/errors.d.ts.map +1 -1
  39. package/dist/compiler/errors.js +10 -0
  40. package/dist/compiler/errors.js.map +1 -1
  41. package/dist/compiler/index.d.ts.map +1 -1
  42. package/dist/compiler/index.js +4 -2
  43. package/dist/compiler/index.js.map +1 -1
  44. package/dist/constants/defaultTagStylesV4.d.ts +6 -0
  45. package/dist/constants/defaultTagStylesV4.d.ts.map +1 -0
  46. package/dist/constants/defaultTagStylesV4.js +659 -0
  47. package/dist/constants/defaultTagStylesV4.js.map +1 -0
  48. package/dist/constants.d.ts +2 -0
  49. package/dist/constants.d.ts.map +1 -1
  50. package/dist/constants.js +2 -0
  51. package/dist/constants.js.map +1 -1
  52. package/dist/group-context.d.ts +2 -0
  53. package/dist/group-context.d.ts.map +1 -0
  54. package/dist/group-context.js +29 -0
  55. package/dist/group-context.js.map +1 -0
  56. package/dist/helpers/typeStubs.d.ts +25 -0
  57. package/dist/helpers/typeStubs.d.ts.map +1 -0
  58. package/dist/helpers/typeStubs.js +153 -0
  59. package/dist/helpers/typeStubs.js.map +1 -0
  60. package/dist/logger.d.ts +5 -2
  61. package/dist/logger.d.ts.map +1 -1
  62. package/dist/logger.js +33 -12
  63. package/dist/logger.js.map +1 -1
  64. package/dist/prompts/experiments.d.ts +3 -1
  65. package/dist/prompts/experiments.d.ts.map +1 -1
  66. package/dist/prompts/experiments.js +12 -5
  67. package/dist/prompts/experiments.js.map +1 -1
  68. package/dist/stdout.d.ts +4 -0
  69. package/dist/stdout.d.ts.map +1 -1
  70. package/dist/stdout.js +33 -3
  71. package/dist/stdout.js.map +1 -1
  72. package/dist/workbench/FieldEditorPanel.d.ts +2 -1
  73. package/dist/workbench/FieldEditorPanel.d.ts.map +1 -1
  74. package/dist/workbench/FieldEditorPanel.js +21 -10
  75. package/dist/workbench/FieldEditorPanel.js.map +1 -1
  76. package/dist/workbench/UserDataPanel.d.ts.map +1 -1
  77. package/dist/workbench/UserDataPanel.js +103 -3
  78. package/dist/workbench/UserDataPanel.js.map +1 -1
  79. package/dist/{commands/build-workbench.d.ts → workbench/build.d.ts} +1 -1
  80. package/dist/workbench/build.d.ts.map +1 -0
  81. package/dist/{commands/build-workbench.js → workbench/build.js} +1 -1
  82. package/dist/workbench/build.js.map +1 -0
  83. package/package.json +1 -1
  84. package/dist/commands/build-workbench.d.ts.map +0 -1
  85. package/dist/commands/build-workbench.js.map +0 -1
@@ -219,7 +219,47 @@ Note that these are desktop-first, not mobile-first (i.e. that the default style
219
219
  - Tablet: `[max-width~='720px'] ` (note trailing space)
220
220
  - Mobile: `[max-width~='520px'] ` (note trailing space)
221
221
 
222
- Note: If you need to use any breakpoints other than 720px and 520px, you must add them in a top-level `breakpoints` (typing is Breakpoint[]) property in config.json.
222
+ **Breakpoint config in `config.json` (high priority; must follow exactly):**
223
+
224
+ - If you need to use any breakpoints other than `720px` and `520px`, you must add them in a top-level `breakpoints` property in `config.json` (typing is `Breakpoint[]`).
225
+ - `breakpoints` must be a **top-level** property in `config.json`.
226
+ - `breakpoints` must be placed **before** the `defaults` property.
227
+ - Each breakpoint must contain:
228
+ - `max_width` (number)
229
+ - `name` (string)
230
+ - Do not rename properties or change this structure.
231
+ - Keep `breakpoints` ordered from largest to smallest `max_width`.
232
+ - Always preserve valid JSON formatting.
233
+
234
+ Required structure:
235
+
236
+ ```json
237
+ {
238
+ "breakpoints": [
239
+ {
240
+ "max_width": 1280,
241
+ "name": "Desktop medium"
242
+ },
243
+ {
244
+ "max_width": 1024,
245
+ "name": "Desktop small"
246
+ },
247
+ {
248
+ "max_width": 900,
249
+ "name": "Tablet big"
250
+ },
251
+ {
252
+ "max_width": 380,
253
+ "name": "Mobile small"
254
+ },
255
+ {
256
+ "max_width": 320,
257
+ "name": "Mobile mini"
258
+ }
259
+ ],
260
+ "defaults": {}
261
+ }
262
+ ```
223
263
 
224
264
  #### 3. Scope
225
265
 
@@ -282,7 +322,10 @@ Note: If you need to use any breakpoints other than 720px and 520px, you must ad
282
322
  // Button text on hover (sub-element: component in selector must be the one that owns it—CustomButton, not a container)
283
323
  .Flow-Component.ComponentType-CustomButton.ComponentTag-primary_button:hover .ElementType-ButtonText
284
324
 
285
- // Mobile breakpoint
325
+ // Mobile breakpoint (built-in)
326
+ .Flow-EntireFlow[max-width~='520px'] .Flow-Component.ComponentTag-landing_container
327
+
328
+ // Custom breakpoint (only after adding it to top-level config.json "breakpoints")
286
329
  .Flow-EntireFlow[max-width~='1024px'] .Flow-Component.ComponentTag-landing_container
287
330
 
288
331
  // Page-scoped component (PageKey is on the component, not the page)
@@ -323,6 +366,18 @@ For placeholder images, the recommended service is placehold.co:
323
366
 
324
367
  Please be consistent with your choice out of those options within a particular component or section.
325
368
 
369
+ ### Project Asset Manifest (`assets.json`)
370
+
371
+ If an `assets.json` file exists in the project root, treat it as the source of truth for uploaded assets and their uplaoded URLs and prefer it before creating new placeholder URLs.
372
+
373
+ - `assets.json` is generated by `embeddables assets sync` and refreshed by `embeddables assets upload`.
374
+ - It contains DB-backed metadata (for the project/group) plus optional `relativePath` entries for files uploaded from local folders.
375
+ - For embeddable-specific assets, prefer entries where `flow_id` matches the current embeddable.
376
+ - For project-level shared assets (from `/assets`), prefer entries where `flow_id` is `null`.
377
+ - If an asset is referenced by local file path, use `relativePath` to resolve the matching uploaded URL from `assets.json`.
378
+
379
+ When you need an existing image/icon URL for `MediaImage.src` or button `imageUrl`, check `assets.json` first and reuse those URLs whenever possible.
380
+
326
381
  ## Component Sub-Element Types Reference
327
382
 
328
383
  ### OptionSelector
@@ -541,6 +596,7 @@ Example: for experiment key `hero_test` with variants `control` and `variant_b`,
541
596
  The `config.json` file contains the reduced Embeddable JSON with:
542
597
 
543
598
  - All structural properties (id, title, builder_version, etc.)
599
+ - Optional top-level `breakpoints` array when using custom breakpoints (must appear before `defaults`; see Breakpoint section)
544
600
  - Page metadata (id, key, properties) but NOT component content (components are in React files)
545
601
  - Style selectors but NOT style values (styles are in CSS files)
546
602
  - Computed field metadata (id, key, inputs, etc.) but NOT code (code is in JS files)
@@ -609,6 +665,7 @@ The `config.json` file contains the reduced Embeddable JSON with:
609
665
  - Location: `styles/index.css` — a single CSS file for the flow (do not create multiple CSS files)
610
666
  - Format: Standard CSS with selector as class name
611
667
  - Content: Style properties from `Flow.styles[selector]`
668
+ - Project root reference: `default-styles.css` contains baseline styles for standard component tags (scaffolded by `embeddables init`)
612
669
 
613
670
  ### JS Files (Computed Fields)
614
671
 
@@ -630,6 +687,9 @@ The `config.json` file contains the reduced Embeddable JSON with:
630
687
  - Primary tag (required): Describes component type (e.g., `standard_button`, `price_card`)
631
688
  - Secondary tag (optional): Variant of primary (e.g., `primary_button`, `outline_button`)
632
689
  - Utility tag (optional): Only for margins that can't be applied via primary/secondary (e.g., `m_2`)
690
+ - When using **standard tags**, ensure required default selectors exist in `default-styles.css` and copy missing selectors into the embeddable's `styles/index.css` when needed
691
+ - Standard tags to recognize:
692
+ `standard_plain_text`, `standard_rich_text`, `standard_container`, `standard_image`, `standard_button`, `standard_media_embed`, `standard_slider`, `standard_input`, `standard_checkbox`, `standard_option_buttons`, `standard_dropdown`, `standard_switch`, `standard_file_upload`, `standard_stripe_checkout`, `standard_calendly`, `standard_hubspot`, `standard_progress_bar`, `standard_progress_circle`
633
693
 
634
694
  3. **Component Types**:
635
695
  - Use `PlainText` by default
@@ -652,6 +712,8 @@ The `config.json` file contains the reduced Embeddable JSON with:
652
712
 
653
713
  11. **Action Triggers**: Actions are triggered by events (button clicks, page completion, etc.). Configuration stored in config.json, code in JS files.
654
714
 
715
+ 12. **Asset URL Source of Truth**: If `assets.json` exists in the project root, use it as the first source for image/file URLs. Prefer matching by `flow_id` (or `flow_id: null` for project-level shared assets) and use `relativePath` when mapping local files to uploaded URLs. Always use the (uploaded) url property, not local relative paths, as the image src when building in React.
716
+
655
717
  ## Common Patterns
656
718
 
657
719
  ### Adding a New Page
@@ -666,7 +728,8 @@ The `config.json` file contains the reduced Embeddable JSON with:
666
728
  1. Update the page's React file (`pages/{pageKey}.page.tsx`)
667
729
  2. Add component JSX with appropriate props
668
730
  3. If new tags are used, ensure CSS exists for those tags
669
- 4. Update config.json if component metadata is needed (rarely)
731
+ 4. If any tag is a `standard_*` tag, check `default-styles.css` in project root and add missing style selectors for that tag to `styles/index.css`
732
+ 5. Update config.json if component metadata is needed (rarely)
670
733
 
671
734
  ### Styling a Component
672
735
 
package/README.md CHANGED
@@ -109,6 +109,7 @@ Options:
109
109
 
110
110
  - `-i, --id <id>`: Embeddable ID to pull (skips interactive selection)
111
111
  - `-o, --out <path>`: Output path for the compiled JSON (default: `embeddables/<id>/.generated/embeddable.json`)
112
+ - `--version [version]`: Version to pull; omit for latest, use without a value (`--version`) for interactive version selector, or pass a number (`--version 5`)
112
113
  - `-b, --branch <branch_id>`: Pull a specific branch version
113
114
  - `-f, --fix`: Remove components with missing required props instead of erroring
114
115
 
@@ -0,0 +1,31 @@
1
+ import type { SupabaseClient } from '@supabase/supabase-js';
2
+ export interface AssetMetadataRow {
3
+ id: string;
4
+ group_id: string;
5
+ flow_id: string | null;
6
+ name: string;
7
+ url: string;
8
+ archived: boolean;
9
+ created_at: string;
10
+ updated_at: string;
11
+ }
12
+ export interface AssetManifestEntry extends AssetMetadataRow {
13
+ relativePath?: string;
14
+ }
15
+ export interface AssetsManifestFile {
16
+ generatedAt: string;
17
+ groupId: string;
18
+ assets: AssetManifestEntry[];
19
+ }
20
+ export declare function readAssetsManifest(filePath: string): AssetsManifestFile | null;
21
+ export declare function writeAssetsManifest(filePath: string, manifest: AssetsManifestFile): void;
22
+ export declare function syncAssetsManifest(params: {
23
+ supabase: SupabaseClient;
24
+ groupId: string;
25
+ outFilePath?: string;
26
+ relativePathByUrl?: Map<string, string>;
27
+ }): Promise<{
28
+ outFilePath: string;
29
+ count: number;
30
+ }>;
31
+ //# sourceMappingURL=assets-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-manifest.d.ts","sourceRoot":"","sources":["../src/assets-manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,kBAAkB,EAAE,CAAA;CAC7B;AAMD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAa9E;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAExF;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,QAAQ,EAAE,cAAc,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACxC,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAuClD"}
@@ -0,0 +1,59 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ function normalizeRelativePath(relativePath) {
4
+ return relativePath.replace(/\\/g, '/').replace(/^\.?\//, '');
5
+ }
6
+ export function readAssetsManifest(filePath) {
7
+ if (!fs.existsSync(filePath))
8
+ return null;
9
+ try {
10
+ const parsed = JSON.parse(fs.readFileSync(filePath, 'utf8'));
11
+ if (!parsed || !Array.isArray(parsed.assets))
12
+ return null;
13
+ return {
14
+ generatedAt: typeof parsed.generatedAt === 'string' ? parsed.generatedAt : '',
15
+ groupId: typeof parsed.groupId === 'string' ? parsed.groupId : '',
16
+ assets: parsed.assets,
17
+ };
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ export function writeAssetsManifest(filePath, manifest) {
24
+ fs.writeFileSync(filePath, JSON.stringify(manifest, null, 2) + '\n', 'utf8');
25
+ }
26
+ export async function syncAssetsManifest(params) {
27
+ const { supabase, groupId } = params;
28
+ const outFilePath = path.resolve(params.outFilePath ?? 'assets.json');
29
+ const { data, error } = await supabase
30
+ .from('assets')
31
+ .select('id, group_id, flow_id, name, url, archived, created_at, updated_at')
32
+ .eq('group_id', groupId)
33
+ .order('created_at', { ascending: false });
34
+ if (error)
35
+ throw new Error(`Could not fetch assets metadata: ${error.message}`);
36
+ const rows = (data ?? []);
37
+ const existing = readAssetsManifest(outFilePath);
38
+ const existingRelativeByUrl = new Map();
39
+ for (const asset of existing?.assets ?? []) {
40
+ if (asset.url && asset.relativePath) {
41
+ existingRelativeByUrl.set(asset.url, normalizeRelativePath(asset.relativePath));
42
+ }
43
+ }
44
+ const incomingRelativeByUrl = new Map();
45
+ for (const [url, relativePath] of params.relativePathByUrl ?? new Map()) {
46
+ incomingRelativeByUrl.set(url, normalizeRelativePath(relativePath));
47
+ }
48
+ const assets = rows.map((row) => {
49
+ const relativePath = incomingRelativeByUrl.get(row.url) ?? existingRelativeByUrl.get(row.url);
50
+ return relativePath ? { ...row, relativePath } : row;
51
+ });
52
+ writeAssetsManifest(outFilePath, {
53
+ generatedAt: new Date().toISOString(),
54
+ groupId,
55
+ assets,
56
+ });
57
+ return { outFilePath, count: assets.length };
58
+ }
59
+ //# sourceMappingURL=assets-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-manifest.js","sourceRoot":"","sources":["../src/assets-manifest.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -22,24 +22,29 @@ Sentry.getCurrentScope().setAttributes({ cliVersion: pkg.version });
22
22
  Sentry.setTag('cliVersion', pkg.version);
23
23
  import { isLoggedIn } from './auth/index.js';
24
24
  import { getSentryContextFromProjectConfig, setSentryContext, setSentryUserFromAuth, setSentryUserFromAuthCache, } from './sentry-context.js';
25
+ import { writeHistoryEntry } from './command-history.js';
25
26
  import { runBranch } from './commands/branch.js';
26
27
  import { runBuild } from './commands/build.js';
27
28
  import { runDev } from './commands/dev.js';
28
29
  import { runBuilderOpen } from './commands/builder-open.js';
29
30
  import { runExperimentsConnect } from './commands/experiments-connect.js';
31
+ import { runFeedback } from './commands/feedback.js';
30
32
  import { runInit } from './commands/init.js';
33
+ import { runDiff } from './commands/diff.js';
31
34
  import { runInspect } from './commands/inspect.js';
32
35
  import { runLogin } from './commands/login.js';
33
36
  import { runLogout } from './commands/logout.js';
34
37
  import { runPull } from './commands/pull.js';
35
38
  import { runSave } from './commands/save.js';
39
+ import { runAssetsUpload } from './commands/assets-upload.js';
40
+ import { runAssetsSync } from './commands/assets-sync.js';
36
41
  import { runUpgrade } from './commands/upgrade.js';
37
42
  import { configureCustomHelp } from './help.js';
38
43
  import { exit } from './logger.js';
39
44
  import * as stdout from './stdout.js';
40
45
  import { withCommandSpan } from './tracing.js';
41
46
  /** Only these commands may run without being logged in. All others require login. */
42
- const COMMANDS_ALLOWED_WITHOUT_LOGIN = new Set(['login', 'logout', 'upgrade']);
47
+ const COMMANDS_ALLOWED_WITHOUT_LOGIN = new Set(['login', 'logout', 'upgrade', 'feedback']);
43
48
  async function requireLogin(commandName) {
44
49
  const baseCommand = commandName.split(' ')[0];
45
50
  if (COMMANDS_ALLOWED_WITHOUT_LOGIN.has(baseCommand))
@@ -65,6 +70,33 @@ program
65
70
  .version(pkg.version, '-v, --version', 'Show CLI version')
66
71
  .enablePositionalOptions();
67
72
  configureCustomHelp(program, pkg.version);
73
+ // ─── Command history tracking ────────────────────────────────────────────────
74
+ let _historyStart = 0;
75
+ let _historyCommand = '';
76
+ let _historyArgs = [];
77
+ program.hook('preAction', (thisCommand) => {
78
+ _historyStart = performance.now();
79
+ _historyCommand = thisCommand.args?.[0] ?? thisCommand.name();
80
+ _historyArgs = process.argv.slice(3).map((a) => (a.length > 200 ? a.slice(0, 200) + '…' : a));
81
+ });
82
+ const COMMANDS_EXCLUDED_FROM_HISTORY = new Set(['feedback']);
83
+ program.hook('postAction', () => {
84
+ if (COMMANDS_EXCLUDED_FROM_HISTORY.has(_historyCommand))
85
+ return;
86
+ try {
87
+ const entry = {
88
+ command: _historyCommand,
89
+ args: _historyArgs,
90
+ exitCode: 0,
91
+ durationMs: Math.round(performance.now() - _historyStart),
92
+ timestamp: new Date().toISOString(),
93
+ };
94
+ writeHistoryEntry(entry);
95
+ }
96
+ catch {
97
+ // Never let history logging break the CLI
98
+ }
99
+ });
68
100
  program
69
101
  .command('init')
70
102
  .description('Initialize a new Embeddables project')
@@ -165,6 +197,36 @@ program
165
197
  engine: opts.engine,
166
198
  }));
167
199
  });
200
+ program
201
+ .command('diff')
202
+ .description('Show differences between two versions of an embeddable')
203
+ .option('-i, --id <id>', 'Embeddable ID (will prompt if not provided)')
204
+ .option('--from <version>', 'Version to compare from (number, latest, staging, prod, local, or branch@version)', 'latest')
205
+ .option('--to <version>', 'Version to compare to (number, latest, staging, prod, local, or branch@version)', 'local')
206
+ .option('--page <keysOrIds>', 'Filter to page key/id (comma-separated, no spaces)')
207
+ .option('--component <keysOrIds>', 'Filter to component key/id (comma-separated, no spaces)')
208
+ .option('--depth <level>', 'Detail level: pages, components, or props', 'components')
209
+ .option('--no-color', 'Disable colored output')
210
+ .option('-b, --branch <branch_id>', 'Embeddable branch ID')
211
+ .option('-e, --engine <url>', 'Engine origin', 'https://engine.embeddables.com')
212
+ .action(async (opts) => {
213
+ const needsCloud = opts.from !== 'local' || opts.to !== 'local';
214
+ if (needsCloud) {
215
+ await requireLogin('diff');
216
+ }
217
+ setSentryContextForCommand('diff');
218
+ await runDiff({
219
+ id: opts.id,
220
+ from: opts.from,
221
+ to: opts.to,
222
+ depth: opts.depth,
223
+ page: opts.page,
224
+ component: opts.component,
225
+ color: opts.color,
226
+ engine: opts.engine,
227
+ branch: opts.branch,
228
+ });
229
+ });
168
230
  program
169
231
  .command('save')
170
232
  .description('Build and save an embeddable to the cloud')
@@ -200,6 +262,21 @@ program
200
262
  setSentryContextForCommand('branch');
201
263
  await withCommandSpan('branch', () => runBranch(opts));
202
264
  });
265
+ program
266
+ .command('feedback [message]')
267
+ .description('Send feedback about the CLI or AI prompts')
268
+ .option('--positive', 'Mark as positive feedback')
269
+ .option('--negative', 'Mark as negative feedback (default)')
270
+ .option('--category <type>', 'Feedback category: cli, ai, compiler, other')
271
+ .action(async (message, opts) => {
272
+ setSentryContextForCommand('feedback');
273
+ await withCommandSpan('feedback', () => runFeedback({
274
+ message,
275
+ positive: opts.positive,
276
+ negative: opts.negative,
277
+ category: opts.category,
278
+ }));
279
+ });
203
280
  const builder = program.command('builder').description('Embeddables Builder utilities');
204
281
  builder
205
282
  .command('open')
@@ -226,5 +303,46 @@ experiments
226
303
  experimentKey: opts.experimentKey,
227
304
  }));
228
305
  });
306
+ const assets = program.command('assets').description('Manage embeddable assets');
307
+ assets
308
+ .command('upload')
309
+ .description('Upload local asset files to the Embeddables assets library')
310
+ .option('-i, --id <id>', 'Embeddable ID (will prompt if not provided)')
311
+ .option('--group-id <id>', 'Group ID (defaults to project ID)')
312
+ .option('--project', 'Upload from project-level assets/ folder (not tied to an embeddable)')
313
+ .option('--dir <path>', 'Asset directory (default: embeddables/<id>/assets)')
314
+ .option('-r, --recursive', 'Include files in subdirectories')
315
+ .option('--dry-run', 'Show what would be uploaded without uploading')
316
+ .option('--concurrency <n>', 'Number of parallel uploads (default: 5)')
317
+ .option('--include <glob>', 'Glob pattern(s) to include (comma-separated)')
318
+ .option('--exclude <glob>', 'Glob pattern(s) to exclude (comma-separated)')
319
+ .action(async (opts) => {
320
+ await requireLogin('assets upload');
321
+ setSentryContextForCommand('assets upload');
322
+ await withCommandSpan('assets_upload', () => runAssetsUpload({
323
+ id: opts.id,
324
+ groupId: opts.groupId,
325
+ project: opts.project,
326
+ dir: opts.dir,
327
+ recursive: opts.recursive,
328
+ dryRun: opts.dryRun,
329
+ concurrency: opts.concurrency,
330
+ include: opts.include,
331
+ exclude: opts.exclude,
332
+ }));
333
+ });
334
+ assets
335
+ .command('sync')
336
+ .description('Sync project asset metadata into assets.json')
337
+ .option('--group-id <id>', 'Group ID (defaults to project ID)')
338
+ .option('--out <path>', 'Output file path (default: assets.json)')
339
+ .action(async (opts) => {
340
+ await requireLogin('assets sync');
341
+ setSentryContextForCommand('assets sync');
342
+ await withCommandSpan('assets_sync', () => runAssetsSync({
343
+ groupId: opts.groupId,
344
+ out: opts.out,
345
+ }));
346
+ });
229
347
  await program.parseAsync(process.argv);
230
348
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface CommandHistoryEntry {
2
+ command: string;
3
+ args: string[];
4
+ exitCode: number;
5
+ durationMs: number;
6
+ timestamp: string;
7
+ error?: string;
8
+ }
9
+ export declare function getHistoryFilePath(): string;
10
+ export declare function readHistory(): CommandHistoryEntry[];
11
+ export declare function writeHistoryEntry(entry: CommandHistoryEntry): void;
12
+ export declare function getLastHistoryEntry(): CommandHistoryEntry | null;
13
+ //# sourceMappingURL=command-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-history.d.ts","sourceRoot":"","sources":["../src/command-history.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,WAAW,IAAI,mBAAmB,EAAE,CAUnD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAMlE;AAED,wBAAgB,mBAAmB,IAAI,mBAAmB,GAAG,IAAI,CAGhE"}
@@ -0,0 +1,35 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ const MAX_ENTRIES = 20;
5
+ const HISTORY_DIR = path.join(os.homedir(), '.embeddables');
6
+ const HISTORY_FILE = path.join(HISTORY_DIR, 'history.json');
7
+ export function getHistoryFilePath() {
8
+ return HISTORY_FILE;
9
+ }
10
+ export function readHistory() {
11
+ try {
12
+ if (!fs.existsSync(HISTORY_FILE))
13
+ return [];
14
+ const raw = fs.readFileSync(HISTORY_FILE, 'utf8');
15
+ const parsed = JSON.parse(raw);
16
+ if (!Array.isArray(parsed))
17
+ return [];
18
+ return parsed;
19
+ }
20
+ catch {
21
+ return [];
22
+ }
23
+ }
24
+ export function writeHistoryEntry(entry) {
25
+ const history = readHistory();
26
+ history.push(entry);
27
+ const trimmed = history.slice(-MAX_ENTRIES);
28
+ fs.mkdirSync(HISTORY_DIR, { recursive: true });
29
+ fs.writeFileSync(HISTORY_FILE, JSON.stringify(trimmed, null, 2), 'utf8');
30
+ }
31
+ export function getLastHistoryEntry() {
32
+ const history = readHistory();
33
+ return history.length > 0 ? history[history.length - 1] : null;
34
+ }
35
+ //# sourceMappingURL=command-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-history.js","sourceRoot":"","sources":["../src/command-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,MAAM,WAAW,GAAG,EAAE,CAAA;AACtB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAA;AAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;AAW3D,MAAM,UAAU,kBAAkB;IAChC,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,OAAO,EAAE,CAAA;QAC3C,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAA;QACrC,OAAO,MAA+B,CAAA;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAA0B;IAC1D,MAAM,OAAO,GAAG,WAAW,EAAE,CAAA;IAC7B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAA;IAC3C,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9C,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AAC1E,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAA;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAChE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface AssetsSyncOptions {
2
+ groupId?: string;
3
+ out?: string;
4
+ }
5
+ export declare function runAssetsSync(opts: AssetsSyncOptions): Promise<void>;
6
+ //# sourceMappingURL=assets-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-sync.d.ts","sourceRoot":"","sources":["../../src/commands/assets-sync.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC1E"}
@@ -0,0 +1,35 @@
1
+ import { getAuthenticatedSupabaseClient, isLoggedIn } from '../auth/index.js';
2
+ import { syncAssetsManifest } from '../assets-manifest.js';
3
+ import { resolveGroupId } from '../group-context.js';
4
+ import { createLogger, exit } from '../logger.js';
5
+ import * as stdout from '../stdout.js';
6
+ export async function runAssetsSync(opts) {
7
+ const logger = createLogger('runAssetsSync');
8
+ if (!isLoggedIn()) {
9
+ stdout.warn('Not logged in.');
10
+ stdout.dim('Run "embeddables login" first.');
11
+ await exit(1);
12
+ return;
13
+ }
14
+ const groupId = await resolveGroupId(opts.groupId);
15
+ if (!groupId) {
16
+ stdout.error('Could not determine group ID for this project.');
17
+ stdout.dim('Set `org_id` in embeddables.json or pass `--group-id`.');
18
+ await exit(1);
19
+ return;
20
+ }
21
+ const supabase = await getAuthenticatedSupabaseClient();
22
+ if (!supabase) {
23
+ stdout.error('Could not create authenticated Supabase client. Run "embeddables login" again.');
24
+ await exit(1);
25
+ return;
26
+ }
27
+ const { outFilePath, count } = await syncAssetsManifest({
28
+ supabase,
29
+ groupId,
30
+ outFilePath: opts.out,
31
+ });
32
+ stdout.success(`Wrote ${count} asset metadata entr${count === 1 ? 'y' : 'ies'} to ${outFilePath}`);
33
+ logger.info('assets sync complete', { groupId, count, outFilePath });
34
+ }
35
+ //# sourceMappingURL=assets-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-sync.js","sourceRoot":"","sources":["../../src/commands/assets-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAOtC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAuB;IACzD,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAA;IAE5C,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC7B,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;QAC5C,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;QACb,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAClD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAA;QAC9D,MAAM,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAA;QACpE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;QACb,OAAM;IACR,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,8BAA8B,EAAE,CAAA;IACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAA;QAC9F,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;QACb,OAAM;IACR,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,MAAM,kBAAkB,CAAC;QACtD,QAAQ;QACR,OAAO;QACP,WAAW,EAAE,IAAI,CAAC,GAAG;KACtB,CAAC,CAAA;IAEF,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,uBAAuB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,WAAW,EAAE,CAAC,CAAA;IAClG,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;AACtE,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface AssetsUploadOptions {
2
+ id?: string;
3
+ groupId?: string;
4
+ project?: boolean;
5
+ dir?: string;
6
+ recursive?: boolean;
7
+ dryRun?: boolean;
8
+ concurrency?: string;
9
+ include?: string;
10
+ exclude?: string;
11
+ }
12
+ export declare function runAssetsUpload(opts: AssetsUploadOptions): Promise<void>;
13
+ //# sourceMappingURL=assets-upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-upload.d.ts","sourceRoot":"","sources":["../../src/commands/assets-upload.ts"],"names":[],"mappings":"AAmIA,MAAM,WAAW,mBAAmB;IAClC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAyDD,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB9E"}