@liquidmetal-ai/raindrop 0.0.2 → 0.0.4

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 (34) hide show
  1. package/README.md +116 -31
  2. package/dist/base-command.d.ts.map +1 -1
  3. package/dist/base-command.js +5 -7
  4. package/dist/commands/build/branch.d.ts +1 -0
  5. package/dist/commands/build/branch.d.ts.map +1 -1
  6. package/dist/commands/build/branch.js +12 -3
  7. package/dist/commands/build/deploy.d.ts +1 -0
  8. package/dist/commands/build/deploy.d.ts.map +1 -1
  9. package/dist/commands/build/deploy.js +43 -25
  10. package/dist/commands/build/env/get.d.ts.map +1 -1
  11. package/dist/commands/build/env/get.js +5 -2
  12. package/dist/commands/build/env/set.d.ts.map +1 -1
  13. package/dist/commands/build/env/set.js +5 -2
  14. package/dist/commands/build/list.d.ts.map +1 -1
  15. package/dist/commands/build/list.js +3 -1
  16. package/dist/commands/build/sandbox.d.ts +16 -0
  17. package/dist/commands/build/sandbox.d.ts.map +1 -0
  18. package/dist/commands/build/sandbox.js +54 -0
  19. package/dist/commands/build/start.js +2 -2
  20. package/dist/commands/build/stop.js +2 -2
  21. package/dist/commands/build/tools/check.d.ts +12 -0
  22. package/dist/commands/build/tools/check.d.ts.map +1 -0
  23. package/dist/commands/build/tools/check.js +19 -0
  24. package/dist/commands/build/tools/fmt.d.ts +12 -0
  25. package/dist/commands/build/tools/fmt.d.ts.map +1 -0
  26. package/dist/commands/build/tools/fmt.js +36 -0
  27. package/dist/commands/build/unsandbox.d.ts +16 -0
  28. package/dist/commands/build/unsandbox.d.ts.map +1 -0
  29. package/dist/commands/build/unsandbox.js +54 -0
  30. package/dist/commands/build/upload.d.ts.map +1 -1
  31. package/dist/commands/build/upload.js +1 -2
  32. package/dist/tsconfig.tsbuildinfo +1 -1
  33. package/oclif.manifest.json +241 -2
  34. package/package.json +1 -1
package/README.md CHANGED
@@ -14,22 +14,13 @@ CLI for the Raindrop platform
14
14
 
15
15
  # Usage
16
16
 
17
- You will need to have the monorepo setup and initialized.
18
-
19
- From the root of the monorepo:
20
-
21
- ```sh-session
22
- $ npm install
23
- ...
24
- ```
25
-
26
17
  <!-- usage -->
27
18
  ```sh-session
28
19
  $ npm install -g @liquidmetal-ai/raindrop
29
20
  $ raindrop COMMAND
30
21
  running command...
31
22
  $ raindrop (--version)
32
- @liquidmetal-ai/raindrop/0.0.2 darwin-arm64 node-v22.10.0
23
+ @liquidmetal-ai/raindrop/0.0.4 darwin-arm64 node-v22.10.0
33
24
  $ raindrop --help [COMMAND]
34
25
  USAGE
35
26
  $ raindrop COMMAND
@@ -53,9 +44,13 @@ USAGE
53
44
  * [`raindrop build generate`](#raindrop-build-generate)
54
45
  * [`raindrop build init [PATH]`](#raindrop-build-init-path)
55
46
  * [`raindrop build list`](#raindrop-build-list)
47
+ * [`raindrop build sandbox [VERSIONID]`](#raindrop-build-sandbox-versionid)
56
48
  * [`raindrop build start`](#raindrop-build-start)
57
49
  * [`raindrop build stop`](#raindrop-build-stop)
58
50
  * [`raindrop build token`](#raindrop-build-token)
51
+ * [`raindrop build tools check`](#raindrop-build-tools-check)
52
+ * [`raindrop build tools fmt`](#raindrop-build-tools-fmt)
53
+ * [`raindrop build unsandbox [VERSIONID]`](#raindrop-build-unsandbox-versionid)
59
54
  * [`raindrop build upload`](#raindrop-build-upload)
60
55
  * [`raindrop build validate`](#raindrop-build-validate)
61
56
  * [`raindrop help [COMMAND]`](#raindrop-help-command)
@@ -86,7 +81,7 @@ DESCRIPTION
86
81
  List authentications
87
82
  ```
88
83
 
89
- _See code: [src/commands/auth/list.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/auth/list.ts)_
84
+ _See code: [src/commands/auth/list.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/auth/list.ts)_
90
85
 
91
86
  ## `raindrop auth login`
92
87
 
@@ -100,7 +95,7 @@ DESCRIPTION
100
95
  Logs a user into the LiquidMetal platform. Supports browser-based authentication.
101
96
  ```
102
97
 
103
- _See code: [src/commands/auth/login.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/auth/login.ts)_
98
+ _See code: [src/commands/auth/login.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/auth/login.ts)_
104
99
 
105
100
  ## `raindrop auth logout`
106
101
 
@@ -114,7 +109,7 @@ DESCRIPTION
114
109
  Logout authentications
115
110
  ```
116
111
 
117
- _See code: [src/commands/auth/logout.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/auth/logout.ts)_
112
+ _See code: [src/commands/auth/logout.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/auth/logout.ts)_
118
113
 
119
114
  ## `raindrop auth select`
120
115
 
@@ -131,7 +126,7 @@ DESCRIPTION
131
126
  Select active organization
132
127
  ```
133
128
 
134
- _See code: [src/commands/auth/select.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/auth/select.ts)_
129
+ _See code: [src/commands/auth/select.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/auth/select.ts)_
135
130
 
136
131
  ## `raindrop build branch`
137
132
 
@@ -139,22 +134,23 @@ create a new branch in the Raindrop catalog
139
134
 
140
135
  ```
141
136
  USAGE
142
- $ raindrop build branch [-p <value> | -s <value>] [--manifest <value>]
137
+ $ raindrop build branch [-p <value> | -s <value>] [--manifest <value>] [--show]
143
138
 
144
139
  FLAGS
145
140
  -p, --previousVersionId=<value> previous version ID
146
141
  -s, --select=<value> select a specific version ID
147
142
  --manifest=<value> [default: raindrop.manifest] project manifest
143
+ --show show the current branch
148
144
 
149
145
  DESCRIPTION
150
146
  create a new branch in the Raindrop catalog
151
147
 
152
148
  EXAMPLES
153
149
  $ raindrop build branch .
154
- Create a new branch in the Raindrop catalog.
150
+ Created new branch 1234
155
151
  ```
156
152
 
157
- _See code: [src/commands/build/branch.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/build/branch.ts)_
153
+ _See code: [src/commands/build/branch.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/branch.ts)_
158
154
 
159
155
  ## `raindrop build delete [APPLICATION]`
160
156
 
@@ -182,7 +178,7 @@ EXAMPLES
182
178
  Deleted (application) at version (version)
183
179
  ```
184
180
 
185
- _See code: [src/commands/build/delete.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/build/delete.ts)_
181
+ _See code: [src/commands/build/delete.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/delete.ts)_
186
182
 
187
183
  ## `raindrop build deploy`
188
184
 
@@ -190,9 +186,10 @@ deploy a Raindrop application
190
186
 
191
187
  ```
192
188
  USAGE
193
- $ raindrop build deploy [-r <value>] [-m <value>] [-o <value>] [-v <value>] [-s]
189
+ $ raindrop build deploy [-r <value>] [-m <value>] [-o <value>] [-v <value>] [-s] [-a]
194
190
 
195
191
  FLAGS
192
+ -a, --amend amend an existing application
196
193
  -m, --manifest=<value> [default: raindrop.manifest] project manifest
197
194
  -o, --output=<value> [default: dist] output directory
198
195
  -r, --root=<value> [default: /Users/ian/liquidmetal/packages/raindrop] root directory
@@ -207,7 +204,7 @@ EXAMPLES
207
204
  Deploy a Raindrop application.
208
205
  ```
209
206
 
210
- _See code: [src/commands/build/deploy.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/build/deploy.ts)_
207
+ _See code: [src/commands/build/deploy.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/deploy.ts)_
211
208
 
212
209
  ## `raindrop build env get VAR`
213
210
 
@@ -235,7 +232,7 @@ EXAMPLES
235
232
  sets an env var/secret.
236
233
  ```
237
234
 
238
- _See code: [src/commands/build/env/get.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/build/env/get.ts)_
235
+ _See code: [src/commands/build/env/get.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/env/get.ts)_
239
236
 
240
237
  ## `raindrop build env set VAR [VALUE]`
241
238
 
@@ -264,7 +261,7 @@ EXAMPLES
264
261
  sets an env var/secret.
265
262
  ```
266
263
 
267
- _See code: [src/commands/build/env/set.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/build/env/set.ts)_
264
+ _See code: [src/commands/build/env/set.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/env/set.ts)_
268
265
 
269
266
  ## `raindrop build find`
270
267
 
@@ -288,7 +285,7 @@ EXAMPLES
288
285
  $ raindrop build find .
289
286
  ```
290
287
 
291
- _See code: [src/commands/build/find.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/build/find.ts)_
288
+ _See code: [src/commands/build/find.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/find.ts)_
292
289
 
293
290
  ## `raindrop build generate`
294
291
 
@@ -310,7 +307,7 @@ EXAMPLES
310
307
  $ raindrop build generate
311
308
  ```
312
309
 
313
- _See code: [src/commands/build/generate.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/build/generate.ts)_
310
+ _See code: [src/commands/build/generate.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/generate.ts)_
314
311
 
315
312
  ## `raindrop build init [PATH]`
316
313
 
@@ -334,7 +331,7 @@ EXAMPLES
334
331
  Initialize a project in the current directory.
335
332
  ```
336
333
 
337
- _See code: [src/commands/build/init.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/build/init.ts)_
334
+ _See code: [src/commands/build/init.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/init.ts)_
338
335
 
339
336
  ## `raindrop build list`
340
337
 
@@ -358,7 +355,30 @@ EXAMPLES
358
355
  List Raindrop catalog resources.
359
356
  ```
360
357
 
361
- _See code: [src/commands/build/list.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/build/list.ts)_
358
+ _See code: [src/commands/build/list.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/list.ts)_
359
+
360
+ ## `raindrop build sandbox [VERSIONID]`
361
+
362
+ mark a version as sandboxed in the Raindrop catalog
363
+
364
+ ```
365
+ USAGE
366
+ $ raindrop build sandbox [VERSIONID] [--manifest <value>]
367
+
368
+ ARGUMENTS
369
+ VERSIONID version to sandbox
370
+
371
+ FLAGS
372
+ --manifest=<value> [default: raindrop.manifest] project manifest
373
+
374
+ DESCRIPTION
375
+ mark a version as sandboxed in the Raindrop catalog
376
+
377
+ EXAMPLES
378
+ $ raindrop build sandbox
379
+ ```
380
+
381
+ _See code: [src/commands/build/sandbox.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/sandbox.ts)_
362
382
 
363
383
  ## `raindrop build start`
364
384
 
@@ -382,7 +402,7 @@ EXAMPLES
382
402
  Start a Raindrop application.
383
403
  ```
384
404
 
385
- _See code: [src/commands/build/start.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/build/start.ts)_
405
+ _See code: [src/commands/build/start.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/start.ts)_
386
406
 
387
407
  ## `raindrop build stop`
388
408
 
@@ -404,7 +424,7 @@ EXAMPLES
404
424
  Stop a Raindrop application.
405
425
  ```
406
426
 
407
- _See code: [src/commands/build/stop.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/build/stop.ts)_
427
+ _See code: [src/commands/build/stop.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/stop.ts)_
408
428
 
409
429
  ## `raindrop build token`
410
430
 
@@ -418,7 +438,72 @@ DESCRIPTION
418
438
  generate a link to create a Cloudflare API token
419
439
  ```
420
440
 
421
- _See code: [src/commands/build/token.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/build/token.ts)_
441
+ _See code: [src/commands/build/token.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/token.ts)_
442
+
443
+ ## `raindrop build tools check`
444
+
445
+ validate a LiquidMetal.AI raindrop.manifest
446
+
447
+ ```
448
+ USAGE
449
+ $ raindrop build tools check [-r <value>] [-m <value>]
450
+
451
+ FLAGS
452
+ -m, --manifest=<value> [default: raindrop.manifest] project manifest
453
+ -r, --root=<value> [default: /Users/ian/liquidmetal/packages/raindrop] root directory
454
+
455
+ DESCRIPTION
456
+ validate a LiquidMetal.AI raindrop.manifest
457
+
458
+ EXAMPLES
459
+ $ raindrop build tools check
460
+ ```
461
+
462
+ _See code: [src/commands/build/tools/check.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/tools/check.ts)_
463
+
464
+ ## `raindrop build tools fmt`
465
+
466
+ format a LiquidMetal.AI raindrop.manifest
467
+
468
+ ```
469
+ USAGE
470
+ $ raindrop build tools fmt [-r <value>] [-m <value>]
471
+
472
+ FLAGS
473
+ -m, --manifest=<value> [default: raindrop.manifest] project manifest
474
+ -r, --root=<value> [default: /Users/ian/liquidmetal/packages/raindrop] root directory
475
+
476
+ DESCRIPTION
477
+ format a LiquidMetal.AI raindrop.manifest
478
+
479
+ EXAMPLES
480
+ $ raindrop build tools fmt
481
+ ```
482
+
483
+ _See code: [src/commands/build/tools/fmt.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/tools/fmt.ts)_
484
+
485
+ ## `raindrop build unsandbox [VERSIONID]`
486
+
487
+ mark a version as unsandboxed in the Raindrop catalog
488
+
489
+ ```
490
+ USAGE
491
+ $ raindrop build unsandbox [VERSIONID] [--manifest <value>]
492
+
493
+ ARGUMENTS
494
+ VERSIONID version to sandbox
495
+
496
+ FLAGS
497
+ --manifest=<value> [default: raindrop.manifest] project manifest
498
+
499
+ DESCRIPTION
500
+ mark a version as unsandboxed in the Raindrop catalog
501
+
502
+ EXAMPLES
503
+ $ raindrop build unsandbox
504
+ ```
505
+
506
+ _See code: [src/commands/build/unsandbox.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/unsandbox.ts)_
422
507
 
423
508
  ## `raindrop build upload`
424
509
 
@@ -442,7 +527,7 @@ EXAMPLES
442
527
  $ raindrop build upload
443
528
  ```
444
529
 
445
- _See code: [src/commands/build/upload.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/build/upload.ts)_
530
+ _See code: [src/commands/build/upload.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/upload.ts)_
446
531
 
447
532
  ## `raindrop build validate`
448
533
 
@@ -464,7 +549,7 @@ EXAMPLES
464
549
  $ raindrop build validate
465
550
  ```
466
551
 
467
- _See code: [src/commands/build/validate.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.2/src/commands/build/validate.ts)_
552
+ _See code: [src/commands/build/validate.ts](https://github.com/liquidmetal-ai/liquidmetal/blob/v0.0.4/src/commands/build/validate.ts)_
468
553
 
469
554
  ## `raindrop help [COMMAND]`
470
555
 
@@ -1 +1 @@
1
- {"version":3,"file":"base-command.d.ts","sourceRoot":"","sources":["../src/base-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAE9F,OAAO,EAAE,OAAO,EAAS,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAE,MAAM,EAA0B,MAAM,aAAa,CAAC;AAG7D,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,OAAO,OAAO,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACvH,MAAM,MAAM,IAAI,CAAC,CAAC,SAAS,OAAO,OAAO,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhF,8BAAsB,WAAW,CAAC,CAAC,SAAS,OAAO,OAAO,CAAE,SAAQ,OAAO;IACzE,MAAM,CAAC,SAAS,KAAM;IAEtB,SAAS,CAAC,KAAK,EAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,SAAS,CAAC,IAAI,EAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEzB,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAErB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;cAclB,KAAK,CAAC,GAAG,EAAE,KAAK,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;cAKvD,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;cAI3C,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;cAK7B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAIzC,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;cAwBtC,cAAc,IAAI,OAAO,CAAC;QACxC,MAAM,EAAE,aAAa,CAAC,OAAO,cAAc,CAAC,CAAC;QAC7C,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CAIH"}
1
+ {"version":3,"file":"base-command.d.ts","sourceRoot":"","sources":["../src/base-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAE9F,OAAO,EAAE,OAAO,EAAS,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAE,MAAM,EAA0B,MAAM,aAAa,CAAC;AAG7D,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,OAAO,OAAO,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACvH,MAAM,MAAM,IAAI,CAAC,CAAC,SAAS,OAAO,OAAO,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhF,8BAAsB,WAAW,CAAC,CAAC,SAAS,OAAO,OAAO,CAAE,SAAQ,OAAO;IACzE,MAAM,CAAC,SAAS,KAAM;IAEtB,SAAS,CAAC,KAAK,EAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,SAAS,CAAC,IAAI,EAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEzB,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAErB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;cAclB,KAAK,CAAC,GAAG,EAAE,KAAK,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;cAKvD,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;cAI3C,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;cAK7B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAIzC,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;cAuBtC,cAAc,IAAI,OAAO,CAAC;QACxC,MAAM,EAAE,aAAa,CAAC,OAAO,cAAc,CAAC,CAAC;QAC7C,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CAIH"}
@@ -47,15 +47,13 @@ export class BaseCommand extends Command {
47
47
  }
48
48
  const contents = await fs.readFile(manifestPath, 'utf-8');
49
49
  const [apps, errors] = await manifestFromString(contents);
50
- const allErrors = errors.some((e) => "severity" in e && e.severity !== 'warning');
50
+ const noErrors = errors.every((e) => "severity" in e && e.severity !== 'error');
51
51
  for (const error of errors) {
52
- this.log(`${this.flags.manifest}:${error.line}:${error.column} - ${error.message}`);
52
+ const severity = "severity" in error ? error.severity : 'error';
53
+ this.log(`${this.flags.manifest}:${error.line}:${error.column}: ${severity}: ${error.message}`);
53
54
  }
54
- if (allErrors && errors.length > 0) {
55
- this.error('Manifest loaded with errors', { exit: 1 });
56
- }
57
- else if (errors.length > 0) {
58
- this.warn('Manifest loaded with warnings');
55
+ if (!noErrors && errors.length > 0) {
56
+ this.exit(1);
59
57
  }
60
58
  if (apps.length === 0) {
61
59
  this.error('No applications found in manifest', { exit: 1 });
@@ -10,6 +10,7 @@ export default class Branch extends BaseCommand<typeof Branch> {
10
10
  rainbowAuthService: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
11
  config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
12
  manifest: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ show: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
14
  };
14
15
  run(): Promise<void>;
15
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../../src/commands/build/branch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW,CAAC,OAAO,MAAM,CAAC;IAC5D,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,WAAW,SAAiD;IAEnE,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,KAAK;;;;;;;MA8BV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2C3B"}
1
+ {"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../../src/commands/build/branch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW,CAAC,OAAO,MAAM,CAAC;IAC5D,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,WAAW,SAAiD;IAEnE,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;MA+BV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAmD3B"}
@@ -6,7 +6,8 @@ export default class Branch extends BaseCommand {
6
6
  static description = 'create a new branch in the Raindrop catalog';
7
7
  static examples = [
8
8
  `<%= config.bin %> <%= command.id %> .
9
- Create a new branch in the Raindrop catalog.`,
9
+ Created new branch 1234
10
+ `,
10
11
  ];
11
12
  static flags = {
12
13
  previousVersionId: Flags.string({
@@ -38,11 +39,17 @@ Create a new branch in the Raindrop catalog.`,
38
39
  hidden: true,
39
40
  }),
40
41
  manifest: Flags.string({ default: 'raindrop.manifest', description: 'project manifest' }),
42
+ show: Flags.boolean({ description: 'show the current branch', required: false }),
41
43
  };
42
44
  async run() {
43
45
  const { client: catalogService, userId, organizationId: defaultOrganizationId } = await this.catalogService();
44
46
  const organizationId = this.flags.impersonate ?? defaultOrganizationId;
45
47
  const config = await this.loadConfig();
48
+ // Allow the user to see the currently selected version
49
+ if (this.flags.show) {
50
+ this.log(`Current branch: ${config.versionId}`);
51
+ return;
52
+ }
46
53
  // If we're selecting a version, just update config.
47
54
  if (this.flags.select) {
48
55
  // Check if this is a valid version.
@@ -63,19 +70,21 @@ Create a new branch in the Raindrop catalog.`,
63
70
  this.error('No application found in manifest', { exit: 1 });
64
71
  }
65
72
  const applicationResp = await catalogService.applications({ userId, organizationId });
66
- if (applicationResp.applications.some((a) => (a.name !== valueOf(app.name) && a.versionId === this.flags.select))) {
73
+ if (applicationResp.applications.some((a) => a.name !== valueOf(app.name) && a.versionId === this.flags.select)) {
67
74
  this.error(`Cannot select version ${this.flags.select} belonging to another application`, { exit: 1 });
68
75
  }
69
76
  config.versionId = this.flags.select;
70
77
  await this.saveConfig(config);
71
78
  return;
72
79
  }
80
+ const previousVersionId = this.flags.previousVersionId || config.versionId;
73
81
  const resp = await catalogService.createVersion({
74
82
  userId,
75
83
  organizationId,
76
- previousVersionId: this.flags.previousVersionId || config.versionId,
84
+ previousVersionId,
77
85
  });
78
86
  config.versionId = resp.versionId;
79
87
  await this.saveConfig(config);
88
+ console.log(`Created new branch ${config.versionId}`);
80
89
  }
81
90
  }
@@ -12,6 +12,7 @@ export default class Deploy extends BaseCommand<typeof Deploy> {
12
12
  rainbowAuthService: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
13
  start: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
14
  config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
15
+ amend: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
16
  };
16
17
  run(): Promise<void>;
17
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/build/deploy.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW,CAAC,OAAO,MAAM,CAAC;IAC5D,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,WAAW,SAAmC;IAErD,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;MAiCV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkG3B"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/build/deploy.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW,CAAC,OAAO,MAAM,CAAC;IAC5D,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,WAAW,SAAmC;IAErD,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;MAkCV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwH3B"}
@@ -1,7 +1,7 @@
1
1
  import { valueOf } from '@liquidmetal-ai/drizzle/appify/build';
2
2
  import { JSONTranslator, Parser, Tokenizer } from '@liquidmetal-ai/drizzle/appify/parse';
3
3
  import { archive } from '@liquidmetal-ai/drizzle/codestore';
4
- import { BundleArchiveType } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/catalog_pb';
4
+ import { BundleArchiveType, } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/catalog_pb';
5
5
  import { FileSystemBundle } from '@liquidmetal-ai/drizzle/unsafe/codestore';
6
6
  import { Flags } from '@oclif/core';
7
7
  import fs from 'node:fs/promises';
@@ -50,6 +50,7 @@ Deploy a Raindrop application.
50
50
  default: false,
51
51
  }),
52
52
  config: Flags.string({ default: '.raindrop/config.json', hidden: true }),
53
+ amend: Flags.boolean({ char: 'a', description: 'amend an existing application', required: false, default: false }),
53
54
  };
54
55
  async run() {
55
56
  // Build then deploy
@@ -76,33 +77,51 @@ Deploy a Raindrop application.
76
77
  }
77
78
  const { client: catalogService, userId, organizationId: defaultOrganizationId } = await this.catalogService();
78
79
  const organizationId = this.flags.impersonate ?? defaultOrganizationId;
79
- const applications = apps.map((app) => ({
80
- name: valueOf(app.name),
81
- manifest: manifestContents,
82
- manifestJson: JSON.stringify(manifestJson),
83
- version: {
84
- case: 'versionId',
85
- value: versionId,
86
- },
87
- isActive: this.flags.start,
88
- }));
89
- const appsResp = await catalogService.createApplications({
90
- applications,
91
- userId,
92
- organizationId,
93
- suite: undefined, // TODO [bosgood] Provide suite name once available
94
- });
80
+ let changed = [];
81
+ if (this.flags.amend) {
82
+ const manifests = apps.map((app) => ({
83
+ name: valueOf(app.name),
84
+ versionId,
85
+ manifest: manifestContents,
86
+ }));
87
+ const appsResp = await catalogService.setApplicationManifests({
88
+ manifests,
89
+ userId,
90
+ organizationId,
91
+ });
92
+ changed = appsResp.success;
93
+ if (appsResp.failure.length > 0) {
94
+ this.error(`Failed to amend applications: ${appsResp.failure.map((a) => `${a.name}@${a.versionId}`).join(', ')}. Make sure the application exists and the version is sandboxed.`, { exit: 1 });
95
+ }
96
+ }
97
+ else {
98
+ const applications = apps.map((app) => ({
99
+ name: valueOf(app.name),
100
+ manifest: manifestContents,
101
+ manifestJson: JSON.stringify(manifestJson),
102
+ version: {
103
+ case: 'versionId',
104
+ value: versionId,
105
+ },
106
+ isActive: this.flags.start,
107
+ }));
108
+ const appsResp = await catalogService.createApplications({
109
+ applications,
110
+ userId,
111
+ organizationId,
112
+ suite: undefined, // TODO [bosgood] Provide suite name once available
113
+ });
114
+ changed = appsResp.applications;
115
+ }
95
116
  // Upload bundle to this version's store.
96
117
  for (const [i, app] of apps.entries()) {
97
- const appResp = appsResp.applications[i];
118
+ const appResp = changed[i];
98
119
  if (!appResp) {
99
- // TODO [bosgood] We'll be able to basically eliminate the possibility of this happening
100
- // by converting createApplications in the API and State to a createMany function.
101
120
  this.error(`Failed to create application ${valueOf(app.name)}, not uploading code bundle`, { exit: false });
102
121
  continue;
103
122
  }
104
123
  const versionId = appResp.versionId;
105
- this.log(`Created application "${valueOf(app.name)}" with version ID "${versionId}"`);
124
+ this.log(`${this.flags.amend ? 'Updated' : 'Created'} application "${valueOf(app.name)}" with version ID "${versionId}"`);
106
125
  for (const handler of app.handlers()) {
107
126
  const bundle = new FileSystemBundle(path.join(buildDir, valueOf(handler.name)));
108
127
  await catalogService.uploadBundle({
@@ -113,12 +132,11 @@ Deploy a Raindrop application.
113
132
  bundleName: valueOf(handler.name),
114
133
  archive: Buffer.from(await archive(bundle)),
115
134
  });
116
- this.log(`Uploaded bundle "${handler}"`);
135
+ this.log(`Uploaded bundle "${valueOf(handler.name)}"`);
117
136
  }
118
137
  // Per above, each application gets the same db bundle, which is
119
138
  // boneheaded. src/db is pretty arbitrary.
120
- const srcDir = path.join(this.flags.root, 'src');
121
- const dbDir = path.join(srcDir, 'db');
139
+ const dbDir = path.join(this.flags.root, 'db');
122
140
  let dbExists = false;
123
141
  try {
124
142
  const stat = await fs.lstat(dbDir);
@@ -128,7 +146,7 @@ Deploy a Raindrop application.
128
146
  // Nothing to do
129
147
  }
130
148
  if (dbExists) {
131
- const dbBundle = new FileSystemBundle(path.join(srcDir, 'db'));
149
+ const dbBundle = new FileSystemBundle(path.join(this.flags.root, 'db'));
132
150
  await catalogService.uploadBundle({
133
151
  organizationId,
134
152
  applicationName: valueOf(app.name),
@@ -1 +1 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/commands/build/env/get.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,WAAW,CAAC,OAAO,GAAG,CAAC;IACtD,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,WAAW,SAA2B;IAE7C,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;MA+BV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwD3B"}
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/commands/build/env/get.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,WAAW,CAAC,OAAO,GAAG,CAAC;IACtD,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,WAAW,SAA2B;IAE7C,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;MA+BV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA0D3B"}
@@ -61,7 +61,7 @@ sets an env var/secret.
61
61
  this.error('variable name not specified', { exit: 1 });
62
62
  }
63
63
  // If there's anything left in the path, it's nested.
64
- if (path.length == 0) {
64
+ if (path.length == 1) {
65
65
  // It's a top level variable.
66
66
  const envStanza = app.env.find((env) => valueOf(env.name) === envVarName);
67
67
  if (envStanza === undefined) {
@@ -69,7 +69,7 @@ sets an env var/secret.
69
69
  }
70
70
  isSecret = envStanza.secret && valueOf(envStanza.secret) || false;
71
71
  }
72
- else {
72
+ else if (path.length > 1) {
73
73
  // It's nested on some scripted module.
74
74
  const scriptModules = app.handlers();
75
75
  const scriptModule = scriptModules.find((module) => valueOf(module.name) === path[0]);
@@ -82,6 +82,9 @@ sets an env var/secret.
82
82
  }
83
83
  isSecret = envStanza.secret && valueOf(envStanza.secret) || false;
84
84
  }
85
+ else {
86
+ this.error('variable must be an env variable or secret', { exit: 1 });
87
+ }
85
88
  const config = await this.loadConfig();
86
89
  const { client: catalogService, userId, organizationId } = await this.catalogService();
87
90
  const resp = await catalogService.getEnv({
@@ -1 +1 @@
1
- {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../../src/commands/build/env/set.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,WAAW,CAAC,OAAO,GAAG,CAAC;IACtD,MAAM,CAAC,IAAI;;;MAGT;IAEF,MAAM,CAAC,WAAW,SAA2B;IAE7C,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;MA+BV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuE3B"}
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../../src/commands/build/env/set.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,WAAW,CAAC,OAAO,GAAG,CAAC;IACtD,MAAM,CAAC,IAAI;;;MAGT;IAEF,MAAM,CAAC,WAAW,SAA2B;IAE7C,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;MA+BV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyE3B"}
@@ -70,7 +70,7 @@ sets an env var/secret.
70
70
  this.error('variable name not specified', { exit: 1 });
71
71
  }
72
72
  // If there's anything left in the path, it's nested.
73
- if (path.length == 0) {
73
+ if (path.length == 1) {
74
74
  // It's a top level variable.
75
75
  const envStanza = app.env.find((env) => valueOf(env.name) === envVarName);
76
76
  if (envStanza === undefined) {
@@ -78,7 +78,7 @@ sets an env var/secret.
78
78
  }
79
79
  isSecret = envStanza.secret && valueOf(envStanza.secret) || false;
80
80
  }
81
- else {
81
+ else if (path.length > 1) {
82
82
  // It's nested on some scripted module.
83
83
  const scriptModules = app.handlers();
84
84
  const scriptModule = scriptModules.find((module) => valueOf(module.name) === path[0]);
@@ -91,6 +91,9 @@ sets an env var/secret.
91
91
  }
92
92
  isSecret = envStanza.secret && valueOf(envStanza.secret) || false;
93
93
  }
94
+ else {
95
+ this.error('variable must be an env variable or secret', { exit: 1 });
96
+ }
94
97
  // Read stdin if no value is supplied.
95
98
  if (this.args.value === undefined) {
96
99
  this.log('no value supplied, reading stdin...');
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/build/list.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAW,CAAC,OAAO,IAAI,CAAC;IACxD,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,WAAW,SAAqC;IAEvD,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;MAoBV;IAEI,YAAY;IAmCZ,gBAAgB;IA0ChB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAW3B"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/build/list.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAW,CAAC,OAAO,IAAI,CAAC;IACxD,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,WAAW,SAAqC;IAEvD,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;MAoBV;IAEI,YAAY;IAoCZ,gBAAgB;IA0ChB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAW3B"}
@@ -45,7 +45,9 @@ List Raindrop catalog resources.
45
45
  const dateStr = v.createdAt ? v.createdAt.toDate().toISOString() : '';
46
46
  acc[dateStr] = v;
47
47
  return acc;
48
- }, {}), ['versionId', 'previousVersionId']);
48
+ },
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ {}), ['versionId', 'previousVersionId', 'isSandboxed']);
49
51
  }
50
52
  else if (this.flags.output === 'json') {
51
53
  this.log(JSON.stringify(resp, null, 2));
@@ -0,0 +1,16 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class Sandbox extends BaseCommand<typeof Sandbox> {
3
+ static args: {
4
+ versionId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
5
+ };
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ impersonate: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ rainbowAuthService: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
+ manifest: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../src/commands/build/sandbox.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAAW,CAAC,OAAO,OAAO,CAAC;IAC9D,MAAM,CAAC,IAAI;;MAET;IACF,MAAM,CAAC,WAAW,SAAyD;IAE3E,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,KAAK;;;;;MAiBV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyB3B"}
@@ -0,0 +1,54 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ export default class Sandbox extends BaseCommand {
4
+ static args = {
5
+ versionId: Args.string({ char: 'v', description: 'version to sandbox', required: false }),
6
+ };
7
+ static description = 'mark a version as sandboxed in the Raindrop catalog';
8
+ static examples = [
9
+ `<%= config.bin %> <%= command.id %>
10
+ `,
11
+ ];
12
+ static flags = {
13
+ impersonate: Flags.string({
14
+ char: 'i',
15
+ description: 'impersonate organization',
16
+ required: false,
17
+ hidden: true,
18
+ }),
19
+ rainbowAuthService: Flags.string({
20
+ default: 'https://liquidmetal.run/api/connect',
21
+ hidden: true,
22
+ env: 'LIQUIDMETAL_RAINBOW_AUTH_SERVICE',
23
+ }),
24
+ config: Flags.string({
25
+ default: '.raindrop/config.json',
26
+ hidden: true,
27
+ }),
28
+ manifest: Flags.string({ default: 'raindrop.manifest', description: 'project manifest' }),
29
+ };
30
+ async run() {
31
+ const { client: catalogService, userId, organizationId: defaultOrganizationId } = await this.catalogService();
32
+ const organizationId = this.flags.impersonate ?? defaultOrganizationId;
33
+ const config = await this.loadConfig();
34
+ const resp = await catalogService.setVersionSandboxStates({
35
+ userId,
36
+ organizationId,
37
+ versions: [
38
+ {
39
+ versionId: this.args.versionId || config.versionId,
40
+ isSandboxed: true,
41
+ },
42
+ ],
43
+ });
44
+ for (const version of resp.success) {
45
+ this.log(`Set version ${version.versionId} as sandboxed.`);
46
+ }
47
+ for (const version of resp.failure) {
48
+ this.error(`Failed to set version ${version.versionId} as sandboxed.`);
49
+ }
50
+ if (resp.failure.length > 0) {
51
+ this.exit(1);
52
+ }
53
+ }
54
+ }
@@ -54,8 +54,8 @@ Start a Raindrop application.
54
54
  const resp = await catalogService.setApplicationActiveStates({
55
55
  states: [
56
56
  {
57
- applicationName: this.flags.application || appName,
58
- applicationVersionId: this.flags.version || config.versionId,
57
+ name: this.flags.application || appName,
58
+ versionId: this.flags.version || config.versionId,
59
59
  isActive: true,
60
60
  },
61
61
  ],
@@ -50,8 +50,8 @@ Stop a Raindrop application.
50
50
  const resp = await catalogService.setApplicationActiveStates({
51
51
  states: [
52
52
  {
53
- applicationName: this.flags.application,
54
- applicationVersionId: this.flags.version,
53
+ name: this.flags.application,
54
+ versionId: this.flags.version,
55
55
  isActive: false,
56
56
  },
57
57
  ],
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from '../../../base-command.js';
2
+ export default class Check extends BaseCommand<typeof Check> {
3
+ static args: {};
4
+ static description: string;
5
+ static examples: string[];
6
+ static flags: {
7
+ root: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
+ manifest: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
+ };
10
+ run(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../../src/commands/build/tools/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW,CAAC,OAAO,KAAK,CAAC;IAC1D,OAAgB,IAAI,KAAM;IAE1B,OAAgB,WAAW,SAAiD;IAE5E,OAAgB,QAAQ,WAA2C;IAEnE,OAAgB,KAAK;;;MAQnB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
@@ -0,0 +1,19 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../../base-command.js';
3
+ export default class Check extends BaseCommand {
4
+ static args = {};
5
+ static description = 'validate a LiquidMetal.AI raindrop.manifest';
6
+ static examples = ['<%= config.bin %> <%= command.id %>'];
7
+ static flags = {
8
+ root: Flags.string({ char: 'r', description: 'root directory', required: false, default: process.cwd() }),
9
+ manifest: Flags.string({
10
+ char: 'm',
11
+ description: 'project manifest',
12
+ required: false,
13
+ default: 'raindrop.manifest',
14
+ }),
15
+ };
16
+ async run() {
17
+ await this.loadManifest();
18
+ }
19
+ }
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from '../../../base-command.js';
2
+ export default class Fmt extends BaseCommand<typeof Fmt> {
3
+ static args: {};
4
+ static description: string;
5
+ static examples: string[];
6
+ static flags: {
7
+ root: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
+ manifest: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
+ };
10
+ run(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=fmt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fmt.d.ts","sourceRoot":"","sources":["../../../../src/commands/build/tools/fmt.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,WAAW,CAAC,OAAO,GAAG,CAAC;IACtD,OAAgB,IAAI,KAAM;IAE1B,OAAgB,WAAW,SAA+C;IAE1E,OAAgB,QAAQ,WAA2C;IAEnE,OAAgB,KAAK;;;MAQnB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiBlC"}
@@ -0,0 +1,36 @@
1
+ import { Parser, Tokenizer, fmt } from '@liquidmetal-ai/drizzle/appify/parse';
2
+ import { Flags } from '@oclif/core';
3
+ import * as fs from 'node:fs/promises';
4
+ import * as path from 'node:path';
5
+ import { BaseCommand } from '../../../base-command.js';
6
+ export default class Fmt extends BaseCommand {
7
+ static args = {};
8
+ static description = 'format a LiquidMetal.AI raindrop.manifest';
9
+ static examples = ['<%= config.bin %> <%= command.id %>'];
10
+ static flags = {
11
+ root: Flags.string({ char: 'r', description: 'root directory', required: false, default: process.cwd() }),
12
+ manifest: Flags.string({
13
+ char: 'm',
14
+ description: 'project manifest',
15
+ required: false,
16
+ default: 'raindrop.manifest',
17
+ }),
18
+ };
19
+ async run() {
20
+ let manifestPath = this.flags.manifest;
21
+ if (this.flags.root) {
22
+ manifestPath = path.isAbsolute(this.flags.manifest)
23
+ ? this.flags.manifest
24
+ : path.join(this.flags.root, this.flags.manifest);
25
+ }
26
+ const contents = await fs.readFile(manifestPath, 'utf-8');
27
+ const tokenizer = new Tokenizer(contents);
28
+ const parser = new Parser(tokenizer);
29
+ const ast = parser.parse();
30
+ if (parser.errors.length > 0) {
31
+ this.error('errors parsing manifest', { exit: 1 });
32
+ }
33
+ const formatted = fmt(ast);
34
+ await fs.writeFile(manifestPath, formatted);
35
+ }
36
+ }
@@ -0,0 +1,16 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class Unsandbox extends BaseCommand<typeof Unsandbox> {
3
+ static args: {
4
+ versionId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
5
+ };
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ impersonate: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ rainbowAuthService: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
+ manifest: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=unsandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsandbox.d.ts","sourceRoot":"","sources":["../../../src/commands/build/unsandbox.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW,CAAC,OAAO,SAAS,CAAC;IAClE,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,WAAW,SAA2D;IAE7E,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,KAAK;;;;;MAiBV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyB3B"}
@@ -0,0 +1,54 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ export default class Unsandbox extends BaseCommand {
4
+ static args = {
5
+ versionId: Args.string({ char: 'v', description: 'version to sandbox', required: false }),
6
+ };
7
+ static description = 'mark a version as unsandboxed in the Raindrop catalog';
8
+ static examples = [
9
+ `<%= config.bin %> <%= command.id %>
10
+ `,
11
+ ];
12
+ static flags = {
13
+ impersonate: Flags.string({
14
+ char: 'i',
15
+ description: 'impersonate organization',
16
+ required: false,
17
+ hidden: true,
18
+ }),
19
+ rainbowAuthService: Flags.string({
20
+ default: 'https://liquidmetal.run/api/connect',
21
+ hidden: true,
22
+ env: 'LIQUIDMETAL_RAINBOW_AUTH_SERVICE',
23
+ }),
24
+ config: Flags.string({
25
+ default: '.raindrop/config.json',
26
+ hidden: true,
27
+ }),
28
+ manifest: Flags.string({ default: 'raindrop.manifest', description: 'project manifest' }),
29
+ };
30
+ async run() {
31
+ const { client: catalogService, userId, organizationId: defaultOrganizationId } = await this.catalogService();
32
+ const organizationId = this.flags.impersonate ?? defaultOrganizationId;
33
+ const config = await this.loadConfig();
34
+ const resp = await catalogService.setVersionSandboxStates({
35
+ userId,
36
+ organizationId,
37
+ versions: [
38
+ {
39
+ versionId: this.args.versionId || config.versionId,
40
+ isSandboxed: false,
41
+ },
42
+ ],
43
+ });
44
+ for (const version of resp.success) {
45
+ this.log(`Set version ${version.versionId} as unsandboxed.`);
46
+ }
47
+ for (const version of resp.failure) {
48
+ this.error(`Failed to set version ${version.versionId} as unsandboxed.`);
49
+ }
50
+ if (resp.failure.length > 0) {
51
+ this.exit(1);
52
+ }
53
+ }
54
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/commands/build/upload.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW,CAAC,OAAO,MAAM,CAAC;IAC5D,OAAgB,IAAI,KAAM;IAE1B,OAAgB,WAAW,SAAiD;IAE5E,OAAgB,QAAQ,WAA2C;IAEnE,OAAgB,KAAK;;;;;;;;MAsBnB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyClC"}
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/commands/build/upload.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW,CAAC,OAAO,MAAM,CAAC;IAC5D,OAAgB,IAAI,KAAM;IAE1B,OAAgB,WAAW,SAAiD;IAE5E,OAAgB,QAAQ,WAA2C;IAEnE,OAAgB,KAAK;;;;;;;;MAsBnB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwClC"}
@@ -35,7 +35,6 @@ export default class Upload extends BaseCommand {
35
35
  };
36
36
  async run() {
37
37
  const apps = await this.loadManifest();
38
- const srcDir = path.join(this.flags.root, 'src');
39
38
  const buildDir = path.isAbsolute(this.flags.output)
40
39
  ? this.flags.output
41
40
  : path.join(this.flags.root, this.flags.output);
@@ -61,7 +60,7 @@ export default class Upload extends BaseCommand {
61
60
  }
62
61
  // Per above, each application gets the same db bundle, which is
63
62
  // boneheaded. src/db is also pretty arbitrary.
64
- const dbBundle = new FileSystemBundle(path.join(srcDir, 'db'));
63
+ const dbBundle = new FileSystemBundle(path.join(this.flags.root, 'db'));
65
64
  await catalogService.uploadBundle({
66
65
  userId,
67
66
  organizationId,
@@ -1 +1 @@
1
- {"root":["../src/base-command.ts","../src/build.test.ts","../src/build.ts","../src/codegen.test.ts","../src/codegen.ts","../src/config.test.ts","../src/config.ts","../src/index.test.ts","../src/index.ts","../src/commands/auth/list.ts","../src/commands/auth/login.ts","../src/commands/auth/logout.ts","../src/commands/auth/select.ts","../src/commands/build/branch.ts","../src/commands/build/delete.ts","../src/commands/build/deploy.ts","../src/commands/build/find.ts","../src/commands/build/generate.ts","../src/commands/build/init.ts","../src/commands/build/list.ts","../src/commands/build/start.ts","../src/commands/build/stop.ts","../src/commands/build/token.ts","../src/commands/build/upload.ts","../src/commands/build/validate.ts","../src/commands/build/env/get.ts","../src/commands/build/env/set.ts"],"version":"5.6.2"}
1
+ {"root":["../src/base-command.ts","../src/build.test.ts","../src/build.ts","../src/codegen.test.ts","../src/codegen.ts","../src/config.test.ts","../src/config.ts","../src/index.test.ts","../src/index.ts","../src/commands/auth/list.ts","../src/commands/auth/login.ts","../src/commands/auth/logout.ts","../src/commands/auth/select.ts","../src/commands/build/branch.ts","../src/commands/build/delete.ts","../src/commands/build/deploy.ts","../src/commands/build/find.ts","../src/commands/build/generate.ts","../src/commands/build/init.ts","../src/commands/build/list.ts","../src/commands/build/sandbox.ts","../src/commands/build/start.ts","../src/commands/build/stop.ts","../src/commands/build/token.ts","../src/commands/build/unsandbox.ts","../src/commands/build/upload.ts","../src/commands/build/validate.ts","../src/commands/build/env/get.ts","../src/commands/build/env/set.ts","../src/commands/build/tools/check.ts","../src/commands/build/tools/fmt.ts"],"version":"5.6.2"}
@@ -122,7 +122,7 @@
122
122
  "args": {},
123
123
  "description": "create a new branch in the Raindrop catalog",
124
124
  "examples": [
125
- "<%= config.bin %> <%= command.id %> .\nCreate a new branch in the Raindrop catalog."
125
+ "<%= config.bin %> <%= command.id %> .\nCreated new branch 1234\n"
126
126
  ],
127
127
  "flags": {
128
128
  "previousVersionId": {
@@ -186,6 +186,13 @@
186
186
  "hasDynamicHelp": false,
187
187
  "multiple": false,
188
188
  "type": "option"
189
+ },
190
+ "show": {
191
+ "description": "show the current branch",
192
+ "name": "show",
193
+ "required": false,
194
+ "allowNo": false,
195
+ "type": "boolean"
189
196
  }
190
197
  },
191
198
  "hasDynamicHelp": false,
@@ -391,6 +398,14 @@
391
398
  "hasDynamicHelp": false,
392
399
  "multiple": false,
393
400
  "type": "option"
401
+ },
402
+ "amend": {
403
+ "char": "a",
404
+ "description": "amend an existing application",
405
+ "name": "amend",
406
+ "required": false,
407
+ "allowNo": false,
408
+ "type": "boolean"
394
409
  }
395
410
  },
396
411
  "hasDynamicHelp": false,
@@ -674,6 +689,72 @@
674
689
  "list.js"
675
690
  ]
676
691
  },
692
+ "build:sandbox": {
693
+ "aliases": [],
694
+ "args": {
695
+ "versionId": {
696
+ "description": "version to sandbox",
697
+ "name": "versionId",
698
+ "required": false
699
+ }
700
+ },
701
+ "description": "mark a version as sandboxed in the Raindrop catalog",
702
+ "examples": [
703
+ "<%= config.bin %> <%= command.id %>\n"
704
+ ],
705
+ "flags": {
706
+ "impersonate": {
707
+ "char": "i",
708
+ "description": "impersonate organization",
709
+ "hidden": true,
710
+ "name": "impersonate",
711
+ "required": false,
712
+ "hasDynamicHelp": false,
713
+ "multiple": false,
714
+ "type": "option"
715
+ },
716
+ "rainbowAuthService": {
717
+ "env": "LIQUIDMETAL_RAINBOW_AUTH_SERVICE",
718
+ "hidden": true,
719
+ "name": "rainbowAuthService",
720
+ "default": "https://liquidmetal.run/api/connect",
721
+ "hasDynamicHelp": false,
722
+ "multiple": false,
723
+ "type": "option"
724
+ },
725
+ "config": {
726
+ "hidden": true,
727
+ "name": "config",
728
+ "default": ".raindrop/config.json",
729
+ "hasDynamicHelp": false,
730
+ "multiple": false,
731
+ "type": "option"
732
+ },
733
+ "manifest": {
734
+ "description": "project manifest",
735
+ "name": "manifest",
736
+ "default": "raindrop.manifest",
737
+ "hasDynamicHelp": false,
738
+ "multiple": false,
739
+ "type": "option"
740
+ }
741
+ },
742
+ "hasDynamicHelp": false,
743
+ "hiddenAliases": [],
744
+ "id": "build:sandbox",
745
+ "pluginAlias": "@liquidmetal-ai/raindrop",
746
+ "pluginName": "@liquidmetal-ai/raindrop",
747
+ "pluginType": "core",
748
+ "strict": true,
749
+ "enableJsonFlag": false,
750
+ "isESM": true,
751
+ "relativePath": [
752
+ "dist",
753
+ "commands",
754
+ "build",
755
+ "sandbox.js"
756
+ ]
757
+ },
677
758
  "build:start": {
678
759
  "aliases": [],
679
760
  "args": {},
@@ -848,6 +929,72 @@
848
929
  "token.js"
849
930
  ]
850
931
  },
932
+ "build:unsandbox": {
933
+ "aliases": [],
934
+ "args": {
935
+ "versionId": {
936
+ "description": "version to sandbox",
937
+ "name": "versionId",
938
+ "required": false
939
+ }
940
+ },
941
+ "description": "mark a version as unsandboxed in the Raindrop catalog",
942
+ "examples": [
943
+ "<%= config.bin %> <%= command.id %>\n"
944
+ ],
945
+ "flags": {
946
+ "impersonate": {
947
+ "char": "i",
948
+ "description": "impersonate organization",
949
+ "hidden": true,
950
+ "name": "impersonate",
951
+ "required": false,
952
+ "hasDynamicHelp": false,
953
+ "multiple": false,
954
+ "type": "option"
955
+ },
956
+ "rainbowAuthService": {
957
+ "env": "LIQUIDMETAL_RAINBOW_AUTH_SERVICE",
958
+ "hidden": true,
959
+ "name": "rainbowAuthService",
960
+ "default": "https://liquidmetal.run/api/connect",
961
+ "hasDynamicHelp": false,
962
+ "multiple": false,
963
+ "type": "option"
964
+ },
965
+ "config": {
966
+ "hidden": true,
967
+ "name": "config",
968
+ "default": ".raindrop/config.json",
969
+ "hasDynamicHelp": false,
970
+ "multiple": false,
971
+ "type": "option"
972
+ },
973
+ "manifest": {
974
+ "description": "project manifest",
975
+ "name": "manifest",
976
+ "default": "raindrop.manifest",
977
+ "hasDynamicHelp": false,
978
+ "multiple": false,
979
+ "type": "option"
980
+ }
981
+ },
982
+ "hasDynamicHelp": false,
983
+ "hiddenAliases": [],
984
+ "id": "build:unsandbox",
985
+ "pluginAlias": "@liquidmetal-ai/raindrop",
986
+ "pluginName": "@liquidmetal-ai/raindrop",
987
+ "pluginType": "core",
988
+ "strict": true,
989
+ "enableJsonFlag": false,
990
+ "isESM": true,
991
+ "relativePath": [
992
+ "dist",
993
+ "commands",
994
+ "build",
995
+ "unsandbox.js"
996
+ ]
997
+ },
851
998
  "build:upload": {
852
999
  "aliases": [],
853
1000
  "args": {},
@@ -1202,7 +1349,99 @@
1202
1349
  "env",
1203
1350
  "set.js"
1204
1351
  ]
1352
+ },
1353
+ "build:tools:check": {
1354
+ "aliases": [],
1355
+ "args": {},
1356
+ "description": "validate a LiquidMetal.AI raindrop.manifest",
1357
+ "examples": [
1358
+ "<%= config.bin %> <%= command.id %>"
1359
+ ],
1360
+ "flags": {
1361
+ "root": {
1362
+ "char": "r",
1363
+ "description": "root directory",
1364
+ "name": "root",
1365
+ "required": false,
1366
+ "default": "/Users/ian/liquidmetal/packages/raindrop",
1367
+ "hasDynamicHelp": false,
1368
+ "multiple": false,
1369
+ "type": "option"
1370
+ },
1371
+ "manifest": {
1372
+ "char": "m",
1373
+ "description": "project manifest",
1374
+ "name": "manifest",
1375
+ "required": false,
1376
+ "default": "raindrop.manifest",
1377
+ "hasDynamicHelp": false,
1378
+ "multiple": false,
1379
+ "type": "option"
1380
+ }
1381
+ },
1382
+ "hasDynamicHelp": false,
1383
+ "hiddenAliases": [],
1384
+ "id": "build:tools:check",
1385
+ "pluginAlias": "@liquidmetal-ai/raindrop",
1386
+ "pluginName": "@liquidmetal-ai/raindrop",
1387
+ "pluginType": "core",
1388
+ "strict": true,
1389
+ "enableJsonFlag": false,
1390
+ "isESM": true,
1391
+ "relativePath": [
1392
+ "dist",
1393
+ "commands",
1394
+ "build",
1395
+ "tools",
1396
+ "check.js"
1397
+ ]
1398
+ },
1399
+ "build:tools:fmt": {
1400
+ "aliases": [],
1401
+ "args": {},
1402
+ "description": "format a LiquidMetal.AI raindrop.manifest",
1403
+ "examples": [
1404
+ "<%= config.bin %> <%= command.id %>"
1405
+ ],
1406
+ "flags": {
1407
+ "root": {
1408
+ "char": "r",
1409
+ "description": "root directory",
1410
+ "name": "root",
1411
+ "required": false,
1412
+ "default": "/Users/ian/liquidmetal/packages/raindrop",
1413
+ "hasDynamicHelp": false,
1414
+ "multiple": false,
1415
+ "type": "option"
1416
+ },
1417
+ "manifest": {
1418
+ "char": "m",
1419
+ "description": "project manifest",
1420
+ "name": "manifest",
1421
+ "required": false,
1422
+ "default": "raindrop.manifest",
1423
+ "hasDynamicHelp": false,
1424
+ "multiple": false,
1425
+ "type": "option"
1426
+ }
1427
+ },
1428
+ "hasDynamicHelp": false,
1429
+ "hiddenAliases": [],
1430
+ "id": "build:tools:fmt",
1431
+ "pluginAlias": "@liquidmetal-ai/raindrop",
1432
+ "pluginName": "@liquidmetal-ai/raindrop",
1433
+ "pluginType": "core",
1434
+ "strict": true,
1435
+ "enableJsonFlag": false,
1436
+ "isESM": true,
1437
+ "relativePath": [
1438
+ "dist",
1439
+ "commands",
1440
+ "build",
1441
+ "tools",
1442
+ "fmt.js"
1443
+ ]
1205
1444
  }
1206
1445
  },
1207
- "version": "0.0.2"
1446
+ "version": "0.0.4"
1208
1447
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@liquidmetal-ai/raindrop",
3
3
  "description": "CLI for the Raindrop platform",
4
- "version": "0.0.2",
4
+ "version": "0.0.4",
5
5
  "author": "bosgood",
6
6
  "bin": {
7
7
  "raindrop": "./bin/run.js"