@knpkv/herdr-connect 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/dist/activity-store.d.ts +11 -0
  4. package/dist/activity-store.d.ts.map +1 -0
  5. package/dist/activity-store.js +76 -0
  6. package/dist/activity-store.js.map +1 -0
  7. package/dist/client-entry.d.ts +2 -0
  8. package/dist/client-entry.d.ts.map +1 -0
  9. package/dist/client-entry.js +11 -0
  10. package/dist/client-entry.js.map +1 -0
  11. package/dist/client.d.ts +86 -0
  12. package/dist/client.d.ts.map +1 -0
  13. package/dist/client.js +453 -0
  14. package/dist/client.js.map +1 -0
  15. package/dist/directory.d.ts +159 -0
  16. package/dist/directory.d.ts.map +1 -0
  17. package/dist/directory.js +186 -0
  18. package/dist/directory.js.map +1 -0
  19. package/dist/errors.d.ts +62 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +36 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/forest.d.ts +61 -0
  24. package/dist/forest.d.ts.map +1 -0
  25. package/dist/forest.js +90 -0
  26. package/dist/forest.js.map +1 -0
  27. package/dist/id.d.ts +4 -0
  28. package/dist/id.d.ts.map +1 -0
  29. package/dist/id.js +10 -0
  30. package/dist/id.js.map +1 -0
  31. package/dist/index.d.ts +13 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +13 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/internal/terminal-release.d.ts +6 -0
  36. package/dist/internal/terminal-release.d.ts.map +1 -0
  37. package/dist/internal/terminal-release.js +13 -0
  38. package/dist/internal/terminal-release.js.map +1 -0
  39. package/dist/keyboard.d.ts +2 -0
  40. package/dist/keyboard.d.ts.map +1 -0
  41. package/dist/keyboard.js +19 -0
  42. package/dist/keyboard.js.map +1 -0
  43. package/dist/model.d.ts +144 -0
  44. package/dist/model.d.ts.map +1 -0
  45. package/dist/model.js +104 -0
  46. package/dist/model.js.map +1 -0
  47. package/dist/relationship-store.d.ts +66 -0
  48. package/dist/relationship-store.d.ts.map +1 -0
  49. package/dist/relationship-store.js +246 -0
  50. package/dist/relationship-store.js.map +1 -0
  51. package/dist/target.d.ts +83 -0
  52. package/dist/target.d.ts.map +1 -0
  53. package/dist/target.js +56 -0
  54. package/dist/target.js.map +1 -0
  55. package/dist/terminal-input.d.ts +30 -0
  56. package/dist/terminal-input.d.ts.map +1 -0
  57. package/dist/terminal-input.js +95 -0
  58. package/dist/terminal-input.js.map +1 -0
  59. package/dist/terminal-setup.d.ts +10 -0
  60. package/dist/terminal-setup.d.ts.map +1 -0
  61. package/dist/terminal-setup.js +11 -0
  62. package/dist/terminal-setup.js.map +1 -0
  63. package/dist/terminal-theme.d.ts +3 -0
  64. package/dist/terminal-theme.d.ts.map +1 -0
  65. package/dist/terminal-theme.js +3 -0
  66. package/dist/terminal-theme.js.map +1 -0
  67. package/dist/terminal-viewport.d.ts +12 -0
  68. package/dist/terminal-viewport.d.ts.map +1 -0
  69. package/dist/terminal-viewport.js +21 -0
  70. package/dist/terminal-viewport.js.map +1 -0
  71. package/dist/terminal.d.ts +794 -0
  72. package/dist/terminal.d.ts.map +1 -0
  73. package/dist/terminal.js +166 -0
  74. package/dist/terminal.js.map +1 -0
  75. package/dist/view.d.ts +51 -0
  76. package/dist/view.d.ts.map +1 -0
  77. package/dist/view.js +210 -0
  78. package/dist/view.js.map +1 -0
  79. package/package.json +84 -0
  80. package/src/styles.css +527 -0
package/src/styles.css ADDED
@@ -0,0 +1,527 @@
1
+ @import "@knpkv/rly/styles.css";
2
+
3
+ @layer connect {
4
+ html,
5
+ body.connect-body,
6
+ #fleet-connect-root {
7
+ margin: 0;
8
+ min-height: 100%;
9
+ }
10
+
11
+ body.connect-body {
12
+ background: var(--rly-color-surface-1);
13
+ overflow: hidden;
14
+ }
15
+
16
+ .connect-shell {
17
+ block-size: 100dvh;
18
+ overflow: hidden;
19
+ }
20
+
21
+ .connect-workspace,
22
+ .connect-directory-screen,
23
+ .connect-terminal-screen {
24
+ block-size: 100%;
25
+ }
26
+
27
+ .connect-directory-screen {
28
+ background: var(--rly-color-surface-1);
29
+ display: grid;
30
+ grid-template-columns: minmax(0, 1fr);
31
+ grid-template-rows: auto minmax(0, 1fr);
32
+ }
33
+
34
+ .connect-terminal-screen {
35
+ background: var(--rly-color-surface-1);
36
+ block-size: var(--connect-visual-viewport-height, 100dvh);
37
+ box-sizing: border-box;
38
+ inset-block-start: var(--connect-visual-viewport-offset, 0px);
39
+ inset-inline: 0;
40
+ padding-block: env(safe-area-inset-top) env(safe-area-inset-bottom);
41
+ pointer-events: none;
42
+ position: fixed;
43
+ visibility: hidden;
44
+ z-index: -1;
45
+ }
46
+
47
+ .connect-workspace[data-mode="terminal"] .connect-directory-screen {
48
+ visibility: hidden;
49
+ }
50
+
51
+ .connect-workspace[data-mode="terminal"] .connect-terminal-screen {
52
+ pointer-events: auto;
53
+ visibility: visible;
54
+ z-index: 100;
55
+ }
56
+
57
+ .connect-header {
58
+ align-items: center;
59
+ border-block-end: 1px solid var(--rly-color-border-1);
60
+ display: flex;
61
+ justify-content: space-between;
62
+ padding: var(--rly-space-12) var(--rly-space-20);
63
+ }
64
+
65
+ .connect-embedded-intro {
66
+ align-items: end;
67
+ border-block-end: 1px solid var(--rly-color-border-1);
68
+ display: flex;
69
+ gap: var(--rly-space-24);
70
+ justify-content: space-between;
71
+ margin-inline: auto;
72
+ max-inline-size: 76rem;
73
+ padding: var(--rly-space-24) var(--rly-space-20) var(--rly-space-20);
74
+ }
75
+
76
+ .connect-embedded-intro > div {
77
+ display: grid;
78
+ gap: var(--rly-space-8);
79
+ }
80
+
81
+ .connect-agents {
82
+ inline-size: min(100%, 76rem);
83
+ justify-self: center;
84
+ max-inline-size: 100%;
85
+ min-block-size: 0;
86
+ overflow-y: auto;
87
+ padding: var(--rly-space-20) var(--rly-space-20) var(--rly-space-32);
88
+ }
89
+
90
+ .connect-search {
91
+ background: var(--rly-color-surface-1);
92
+ display: grid;
93
+ gap: var(--rly-space-6);
94
+ inset-block-start: 0;
95
+ padding-block-end: var(--rly-space-16);
96
+ position: sticky;
97
+ z-index: 1;
98
+ }
99
+
100
+ .connect-search span {
101
+ color: var(--rly-color-text-3);
102
+ font-size: var(--rly-type-meta-size);
103
+ }
104
+
105
+ .connect-search input {
106
+ background: var(--rly-color-surface-2);
107
+ border: 1px solid var(--rly-color-border-1);
108
+ border-radius: var(--rly-radius-control);
109
+ color: var(--rly-color-text-1);
110
+ font: inherit;
111
+ inline-size: 100%;
112
+ min-block-size: 2.5rem;
113
+ padding: var(--rly-space-8) var(--rly-space-10);
114
+ }
115
+
116
+ .connect-search input:focus-visible {
117
+ border-color: var(--rly-color-agent);
118
+ outline: 2px solid color-mix(in srgb, var(--rly-color-agent) 35%, transparent);
119
+ outline-offset: 1px;
120
+ }
121
+
122
+ .connect-filter-row {
123
+ display: flex;
124
+ flex-wrap: wrap;
125
+ gap: var(--rly-space-8);
126
+ justify-content: space-between;
127
+ margin-block-end: var(--rly-space-20);
128
+ }
129
+
130
+ .connect-group-filter,
131
+ .connect-status-filter {
132
+ background: var(--rly-color-surface-2);
133
+ border: 1px solid var(--rly-color-border-1);
134
+ border-radius: var(--rly-radius-control);
135
+ display: flex;
136
+ gap: 2px;
137
+ overflow-x: auto;
138
+ padding: 2px;
139
+ scrollbar-width: none;
140
+ }
141
+
142
+ .connect-group-filter button,
143
+ .connect-status-filter button {
144
+ background: transparent;
145
+ border: 0;
146
+ border-radius: calc(var(--rly-radius-control) - 2px);
147
+ color: var(--rly-color-text-3);
148
+ cursor: pointer;
149
+ font: inherit;
150
+ font-size: var(--rly-type-meta-size);
151
+ flex: 0 0 auto;
152
+ padding: var(--rly-space-6) var(--rly-space-8);
153
+ white-space: nowrap;
154
+ }
155
+
156
+ .connect-group-filter button[aria-pressed="true"],
157
+ .connect-status-filter button[aria-pressed="true"] {
158
+ background: var(--rly-color-surface-3);
159
+ box-shadow: 0 0 0 1px var(--rly-color-border-2);
160
+ color: var(--rly-color-text-1);
161
+ }
162
+
163
+ .connect-agent-tree {
164
+ display: grid;
165
+ gap: var(--rly-space-28);
166
+ }
167
+
168
+ .connect-day-heading {
169
+ align-items: center;
170
+ border-block-end: 1px solid var(--rly-color-border-2);
171
+ display: flex;
172
+ justify-content: space-between;
173
+ margin-block-end: var(--rly-space-4);
174
+ padding: 0 var(--rly-space-12) var(--rly-space-8);
175
+ }
176
+
177
+ .connect-day-heading > div {
178
+ align-items: baseline;
179
+ display: flex;
180
+ gap: var(--rly-space-12);
181
+ }
182
+
183
+ .connect-day-heading strong {
184
+ color: var(--rly-color-text-1);
185
+ font-size: var(--rly-type-heading-size);
186
+ }
187
+
188
+ .connect-day-heading span,
189
+ .connect-day-heading small {
190
+ color: var(--rly-color-text-3);
191
+ font-family: "Geist Mono", ui-monospace, monospace;
192
+ font-size: var(--rly-type-meta-size);
193
+ font-weight: 400;
194
+ font-variant-numeric: tabular-nums;
195
+ }
196
+
197
+ .connect-agent-list {
198
+ display: grid;
199
+ position: relative;
200
+ }
201
+
202
+ .connect-agent-list::before {
203
+ background: var(--rly-color-border-1);
204
+ content: "";
205
+ inset-block: var(--rly-space-12);
206
+ inset-inline-start: calc(var(--rly-space-12) + 4.25rem + var(--rly-space-12) + 0.25rem);
207
+ inline-size: 1px;
208
+ pointer-events: none;
209
+ position: absolute;
210
+ }
211
+
212
+ .connect-agent {
213
+ align-items: center;
214
+ background: transparent;
215
+ border: 0;
216
+ border-block-end: 1px solid var(--rly-color-border-1);
217
+ border-radius: 0;
218
+ color: inherit;
219
+ cursor: pointer;
220
+ display: grid;
221
+ font: inherit;
222
+ grid-template-columns: 4.25rem 0.5rem minmax(0, 1fr) auto;
223
+ gap: var(--rly-space-12);
224
+ min-inline-size: 0;
225
+ padding: var(--rly-space-12);
226
+ position: relative;
227
+ text-align: start;
228
+ transition:
229
+ background var(--rly-motion-fast-duration) var(--rly-motion-fast-easing),
230
+ border-color var(--rly-motion-fast-duration) var(--rly-motion-fast-easing);
231
+ }
232
+
233
+ .connect-agent:hover,
234
+ .connect-agent:focus-visible,
235
+ .connect-agent[data-selected="true"] {
236
+ background: var(--rly-color-surface-2);
237
+ }
238
+
239
+ .connect-agent:focus-visible {
240
+ outline: 1px solid var(--rly-color-agent);
241
+ outline-offset: -1px;
242
+ }
243
+
244
+ .connect-agent[data-selected="true"] {
245
+ background: color-mix(in srgb, var(--rly-color-agent) 12%, var(--rly-color-surface-2));
246
+ box-shadow: inset 3px 0 0 var(--rly-color-agent);
247
+ }
248
+
249
+ .connect-agent time {
250
+ color: var(--rly-color-text-3);
251
+ font-family: "Geist Mono", ui-monospace, monospace;
252
+ font-size: var(--rly-type-meta-size);
253
+ font-variant-numeric: tabular-nums;
254
+ }
255
+
256
+ .connect-agent .agent-presence {
257
+ box-shadow: 0 0 0 4px var(--rly-color-surface-1);
258
+ position: relative;
259
+ z-index: 1;
260
+ }
261
+
262
+ .connect-agent:hover .agent-presence,
263
+ .connect-agent:focus-visible .agent-presence,
264
+ .connect-agent[data-selected="true"] .agent-presence {
265
+ box-shadow: 0 0 0 4px var(--rly-color-surface-2);
266
+ }
267
+
268
+ .connect-agent-copy {
269
+ display: grid;
270
+ flex: 1;
271
+ min-inline-size: 0;
272
+ }
273
+
274
+ .connect-agent-copy small,
275
+ .connect-agent-copy strong {
276
+ overflow: hidden;
277
+ text-overflow: ellipsis;
278
+ white-space: nowrap;
279
+ }
280
+
281
+ .connect-agent .agent-presence[data-activity="working"] {
282
+ background: var(--rly-color-agent);
283
+ }
284
+
285
+ .connect-agent .agent-presence[data-activity="finished"] {
286
+ background: var(--rly-color-text-3);
287
+ }
288
+
289
+ .connect-failures {
290
+ border-block-start: 1px solid var(--rly-color-border-1);
291
+ color: var(--rly-color-text-3);
292
+ display: grid;
293
+ gap: var(--rly-space-4);
294
+ margin-block-start: var(--rly-space-20);
295
+ padding: var(--rly-space-12) var(--rly-space-8);
296
+ }
297
+
298
+ .connect-preference-error {
299
+ color: var(--rly-color-critical-ink);
300
+ margin: var(--rly-space-12) var(--rly-space-8) 0;
301
+ }
302
+
303
+ .connect-status-message {
304
+ color: var(--rly-color-text-2);
305
+ display: block;
306
+ margin-block-start: var(--rly-space-16);
307
+ padding: var(--rly-space-10) var(--rly-space-12);
308
+ }
309
+
310
+ .connect-status-message[data-tone="critical"] {
311
+ color: var(--rly-color-critical-ink);
312
+ }
313
+
314
+ .terminal-stage {
315
+ block-size: 100%;
316
+ background: var(--rly-color-surface-1);
317
+ border: 0;
318
+ border-radius: 0;
319
+ display: grid;
320
+ grid-template-rows: auto minmax(0, 1fr);
321
+ min-block-size: 0;
322
+ min-inline-size: 0;
323
+ overflow: hidden;
324
+ position: relative;
325
+ }
326
+
327
+ .terminal-bar {
328
+ align-items: center;
329
+ border-block-end: 1px solid var(--rly-color-border-1);
330
+ display: flex;
331
+ display: grid;
332
+ grid-template-columns: auto minmax(0, 1fr) auto;
333
+ gap: var(--rly-space-12);
334
+ min-block-size: 3.25rem;
335
+ padding: var(--rly-space-8) var(--rly-space-16);
336
+ }
337
+
338
+ .terminal-bar > div {
339
+ display: grid;
340
+ min-inline-size: 0;
341
+ }
342
+
343
+ .terminal-bar small {
344
+ color: var(--rly-color-text-3);
345
+ }
346
+
347
+ .terminal-bar strong,
348
+ .terminal-bar small {
349
+ overflow: hidden;
350
+ text-overflow: ellipsis;
351
+ white-space: nowrap;
352
+ }
353
+
354
+ .terminal-back {
355
+ background: var(--rly-color-surface-2);
356
+ border: 1px solid var(--rly-color-border-2);
357
+ border-radius: var(--rly-radius-control);
358
+ color: var(--rly-color-text-1);
359
+ cursor: pointer;
360
+ font: inherit;
361
+ min-block-size: 2.25rem;
362
+ padding-inline: var(--rly-space-12);
363
+ }
364
+
365
+ .terminal-back:hover,
366
+ .terminal-back:focus-visible {
367
+ border-color: var(--rly-color-agent);
368
+ outline: none;
369
+ }
370
+
371
+ .ghostty-terminal {
372
+ min-block-size: 0;
373
+ overflow: hidden;
374
+ padding: var(--rly-space-12);
375
+ touch-action: none;
376
+ }
377
+
378
+ .ghostty-terminal > div,
379
+ .ghostty-terminal canvas {
380
+ block-size: 100%;
381
+ inline-size: 100%;
382
+ }
383
+
384
+ @media (max-width: 700px) {
385
+ .connect-shell-embedded {
386
+ block-size: auto;
387
+ overflow: visible;
388
+ }
389
+
390
+ .connect-shell-embedded .connect-agents {
391
+ overflow-y: visible;
392
+ }
393
+
394
+ .connect-header {
395
+ min-block-size: var(--rly-space-48);
396
+ padding: var(--rly-space-8) var(--rly-space-12);
397
+ }
398
+
399
+ .connect-header > div > :first-child {
400
+ display: none;
401
+ }
402
+
403
+ .connect-header h1,
404
+ .connect-embedded-intro h1 {
405
+ font: var(--rly-type-card-title-weight) var(--rly-type-card-title-size) / var(--rly-type-card-title-line-height)
406
+ var(--rly-type-card-title-font);
407
+ letter-spacing: var(--rly-type-card-title-tracking);
408
+ }
409
+
410
+ .fleet-app-nav {
411
+ gap: var(--rly-space-8);
412
+ }
413
+
414
+ .fleet-app-nav a {
415
+ font-size: var(--rly-type-meta-size);
416
+ padding-block: var(--rly-space-4);
417
+ }
418
+
419
+ .connect-embedded-intro {
420
+ align-items: center;
421
+ gap: var(--rly-space-8);
422
+ padding: var(--rly-space-8);
423
+ }
424
+
425
+ .connect-embedded-intro > div {
426
+ display: block;
427
+ min-inline-size: 0;
428
+ }
429
+
430
+ .connect-embedded-intro > div > :first-child,
431
+ .connect-embedded-intro > div > :last-child {
432
+ display: none;
433
+ }
434
+
435
+ .connect-agents {
436
+ padding: var(--rly-space-8) var(--rly-space-8) var(--rly-space-24);
437
+ }
438
+
439
+ .connect-search {
440
+ padding-block-end: var(--rly-space-8);
441
+ position: static;
442
+ }
443
+
444
+ .connect-search > span {
445
+ block-size: 1px;
446
+ clip-path: inset(50%);
447
+ inline-size: 1px;
448
+ overflow: hidden;
449
+ position: absolute;
450
+ white-space: nowrap;
451
+ }
452
+
453
+ .connect-search input {
454
+ min-block-size: 2.25rem;
455
+ }
456
+
457
+ .connect-filter-row {
458
+ flex-wrap: nowrap;
459
+ justify-content: flex-start;
460
+ margin-block-end: var(--rly-space-8);
461
+ overflow-x: auto;
462
+ scrollbar-width: none;
463
+ }
464
+
465
+ .connect-group-filter,
466
+ .connect-status-filter {
467
+ flex: 0 0 auto;
468
+ }
469
+
470
+ .connect-group-filter button,
471
+ .connect-status-filter button {
472
+ line-height: var(--rly-type-meta-line-height);
473
+ padding-block: var(--rly-space-4);
474
+ }
475
+
476
+ .connect-agent-tree {
477
+ gap: var(--rly-space-16);
478
+ }
479
+
480
+ .connect-day-heading {
481
+ margin-block-end: 0;
482
+ min-block-size: 2rem;
483
+ padding-block-end: var(--rly-space-4);
484
+ padding-inline: var(--rly-space-8);
485
+ }
486
+
487
+ .connect-day-heading > div {
488
+ display: flex;
489
+ gap: var(--rly-space-8);
490
+ }
491
+
492
+ .connect-day-heading strong {
493
+ font-size: var(--rly-type-label-size);
494
+ }
495
+
496
+ .connect-day-heading span {
497
+ overflow: hidden;
498
+ text-overflow: ellipsis;
499
+ white-space: nowrap;
500
+ }
501
+
502
+ .connect-agent-list::before {
503
+ inset-inline-start: calc(var(--rly-space-8) + 3.5rem + var(--rly-space-8) + 0.25rem);
504
+ }
505
+
506
+ .connect-agent {
507
+ gap: var(--rly-space-8);
508
+ grid-template-columns: 3.5rem 0.5rem minmax(0, 1fr) auto;
509
+ padding: var(--rly-space-8);
510
+ }
511
+
512
+ .connect-failures,
513
+ .connect-preference-error {
514
+ display: none;
515
+ }
516
+
517
+ .ghostty-terminal {
518
+ padding: var(--rly-space-8);
519
+ }
520
+ }
521
+
522
+ @media (prefers-reduced-motion: reduce) {
523
+ .connect-agent {
524
+ transition: none;
525
+ }
526
+ }
527
+ }