@skillcdn/console 0.1.18 → 0.1.20

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 (140) hide show
  1. package/README.md +2 -2
  2. package/SKILLCDN.md +1 -1
  3. package/dist/api.d.ts +1 -1
  4. package/dist/api.d.ts.map +1 -1
  5. package/dist/api.js +1 -1
  6. package/dist/api.js.map +1 -1
  7. package/dist/cli/cli.d.ts +1 -1
  8. package/dist/cli/cli.d.ts.map +1 -1
  9. package/dist/cli/cli.js +353 -39
  10. package/dist/cli/cli.js.map +1 -1
  11. package/dist/cli/credentials.d.ts +102 -3
  12. package/dist/cli/credentials.d.ts.map +1 -1
  13. package/dist/cli/credentials.js +177 -8
  14. package/dist/cli/credentials.js.map +1 -1
  15. package/dist/cli/directory.d.ts +6 -0
  16. package/dist/cli/directory.d.ts.map +1 -1
  17. package/dist/cli/directory.js +37 -6
  18. package/dist/cli/directory.js.map +1 -1
  19. package/dist/cli/format.d.ts +10 -1
  20. package/dist/cli/format.d.ts.map +1 -1
  21. package/dist/cli/format.js +106 -2
  22. package/dist/cli/format.js.map +1 -1
  23. package/dist/cli/help.d.ts.map +1 -1
  24. package/dist/cli/help.js +44 -22
  25. package/dist/cli/help.js.map +1 -1
  26. package/dist/client.d.ts +21 -1
  27. package/dist/client.d.ts.map +1 -1
  28. package/dist/client.js +14 -1
  29. package/dist/client.js.map +1 -1
  30. package/dist/components/board.d.ts +23 -5
  31. package/dist/components/board.d.ts.map +1 -1
  32. package/dist/components/board.js +239 -9
  33. package/dist/components/board.js.map +1 -1
  34. package/dist/components/comments.d.ts +0 -2
  35. package/dist/components/comments.d.ts.map +1 -1
  36. package/dist/components/comments.js +14 -41
  37. package/dist/components/comments.js.map +1 -1
  38. package/dist/components/documents.d.ts +2 -0
  39. package/dist/components/documents.d.ts.map +1 -1
  40. package/dist/components/documents.js +51 -5
  41. package/dist/components/documents.js.map +1 -1
  42. package/dist/components/event-feed.d.ts.map +1 -1
  43. package/dist/components/event-feed.js +4 -0
  44. package/dist/components/event-feed.js.map +1 -1
  45. package/dist/components/files.d.ts +11 -0
  46. package/dist/components/files.d.ts.map +1 -0
  47. package/dist/components/files.js +44 -0
  48. package/dist/components/files.js.map +1 -0
  49. package/dist/components/goals.d.ts +17 -1
  50. package/dist/components/goals.d.ts.map +1 -1
  51. package/dist/components/goals.js +34 -9
  52. package/dist/components/goals.js.map +1 -1
  53. package/dist/components/markdown.d.ts +6 -0
  54. package/dist/components/markdown.d.ts.map +1 -1
  55. package/dist/components/markdown.js +7 -0
  56. package/dist/components/markdown.js.map +1 -1
  57. package/dist/components/pictures.d.ts +68 -0
  58. package/dist/components/pictures.d.ts.map +1 -0
  59. package/dist/components/pictures.js +213 -0
  60. package/dist/components/pictures.js.map +1 -0
  61. package/dist/components/projects.d.ts +12 -0
  62. package/dist/components/projects.d.ts.map +1 -1
  63. package/dist/components/projects.js +15 -0
  64. package/dist/components/projects.js.map +1 -1
  65. package/dist/components/runs.d.ts.map +1 -1
  66. package/dist/components/runs.js +34 -7
  67. package/dist/components/runs.js.map +1 -1
  68. package/dist/components/task-view.d.ts +3 -0
  69. package/dist/components/task-view.d.ts.map +1 -1
  70. package/dist/components/task-view.js +6 -4
  71. package/dist/components/task-view.js.map +1 -1
  72. package/dist/console.css +338 -37
  73. package/dist/console.d.ts.map +1 -1
  74. package/dist/console.js +124 -10
  75. package/dist/console.js.map +1 -1
  76. package/dist/data.d.ts +16 -1
  77. package/dist/data.d.ts.map +1 -1
  78. package/dist/data.js +47 -2
  79. package/dist/data.js.map +1 -1
  80. package/dist/docs-page.d.ts.map +1 -1
  81. package/dist/docs-page.js +14 -1
  82. package/dist/docs-page.js.map +1 -1
  83. package/dist/i18n/en.d.ts +56 -1
  84. package/dist/i18n/en.d.ts.map +1 -1
  85. package/dist/i18n/en.js +54 -3
  86. package/dist/i18n/en.js.map +1 -1
  87. package/dist/i18n/ko.d.ts.map +1 -1
  88. package/dist/i18n/ko.js +54 -3
  89. package/dist/i18n/ko.js.map +1 -1
  90. package/dist/index.d.ts +7 -5
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +7 -5
  93. package/dist/index.js.map +1 -1
  94. package/dist/router.d.ts +25 -6
  95. package/dist/router.d.ts.map +1 -1
  96. package/dist/router.js +38 -7
  97. package/dist/router.js.map +1 -1
  98. package/dist/rules.js +5 -5
  99. package/dist/rules.js.map +1 -1
  100. package/dist/schemas.d.ts +158 -0
  101. package/dist/schemas.d.ts.map +1 -1
  102. package/dist/schemas.js +78 -0
  103. package/dist/schemas.js.map +1 -1
  104. package/dist/vocabulary.d.ts +2 -2
  105. package/dist/vocabulary.d.ts.map +1 -1
  106. package/dist/vocabulary.js +3 -0
  107. package/dist/vocabulary.js.map +1 -1
  108. package/docs/specs/cli.md +19 -11
  109. package/docs/specs/rest.md +24 -6
  110. package/package.json +1 -1
  111. package/skills/working-the-board/SKILL.md +12 -6
  112. package/src/api.ts +13 -0
  113. package/src/cli/cli.ts +441 -42
  114. package/src/cli/credentials.ts +276 -14
  115. package/src/cli/directory.ts +43 -6
  116. package/src/cli/format.ts +138 -2
  117. package/src/cli/help.ts +46 -22
  118. package/src/client.ts +60 -0
  119. package/src/components/board.tsx +401 -28
  120. package/src/components/comments.tsx +30 -49
  121. package/src/components/documents.tsx +87 -4
  122. package/src/components/event-feed.tsx +4 -0
  123. package/src/components/files.ts +49 -0
  124. package/src/components/goals.tsx +173 -106
  125. package/src/components/markdown.tsx +19 -0
  126. package/src/components/pictures.tsx +389 -0
  127. package/src/components/projects.tsx +68 -0
  128. package/src/components/runs.tsx +73 -15
  129. package/src/components/task-view.tsx +43 -2
  130. package/src/console.tsx +268 -7
  131. package/src/data.ts +72 -1
  132. package/src/docs-page.tsx +18 -1
  133. package/src/i18n/en.ts +58 -3
  134. package/src/i18n/ko.ts +58 -3
  135. package/src/index.ts +28 -1
  136. package/src/router.ts +57 -9
  137. package/src/rules.ts +5 -5
  138. package/src/schemas.ts +97 -0
  139. package/src/styles/console.css +338 -37
  140. package/src/vocabulary.ts +3 -0
@@ -710,6 +710,14 @@ table {
710
710
  letter-spacing: -0.02em;
711
711
  }
712
712
 
713
+ /* The ways a page offers at its head, side by side. */
714
+ .sc-page-actions {
715
+ display: flex;
716
+ flex-wrap: wrap;
717
+ align-items: center;
718
+ gap: var(--sc-space-2);
719
+ }
720
+
713
721
  .sc-lead {
714
722
  max-width: var(--sc-width-prose);
715
723
  margin-bottom: var(--sc-space-5);
@@ -1342,28 +1350,6 @@ table {
1342
1350
  flex: 1;
1343
1351
  }
1344
1352
 
1345
- /* Moving a task from its card: a quiet control, as wide as the card. */
1346
- .sc-card-move select {
1347
- width: 100%;
1348
- min-height: 1.75rem;
1349
- padding: 0 var(--sc-space-2);
1350
- border: 1px solid transparent;
1351
- border-radius: var(--sc-radius-sm);
1352
- background: transparent;
1353
- color: var(--sc-color-text-faint);
1354
- font-size: var(--sc-text-xs);
1355
- transition:
1356
- border-color var(--sc-transition),
1357
- color var(--sc-transition);
1358
- }
1359
-
1360
- .sc-card-move select:hover,
1361
- .sc-card-move select:focus {
1362
- border-color: var(--sc-color-border-strong);
1363
- background: var(--sc-color-field);
1364
- color: var(--sc-color-text);
1365
- }
1366
-
1367
1353
  /* One task, and a page of the documents: the text in a column for reading, the facts beside it
1368
1354
  where the window is wide enough, under it where it is not. */
1369
1355
 
@@ -2166,16 +2152,111 @@ table {
2166
2152
  font-size: var(--sc-text-sm);
2167
2153
  }
2168
2154
 
2169
- /* A picture in a comment is seen where it is, no taller than a screen's worth. */
2170
- .sc-comment-picture img,
2155
+ /* A picture in a comment, or handed in on a run, is a thumbnail, no taller than a few lines, that
2156
+ opens large over the page; a picture that only comes over https, or one on a page of the
2157
+ documents, stays where it is, as the text has it. */
2158
+ .sc-picture-thumb {
2159
+ display: inline-block;
2160
+ padding: 0;
2161
+ border: 0;
2162
+ border-radius: var(--sc-radius-md);
2163
+ background: none;
2164
+ line-height: 0;
2165
+ cursor: zoom-in;
2166
+ }
2167
+
2168
+ .sc-picture-thumb:focus-visible {
2169
+ outline: 2px solid var(--sc-color-accent);
2170
+ outline-offset: 2px;
2171
+ }
2172
+
2173
+ .sc-picture-thumb img,
2171
2174
  .sc-comment .sc-prose img {
2172
2175
  display: block;
2176
+ width: auto;
2173
2177
  max-width: 100%;
2174
- max-height: 24rem;
2178
+ height: auto;
2179
+ max-height: 10rem;
2175
2180
  border: var(--sc-border);
2176
2181
  border-radius: var(--sc-radius-md);
2177
2182
  }
2178
2183
 
2184
+ .sc-prose .sc-picture-thumb {
2185
+ margin: var(--sc-space-2) 0;
2186
+ }
2187
+
2188
+ /* The picture large, over the page: a bar with its name and the ways to zoom and to close, the
2189
+ stage it moves on, and a hint. The page under it is dimmed and does not scroll. */
2190
+ .sc-overlay {
2191
+ position: fixed;
2192
+ z-index: 100;
2193
+ display: grid;
2194
+ grid-template-rows: auto minmax(0, 1fr) auto;
2195
+ inset: 0;
2196
+ background: color-mix(in srgb, var(--sc-color-bg) 90%, transparent);
2197
+ backdrop-filter: blur(12px);
2198
+ }
2199
+
2200
+ .sc-overlay-bar {
2201
+ display: flex;
2202
+ align-items: center;
2203
+ justify-content: space-between;
2204
+ gap: var(--sc-space-3);
2205
+ padding: var(--sc-space-3) var(--sc-space-4);
2206
+ }
2207
+
2208
+ .sc-overlay-name {
2209
+ min-width: 0;
2210
+ overflow: hidden;
2211
+ color: var(--sc-color-text);
2212
+ font-size: var(--sc-text-sm);
2213
+ text-overflow: ellipsis;
2214
+ white-space: nowrap;
2215
+ }
2216
+
2217
+ .sc-overlay-actions {
2218
+ display: flex;
2219
+ flex-shrink: 0;
2220
+ gap: var(--sc-space-1);
2221
+ }
2222
+
2223
+ .sc-overlay-stage {
2224
+ position: relative;
2225
+ display: grid;
2226
+ place-items: center;
2227
+ overflow: hidden;
2228
+ cursor: grab;
2229
+ touch-action: none;
2230
+ user-select: none;
2231
+ }
2232
+
2233
+ .sc-overlay-stage[data-dragging="true"] {
2234
+ cursor: grabbing;
2235
+ }
2236
+
2237
+ .sc-overlay-picture {
2238
+ width: auto;
2239
+ max-width: 100%;
2240
+ height: auto;
2241
+ max-height: 100%;
2242
+ transform-origin: center center;
2243
+ will-change: transform;
2244
+ }
2245
+
2246
+ .sc-overlay-hint {
2247
+ margin: 0;
2248
+ padding: var(--sc-space-2) var(--sc-space-4) var(--sc-space-3);
2249
+ color: var(--sc-color-text-muted);
2250
+ font-size: var(--sc-text-xs);
2251
+ text-align: center;
2252
+ }
2253
+
2254
+ @media (max-width: 40rem) {
2255
+ .sc-overlay-hint {
2256
+ display: none;
2257
+ }
2258
+ }
2259
+
2179
2260
  .sc-comment-files {
2180
2261
  display: grid;
2181
2262
  gap: var(--sc-space-2);
@@ -2185,7 +2266,8 @@ table {
2185
2266
  font-size: var(--sc-text-sm);
2186
2267
  }
2187
2268
 
2188
- .sc-comment-picture {
2269
+ .sc-comment-picture,
2270
+ .sc-artifact-picture {
2189
2271
  display: grid;
2190
2272
  gap: var(--sc-space-1);
2191
2273
  justify-items: start;
@@ -2196,7 +2278,8 @@ table {
2196
2278
  gap: var(--sc-space-2);
2197
2279
  }
2198
2280
 
2199
- .sc-comment-chosen {
2281
+ .sc-comment-chosen,
2282
+ .sc-chosen-files {
2200
2283
  display: flex;
2201
2284
  flex-wrap: wrap;
2202
2285
  gap: var(--sc-space-2);
@@ -2206,7 +2289,8 @@ table {
2206
2289
  font-size: var(--sc-text-sm);
2207
2290
  }
2208
2291
 
2209
- .sc-comment-chosen-file {
2292
+ .sc-comment-chosen-file,
2293
+ .sc-chosen-file {
2210
2294
  display: inline-flex;
2211
2295
  align-items: center;
2212
2296
  gap: var(--sc-space-1);
@@ -2224,13 +2308,15 @@ table {
2224
2308
  gap: var(--sc-space-2);
2225
2309
  }
2226
2310
 
2227
- .sc-comment-form-actions label {
2311
+ .sc-comment-form-actions label,
2312
+ .sc-file-choice {
2228
2313
  position: relative;
2229
2314
  cursor: pointer;
2230
2315
  }
2231
2316
 
2232
2317
  /* The file input is the label's: there for the keyboard and the screen reader, not seen. */
2233
- .sc-comment-file-input {
2318
+ .sc-comment-file-input,
2319
+ .sc-file-input {
2234
2320
  position: absolute;
2235
2321
  width: 1px;
2236
2322
  height: 1px;
@@ -2426,6 +2512,14 @@ table {
2426
2512
  opacity: 0.85;
2427
2513
  }
2428
2514
 
2515
+ /* The pictures for a page, under its body: the way to add one, and what becomes of it. */
2516
+ .sc-doc-form-pictures {
2517
+ display: flex;
2518
+ flex-wrap: wrap;
2519
+ align-items: center;
2520
+ gap: var(--sc-space-2);
2521
+ }
2522
+
2429
2523
  .sc-doc-attach {
2430
2524
  display: flex;
2431
2525
  flex-wrap: wrap;
@@ -2506,13 +2600,6 @@ table {
2506
2600
  }
2507
2601
  }
2508
2602
 
2509
- /* Where there is no pointer to hover with, the control on a card is as tall as a finger needs. */
2510
- @media (hover: none) {
2511
- .sc-card-move select {
2512
- min-height: 2rem;
2513
- }
2514
- }
2515
-
2516
2603
  /* The schedule, the roadmap and the categories (ADR-0019). */
2517
2604
 
2518
2605
  /* The colours a category may be shown in: names, painted here and nowhere else. Each is a
@@ -3680,3 +3767,217 @@ table {
3680
3767
  grid-template-columns: minmax(6rem, 8rem) minmax(16rem, 1fr);
3681
3768
  }
3682
3769
  }
3770
+
3771
+ /* A card is dragged to another column from anywhere on it but its title and its menu: with a
3772
+ mouse at once, under a finger once it has rested a moment, so that a finger that moves scrolls.
3773
+ The cursor is the standard `move`, which every platform draws itself; the column under the
3774
+ dragged card says it would take it, and a ghost of the card follows the pointer. */
3775
+ .sc-card {
3776
+ position: relative;
3777
+ }
3778
+
3779
+ .sc-card-movable {
3780
+ cursor: move;
3781
+ }
3782
+
3783
+ /* A finger resting on a card is neither selecting its words nor asking for the page's menu. */
3784
+ @media (pointer: coarse) {
3785
+ .sc-card-movable {
3786
+ -webkit-touch-callout: none;
3787
+ user-select: none;
3788
+ }
3789
+ }
3790
+
3791
+ .sc-card-dragging {
3792
+ opacity: 0.5;
3793
+ }
3794
+
3795
+ .sc-board-dragging,
3796
+ .sc-board-dragging .sc-card,
3797
+ .sc-board-dragging .sc-card * {
3798
+ cursor: move;
3799
+ user-select: none;
3800
+ }
3801
+
3802
+ /* The card's menu: three dots in the corner, seen on the card under the pointer or with the
3803
+ focus, and always to a finger; the menu itself stands over the page, clipped by no column. */
3804
+ .sc-card-menu-button {
3805
+ position: absolute;
3806
+ top: var(--sc-space-1);
3807
+ right: var(--sc-space-1);
3808
+ display: inline-flex;
3809
+ align-items: center;
3810
+ justify-content: center;
3811
+ width: 1.5rem;
3812
+ height: 1.5rem;
3813
+ padding: 0;
3814
+ border: 0;
3815
+ border-radius: var(--sc-radius-sm);
3816
+ background: none;
3817
+ color: var(--sc-color-text-faint);
3818
+ cursor: pointer;
3819
+ opacity: 0;
3820
+ transition:
3821
+ opacity var(--sc-transition),
3822
+ background var(--sc-transition),
3823
+ color var(--sc-transition);
3824
+ }
3825
+
3826
+ .sc-card-menu-button svg {
3827
+ width: 1rem;
3828
+ height: 1rem;
3829
+ }
3830
+
3831
+ .sc-card:hover .sc-card-menu-button,
3832
+ .sc-card:focus-within .sc-card-menu-button,
3833
+ .sc-card-menu-button[aria-expanded="true"] {
3834
+ opacity: 1;
3835
+ }
3836
+
3837
+ .sc-card-menu-button:hover,
3838
+ .sc-card-menu-button[aria-expanded="true"] {
3839
+ background: var(--sc-color-bg-inset);
3840
+ color: var(--sc-color-text);
3841
+ }
3842
+
3843
+ .sc-card-menu-button:focus-visible {
3844
+ outline: 2px solid var(--sc-color-accent);
3845
+ outline-offset: 1px;
3846
+ }
3847
+
3848
+ @media (pointer: coarse) {
3849
+ .sc-card-menu-button {
3850
+ opacity: 1;
3851
+ }
3852
+ }
3853
+
3854
+ .sc-card:has(.sc-card-menu-button) .sc-card-title {
3855
+ padding-right: 1.75rem;
3856
+ }
3857
+
3858
+ .sc-card-menu {
3859
+ position: fixed;
3860
+ z-index: 60;
3861
+ display: flex;
3862
+ flex-direction: column;
3863
+ min-width: 10rem;
3864
+ padding: var(--sc-space-1);
3865
+ border: var(--sc-border);
3866
+ border-radius: var(--sc-radius-lg);
3867
+ background: var(--sc-color-bg-inset);
3868
+ box-shadow: var(--sc-shadow-stage);
3869
+ }
3870
+
3871
+ .sc-column-over {
3872
+ outline: 2px solid var(--sc-color-accent);
3873
+ outline-offset: -2px;
3874
+ }
3875
+
3876
+ .sc-drag-ghost {
3877
+ position: fixed;
3878
+ top: 0;
3879
+ left: 0;
3880
+ z-index: 50;
3881
+ max-width: 18rem;
3882
+ padding: var(--sc-space-2) var(--sc-space-3);
3883
+ border: 1px solid var(--sc-color-accent);
3884
+ border-radius: var(--sc-radius-lg);
3885
+ background: var(--sc-color-bg-raised);
3886
+ box-shadow: var(--sc-glow);
3887
+ color: var(--sc-color-text);
3888
+ font-size: var(--sc-text-sm);
3889
+ pointer-events: none;
3890
+ }
3891
+
3892
+ /* A goal's page reads as the board does: the facts in a row at its head, then a switch between
3893
+ the views of its tasks, then the view, which takes the rest of the height as the board does. */
3894
+ .sc-goal-page {
3895
+ display: flex;
3896
+ flex: 1 1 0;
3897
+ flex-direction: column;
3898
+ gap: var(--sc-space-4);
3899
+ min-height: 0;
3900
+ }
3901
+
3902
+ .sc-goal-header {
3903
+ display: grid;
3904
+ gap: var(--sc-space-3);
3905
+ }
3906
+
3907
+ .sc-goal-progress {
3908
+ display: grid;
3909
+ grid-template-columns: minmax(0, 20rem) auto;
3910
+ align-items: center;
3911
+ gap: var(--sc-space-3);
3912
+ font-size: var(--sc-text-sm);
3913
+ }
3914
+
3915
+ .sc-facts-row {
3916
+ display: flex;
3917
+ flex-wrap: wrap;
3918
+ align-items: center;
3919
+ gap: var(--sc-space-2) var(--sc-space-5);
3920
+ margin: 0;
3921
+ font-size: var(--sc-text-sm);
3922
+ }
3923
+
3924
+ .sc-facts-row > div {
3925
+ display: flex;
3926
+ align-items: center;
3927
+ gap: var(--sc-space-2);
3928
+ }
3929
+
3930
+ .sc-facts-row dt {
3931
+ color: var(--sc-color-text-muted);
3932
+ }
3933
+
3934
+ .sc-facts-row dd {
3935
+ margin: 0;
3936
+ }
3937
+
3938
+ .sc-goal-about-summary {
3939
+ color: var(--sc-color-text-muted);
3940
+ font-size: var(--sc-text-sm);
3941
+ cursor: pointer;
3942
+ }
3943
+
3944
+ .sc-goal-about .sc-prose {
3945
+ max-width: var(--sc-width-prose);
3946
+ margin-top: var(--sc-space-3);
3947
+ }
3948
+
3949
+ .sc-views {
3950
+ display: flex;
3951
+ flex-wrap: wrap;
3952
+ gap: var(--sc-space-1);
3953
+ }
3954
+
3955
+ .sc-view {
3956
+ padding: var(--sc-space-1) var(--sc-space-3);
3957
+ border-radius: var(--sc-radius-full);
3958
+ color: var(--sc-color-text-muted);
3959
+ font-size: var(--sc-text-sm);
3960
+ text-decoration: none;
3961
+ }
3962
+
3963
+ .sc-view:hover {
3964
+ background: var(--sc-color-bg-inset);
3965
+ color: var(--sc-color-text);
3966
+ }
3967
+
3968
+ .sc-view-current {
3969
+ background: var(--sc-color-bg-inset);
3970
+ color: var(--sc-color-text);
3971
+ font-weight: var(--sc-weight-medium);
3972
+ }
3973
+
3974
+ .sc-goal-tasks-view {
3975
+ display: flex;
3976
+ flex: 1 1 0;
3977
+ flex-direction: column;
3978
+ min-height: 0;
3979
+ }
3980
+
3981
+ .sc-goal-view-list {
3982
+ display: block;
3983
+ }
package/src/vocabulary.ts CHANGED
@@ -127,6 +127,7 @@ export const SKILLS_STATUSES = [
127
127
  "indexing",
128
128
  "failed",
129
129
  "not_found",
130
+ "token_invalid",
130
131
  "unavailable",
131
132
  ] as const;
132
133
 
@@ -166,6 +167,8 @@ export const EVENT_KINDS = [
166
167
  "task.updated",
167
168
  "task.moved",
168
169
  "task.commented",
170
+ "task.archived",
171
+ "task.restored",
169
172
  "decision.raised",
170
173
  "decision.answered",
171
174
  "decision.updated",