@grifhinz/logics-manager 2.6.0 → 2.8.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.
@@ -18,7 +18,13 @@
18
18
  <div>
19
19
  <div class="viewer-topbar__identity">
20
20
  <div class="viewer-topbar__title">Logics Viewer</div>
21
- <span class="viewer-topbar__repo" id="viewer-repo-pill" title="">repository</span>
21
+ <div class="viewer-project-switcher" id="viewer-project-switcher">
22
+ <button class="viewer-topbar__repo viewer-project-switcher__button" id="viewer-repo-pill" type="button" title="" aria-haspopup="menu" aria-expanded="false" aria-controls="viewer-project-menu">
23
+ <span data-viewer-project-label>repository</span>
24
+ <span class="viewer-project-switcher__chevron" aria-hidden="true">v</span>
25
+ </button>
26
+ <div class="viewer-project-switcher__menu" id="viewer-project-menu" role="menu" aria-label="Known projects" hidden></div>
27
+ </div>
22
28
  <span class="viewer-topbar__repo-actions" id="viewer-repo-actions" aria-label="Repository shortcuts">
23
29
  <a class="viewer-topbar__repo-action" id="viewer-repo-github" href="#" target="_blank" rel="noreferrer" title="Open GitHub repository" aria-label="Open GitHub repository" hidden>
24
30
  <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M9 19c-4.2 1.2-4.2-2-6-2.4m12 4.4v-3.5c0-1 .1-1.4-.5-2 2-.2 4.1-1 4.1-4.6 0-1-.4-1.9-1-2.6.1-.3.4-1.3-.1-2.6 0 0-.8-.3-2.7 1a9.3 9.3 0 0 0-4.9 0c-1.8-1.3-2.7-1-2.7-1-.5 1.3-.2 2.3-.1 2.6a3.8 3.8 0 0 0-1 2.6c0 3.6 2.1 4.4 4.1 4.6-.5.5-.7 1-.7 1.9V21" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" /></svg>
@@ -31,6 +37,9 @@
31
37
  <div class="viewer-topbar__meta" id="viewer-meta">Read-only local viewer</div>
32
38
  </div>
33
39
  <div class="viewer-topbar__actions">
40
+ <button class="btn" id="viewer-git" type="button" title="Show Git status">Git</button>
41
+ <button class="btn" id="viewer-ci" type="button" title="Show GitHub Actions CI status" hidden>CI</button>
42
+ <button class="btn" id="viewer-cdx" type="button" title="Show CDX status">CDX</button>
34
43
  <div class="viewer-refresh-menu">
35
44
  <button class="btn" id="viewer-refresh-menu-button" type="button" title="Viewer settings" aria-haspopup="menu" aria-expanded="false" aria-controls="viewer-refresh-menu">Settings</button>
36
45
  <div class="viewer-refresh-menu__panel" id="viewer-refresh-menu" role="menu" aria-label="Viewer settings" hidden>
@@ -56,12 +65,10 @@
56
65
  <div class="viewer-settings-menu__heading">Utilities</div>
57
66
  <button class="btn" id="viewer-insights" type="button" title="Show corpus insights">Insights</button>
58
67
  <button class="btn" id="viewer-health" type="button" title="Show lint and audit health">Health</button>
68
+ <a class="viewer-settings-menu__version" id="viewer-version-link" href="https://github.com/AlexAgo83/logics-manager" target="_blank" rel="noreferrer" title="Open Logics Manager on GitHub">v0.0.0</a>
59
69
  </section>
60
70
  </div>
61
71
  </div>
62
- <button class="btn" id="viewer-git" type="button" title="Show Git status">Git</button>
63
- <button class="btn" id="viewer-ci" type="button" title="Show GitHub Actions CI status" hidden>CI</button>
64
- <button class="btn" id="viewer-cdx" type="button" title="Show CDX status">CDX</button>
65
72
  </div>
66
73
  </header>
67
74
 
@@ -37,6 +37,92 @@
37
37
  line-height: 1.3;
38
38
  }
39
39
 
40
+ .viewer-project-switcher {
41
+ position: relative;
42
+ min-width: 0;
43
+ }
44
+
45
+ .viewer-project-switcher__button {
46
+ display: inline-flex;
47
+ align-items: center;
48
+ gap: 6px;
49
+ cursor: pointer;
50
+ }
51
+
52
+ .viewer-project-switcher__button[disabled] {
53
+ cursor: default;
54
+ opacity: 0.75;
55
+ }
56
+
57
+ .viewer-project-switcher__chevron {
58
+ font-size: 9px;
59
+ opacity: 0.75;
60
+ }
61
+
62
+ .viewer-project-switcher__menu {
63
+ position: absolute;
64
+ z-index: 20;
65
+ top: calc(100% + 6px);
66
+ left: 0;
67
+ min-width: 260px;
68
+ max-width: min(420px, calc(100vw - 24px));
69
+ max-height: min(360px, calc(100vh - 96px));
70
+ overflow: auto;
71
+ padding: 6px;
72
+ border: 1px solid var(--vscode-panel-border, #333333);
73
+ border-radius: 6px;
74
+ background: var(--vscode-dropdown-background, var(--vscode-editorWidget-background, #202020));
75
+ box-shadow: 0 12px 28px rgb(0 0 0 / 28%);
76
+ }
77
+
78
+ .viewer-project-switcher__menu[hidden] {
79
+ display: none !important;
80
+ }
81
+
82
+ .viewer-project-switcher__item {
83
+ width: 100%;
84
+ display: grid;
85
+ grid-template-columns: minmax(0, 1fr) auto;
86
+ gap: 4px 10px;
87
+ padding: 7px 8px;
88
+ border: 0;
89
+ border-radius: 4px;
90
+ background: transparent;
91
+ color: var(--vscode-foreground, #d4d4d4);
92
+ text-align: left;
93
+ cursor: pointer;
94
+ }
95
+
96
+ .viewer-project-switcher__item:hover,
97
+ .viewer-project-switcher__item.is-active {
98
+ background: var(--vscode-list-hoverBackground, rgb(255 255 255 / 8%));
99
+ }
100
+
101
+ .viewer-project-switcher__item-name,
102
+ .viewer-project-switcher__item-state {
103
+ overflow: hidden;
104
+ text-overflow: ellipsis;
105
+ white-space: nowrap;
106
+ }
107
+
108
+ .viewer-project-switcher__item-name {
109
+ font-weight: 650;
110
+ }
111
+
112
+ .viewer-project-switcher__item-path {
113
+ grid-column: 1 / -1;
114
+ overflow: hidden;
115
+ text-overflow: ellipsis;
116
+ white-space: nowrap;
117
+ color: var(--vscode-descriptionForeground, #9da5b4);
118
+ font-size: 11px;
119
+ }
120
+
121
+ .viewer-project-switcher__item-state {
122
+ color: var(--vscode-descriptionForeground, #9da5b4);
123
+ font-size: 11px;
124
+ }
125
+
40
126
  .viewer-topbar__repo-actions {
41
127
  display: inline-flex;
42
128
  align-items: center;
@@ -179,6 +265,11 @@
179
265
  line-height: 1;
180
266
  }
181
267
 
268
+ .viewer-cdx-button-badge--runs {
269
+ background: rgba(245, 158, 11, 0.16);
270
+ color: #f59e0b;
271
+ }
272
+
182
273
  .viewer-refresh-menu {
183
274
  position: relative;
184
275
  display: inline-flex;
@@ -228,6 +319,19 @@
228
319
  width: 100%;
229
320
  }
230
321
 
322
+ .viewer-settings-menu__version {
323
+ justify-self: center;
324
+ color: var(--vscode-descriptionForeground, #9da5b4);
325
+ font-size: 11px;
326
+ text-decoration: none;
327
+ }
328
+
329
+ .viewer-settings-menu__version:hover,
330
+ .viewer-settings-menu__version:focus-visible {
331
+ color: var(--vscode-textLink-foreground, #4ea1ff);
332
+ text-decoration: underline;
333
+ }
334
+
231
335
  .viewer-auto-refresh {
232
336
  display: inline-flex;
233
337
  align-items: center;
@@ -529,6 +633,31 @@
529
633
  gap: 14px;
530
634
  }
531
635
 
636
+ .viewer-cdx__modes {
637
+ display: inline-flex;
638
+ align-items: center;
639
+ gap: 2px;
640
+ width: fit-content;
641
+ padding: 2px;
642
+ border: 1px solid var(--vscode-panel-border, #333333);
643
+ border-radius: 6px;
644
+ background: var(--vscode-editorWidget-background, #202020);
645
+ }
646
+
647
+ .viewer-cdx__mode {
648
+ border: 0;
649
+ border-radius: 4px;
650
+ padding: 5px 10px;
651
+ background: transparent;
652
+ color: var(--vscode-descriptionForeground, #9da5b4);
653
+ cursor: pointer;
654
+ }
655
+
656
+ .viewer-cdx__mode.is-active {
657
+ background: var(--vscode-button-secondaryBackground, #3a3d41);
658
+ color: var(--vscode-button-secondaryForeground, var(--vscode-foreground, #d4d4d4));
659
+ }
660
+
532
661
  .viewer-git__summary,
533
662
  .viewer-cdx__summary,
534
663
  .viewer-ci__summary,
@@ -546,6 +675,44 @@
546
675
  align-items: start;
547
676
  }
548
677
 
678
+ .viewer-cdx__workspace--missions {
679
+ grid-template-columns: minmax(240px, 0.9fr) minmax(320px, 1.1fr);
680
+ }
681
+
682
+ .viewer-git__summary-card {
683
+ display: grid;
684
+ align-content: start;
685
+ gap: 8px;
686
+ }
687
+
688
+ .viewer-git__summary-segments {
689
+ display: flex;
690
+ flex-wrap: wrap;
691
+ gap: 6px;
692
+ }
693
+
694
+ .viewer-git__summary-segment {
695
+ display: inline-flex;
696
+ align-items: center;
697
+ gap: 6px;
698
+ min-height: 24px;
699
+ border: 1px solid color-mix(in srgb, var(--vscode-panel-border, #333333) 72%, transparent);
700
+ border-radius: 6px;
701
+ padding: 2px 7px;
702
+ background: color-mix(in srgb, var(--vscode-editorWidget-background, #202020) 76%, var(--vscode-textLink-foreground, #4ea1ff));
703
+ font-size: 12px;
704
+ white-space: nowrap;
705
+ }
706
+
707
+ .viewer-git__summary-segment span {
708
+ color: var(--vscode-descriptionForeground, #aaaaaa);
709
+ }
710
+
711
+ .viewer-git__summary-segment strong {
712
+ color: var(--vscode-foreground, #dddddd);
713
+ font-size: 13px;
714
+ }
715
+
549
716
  .viewer-ci {
550
717
  display: grid;
551
718
  gap: 12px;
@@ -574,6 +741,15 @@
574
741
  margin-bottom: 10px;
575
742
  }
576
743
 
744
+ .viewer-ci__heading--actions {
745
+ align-items: flex-start;
746
+ }
747
+
748
+ .viewer-ci__heading--actions > div {
749
+ display: grid;
750
+ gap: 4px;
751
+ }
752
+
577
753
  .viewer-ci__heading h2 {
578
754
  margin: 0;
579
755
  font-size: 13px;
@@ -721,12 +897,113 @@
721
897
  gap: 8px;
722
898
  }
723
899
 
900
+ .viewer-cdx__row--block {
901
+ display: grid;
902
+ gap: 8px;
903
+ }
904
+
724
905
  .viewer-cdx__row strong,
725
906
  .viewer-cdx__entity-main > span {
726
907
  min-width: 0;
727
908
  text-align: right;
728
909
  }
729
910
 
911
+ .viewer-cdx__row--block strong,
912
+ .viewer-cdx__detail-value {
913
+ min-width: 0;
914
+ text-align: left;
915
+ }
916
+
917
+ .viewer-cdx__detail-value {
918
+ display: grid;
919
+ gap: 8px;
920
+ color: var(--vscode-editor-foreground, #d4d4d4);
921
+ line-height: 1.45;
922
+ }
923
+
924
+ .viewer-cdx__detail-list {
925
+ display: grid;
926
+ gap: 8px;
927
+ margin: 0;
928
+ padding-left: 20px;
929
+ }
930
+
931
+ .viewer-cdx__detail-list li {
932
+ min-width: 0;
933
+ }
934
+
935
+ .viewer-cdx__detail-code {
936
+ max-width: 100%;
937
+ max-height: 280px;
938
+ overflow: auto;
939
+ margin: 0;
940
+ padding: 8px;
941
+ border-radius: 6px;
942
+ background: var(--vscode-textCodeBlock-background, #111111);
943
+ color: var(--vscode-textPreformat-foreground, #d7ba7d);
944
+ font-size: 11px;
945
+ line-height: 1.45;
946
+ white-space: pre-wrap;
947
+ overflow-wrap: anywhere;
948
+ }
949
+
950
+ .viewer-cdx__log-preview {
951
+ display: grid;
952
+ gap: 10px;
953
+ min-width: 0;
954
+ }
955
+
956
+ .viewer-cdx__log-structured,
957
+ .viewer-cdx__log-raw {
958
+ min-width: 0;
959
+ border: 1px solid var(--vscode-panel-border, #333333);
960
+ border-radius: 6px;
961
+ background: color-mix(in srgb, var(--vscode-editorWidget-background, #202020) 76%, transparent);
962
+ }
963
+
964
+ .viewer-cdx__log-structured > summary,
965
+ .viewer-cdx__log-raw > summary {
966
+ cursor: pointer;
967
+ padding: 8px 10px;
968
+ color: var(--vscode-descriptionForeground, #aaaaaa);
969
+ font-size: 12px;
970
+ font-weight: 700;
971
+ }
972
+
973
+ .viewer-cdx__log-structured > .viewer-cdx__detail-value {
974
+ padding: 0 10px 10px;
975
+ }
976
+
977
+ .viewer-cdx__log-content {
978
+ max-height: min(70vh, 760px);
979
+ overflow: auto;
980
+ margin: 0;
981
+ padding: 12px;
982
+ border: 1px solid var(--vscode-panel-border, #333333);
983
+ border-radius: 6px;
984
+ background: var(--vscode-textCodeBlock-background, #111111);
985
+ color: var(--vscode-textPreformat-foreground, #d7ba7d);
986
+ font-size: 12px;
987
+ line-height: 1.45;
988
+ white-space: pre-wrap;
989
+ overflow-wrap: anywhere;
990
+ }
991
+
992
+ .viewer-cdx__path-link {
993
+ border: 0;
994
+ padding: 0;
995
+ background: transparent;
996
+ color: var(--vscode-textLink-foreground, #4ea1ff);
997
+ cursor: pointer;
998
+ font: inherit;
999
+ text-align: right;
1000
+ overflow-wrap: anywhere;
1001
+ }
1002
+
1003
+ .viewer-cdx__path-link:hover {
1004
+ text-decoration: underline;
1005
+ }
1006
+
730
1007
  .viewer-cdx__entity-status {
731
1008
  display: flex;
732
1009
  flex-wrap: wrap;
@@ -905,6 +1182,110 @@
905
1182
  overflow-wrap: anywhere;
906
1183
  }
907
1184
 
1185
+ .viewer-cdx__missions {
1186
+ display: grid;
1187
+ gap: 8px;
1188
+ }
1189
+
1190
+ .viewer-cdx__mission {
1191
+ display: grid;
1192
+ gap: 5px;
1193
+ width: 100%;
1194
+ min-width: 0;
1195
+ padding: 10px;
1196
+ border: 1px solid var(--vscode-panel-border, #333333);
1197
+ border-radius: 6px;
1198
+ background: var(--vscode-input-background, #1f1f1f);
1199
+ color: var(--vscode-foreground, #d4d4d4);
1200
+ font: inherit;
1201
+ text-align: left;
1202
+ cursor: pointer;
1203
+ }
1204
+
1205
+ .viewer-cdx__mission.is-active {
1206
+ border-color: var(--vscode-focusBorder, #4ea1ff);
1207
+ background: color-mix(in srgb, var(--vscode-input-background, #1f1f1f) 72%, var(--vscode-textLink-foreground, #4ea1ff));
1208
+ }
1209
+
1210
+ .viewer-cdx__mission span,
1211
+ .viewer-cdx__mission em {
1212
+ color: var(--vscode-descriptionForeground, #aaaaaa);
1213
+ font-size: 12px;
1214
+ font-style: normal;
1215
+ }
1216
+
1217
+ .viewer-cdx__field {
1218
+ display: grid;
1219
+ gap: 6px;
1220
+ margin-bottom: 10px;
1221
+ color: var(--vscode-descriptionForeground, #aaaaaa);
1222
+ font-size: 12px;
1223
+ }
1224
+
1225
+ .viewer-cdx__field select,
1226
+ .viewer-cdx__field input,
1227
+ .viewer-cdx__field textarea {
1228
+ min-width: 0;
1229
+ width: 100%;
1230
+ border: 1px solid var(--vscode-input-border, var(--vscode-panel-border, #333333));
1231
+ border-radius: 4px;
1232
+ padding: 7px 8px;
1233
+ background: var(--vscode-dropdown-background, var(--vscode-input-background, #1f1f1f));
1234
+ color: var(--vscode-dropdown-foreground, var(--vscode-foreground, #d4d4d4));
1235
+ }
1236
+
1237
+ .viewer-cdx__field textarea {
1238
+ resize: vertical;
1239
+ }
1240
+
1241
+ .viewer-cdx__field--check {
1242
+ grid-template-columns: 16px minmax(0, 1fr);
1243
+ align-items: center;
1244
+ }
1245
+
1246
+ .viewer-cdx__field--check input {
1247
+ width: 16px;
1248
+ height: 16px;
1249
+ padding: 0;
1250
+ }
1251
+
1252
+ .viewer-cdx__strengths,
1253
+ .viewer-cdx__actions {
1254
+ display: flex;
1255
+ flex-wrap: wrap;
1256
+ gap: 8px;
1257
+ }
1258
+
1259
+ .viewer-cdx__actions {
1260
+ margin-top: 12px;
1261
+ }
1262
+
1263
+ .viewer-cdx__code {
1264
+ max-height: 260px;
1265
+ overflow: auto;
1266
+ margin: 0 0 10px;
1267
+ padding: 9px;
1268
+ border-radius: 6px;
1269
+ background: var(--vscode-textCodeBlock-background, #111111);
1270
+ color: var(--vscode-textPreformat-foreground, #d7ba7d);
1271
+ font-size: 12px;
1272
+ white-space: pre-wrap;
1273
+ overflow-wrap: anywhere;
1274
+ }
1275
+
1276
+ .viewer-cdx__code--error {
1277
+ color: #ef4444;
1278
+ }
1279
+
1280
+ .viewer-cdx__warnings {
1281
+ display: grid;
1282
+ gap: 5px;
1283
+ margin: 10px 0 0;
1284
+ padding-left: 18px;
1285
+ color: #f59e0b;
1286
+ font-size: 12px;
1287
+ }
1288
+
908
1289
  .viewer-cdx__state,
909
1290
  .viewer-cdx__empty {
910
1291
  margin: 0;
@@ -912,6 +1293,18 @@
912
1293
  overflow-wrap: anywhere;
913
1294
  }
914
1295
 
1296
+ .viewer-cdx__state--ok {
1297
+ color: #22c55e;
1298
+ }
1299
+
1300
+ .viewer-cdx__state--warn {
1301
+ color: #f59e0b;
1302
+ }
1303
+
1304
+ .viewer-cdx__state--bad {
1305
+ color: #ef4444;
1306
+ }
1307
+
915
1308
  @media (max-width: 860px) {
916
1309
  .viewer-cdx__workspace {
917
1310
  grid-template-columns: 1fr;
@@ -924,11 +1317,15 @@
924
1317
 
925
1318
  .viewer-git__workspace {
926
1319
  display: grid;
927
- grid-template-columns: minmax(120px, 0.45fr) minmax(220px, 0.9fr) minmax(280px, 1.3fr);
1320
+ grid-template-columns: minmax(120px, 0.45fr) minmax(0, 2.2fr);
928
1321
  gap: 12px;
929
1322
  align-items: start;
930
1323
  }
931
1324
 
1325
+ .viewer-git__workspace.has-diff-detail {
1326
+ grid-template-columns: minmax(120px, 0.45fr) minmax(220px, 0.9fr) minmax(280px, 1.3fr);
1327
+ }
1328
+
932
1329
  .viewer-git__domains {
933
1330
  display: grid;
934
1331
  gap: 6px;
@@ -985,6 +1382,10 @@
985
1382
  display: none !important;
986
1383
  }
987
1384
 
1385
+ .viewer-git__detail[hidden] {
1386
+ display: none !important;
1387
+ }
1388
+
988
1389
  .viewer-git__panel-header {
989
1390
  display: flex;
990
1391
  align-items: center;
@@ -336,6 +336,7 @@ def _build_spec_first_pass(repo_root: Path, backlog_ref: str) -> dict[str, objec
336
336
  [
337
337
  f"## {ref} - {spec_title}",
338
338
  f"> From version: {_parse_package_version(repo_root)}",
339
+ "> Status: Draft",
339
340
  "> Understanding: 90%",
340
341
  "> Confidence: 85%",
341
342
  "",
@@ -77,12 +77,14 @@ def _build_root_help() -> str:
77
77
  ' logics-manager flow new request --title "My request"',
78
78
  " logics-manager audit --group-by-doc",
79
79
  " logics-manager status",
80
- " logics-manager sync refresh-mermaid-signatures",
80
+ " logics-manager flow show req_001_example",
81
+ " logics-manager sync context-pack req_001_example task_001_example --format json",
82
+ " logics-manager sync refresh-mermaid-signatures task_001_example",
81
83
  " logics-manager mcp tunnel --repo-root . --port 8765",
82
84
  "",
83
85
  "Workflow authoring:",
84
86
  " flow Create, promote, split, close, and finish workflow docs.",
85
- " Subcommands: new, list, companion, deliver, validate-closeout, repair, closeout, promote, split, close, finish",
87
+ " Subcommands: new, list, show, companion, deliver, validate-closeout, repair, closeout, promote, split, close, finish",
86
88
  " sync Maintain generated workflow state and doc metadata.",
87
89
  " Subcommands: close-eligible-requests, refresh-mermaid-signatures,",
88
90
  " schema-status, read-doc, list-docs, search-docs,",
@@ -366,7 +368,7 @@ def main(argv: list[str] | None = None) -> int:
366
368
  if manager == "npm":
367
369
  _print_path_conflict_guidance(_find_executable_paths("logics-manager"))
368
370
  return result.returncode
369
- if command == "flow" and (rest[:1] in (["new"], ["list"], ["companion"], ["deliver"], ["validate-closeout"], ["repair"], ["closeout"], ["promote"], ["split"], ["close"], ["finish"]) or rest[:1] in HELP_ARGV):
371
+ if command == "flow":
370
372
  from .flow import main as flow_main
371
373
 
372
374
  return flow_main(rest)