@grifhinz/logics-manager 2.1.2 → 2.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 (49) hide show
  1. package/README.md +106 -4
  2. package/VERSION +1 -1
  3. package/clients/README.md +9 -0
  4. package/clients/shared-web/media/css/board.css +658 -0
  5. package/clients/shared-web/media/css/details.css +457 -0
  6. package/clients/shared-web/media/css/layout.css +123 -0
  7. package/clients/shared-web/media/css/toolbar.css +576 -0
  8. package/clients/shared-web/media/harnessApi.js +324 -0
  9. package/clients/shared-web/media/hostApi.js +213 -0
  10. package/clients/shared-web/media/hostApiContract.js +55 -0
  11. package/clients/shared-web/media/icon.png +0 -0
  12. package/clients/shared-web/media/layoutController.js +246 -0
  13. package/clients/shared-web/media/logics.svg +7 -0
  14. package/clients/shared-web/media/logicsModel.js +910 -0
  15. package/clients/shared-web/media/main.css +112 -0
  16. package/clients/shared-web/media/main.js +3 -0
  17. package/clients/shared-web/media/mainApp.js +1005 -0
  18. package/clients/shared-web/media/mainCore.js +604 -0
  19. package/clients/shared-web/media/mainInteractionHandlers.js +324 -0
  20. package/clients/shared-web/media/mainInteractions.js +378 -0
  21. package/clients/shared-web/media/renderBoard.js +3 -0
  22. package/clients/shared-web/media/renderBoardApp.js +1339 -0
  23. package/clients/shared-web/media/renderDetails.js +685 -0
  24. package/clients/shared-web/media/renderMarkdown.js +449 -0
  25. package/clients/shared-web/media/toolsPanelLayout.js +172 -0
  26. package/clients/shared-web/media/uiStatus.js +54 -0
  27. package/clients/shared-web/media/webviewChrome.js +405 -0
  28. package/clients/shared-web/media/webviewPersistence.js +116 -0
  29. package/clients/shared-web/media/webviewSelectors.js +491 -0
  30. package/clients/viewer/README.md +5 -0
  31. package/clients/viewer/browser-host.js +847 -0
  32. package/clients/viewer/index.html +237 -0
  33. package/clients/viewer/viewer.css +433 -0
  34. package/logics_manager/assist.py +94 -63
  35. package/logics_manager/assist_handoff.py +132 -0
  36. package/logics_manager/assist_surface.py +38 -0
  37. package/logics_manager/cli.py +152 -12
  38. package/logics_manager/cli_output.py +18 -0
  39. package/logics_manager/flow.py +1360 -84
  40. package/logics_manager/flow_evidence.py +63 -0
  41. package/logics_manager/index.py +3 -7
  42. package/logics_manager/insights.py +418 -0
  43. package/logics_manager/mcp.py +50 -0
  44. package/logics_manager/path_utils.py +31 -0
  45. package/logics_manager/sync.py +24 -12
  46. package/logics_manager/update_check.py +138 -0
  47. package/logics_manager/viewer.py +533 -0
  48. package/package.json +12 -6
  49. package/pyproject.toml +1 -1
@@ -0,0 +1,576 @@
1
+ .toolbar {
2
+ display: flex;
3
+ flex-direction: column;
4
+ align-items: stretch;
5
+ gap: 8px;
6
+ padding: 8px 8px;
7
+ background: var(--vscode-titleBar-activeBackground, #2d2d2d);
8
+ border-bottom: 1px solid var(--vscode-panel-border, #333333);
9
+ position: sticky;
10
+ top: 0;
11
+ z-index: 10;
12
+ }
13
+
14
+ .toolbar__row {
15
+ display: flex;
16
+ align-items: center;
17
+ gap: 10px;
18
+ width: 100%;
19
+ min-width: 0;
20
+ }
21
+
22
+ .toolbar__row--primary {
23
+ justify-content: space-between;
24
+ flex-wrap: nowrap;
25
+ }
26
+
27
+ .toolbar__row--secondary {
28
+ padding-top: 8px;
29
+ border-top: 1px solid var(--vscode-panel-border, #333333);
30
+ flex-wrap: wrap;
31
+ }
32
+
33
+ .toolbar__row--secondary[hidden] {
34
+ display: none;
35
+ }
36
+
37
+ .toolbar__filters {
38
+ display: flex;
39
+ align-items: center;
40
+ gap: 8px;
41
+ position: relative;
42
+ flex: 0 0 auto;
43
+ }
44
+
45
+ .toolbar__buttons {
46
+ display: flex;
47
+ align-items: center;
48
+ gap: 6px;
49
+ margin-left: auto;
50
+ flex-wrap: nowrap;
51
+ flex: 0 0 auto;
52
+ min-width: 0;
53
+ white-space: nowrap;
54
+ }
55
+
56
+ .toolbar__search {
57
+ flex: 1 1 220px;
58
+ min-width: 160px;
59
+ max-width: 320px;
60
+ }
61
+
62
+ .toolbar__ordering {
63
+ display: flex;
64
+ align-items: center;
65
+ gap: 8px;
66
+ flex-wrap: wrap;
67
+ flex: 0 1 auto;
68
+ }
69
+
70
+ .toolbar__select {
71
+ display: flex;
72
+ align-items: center;
73
+ gap: 6px;
74
+ font-size: 11px;
75
+ color: var(--vscode-descriptionForeground, #9da5b4);
76
+ }
77
+
78
+ .toolbar__select select {
79
+ height: 28px;
80
+ border: 1px solid var(--vscode-panel-border, #333333);
81
+ border-radius: 6px;
82
+ background: var(--vscode-dropdown-background, var(--vscode-input-background, #1f1f1f));
83
+ color: var(--vscode-dropdown-foreground, var(--vscode-input-foreground, #e5e5e5));
84
+ padding: 0 8px;
85
+ font-size: 12px;
86
+ }
87
+
88
+ .toolbar__select select:focus-visible {
89
+ outline: 1px solid var(--vscode-focusBorder, var(--vscode-button-background, #0e639c));
90
+ outline-offset: 1px;
91
+ }
92
+
93
+ .toolbar__search-input {
94
+ width: 100%;
95
+ height: 28px;
96
+ border: 1px solid var(--vscode-panel-border, #333333);
97
+ border-radius: 6px;
98
+ background: var(--vscode-input-background, #1f1f1f);
99
+ color: var(--vscode-input-foreground, #e5e5e5);
100
+ padding: 0 10px;
101
+ font-size: 12px;
102
+ }
103
+
104
+ .toolbar__search-input::placeholder {
105
+ color: var(--vscode-input-placeholderForeground, #8b8b8b);
106
+ }
107
+
108
+ .toolbar__search-input:focus-visible {
109
+ outline: 1px solid var(--vscode-focusBorder, var(--vscode-button-background, #0e639c));
110
+ outline-offset: 1px;
111
+ }
112
+
113
+ .toolbar__filter {
114
+ width: 26px;
115
+ height: 26px;
116
+ border: 1px solid var(--vscode-panel-border, #333333);
117
+ border-radius: 6px;
118
+ background: transparent;
119
+ color: var(--vscode-foreground, #d4d4d4);
120
+ display: flex;
121
+ align-items: center;
122
+ justify-content: center;
123
+ padding: 0;
124
+ cursor: pointer;
125
+ position: relative;
126
+ }
127
+
128
+ .toolbar__filter svg {
129
+ width: 16px;
130
+ height: 16px;
131
+ display: block;
132
+ }
133
+
134
+ .toolbar__filter--active {
135
+ border-color: var(--vscode-button-background, #0e639c);
136
+ color: var(--vscode-button-background, #0e639c);
137
+ }
138
+
139
+ .toolbar__filter--open {
140
+ background: var(--vscode-button-secondaryBackground, #3a3d41);
141
+ border-color: var(--vscode-button-background, #0e639c);
142
+ color: var(--vscode-button-background, #0e639c);
143
+ }
144
+
145
+ .toolbar__filter--active::after {
146
+ content: "";
147
+ position: absolute;
148
+ top: 3px;
149
+ right: 3px;
150
+ width: 6px;
151
+ height: 6px;
152
+ border-radius: 999px;
153
+ background: var(--vscode-button-background, #0e639c);
154
+ box-shadow: 0 0 0 2px var(--vscode-titleBar-activeBackground, #2d2d2d);
155
+ }
156
+
157
+ .filter-panel__reset {
158
+ border: 1px solid var(--vscode-panel-border, #333333);
159
+ border-radius: 6px;
160
+ background: transparent;
161
+ color: var(--vscode-foreground, #d4d4d4);
162
+ font-size: 12px;
163
+ padding: 6px 8px;
164
+ cursor: pointer;
165
+ text-align: left;
166
+ }
167
+
168
+ .toolbar__toggles {
169
+ display: flex;
170
+ align-items: center;
171
+ gap: 10px;
172
+ flex-wrap: wrap;
173
+ flex: 1 1 360px;
174
+ }
175
+
176
+ .toolbar__reset {
177
+ margin-left: auto;
178
+ }
179
+
180
+ .filter-panel__reset:hover {
181
+ background: var(--vscode-list-hoverBackground, #2a2d2e);
182
+ }
183
+
184
+ .toolbar__tools {
185
+ display: flex;
186
+ align-items: center;
187
+ gap: 8px;
188
+ flex-wrap: nowrap;
189
+ position: relative;
190
+ flex: 0 0 auto;
191
+ min-width: 0;
192
+ }
193
+
194
+ .tools-panel {
195
+ position: absolute;
196
+ top: 34px;
197
+ left: 0;
198
+ right: auto;
199
+ min-width: 260px;
200
+ max-width: calc(100vw - 16px);
201
+ background: var(--vscode-editorWidget-background, #202020);
202
+ border: 1px solid var(--vscode-panel-border, #333333);
203
+ border-radius: 8px;
204
+ padding: 8px;
205
+ display: none;
206
+ flex-direction: column;
207
+ gap: 8px;
208
+ z-index: 20;
209
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.35);
210
+ }
211
+
212
+ .tools-panel--open {
213
+ display: flex;
214
+ }
215
+
216
+ .tools-panel__header {
217
+ display: flex;
218
+ align-items: center;
219
+ justify-content: space-between;
220
+ gap: 8px;
221
+ }
222
+
223
+ .tools-panel__header-label {
224
+ font-size: 10px;
225
+ font-weight: 600;
226
+ letter-spacing: 0.08em;
227
+ text-transform: uppercase;
228
+ color: var(--vscode-descriptionForeground, #9da5b4);
229
+ padding: 0 2px;
230
+ }
231
+
232
+ .tools-panel__close {
233
+ width: 24px;
234
+ height: 24px;
235
+ min-width: 24px;
236
+ padding: 0;
237
+ border: 1px solid transparent;
238
+ border-radius: 999px;
239
+ background: transparent;
240
+ color: var(--vscode-descriptionForeground, #9da5b4);
241
+ display: inline-flex;
242
+ align-items: center;
243
+ justify-content: center;
244
+ cursor: pointer;
245
+ }
246
+
247
+ .tools-panel__close svg {
248
+ width: 12px;
249
+ height: 12px;
250
+ }
251
+
252
+ .tools-panel__close:hover {
253
+ background: var(--vscode-list-hoverBackground, #2a2d2e);
254
+ color: var(--vscode-foreground, #d4d4d4);
255
+ }
256
+
257
+ .tools-panel__close:focus-visible {
258
+ outline: 1px solid var(--vscode-focusBorder, var(--vscode-button-background, #0e639c));
259
+ outline-offset: 1px;
260
+ }
261
+
262
+ .tools-panel__switcher {
263
+ display: grid;
264
+ grid-template-columns: repeat(3, minmax(0, 1fr));
265
+ gap: 6px;
266
+ padding-bottom: 4px;
267
+ border-bottom: 1px solid var(--vscode-panel-border, #333333);
268
+ }
269
+
270
+ .tools-panel__switch {
271
+ min-height: 30px;
272
+ border: 1px solid transparent;
273
+ border-radius: 6px;
274
+ background: transparent;
275
+ color: var(--vscode-descriptionForeground, #9da5b4);
276
+ font-size: 11px;
277
+ font-weight: 600;
278
+ cursor: pointer;
279
+ display: inline-flex;
280
+ align-items: center;
281
+ justify-content: center;
282
+ gap: 5px;
283
+ padding: 0 6px;
284
+ }
285
+
286
+ .tools-panel__switch svg {
287
+ width: 12px;
288
+ height: 12px;
289
+ flex: 0 0 auto;
290
+ }
291
+
292
+ .tools-panel__switch:hover {
293
+ background: var(--vscode-list-hoverBackground, #2a2d2e);
294
+ color: var(--vscode-foreground, #d4d4d4);
295
+ }
296
+
297
+ .tools-panel__switch.is-active {
298
+ background: var(--vscode-button-secondaryBackground, #3a3d41);
299
+ border-color: var(--vscode-button-background, #0e639c);
300
+ color: var(--vscode-button-foreground, #ffffff);
301
+ }
302
+
303
+ .tools-panel__switch:focus-visible {
304
+ outline: 1px solid var(--vscode-focusBorder, var(--vscode-button-background, #0e639c));
305
+ outline-offset: 1px;
306
+ }
307
+
308
+ .tools-panel__view {
309
+ display: flex;
310
+ flex-direction: column;
311
+ gap: 8px;
312
+ }
313
+
314
+ .tools-panel__view[hidden] {
315
+ display: none;
316
+ }
317
+
318
+ .tools-panel__item {
319
+ text-align: left;
320
+ background: transparent;
321
+ border: none;
322
+ color: var(--vscode-foreground, #d4d4d4);
323
+ font-size: 12px;
324
+ padding: 6px 8px;
325
+ border-radius: 4px;
326
+ cursor: pointer;
327
+ }
328
+
329
+ .tools-panel__item:hover {
330
+ background: var(--vscode-list-hoverBackground, #2a2d2e);
331
+ }
332
+
333
+ .tools-panel__item:disabled {
334
+ opacity: 0.5;
335
+ cursor: default;
336
+ }
337
+
338
+ .tools-panel__section {
339
+ display: flex;
340
+ flex-direction: column;
341
+ gap: 4px;
342
+ }
343
+
344
+ .tools-panel__section:not(:last-child) {
345
+ padding-bottom: 6px;
346
+ border-bottom: 1px solid var(--vscode-panel-border, #333333);
347
+ }
348
+
349
+ .tools-panel__section-label {
350
+ font-size: 10px;
351
+ font-weight: 600;
352
+ letter-spacing: 0.08em;
353
+ text-transform: uppercase;
354
+ color: var(--vscode-descriptionForeground, #9da5b4);
355
+ padding: 0 8px;
356
+ }
357
+
358
+ .tools-panel__section-body {
359
+ display: flex;
360
+ flex-direction: column;
361
+ gap: 2px;
362
+ }
363
+
364
+ .btn {
365
+ border: 1px solid var(--vscode-button-border, transparent);
366
+ background: var(--vscode-button-background, #0e639c);
367
+ color: var(--vscode-button-foreground, #ffffff);
368
+ padding: 4px 10px;
369
+ border-radius: 4px;
370
+ font-size: 12px;
371
+ cursor: pointer;
372
+ }
373
+
374
+ .btn:disabled {
375
+ opacity: 0.5;
376
+ cursor: default;
377
+ }
378
+
379
+ .btn--primary {
380
+ background: var(--vscode-button-background, #0e639c);
381
+ color: var(--vscode-button-foreground, #ffffff);
382
+ }
383
+
384
+ .btn--icon {
385
+ width: 30px;
386
+ min-width: 30px;
387
+ height: 30px;
388
+ padding: 0;
389
+ display: inline-flex;
390
+ align-items: center;
391
+ justify-content: center;
392
+ }
393
+
394
+ .btn--icon svg {
395
+ width: 16px;
396
+ height: 16px;
397
+ display: block;
398
+ }
399
+
400
+ .btn--secondary,
401
+ .btn--contextual {
402
+ background: var(--vscode-button-secondaryBackground, #3a3d41);
403
+ color: var(--vscode-button-secondaryForeground, #e7e7e7);
404
+ border-color: var(--vscode-panel-border, #333333);
405
+ }
406
+
407
+ .btn--active:not(:disabled) {
408
+ background: var(--vscode-button-background, #0e639c);
409
+ color: var(--vscode-button-foreground, #ffffff);
410
+ border-color: var(--vscode-button-border, transparent);
411
+ }
412
+
413
+ .btn--contextual.btn--contextual-active:not(:disabled) {
414
+ background: var(--vscode-button-background, #0e639c);
415
+ color: var(--vscode-button-foreground, #ffffff);
416
+ border-color: var(--vscode-button-border, transparent);
417
+ }
418
+
419
+ .btn--active:not(:disabled) {
420
+ background: var(--vscode-button-background, #0e639c);
421
+ color: var(--vscode-button-foreground, #ffffff);
422
+ border-color: var(--vscode-button-border, transparent);
423
+ }
424
+
425
+ .activity-panel {
426
+ display: flex;
427
+ flex-direction: column;
428
+ gap: 8px;
429
+ padding: 12px 0;
430
+ background: transparent;
431
+ flex: 1 1 auto;
432
+ min-width: 0;
433
+ min-height: 0;
434
+ overflow: hidden;
435
+ }
436
+
437
+ .activity-panel[hidden] {
438
+ display: none;
439
+ }
440
+
441
+ .activity-panel__header {
442
+ font-size: 11px;
443
+ text-transform: uppercase;
444
+ letter-spacing: 0.08em;
445
+ color: var(--vscode-descriptionForeground, #9da5b4);
446
+ padding: 0 12px;
447
+ }
448
+
449
+ .activity-panel__list {
450
+ display: flex;
451
+ flex-direction: column;
452
+ gap: 8px;
453
+ min-height: 0;
454
+ overflow: auto;
455
+ padding: 0 12px 12px;
456
+ }
457
+
458
+ .activity-panel__entry {
459
+ display: flex;
460
+ flex-direction: column;
461
+ align-items: flex-start;
462
+ gap: 4px;
463
+ width: 100%;
464
+ text-align: left;
465
+ border: 1px solid var(--vscode-panel-border, #333333);
466
+ border-radius: 6px;
467
+ background: transparent;
468
+ color: var(--vscode-foreground, #d4d4d4);
469
+ padding: 8px;
470
+ cursor: pointer;
471
+ min-width: 0;
472
+ white-space: normal;
473
+ }
474
+
475
+ .activity-panel__entry:hover {
476
+ background: var(--vscode-list-hoverBackground, #2a2d2e);
477
+ }
478
+
479
+ .activity-panel__entry:focus-visible {
480
+ outline: 1px solid var(--vscode-focusBorder, var(--vscode-button-background, #0e639c));
481
+ outline-offset: 1px;
482
+ }
483
+
484
+ .activity-panel__title {
485
+ font-size: 12px;
486
+ min-width: 0;
487
+ width: 100%;
488
+ white-space: normal;
489
+ overflow-wrap: anywhere;
490
+ word-break: break-word;
491
+ }
492
+
493
+ .activity-panel__meta {
494
+ font-size: 11px;
495
+ color: var(--vscode-descriptionForeground, #9da5b4);
496
+ min-width: 0;
497
+ width: 100%;
498
+ white-space: normal;
499
+ overflow-wrap: anywhere;
500
+ word-break: break-word;
501
+ }
502
+
503
+ .activity-panel__updated {
504
+ font-size: 11px;
505
+ color: var(--vscode-editorInfo-foreground, var(--vscode-descriptionForeground, #9da5b4));
506
+ min-width: 0;
507
+ width: 100%;
508
+ white-space: normal;
509
+ overflow-wrap: anywhere;
510
+ word-break: break-word;
511
+ }
512
+
513
+ .help-banner {
514
+ display: flex;
515
+ align-items: flex-start;
516
+ justify-content: space-between;
517
+ gap: 12px;
518
+ padding: 8px;
519
+ border-bottom: 1px solid var(--vscode-panel-border, #333333);
520
+ background: rgba(14, 99, 156, 0.12);
521
+ }
522
+
523
+ .help-banner[hidden] {
524
+ display: none;
525
+ }
526
+
527
+ .help-banner__copy {
528
+ font-size: 12px;
529
+ color: var(--vscode-foreground, #d4d4d4);
530
+ }
531
+
532
+ .help-banner__dismiss {
533
+ border: 1px solid var(--vscode-panel-border, #333333);
534
+ border-radius: 6px;
535
+ background: transparent;
536
+ color: var(--vscode-foreground, #d4d4d4);
537
+ font-size: 12px;
538
+ padding: 4px 8px;
539
+ cursor: pointer;
540
+ }
541
+
542
+ .btn--caution {
543
+ background: rgba(220, 38, 38, 0.1);
544
+ color: var(--vscode-errorForeground, #f87171);
545
+ border-color: rgba(220, 38, 38, 0.35);
546
+ }
547
+
548
+ .btn[data-current-mode="list"] {
549
+ background: var(--vscode-button-secondaryBackground, #3a3d41);
550
+ color: var(--vscode-button-secondaryForeground, #e7e7e7);
551
+ }
552
+
553
+ .btn[data-current-mode="board"] {
554
+ background: var(--vscode-button-background, #0e639c);
555
+ color: var(--vscode-button-foreground, #ffffff);
556
+ }
557
+
558
+ @media (max-width: 275px) {
559
+ .toolbar__row--primary {
560
+ flex-wrap: wrap;
561
+ }
562
+
563
+ .toolbar__buttons {
564
+ flex-wrap: wrap;
565
+ margin-left: 0;
566
+ width: 100%;
567
+ }
568
+
569
+ .toolbar__search {
570
+ max-width: none;
571
+ }
572
+
573
+ .toolbar__reset {
574
+ margin-left: 0;
575
+ }
576
+ }