@monster-orange/den 0.2.7 → 0.3.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 (139) hide show
  1. package/CHANGELOG.md +1655 -0
  2. package/README.md +4 -2
  3. package/bin/den +2 -1
  4. package/docs/distributions.md +619 -3
  5. package/make/den.mk +19 -4
  6. package/make/journeys.mk +2 -1
  7. package/make/local_dev.mk +6 -13
  8. package/make/secrets-1password.mk +18 -0
  9. package/make/test.mk +1 -1
  10. package/package.json +9 -2
  11. package/schemas/den.plugin.v1.json +156 -0
  12. package/schemas/den.theme.v1.json +269 -0
  13. package/scripts/auth-configure.ts +16 -8
  14. package/scripts/heal-config.ts +0 -5
  15. package/scripts/setup-1password.ts +41 -19
  16. package/scripts/setup-secrets.ts +67 -101
  17. package/src/pillars/api/global-setup.ts +1 -1
  18. package/src/pillars/journeys/sandbox.ts +23 -18
  19. package/src/pillars/journeys/tools/browser-session.ts +2 -2
  20. package/src/scripts/setup-default-workspace.ts +2 -2
  21. package/src/shared/agent-actor.ts +38 -3
  22. package/src/shared/auth/headless-login.ts +1 -1
  23. package/src/shared/auth/sudo-vault.ts +93 -31
  24. package/src/shared/auth/token-providers/index.ts +7 -3
  25. package/src/shared/brand.ts +7 -0
  26. package/src/shared/config-error.ts +63 -0
  27. package/src/shared/constants.ts +3 -24
  28. package/src/shared/den-config.ts +185 -7
  29. package/src/shared/edge/config.ts +147 -21
  30. package/src/shared/edge/exec.ts +31 -0
  31. package/src/shared/edge/included.ts +169 -0
  32. package/src/shared/edge/render.ts +69 -14
  33. package/src/shared/edge/runtime.ts +128 -121
  34. package/src/shared/edge/status.ts +68 -8
  35. package/src/shared/edge/tls.ts +328 -0
  36. package/src/shared/edge/types.ts +25 -9
  37. package/src/shared/environment-manager/catalog.ts +52 -1
  38. package/src/shared/environment-manager/default-workspace.ts +26 -3
  39. package/src/shared/environment-manager/git-remote.ts +49 -0
  40. package/src/shared/environment-manager/health.ts +73 -38
  41. package/src/shared/environment-manager/scope.ts +168 -0
  42. package/src/shared/environment-manager/service-runner.ts +789 -43
  43. package/src/shared/environment-manager/up-targets.ts +132 -0
  44. package/src/shared/environment-manager/workspace-manager.ts +67 -25
  45. package/src/shared/environment-manager/workspace-org.ts +26 -11
  46. package/src/shared/health/rollup.ts +48 -0
  47. package/src/shared/manifest/service-links.ts +20 -8
  48. package/src/shared/open-url.ts +21 -2
  49. package/src/shared/org-sources.ts +328 -0
  50. package/src/shared/org.ts +53 -5
  51. package/src/shared/plugins/manifest.ts +406 -0
  52. package/src/shared/plugins/store.ts +358 -0
  53. package/src/shared/process/legacy-adopt.ts +285 -0
  54. package/src/shared/process/process-group.ts +202 -0
  55. package/src/shared/process/spawn-streaming.ts +7 -0
  56. package/src/shared/secrets/doppler.ts +1 -1
  57. package/src/shared/secrets/index.ts +279 -50
  58. package/src/shared/secrets/none.ts +56 -0
  59. package/src/shared/secrets/strategies.ts +202 -0
  60. package/src/shared/secrets/types.ts +1 -1
  61. package/src/shared/smoke/git-remote.ts +40 -0
  62. package/src/shared/stacks/manifest-commands.ts +1 -1
  63. package/src/shared/stacks/namespace.ts +178 -0
  64. package/src/shared/stacks/owners.ts +303 -0
  65. package/src/shared/stacks/render.ts +8 -3
  66. package/src/shared/stacks/runtime.ts +100 -16
  67. package/src/shared/stacks/status.ts +63 -12
  68. package/src/shared/strategies/registry.ts +89 -0
  69. package/src/shared/theme/contract.ts +538 -0
  70. package/src/shared/types/index.ts +24 -5
  71. package/src/ui/cli/clone-plan.ts +154 -23
  72. package/src/ui/cli/create.ts +24 -7
  73. package/src/ui/cli/doctor-command.ts +131 -0
  74. package/src/ui/cli/edge-command.ts +56 -10
  75. package/src/ui/cli/flag-parser.ts +62 -3
  76. package/src/ui/cli/health-display.ts +25 -0
  77. package/src/ui/cli/index.ts +649 -72
  78. package/src/ui/cli/notice.ts +20 -0
  79. package/src/ui/cli/org-command.ts +12 -2
  80. package/src/ui/cli/plugin-command.ts +849 -0
  81. package/src/ui/cli/stack-command.ts +63 -2
  82. package/src/ui/cli/test-runner.ts +11 -9
  83. package/src/ui/cli/theme-command.ts +136 -0
  84. package/src/ui/cli/up-args.ts +15 -0
  85. package/src/ui/cli/web-command.ts +47 -23
  86. package/src/ui/mcp/api.ts +28 -2
  87. package/src/ui/mcp/scope.ts +298 -0
  88. package/src/ui/mcp/server.ts +70 -8
  89. package/src/ui/mcp/tools.ts +151 -24
  90. package/src/ui/server/appearance-prefs.ts +95 -0
  91. package/src/ui/server/audit.ts +90 -3
  92. package/src/ui/server/daemon-reaper.ts +29 -1
  93. package/src/ui/server/engine-stamp.ts +83 -0
  94. package/src/ui/server/github-service.ts +29 -45
  95. package/src/ui/server/graph-page.ts +20 -0
  96. package/src/ui/server/graph-prefs.ts +44 -1
  97. package/src/ui/server/http-errors.ts +293 -0
  98. package/src/ui/server/http-helpers.ts +22 -3
  99. package/src/ui/server/index.ts +590 -45
  100. package/src/ui/server/public/appearance.js +531 -0
  101. package/src/ui/server/public/edge-page.js +248 -0
  102. package/src/ui/server/public/edge.html +251 -0
  103. package/src/ui/server/public/environments.html +65 -83
  104. package/src/ui/server/public/error-page.js +247 -0
  105. package/src/ui/server/public/error.html +260 -0
  106. package/src/ui/server/public/graph-model.js +332 -14
  107. package/src/ui/server/public/graph.css +141 -47
  108. package/src/ui/server/public/graph.js +223 -44
  109. package/src/ui/server/public/header.js +396 -600
  110. package/src/ui/server/public/health-fit.js +248 -0
  111. package/src/ui/server/public/health-rollup.js +128 -0
  112. package/src/ui/server/public/i18n/es.js +287 -0
  113. package/src/ui/server/public/i18n/ja.js +276 -0
  114. package/src/ui/server/public/index.html +139 -438
  115. package/src/ui/server/public/local-dev.html +3468 -4044
  116. package/src/ui/server/public/logs.html +71 -208
  117. package/src/ui/server/public/panel.js +15 -3
  118. package/src/ui/server/public/release.html +175 -389
  119. package/src/ui/server/public/services.html +596 -770
  120. package/src/ui/server/public/settings-page.js +759 -0
  121. package/src/ui/server/public/settings-registry.js +521 -0
  122. package/src/ui/server/public/settings.html +590 -0
  123. package/src/ui/server/public/shell.js +3869 -0
  124. package/src/ui/server/public/topbar.js +1413 -0
  125. package/src/ui/server/public/version-label.js +12 -0
  126. package/src/ui/server/public/workspace-picker.js +74 -34
  127. package/src/ui/server/readonly-routes.ts +24 -4
  128. package/src/ui/server/release-service.ts +25 -3
  129. package/src/ui/server/services-list.ts +94 -17
  130. package/src/ui/server/settings-distribution.ts +74 -0
  131. package/src/ui/server/shell-prefs.ts +192 -0
  132. package/src/ui/server/theme-routes.ts +292 -0
  133. package/src/ui/server/theme-runtime.ts +407 -0
  134. package/src/ui/server/ui-assets.ts +16 -1
  135. package/src/ui/server/ui-language.ts +50 -0
  136. package/src/ui/server/workspace-routes.ts +55 -9
  137. package/themes/den/den-theme.json +72 -0
  138. package/themes/den/favicon.ico +0 -0
  139. package/themes/den/mark.svg +6 -0
@@ -5,13 +5,13 @@
5
5
  (a scrolling side panel, the pop-up) can clip it. */
6
6
  .dg,
7
7
  .dg-layer {
8
- --dg-raised: #1c2330;
9
- --dg-border-strong: #484f58;
10
- --dg-faint: #6e7681;
11
- --dg-remote: #39c5cf;
12
- --dg-event: #bc8cff;
13
- --dg-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
14
- font-family: var(--dg-sans);
8
+ --dg-raised: var(--raised);
9
+ --dg-border-strong: var(--border-strong);
10
+ --dg-faint: var(--faint);
11
+ --dg-remote: var(--remote);
12
+ /* No event token: a hue between remote and bad, in any theme. */
13
+ --dg-event: color-mix(in oklab, var(--remote) 50%, var(--bad));
14
+ font-family: var(--sans);
15
15
  font-size: 14px;
16
16
  color: var(--text);
17
17
  }
@@ -120,10 +120,15 @@
120
120
  top: 0;
121
121
  transform-origin: 0 0;
122
122
  }
123
+ /* R22b-1 (Ward QA of dev.34): the edge layer paints above the org and
124
+ repo frames and the cards (positioned, z-index auto, in DOM order), so
125
+ a line or an arrowhead crossing a frame is never hidden. It takes no
126
+ pointer events: cards and frames stay clickable under it. */
123
127
  .dg-world > svg {
124
128
  position: absolute;
125
129
  left: 0;
126
130
  top: 0;
131
+ z-index: 1;
127
132
  overflow: visible;
128
133
  pointer-events: none;
129
134
  }
@@ -193,7 +198,9 @@
193
198
  box-sizing: border-box;
194
199
  }
195
200
  .dg-grp.dg-org {
196
- background: color-mix(in srgb, var(--oc) 4%, transparent);
201
+ /* The org's config color is a border and a dot, never the ground or
202
+ text: it was picked for one mode and fails contrast in the other. */
203
+ background: color-mix(in srgb, var(--surface) 55%, transparent);
197
204
  border-color: color-mix(in srgb, var(--oc) 45%, var(--border));
198
205
  }
199
206
  .dg-grp.dg-repo {
@@ -217,11 +224,21 @@
217
224
  min-width: 0;
218
225
  }
219
226
  .dg-org > .dg-ghead b {
220
- color: var(--oc);
227
+ color: var(--text);
221
228
  font-size: 15px;
222
229
  font-weight: 600;
223
230
  white-space: nowrap;
224
231
  }
232
+ .dg-org > .dg-ghead b::before {
233
+ content: "";
234
+ display: inline-block;
235
+ width: 9px;
236
+ height: 9px;
237
+ margin-right: 7px;
238
+ border-radius: 50%;
239
+ background: var(--oc);
240
+ vertical-align: 0.05em;
241
+ }
225
242
  .dg-ghead .meta {
226
243
  color: var(--muted);
227
244
  font-size: 12px;
@@ -236,17 +253,23 @@
236
253
  color: var(--muted);
237
254
  white-space: nowrap;
238
255
  }
256
+ /* Drawn as a link, so underlined like one: never color alone (a theme's
257
+ accent text can be as red as --bad). */
239
258
  .dg-lnk {
240
259
  background: none;
241
260
  border: 0;
242
261
  padding: 0;
243
- color: var(--accent);
262
+ color: var(--accent-text);
244
263
  cursor: pointer;
245
264
  font-size: 12px;
246
265
  white-space: nowrap;
266
+ text-decoration: underline;
267
+ text-decoration-thickness: 1px;
268
+ text-underline-offset: 0.2em;
269
+ text-decoration-color: color-mix(in srgb, currentColor 40%, transparent);
247
270
  }
248
271
  .dg-lnk:hover {
249
- text-decoration: underline;
272
+ text-decoration-color: currentColor;
250
273
  }
251
274
  .dg-gname {
252
275
  background: none;
@@ -294,7 +317,10 @@
294
317
  border-color: color-mix(in srgb, var(--dg-remote) 60%, var(--border));
295
318
  }
296
319
  .dg-card.down {
297
- border-color: color-mix(in srgb, var(--red) 70%, var(--border));
320
+ border-color: color-mix(in srgb, var(--bad) 70%, var(--border));
321
+ }
322
+ .dg-card.degraded {
323
+ border-color: color-mix(in srgb, var(--warn) 70%, var(--border));
298
324
  }
299
325
  .dg-card .r1 {
300
326
  display: flex;
@@ -314,10 +340,14 @@
314
340
  background: var(--dg-faint);
315
341
  }
316
342
  .dg-dot.ok {
317
- background: var(--green);
343
+ background: var(--ok);
318
344
  }
319
345
  .dg-dot.bad {
320
- background: var(--red);
346
+ background: var(--bad);
347
+ }
348
+ /* A repo with a checked service down that isn't its entry (health-rollup.js). */
349
+ .dg-dot.warn {
350
+ background: var(--warn);
321
351
  }
322
352
  .dg-card .nm {
323
353
  font-weight: 600;
@@ -345,8 +375,8 @@
345
375
  border-color: color-mix(in srgb, var(--dg-remote) 55%, transparent);
346
376
  }
347
377
  .dg-badge.hybrid {
348
- color: var(--yellow);
349
- border-color: color-mix(in srgb, var(--yellow) 55%, transparent);
378
+ color: var(--warn);
379
+ border-color: color-mix(in srgb, var(--warn) 55%, transparent);
350
380
  }
351
381
  .dg-card .r2 {
352
382
  font-family: var(--mono);
@@ -371,7 +401,7 @@
371
401
  min-width: 0;
372
402
  }
373
403
  .dg-card .r3 .h.bad {
374
- color: var(--red);
404
+ color: var(--bad);
375
405
  }
376
406
  .dg-tag {
377
407
  font-size: 11px;
@@ -383,11 +413,11 @@
383
413
  }
384
414
  .dg-tag.entry {
385
415
  background: color-mix(in srgb, var(--accent) 16%, transparent);
386
- color: var(--accent);
416
+ color: var(--accent-text);
387
417
  }
388
418
  .dg-tag.warn {
389
- background: color-mix(in srgb, var(--yellow) 16%, transparent);
390
- color: var(--yellow);
419
+ background: color-mix(in srgb, var(--warn) 16%, transparent);
420
+ color: var(--warn);
391
421
  }
392
422
  .dg-acts {
393
423
  display: flex;
@@ -425,17 +455,17 @@
425
455
  font-size: 12px;
426
456
  }
427
457
  .dg-btn.primary {
428
- background: var(--accent);
429
- border-color: var(--accent);
430
- color: #0d1117;
458
+ background: var(--accent-fill);
459
+ border-color: var(--accent-fill);
460
+ color: var(--on-accent);
431
461
  font-weight: 600;
432
462
  }
433
463
  .dg-btn.primary:hover {
434
464
  filter: brightness(1.1);
435
465
  }
436
466
  .dg-btn.armed {
437
- border-color: var(--red);
438
- color: var(--red);
467
+ border-color: var(--bad);
468
+ color: var(--bad);
439
469
  font-weight: 600;
440
470
  }
441
471
  .dg-card.compact {
@@ -466,13 +496,13 @@
466
496
  opacity: 0.22;
467
497
  }
468
498
  .dg-card.hit {
469
- box-shadow: 0 0 0 2px var(--yellow);
499
+ box-shadow: 0 0 0 2px var(--warn);
470
500
  }
471
501
 
472
502
  /* edges */
473
503
  path.dg-e {
474
504
  fill: none;
475
- stroke: #6e7681;
505
+ stroke: var(--faint);
476
506
  stroke-width: 1.4;
477
507
  transition: opacity 0.15s;
478
508
  }
@@ -481,7 +511,7 @@ path.dg-e.hard {
481
511
  stroke-width: 1.8;
482
512
  }
483
513
  path.dg-e.soft {
484
- stroke: #8b949e;
514
+ stroke: var(--muted);
485
515
  stroke-dasharray: 6 4;
486
516
  }
487
517
  path.dg-e.event {
@@ -494,15 +524,57 @@ path.dg-e.cross {
494
524
  stroke-dasharray: 9 4;
495
525
  }
496
526
  path.dg-e.intra {
497
- stroke: #8b949e;
527
+ stroke: var(--muted);
498
528
  stroke-width: 1.5;
499
529
  }
530
+ /* A lit edge's base becomes a faint track in its kind's colour, so the
531
+ flow overlay on top of it reads (Ward QA of dev.35: dashes in the same
532
+ colour on a full-strength line were barely visible). The arrowhead's
533
+ fill is its own and stays full strength. */
500
534
  path.dg-e.hl {
501
535
  stroke-width: 2.6;
536
+ stroke-opacity: 0.3;
502
537
  }
503
538
  path.dg-e.dim {
504
539
  opacity: 0.12;
505
540
  }
541
+ /* R22b-2: a highlighted edge flows from data-f to data-t (the arrow's
542
+ way): a marching-dash overlay in the base path's colour, wider than the
543
+ track, one 20px dash cycle a second. Decreasing dashoffset moves the
544
+ dashes toward the end. */
545
+ path.dg-flow {
546
+ fill: none;
547
+ display: none;
548
+ stroke: var(--faint);
549
+ stroke-width: 3.6;
550
+ stroke-linecap: round;
551
+ stroke-dasharray: 10 10;
552
+ }
553
+ path.dg-flow.on {
554
+ display: inline;
555
+ animation: dg-flow 1s linear infinite;
556
+ }
557
+ path.dg-flow.hard {
558
+ stroke: var(--accent);
559
+ }
560
+ path.dg-flow.soft,
561
+ path.dg-flow.intra {
562
+ stroke: var(--muted);
563
+ }
564
+ path.dg-flow.event {
565
+ stroke: var(--dg-event);
566
+ }
567
+ path.dg-flow.cross {
568
+ stroke: var(--dg-remote);
569
+ }
570
+ @keyframes dg-flow {
571
+ from {
572
+ stroke-dashoffset: 20;
573
+ }
574
+ to {
575
+ stroke-dashoffset: 0;
576
+ }
577
+ }
506
578
 
507
579
  /* panel */
508
580
  .dg-panel {
@@ -523,7 +595,7 @@ path.dg-e.dim {
523
595
  inset: 0;
524
596
  height: auto;
525
597
  grid-template-rows: none;
526
- background: rgb(1 4 9 / 0.6);
598
+ background: rgb(0 0 0 / 0.6);
527
599
  z-index: 900;
528
600
  display: grid;
529
601
  place-items: center;
@@ -534,7 +606,7 @@ path.dg-e.dim {
534
606
  max-height: min(86vh, 900px);
535
607
  border: 1px solid var(--border);
536
608
  border-radius: 14px;
537
- box-shadow: 0 24px 60px rgb(0 0 0 / 0.5);
609
+ box-shadow: var(--shadow);
538
610
  }
539
611
  .dg-resize {
540
612
  position: absolute;
@@ -569,10 +641,22 @@ path.dg-e.dim {
569
641
  background: none;
570
642
  border: 0;
571
643
  padding: 0;
572
- color: var(--accent);
644
+ color: var(--accent-text);
573
645
  cursor: pointer;
574
646
  font: inherit;
575
647
  }
648
+ .dg-crumb-org {
649
+ color: var(--text);
650
+ white-space: nowrap;
651
+ }
652
+ .dg-crumb-org i {
653
+ display: inline-block;
654
+ width: 8px;
655
+ height: 8px;
656
+ margin-right: 5px;
657
+ border-radius: 50%;
658
+ vertical-align: 0.05em;
659
+ }
576
660
  .dg-crumbs button:hover {
577
661
  text-decoration: underline;
578
662
  }
@@ -627,14 +711,14 @@ path.dg-e.dim {
627
711
  white-space: nowrap;
628
712
  }
629
713
  .dg-pill.ok {
630
- color: var(--green);
631
- border-color: color-mix(in srgb, var(--green) 50%, transparent);
632
- background: color-mix(in srgb, var(--green) 10%, transparent);
714
+ color: var(--ok);
715
+ border-color: color-mix(in srgb, var(--ok) 50%, transparent);
716
+ background: color-mix(in srgb, var(--ok) 10%, transparent);
633
717
  }
634
718
  .dg-pill.bad {
635
- color: var(--red);
636
- border-color: color-mix(in srgb, var(--red) 55%, transparent);
637
- background: color-mix(in srgb, var(--red) 10%, transparent);
719
+ color: var(--bad);
720
+ border-color: color-mix(in srgb, var(--bad) 55%, transparent);
721
+ background: color-mix(in srgb, var(--bad) 10%, transparent);
638
722
  }
639
723
  .dg-actions {
640
724
  display: flex;
@@ -655,7 +739,7 @@ path.dg-e.dim {
655
739
  border-radius: 10px;
656
740
  padding: 6px;
657
741
  z-index: 1000; /* above the pop-up (900) */
658
- box-shadow: 0 12px 30px rgb(0 0 0 / 0.45);
742
+ box-shadow: var(--shadow);
659
743
  }
660
744
  .dg-menu[hidden] {
661
745
  display: none;
@@ -692,10 +776,10 @@ path.dg-e.dim {
692
776
  cursor: not-allowed;
693
777
  }
694
778
  .dg-mg.danger button {
695
- color: var(--red);
779
+ color: var(--bad);
696
780
  }
697
781
  .dg-menu button.armed {
698
- background: color-mix(in srgb, var(--red) 18%, transparent);
782
+ background: color-mix(in srgb, var(--bad) 18%, transparent);
699
783
  font-weight: 600;
700
784
  }
701
785
  .dg-tabs {
@@ -736,7 +820,7 @@ path.dg-e.dim {
736
820
  font-weight: 600;
737
821
  }
738
822
  .dg-sec a {
739
- color: var(--accent);
823
+ color: var(--accent-text);
740
824
  }
741
825
  .dg dl.kv {
742
826
  display: grid;
@@ -842,7 +926,7 @@ path.dg-e.dim {
842
926
  color: var(--text);
843
927
  }
844
928
  .dg table.svc button.nm:hover {
845
- color: var(--accent);
929
+ color: var(--accent-text);
846
930
  }
847
931
  .dg-logbar {
848
932
  display: flex;
@@ -907,7 +991,7 @@ path.dg-e.dim {
907
991
  overflow-wrap: anywhere;
908
992
  }
909
993
  .dg ol.act .refused {
910
- color: var(--red);
994
+ color: var(--bad);
911
995
  font-style: normal;
912
996
  }
913
997
  .dg-who {
@@ -919,8 +1003,8 @@ path.dg-e.dim {
919
1003
  white-space: nowrap;
920
1004
  }
921
1005
  .dg-who.agent {
922
- color: var(--yellow);
923
- border-color: color-mix(in srgb, var(--yellow) 55%, transparent);
1006
+ color: var(--warn);
1007
+ border-color: color-mix(in srgb, var(--warn) 55%, transparent);
924
1008
  }
925
1009
  .dg-layers span {
926
1010
  font-family: var(--mono);
@@ -961,7 +1045,7 @@ path.dg-e.dim {
961
1045
  border-radius: 14px 14px 0 0;
962
1046
  z-index: 800;
963
1047
  padding-bottom: env(safe-area-inset-bottom, 0px);
964
- box-shadow: 0 -12px 30px rgb(0 0 0 / 0.45);
1048
+ box-shadow: var(--shadow);
965
1049
  }
966
1050
  .dg-stage > .dg-panel .dg-resize {
967
1051
  display: none;
@@ -977,4 +1061,14 @@ path.dg-e.dim {
977
1061
  .dg * {
978
1062
  transition: none !important;
979
1063
  }
1064
+ /* No motion: the lit edge stays thicker, in the accent colour. */
1065
+ path.dg-flow.on {
1066
+ animation: none;
1067
+ display: none;
1068
+ }
1069
+ path.dg-e.hl {
1070
+ stroke: var(--accent);
1071
+ stroke-width: 3;
1072
+ stroke-opacity: 1;
1073
+ }
980
1074
  }