@ethlete/cli 2.0.1-next.0 → 2.1.0-next.10

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 (159) hide show
  1. package/CHANGELOG.md +107 -0
  2. package/README.md +173 -6
  3. package/design/define-call.ts +92 -0
  4. package/design/web/env.d.ts +11 -0
  5. package/design/web/frame.html +17 -0
  6. package/design/web/frame.ts +38 -0
  7. package/design/web/host.css +494 -0
  8. package/design/web/host.ts +445 -0
  9. package/design/web/index.html +11 -0
  10. package/package.json +12 -1
  11. package/src/index.d.ts +1 -1
  12. package/src/index.js +96 -10
  13. package/src/index.js.map +1 -1
  14. package/src/lib/api/api-command.d.ts +5 -0
  15. package/src/lib/api/api-command.js +27 -0
  16. package/src/lib/api/api-command.js.map +1 -0
  17. package/src/lib/api/auth-hint.d.ts +16 -0
  18. package/src/lib/api/auth-hint.js +59 -0
  19. package/src/lib/api/auth-hint.js.map +1 -0
  20. package/src/lib/api/clear.d.ts +36 -0
  21. package/src/lib/api/clear.js +121 -0
  22. package/src/lib/api/clear.js.map +1 -0
  23. package/src/lib/api/clone.d.ts +12 -0
  24. package/src/lib/api/clone.js +24 -0
  25. package/src/lib/api/clone.js.map +1 -0
  26. package/src/lib/api/compose.d.ts +46 -0
  27. package/src/lib/api/compose.js +101 -0
  28. package/src/lib/api/compose.js.map +1 -0
  29. package/src/lib/api/definition.d.ts +37 -0
  30. package/src/lib/api/definition.js +33 -0
  31. package/src/lib/api/definition.js.map +1 -0
  32. package/src/lib/api/git.d.ts +25 -0
  33. package/src/lib/api/git.js +71 -0
  34. package/src/lib/api/git.js.map +1 -0
  35. package/src/lib/api/help.d.ts +11 -0
  36. package/src/lib/api/help.js +72 -0
  37. package/src/lib/api/help.js.map +1 -0
  38. package/src/lib/api/index.d.ts +15 -0
  39. package/src/lib/api/index.js +19 -0
  40. package/src/lib/api/index.js.map +1 -0
  41. package/src/lib/api/load-definitions.d.ts +16 -0
  42. package/src/lib/api/load-definitions.js +22 -0
  43. package/src/lib/api/load-definitions.js.map +1 -0
  44. package/src/lib/api/ports.d.ts +13 -0
  45. package/src/lib/api/ports.js +98 -0
  46. package/src/lib/api/ports.js.map +1 -0
  47. package/src/lib/api/resolve-checkout.d.ts +45 -0
  48. package/src/lib/api/resolve-checkout.js +91 -0
  49. package/src/lib/api/resolve-checkout.js.map +1 -0
  50. package/src/lib/api/run.d.ts +10 -0
  51. package/src/lib/api/run.js +332 -0
  52. package/src/lib/api/run.js.map +1 -0
  53. package/src/lib/api/setup.d.ts +15 -0
  54. package/src/lib/api/setup.js +41 -0
  55. package/src/lib/api/setup.js.map +1 -0
  56. package/src/lib/api/state.d.ts +20 -0
  57. package/src/lib/api/state.js +33 -0
  58. package/src/lib/api/state.js.map +1 -0
  59. package/src/lib/api/suggest.d.ts +7 -0
  60. package/src/lib/api/suggest.js +35 -0
  61. package/src/lib/api/suggest.js.map +1 -0
  62. package/src/lib/auth/auth-command.d.ts +11 -0
  63. package/src/lib/auth/auth-command.js +165 -0
  64. package/src/lib/auth/auth-command.js.map +1 -0
  65. package/src/lib/auth/composer-auth.d.ts +30 -0
  66. package/src/lib/auth/composer-auth.js +70 -0
  67. package/src/lib/auth/composer-auth.js.map +1 -0
  68. package/src/lib/auth/composer-repositories.d.ts +5 -0
  69. package/src/lib/auth/composer-repositories.js +33 -0
  70. package/src/lib/auth/composer-repositories.js.map +1 -0
  71. package/src/lib/auth/gitlab-token.d.ts +43 -0
  72. package/src/lib/auth/gitlab-token.js +72 -0
  73. package/src/lib/auth/gitlab-token.js.map +1 -0
  74. package/src/lib/auth/index.d.ts +4 -0
  75. package/src/lib/auth/index.js +8 -0
  76. package/src/lib/auth/index.js.map +1 -0
  77. package/src/lib/config/diagnose.d.ts +7 -0
  78. package/src/lib/config/diagnose.js +112 -0
  79. package/src/lib/config/diagnose.js.map +1 -0
  80. package/src/lib/config/index.d.ts +2 -0
  81. package/src/lib/config/index.js +6 -0
  82. package/src/lib/config/index.js.map +1 -0
  83. package/src/lib/config/local-config.d.ts +46 -0
  84. package/src/lib/config/local-config.js +57 -0
  85. package/src/lib/config/local-config.js.map +1 -0
  86. package/src/lib/design/calls-tsconfig.d.ts +6 -0
  87. package/src/lib/design/calls-tsconfig.js +37 -0
  88. package/src/lib/design/calls-tsconfig.js.map +1 -0
  89. package/src/lib/design/check.d.ts +11 -0
  90. package/src/lib/design/check.js +192 -0
  91. package/src/lib/design/check.js.map +1 -0
  92. package/src/lib/design/design-command.d.ts +10 -0
  93. package/src/lib/design/design-command.js +32 -0
  94. package/src/lib/design/design-command.js.map +1 -0
  95. package/src/lib/design/index.d.ts +5 -0
  96. package/src/lib/design/index.js +9 -0
  97. package/src/lib/design/index.js.map +1 -0
  98. package/src/lib/design/paths.d.ts +24 -0
  99. package/src/lib/design/paths.js +31 -0
  100. package/src/lib/design/paths.js.map +1 -0
  101. package/src/lib/design/serve.d.ts +7 -0
  102. package/src/lib/design/serve.js +144 -0
  103. package/src/lib/design/serve.js.map +1 -0
  104. package/src/lib/doctor/doctor-command.d.ts +7 -0
  105. package/src/lib/doctor/doctor-command.js +62 -0
  106. package/src/lib/doctor/doctor-command.js.map +1 -0
  107. package/src/lib/doctor/index.d.ts +1 -0
  108. package/src/lib/doctor/index.js +5 -0
  109. package/src/lib/doctor/index.js.map +1 -0
  110. package/src/lib/index.d.ts +7 -0
  111. package/src/lib/index.js +7 -0
  112. package/src/lib/index.js.map +1 -1
  113. package/src/lib/invocation.d.ts +9 -0
  114. package/src/lib/invocation.js +47 -0
  115. package/src/lib/invocation.js.map +1 -0
  116. package/src/lib/release.js +21 -3
  117. package/src/lib/release.js.map +1 -1
  118. package/src/lib/update/ai.d.ts +30 -0
  119. package/src/lib/update/ai.js +44 -0
  120. package/src/lib/update/ai.js.map +1 -0
  121. package/src/lib/update/args.d.ts +21 -0
  122. package/src/lib/update/args.js +89 -0
  123. package/src/lib/update/args.js.map +1 -0
  124. package/src/lib/update/index.d.ts +12 -0
  125. package/src/lib/update/index.js +16 -0
  126. package/src/lib/update/index.js.map +1 -0
  127. package/src/lib/update/migration-manifest.d.ts +40 -0
  128. package/src/lib/update/migration-manifest.js +137 -0
  129. package/src/lib/update/migration-manifest.js.map +1 -0
  130. package/src/lib/update/package-manager.d.ts +23 -0
  131. package/src/lib/update/package-manager.js +47 -0
  132. package/src/lib/update/package-manager.js.map +1 -0
  133. package/src/lib/update/packages.d.ts +65 -0
  134. package/src/lib/update/packages.js +147 -0
  135. package/src/lib/update/packages.js.map +1 -0
  136. package/src/lib/update/pending.d.ts +21 -0
  137. package/src/lib/update/pending.js +41 -0
  138. package/src/lib/update/pending.js.map +1 -0
  139. package/src/lib/update/plan.d.ts +51 -0
  140. package/src/lib/update/plan.js +101 -0
  141. package/src/lib/update/plan.js.map +1 -0
  142. package/src/lib/update/registry.d.ts +31 -0
  143. package/src/lib/update/registry.js +54 -0
  144. package/src/lib/update/registry.js.map +1 -0
  145. package/src/lib/update/run-migrations.d.ts +44 -0
  146. package/src/lib/update/run-migrations.js +73 -0
  147. package/src/lib/update/run-migrations.js.map +1 -0
  148. package/src/lib/update/semver.d.ts +19 -0
  149. package/src/lib/update/semver.js +79 -0
  150. package/src/lib/update/semver.js.map +1 -0
  151. package/src/lib/update/tasks.d.ts +58 -0
  152. package/src/lib/update/tasks.js +174 -0
  153. package/src/lib/update/tasks.js.map +1 -0
  154. package/src/lib/update/update-command.d.ts +12 -0
  155. package/src/lib/update/update-command.js +304 -0
  156. package/src/lib/update/update-command.js.map +1 -0
  157. package/src/lib/utils.d.ts +14 -0
  158. package/src/lib/utils.js +14 -1
  159. package/src/lib/utils.js.map +1 -1
@@ -0,0 +1,494 @@
1
+ :root {
2
+ --h-ground: #131313;
3
+ --h-panel: #1b1b1b;
4
+ --h-ink: #e6e2da;
5
+ --h-ink-3: #8b8578;
6
+ --h-line: #2c2c2c;
7
+ --h-prose: 21rem;
8
+ }
9
+
10
+ body {
11
+ display: grid;
12
+ margin: 0;
13
+ grid-template-columns: 18rem 1fr;
14
+ min-height: 100vh;
15
+ background: var(--h-ground);
16
+ color: var(--h-ink);
17
+ font:
18
+ 300 14px/1.5 system-ui,
19
+ sans-serif;
20
+ }
21
+
22
+ /* The tree stands still while the calls scroll, and scrolls on its own when it is longer than the window. */
23
+ nav {
24
+ position: sticky;
25
+ top: 0;
26
+ display: flex;
27
+ height: 100vh;
28
+ box-sizing: border-box;
29
+ flex-direction: column;
30
+ align-self: start;
31
+ gap: 20px;
32
+ padding: 24px 12px;
33
+ border-right: 1px solid var(--h-line);
34
+ overflow-y: auto;
35
+ overscroll-behavior: contain;
36
+ }
37
+
38
+ nav section {
39
+ display: flex;
40
+ flex-direction: column;
41
+ gap: 2px;
42
+ }
43
+
44
+ nav > section > h3 {
45
+ margin: 0 0 4px 12px;
46
+ color: var(--h-ink-3);
47
+ font-family: ui-monospace, monospace;
48
+ font-size: 10px;
49
+ font-weight: 400;
50
+ letter-spacing: 0.2em;
51
+ text-transform: uppercase;
52
+ }
53
+
54
+ nav a {
55
+ padding: 8px 12px;
56
+ border-radius: 6px;
57
+ color: var(--h-ink-3);
58
+ text-decoration: none;
59
+ font-family: ui-monospace, monospace;
60
+ font-size: 12px;
61
+ }
62
+
63
+ nav a:hover {
64
+ background: var(--h-panel);
65
+ }
66
+
67
+ nav a[aria-current] {
68
+ background: var(--h-panel);
69
+ color: var(--h-ink);
70
+ }
71
+
72
+ .nav-rounds {
73
+ display: flex;
74
+ flex-direction: column;
75
+ margin: 2px 0 6px 12px;
76
+ border-left: 1px solid var(--h-line);
77
+ }
78
+
79
+ .nav-rounds a {
80
+ padding: 5px 10px;
81
+ border-radius: 0 6px 6px 0;
82
+ font-size: 11px;
83
+ }
84
+
85
+ main {
86
+ display: flex;
87
+ flex-direction: column;
88
+ gap: 56px;
89
+ padding: 48px 56px;
90
+ overflow-x: auto;
91
+ }
92
+
93
+ .round {
94
+ display: flex;
95
+ flex-direction: column;
96
+ gap: 32px;
97
+ scroll-margin-top: 24px;
98
+ }
99
+
100
+ .round-head {
101
+ display: flex;
102
+ max-width: 68ch;
103
+ flex-direction: column;
104
+ gap: 8px;
105
+ padding-top: 24px;
106
+ border-top: 1px solid var(--h-line);
107
+ }
108
+
109
+ .round-head h2 {
110
+ margin: 0;
111
+ font-size: 19px;
112
+ font-weight: 300;
113
+ }
114
+
115
+ .round-head p {
116
+ margin: 0;
117
+ color: var(--h-ink-3);
118
+ text-wrap: pretty;
119
+ }
120
+
121
+ .views {
122
+ display: flex;
123
+ margin-top: 4px;
124
+ gap: 2px;
125
+ }
126
+
127
+ .views a {
128
+ padding: 5px 12px;
129
+ border: 1px solid var(--h-line);
130
+ color: var(--h-ink-3);
131
+ text-decoration: none;
132
+ font-family: ui-monospace, monospace;
133
+ font-size: 11px;
134
+ letter-spacing: 0.12em;
135
+ }
136
+
137
+ .views a:first-child {
138
+ border-radius: 6px 0 0 6px;
139
+ }
140
+
141
+ .views a:last-child {
142
+ border-radius: 0 6px 6px 0;
143
+ }
144
+
145
+ .views a[aria-current] {
146
+ background: var(--h-panel);
147
+ color: var(--h-ink);
148
+ }
149
+
150
+ /* The result is the end of the chain, so the chain itself sits under it as a line of keys. */
151
+ .trail {
152
+ display: flex;
153
+ align-items: center;
154
+ margin-top: 4px;
155
+ gap: 8px;
156
+ }
157
+
158
+ .trail a {
159
+ padding: 4px 9px;
160
+ border: 1px solid var(--h-line);
161
+ border-radius: 5px;
162
+ color: var(--h-ink-3);
163
+ text-decoration: none;
164
+ font-family: ui-monospace, monospace;
165
+ font-size: 11px;
166
+ letter-spacing: 0.1em;
167
+ }
168
+
169
+ .trail a:hover {
170
+ color: var(--h-ink);
171
+ }
172
+
173
+ .trail a[aria-current] {
174
+ border-color: #7fd4bf;
175
+ color: #7fd4bf;
176
+ }
177
+
178
+ .arrow {
179
+ color: var(--h-line);
180
+ font-size: 12px;
181
+ }
182
+
183
+ .result .round-head,
184
+ .tray .round-head {
185
+ border-top-color: var(--h-ink-3);
186
+ }
187
+
188
+ .fold {
189
+ align-self: start;
190
+ margin-top: 4px;
191
+ color: var(--h-ink-3);
192
+ text-decoration: none;
193
+ font-family: ui-monospace, monospace;
194
+ font-size: 11px;
195
+ letter-spacing: 0.1em;
196
+ }
197
+
198
+ .fold::before {
199
+ content: '\203A\00a0';
200
+ }
201
+
202
+ .fold:hover {
203
+ color: var(--h-ink);
204
+ }
205
+
206
+ /* A folded variant keeps its name on the page, so the thread of the round is still readable. */
207
+ .folded {
208
+ display: flex;
209
+ max-width: 68ch;
210
+ flex-direction: column;
211
+ gap: 2px;
212
+ margin: 0;
213
+ padding: 0;
214
+ list-style: none;
215
+ }
216
+
217
+ .folded li {
218
+ display: flex;
219
+ align-items: baseline;
220
+ justify-content: space-between;
221
+ gap: 16px;
222
+ padding: 7px 10px;
223
+ border-radius: 6px;
224
+ opacity: 0.55;
225
+ }
226
+
227
+ .folded li[data-verdict='chosen'] .tag {
228
+ color: #7fd4bf;
229
+ }
230
+
231
+ .folded li:hover {
232
+ background: var(--h-panel);
233
+ opacity: 1;
234
+ }
235
+
236
+ .folded a {
237
+ color: var(--h-ink);
238
+ text-decoration: none;
239
+ font-family: ui-monospace, monospace;
240
+ font-size: 11px;
241
+ letter-spacing: 0.12em;
242
+ text-transform: uppercase;
243
+ }
244
+
245
+ header {
246
+ display: flex;
247
+ max-width: 68ch;
248
+ flex-direction: column;
249
+ gap: 12px;
250
+ }
251
+
252
+ .eyebrow {
253
+ color: var(--h-ink-3);
254
+ font-family: ui-monospace, monospace;
255
+ font-size: 11px;
256
+ letter-spacing: 0.24em;
257
+ text-transform: uppercase;
258
+ }
259
+
260
+ h1 {
261
+ margin: 0;
262
+ font-size: 28px;
263
+ font-weight: 300;
264
+ }
265
+
266
+ header p {
267
+ margin: 0;
268
+ color: var(--h-ink-3);
269
+ text-wrap: pretty;
270
+ }
271
+
272
+ /*
273
+ * A track is as wide as the frame it holds, so the variants wrap to the next band when the window
274
+ * runs out of room. Row flow is what lets them wrap: each column takes four rows, so the next one
275
+ * starts beside it and only a full band pushes to a new line.
276
+ */
277
+ .grid {
278
+ display: grid;
279
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--frame-width, 0px)), 1fr));
280
+ grid-auto-flow: row;
281
+ gap: 72px 40px;
282
+ }
283
+
284
+ .column {
285
+ display: grid;
286
+ grid-row: span 4;
287
+ grid-template-rows: subgrid;
288
+ gap: 12px;
289
+ }
290
+
291
+ /* A view is one picture, so it gets the whole width and no subgrid. */
292
+ .grid[data-view] .column {
293
+ grid-row: auto;
294
+ grid-template-rows: none;
295
+ }
296
+
297
+ /* A column can be wider than a line of text should be, so the text keeps its own measure. */
298
+ .column h3,
299
+ .claim,
300
+ .cost {
301
+ max-width: var(--h-prose);
302
+ }
303
+
304
+ .stage {
305
+ display: flex;
306
+ padding: 24px 0;
307
+ justify-content: flex-start;
308
+ }
309
+
310
+ .column h3 {
311
+ display: flex;
312
+ align-items: baseline;
313
+ justify-content: space-between;
314
+ gap: 16px;
315
+ margin: 0;
316
+ font-family: ui-monospace, monospace;
317
+ font-size: 11px;
318
+ font-weight: 500;
319
+ letter-spacing: 0.18em;
320
+ text-transform: uppercase;
321
+ }
322
+
323
+ .column h3 a {
324
+ color: var(--h-ink);
325
+ text-decoration: none;
326
+ }
327
+
328
+ /*
329
+ * Two 1100px frames never fit a screen side by side, and shrinking them hides the pixels the
330
+ * comparison is about. The picks are stacked in one box at full size instead.
331
+ */
332
+ .overlay {
333
+ position: relative;
334
+ overflow: hidden;
335
+ cursor: crosshair;
336
+ }
337
+
338
+ .overlay iframe {
339
+ position: absolute;
340
+ top: 0;
341
+ left: 0;
342
+ pointer-events: none;
343
+ }
344
+
345
+ .seam {
346
+ position: absolute;
347
+ top: 0;
348
+ bottom: 0;
349
+ width: 1px;
350
+ background: #7fd4bf;
351
+ }
352
+
353
+ .switch {
354
+ display: flex;
355
+ align-items: center;
356
+ margin-top: 4px;
357
+ gap: 6px;
358
+ }
359
+
360
+ .switch button {
361
+ padding: 5px 11px;
362
+ border: 1px solid var(--h-line);
363
+ border-radius: 5px;
364
+ background: none;
365
+ color: var(--h-ink-3);
366
+ font-family: ui-monospace, monospace;
367
+ font-size: 11px;
368
+ letter-spacing: 0.1em;
369
+ cursor: pointer;
370
+ }
371
+
372
+ .switch button[aria-current] {
373
+ border-color: #7fd4bf;
374
+ color: #7fd4bf;
375
+ }
376
+
377
+ .hint {
378
+ margin-left: 8px;
379
+ color: var(--h-ink-3);
380
+ font-size: 11px;
381
+ }
382
+
383
+ .grid.sheet iframe {
384
+ display: block;
385
+ transform: scale(var(--de-scale, 1));
386
+ transform-origin: top left;
387
+ }
388
+
389
+ /* The contact sheet draws every variant at once, so one screen holds the whole call. */
390
+ .grid.sheet {
391
+ --thumb-width: calc(var(--frame-width) * var(--de-scale));
392
+
393
+ grid-template-columns: repeat(auto-fill, minmax(var(--thumb-width), max-content));
394
+ gap: 28px 20px;
395
+ }
396
+
397
+ .thumb {
398
+ display: flex;
399
+ width: var(--thumb-width);
400
+ flex-direction: column;
401
+ gap: 8px;
402
+ color: inherit;
403
+ text-decoration: none;
404
+ }
405
+
406
+ .thumb-frame {
407
+ overflow: hidden;
408
+ width: 100%;
409
+ border: 1px solid var(--h-line);
410
+ border-radius: 4px;
411
+ }
412
+
413
+ /* A thumbnail is read, never driven, and a click on it belongs to the link around it. */
414
+ .thumb-frame iframe {
415
+ pointer-events: none;
416
+ }
417
+
418
+ .thumb-name {
419
+ font-family: ui-monospace, monospace;
420
+ font-size: 10px;
421
+ letter-spacing: 0.12em;
422
+ text-transform: uppercase;
423
+ }
424
+
425
+ .thumb[data-verdict='rejected'] {
426
+ opacity: 0.45;
427
+ transition: opacity 0.15s;
428
+ }
429
+
430
+ .thumb:hover {
431
+ opacity: 1;
432
+ }
433
+
434
+ .thumb[data-verdict='chosen'] .thumb-name {
435
+ color: #7fd4bf;
436
+ }
437
+
438
+ .thumb[data-picked] .thumb-frame,
439
+ .column[data-picked] .stage {
440
+ outline: 1px solid #7fd4bf;
441
+ outline-offset: 4px;
442
+ }
443
+
444
+ /* A rejected variant stays readable, and comes back to full strength under the pointer. */
445
+ .column[data-verdict='rejected'] {
446
+ opacity: 0.45;
447
+ transition: opacity 0.15s;
448
+ }
449
+
450
+ .column[data-verdict='rejected']:hover {
451
+ opacity: 1;
452
+ }
453
+
454
+ [data-verdict='chosen'] .tag {
455
+ color: #7fd4bf;
456
+ }
457
+
458
+ .tag {
459
+ color: var(--h-ink-3);
460
+ font-size: 10px;
461
+ letter-spacing: 0.16em;
462
+ }
463
+
464
+ iframe {
465
+ border: 0;
466
+ background: transparent;
467
+ }
468
+
469
+ .claim,
470
+ .cost {
471
+ margin: 0;
472
+ font-size: 12px;
473
+ line-height: 1.5;
474
+ text-wrap: pretty;
475
+ }
476
+
477
+ .cost {
478
+ color: var(--h-ink-3);
479
+ }
480
+
481
+ .problem {
482
+ margin: 0;
483
+ padding: 12px 16px;
484
+ border-radius: 6px;
485
+ background: #1a1414;
486
+ color: #f0a0a0;
487
+ font-family: ui-monospace, monospace;
488
+ font-size: 12px;
489
+ }
490
+
491
+ .empty {
492
+ padding: 40px;
493
+ color: var(--h-ink-3);
494
+ }