@firstpick/pi-package-webui 0.1.3 → 0.1.4

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.
package/public/index.html CHANGED
@@ -76,6 +76,26 @@
76
76
  aria-label="Start guided Git workflow: git add dot, run git-staged-msg, preview messages, commit short or long, then git push. Cancel is available at each step."
77
77
  data-tooltip="Guided Git workflow:
1. Run git add .
2. Run /git-staged-msg
3. Preview short + long messages
4. Commit with short or long message
5. Run git push
Cancel is available at each step."
78
78
  >Git workflow</button>
79
+ <div class="composer-publish-menu">
80
+ <button
81
+ id="publishButton"
82
+ class="composer-publish-button"
83
+ type="button"
84
+ title="Choose a publish workflow"
85
+ aria-label="Open publish workflows"
86
+ aria-haspopup="menu"
87
+ aria-expanded="false"
88
+ aria-controls="publishMenu"
89
+ >Publish</button>
90
+ <div id="publishMenu" class="composer-publish-menu-panel" role="menu" aria-label="Publish workflows">
91
+ <button id="releaseNpmButton" class="composer-publish-menu-item" type="button" role="menuitem" data-command="/release-npm">
92
+ <span>NPM Release</span>
93
+ </button>
94
+ <button id="releaseAurButton" class="composer-publish-menu-item" type="button" role="menuitem" data-command="/release-aur">
95
+ <span>AUR Release</span>
96
+ </button>
97
+ </div>
98
+ </div>
79
99
  </div>
80
100
  <div class="spacer"></div>
81
101
  <button
@@ -141,6 +161,16 @@
141
161
  <div id="networkStatus" class="network-status closed">Local only</div>
142
162
  <button id="openNetworkButton" type="button">Open to network</button>
143
163
  </div>
164
+ <div class="control-field notification-control-field">
165
+ <span class="control-label">Notifications</span>
166
+ <label class="toggle-control" for="agentDoneNotificationsToggle">
167
+ <input id="agentDoneNotificationsToggle" type="checkbox" />
168
+ <span>
169
+ <span class="toggle-control-label">Agent done notifications</span>
170
+ <span id="agentDoneNotificationsStatus" class="toggle-control-hint">Off</span>
171
+ </span>
172
+ </label>
173
+ </div>
144
174
  <button id="abortButton" type="button" class="danger">Abort</button>
145
175
  </div>
146
176
  <h2>Session</h2>
@@ -1,4 +1,4 @@
1
- const CACHE_NAME = "pi-webui-pwa-v6";
1
+ const CACHE_NAME = "pi-webui-pwa-v10";
2
2
  const APP_SHELL = [
3
3
  "/",
4
4
  "/index.html",
package/public/styles.css CHANGED
@@ -476,7 +476,8 @@ body.side-panel-collapsed .terminal-tabs-shell {
476
476
  display: grid;
477
477
  gap: 0.42rem;
478
478
  }
479
- .control-field label {
479
+ .control-field label,
480
+ .control-field .control-label {
480
481
  color: rgba(var(--ctp-text-rgb), 0.74);
481
482
  font-size: 0.72rem;
482
483
  font-weight: 900;
@@ -488,6 +489,56 @@ body.side-panel-collapsed .terminal-tabs-shell {
488
489
  width: 100%;
489
490
  min-width: 0;
490
491
  }
492
+ .toggle-control {
493
+ display: grid;
494
+ grid-template-columns: auto minmax(0, 1fr);
495
+ gap: 0.65rem;
496
+ align-items: center;
497
+ min-height: 44px;
498
+ padding: 0.58rem 0.68rem;
499
+ cursor: pointer;
500
+ border: 1px solid rgba(180, 190, 254, 0.20);
501
+ border-radius: 0.72rem;
502
+ background: rgba(var(--ctp-crust-rgb), 0.58);
503
+ }
504
+ .control-field .toggle-control {
505
+ color: rgba(var(--ctp-text-rgb), 0.88);
506
+ font-size: inherit;
507
+ font-weight: inherit;
508
+ letter-spacing: normal;
509
+ text-transform: none;
510
+ }
511
+ .toggle-control input {
512
+ width: 1.15rem;
513
+ min-width: 1.15rem;
514
+ height: 1.15rem;
515
+ min-height: 1.15rem;
516
+ margin: 0;
517
+ cursor: pointer;
518
+ accent-color: var(--ctp-mauve);
519
+ box-shadow: none;
520
+ }
521
+ .toggle-control-label {
522
+ display: block;
523
+ color: var(--ctp-text);
524
+ font-size: 0.82rem;
525
+ font-weight: 900;
526
+ }
527
+ .toggle-control-hint {
528
+ display: block;
529
+ margin-top: 0.16rem;
530
+ color: rgba(var(--ctp-subtext-rgb), 0.70);
531
+ font-size: 0.72rem;
532
+ font-weight: 700;
533
+ }
534
+ .toggle-control:has(input:checked) {
535
+ border-color: rgba(148, 226, 213, 0.42);
536
+ box-shadow: 0 0 0.9rem rgba(148, 226, 213, 0.10);
537
+ }
538
+ .toggle-control:has(input:disabled) {
539
+ cursor: not-allowed;
540
+ opacity: 0.62;
541
+ }
491
542
  .network-status {
492
543
  display: grid;
493
544
  gap: 0.42rem;
@@ -1260,6 +1311,120 @@ button.footer-meta {
1260
1311
  white-space: pre-wrap;
1261
1312
  box-shadow: inset 0 0 1.4rem rgba(148, 226, 213, 0.06), 0 0 1rem rgba(148, 226, 213, 0.08);
1262
1313
  }
1314
+ .release-npm-widget {
1315
+ display: grid;
1316
+ gap: 0.62rem;
1317
+ padding: 0.72rem;
1318
+ white-space: normal;
1319
+ border-color: rgba(245, 194, 231, 0.34);
1320
+ background:
1321
+ radial-gradient(circle at 4% 0%, rgba(245, 194, 231, 0.16), transparent 16rem),
1322
+ radial-gradient(circle at 96% 12%, rgba(148, 226, 213, 0.12), transparent 18rem),
1323
+ linear-gradient(145deg, rgba(var(--ctp-crust-rgb), 0.92), rgba(var(--ctp-base-rgb), 0.78));
1324
+ }
1325
+ .release-aur-widget {
1326
+ border-color: rgba(250, 179, 135, 0.34);
1327
+ background:
1328
+ radial-gradient(circle at 4% 0%, rgba(250, 179, 135, 0.14), transparent 16rem),
1329
+ radial-gradient(circle at 96% 12%, rgba(166, 227, 161, 0.12), transparent 18rem),
1330
+ linear-gradient(145deg, rgba(var(--ctp-crust-rgb), 0.92), rgba(var(--ctp-base-rgb), 0.78));
1331
+ }
1332
+ .release-aur-widget .release-npm-kicker { color: var(--ctp-peach); }
1333
+ .release-npm-header {
1334
+ display: grid;
1335
+ grid-template-columns: minmax(0, 1fr) auto auto;
1336
+ gap: 0.7rem;
1337
+ align-items: center;
1338
+ }
1339
+ .release-npm-title-wrap {
1340
+ display: grid;
1341
+ gap: 0.14rem;
1342
+ min-width: 0;
1343
+ }
1344
+ .release-npm-kicker {
1345
+ color: var(--ctp-pink);
1346
+ font-size: 0.68rem;
1347
+ font-weight: 950;
1348
+ letter-spacing: 0.16em;
1349
+ text-transform: uppercase;
1350
+ }
1351
+ .release-npm-title {
1352
+ min-width: 0;
1353
+ overflow: hidden;
1354
+ color: rgba(var(--ctp-text-rgb), 0.96);
1355
+ text-overflow: ellipsis;
1356
+ white-space: nowrap;
1357
+ }
1358
+ .release-npm-meta,
1359
+ .release-npm-actions {
1360
+ display: flex;
1361
+ flex-wrap: wrap;
1362
+ gap: 0.42rem;
1363
+ align-items: center;
1364
+ justify-content: flex-end;
1365
+ }
1366
+ .release-npm-pill {
1367
+ display: inline-flex;
1368
+ align-items: center;
1369
+ max-width: min(32rem, 50vw);
1370
+ min-height: 1.55rem;
1371
+ padding: 0.16rem 0.5rem;
1372
+ overflow: hidden;
1373
+ color: var(--ctp-yellow);
1374
+ border: 1px solid rgba(249, 226, 175, 0.22);
1375
+ border-radius: 999px;
1376
+ background: rgba(var(--ctp-crust-rgb), 0.48);
1377
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
1378
+ font-size: 0.72rem;
1379
+ font-weight: 800;
1380
+ text-overflow: ellipsis;
1381
+ white-space: nowrap;
1382
+ }
1383
+ .release-npm-pill.elapsed { color: var(--ctp-teal); }
1384
+ .release-npm-action {
1385
+ min-height: 2rem;
1386
+ padding: 0.38rem 0.62rem;
1387
+ border-radius: 0.62rem;
1388
+ font-size: 0.76rem;
1389
+ font-weight: 850;
1390
+ }
1391
+ .release-npm-terminal {
1392
+ max-height: min(34rem, 42vh);
1393
+ min-height: 5.25rem;
1394
+ overflow: auto;
1395
+ padding: 0.7rem;
1396
+ border: 1px solid rgba(180, 190, 254, 0.16);
1397
+ border-radius: 0.78rem;
1398
+ background:
1399
+ linear-gradient(180deg, rgba(var(--ctp-crust-rgb), 0.82), rgba(var(--ctp-mantle-rgb), 0.62)),
1400
+ radial-gradient(circle at 0 0, rgba(148, 226, 213, 0.07), transparent 15rem);
1401
+ box-shadow: inset 0 0 1.5rem rgba(var(--ctp-crust-rgb), 0.36);
1402
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
1403
+ font-size: 0.78rem;
1404
+ line-height: 1.42;
1405
+ overscroll-behavior: contain;
1406
+ }
1407
+ .release-npm-line {
1408
+ min-width: max-content;
1409
+ min-height: 1.42em;
1410
+ color: rgba(var(--ctp-text-rgb), 0.88);
1411
+ white-space: pre;
1412
+ }
1413
+ .release-npm-line.command { color: var(--ctp-sky); }
1414
+ .release-npm-line.target { color: var(--ctp-pink); font-weight: 850; }
1415
+ .release-npm-line.pass { color: var(--ctp-green); }
1416
+ .release-npm-line.fail { color: var(--ctp-red); }
1417
+ .release-npm-line.warn { color: var(--ctp-yellow); }
1418
+ .release-npm-line.info { color: rgba(var(--ctp-subtext-rgb), 0.80); }
1419
+ .release-npm-line.event { color: var(--ctp-mauve); }
1420
+ .release-npm-controls {
1421
+ color: rgba(var(--ctp-subtext-rgb), 0.72);
1422
+ font-size: 0.75rem;
1423
+ line-height: 1.35;
1424
+ }
1425
+ .release-npm-log-widget .release-npm-terminal {
1426
+ max-height: min(42rem, 52vh);
1427
+ }
1263
1428
  .todo-widget {
1264
1429
  display: grid;
1265
1430
  gap: 0.52rem;
@@ -1777,7 +1942,10 @@ summary { cursor: pointer; color: var(--warning); }
1777
1942
  box-shadow: none;
1778
1943
  }
1779
1944
  .command-suggest-item + .command-suggest-item { border-top: 1px solid rgba(180, 190, 254, 0.08); }
1780
- .command-suggest-item:hover,
1945
+ .command-suggest-item:hover {
1946
+ box-shadow: none;
1947
+ transform: none;
1948
+ }
1781
1949
  .command-suggest-item.active {
1782
1950
  background: linear-gradient(90deg, rgba(203, 166, 247, 0.20), rgba(137, 180, 250, 0.10), rgba(148, 226, 213, 0.12));
1783
1951
  box-shadow: inset 3px 0 0 var(--ctp-teal), 0 0 1.2rem rgba(148, 226, 213, 0.10);
@@ -1838,11 +2006,26 @@ summary { cursor: pointer; color: var(--warning); }
1838
2006
  .spacer { flex: 1; }
1839
2007
  .composer-new-button,
1840
2008
  .composer-compact-button,
1841
- .composer-git-button {
2009
+ .composer-git-button,
2010
+ .composer-publish-menu {
1842
2011
  margin-right: 0.45rem;
1843
2012
  }
2013
+ .composer-publish-menu {
2014
+ position: relative;
2015
+ z-index: 1;
2016
+ display: inline-flex;
2017
+ align-items: stretch;
2018
+ overflow: visible;
2019
+ isolation: isolate;
2020
+ }
2021
+ .composer-publish-menu:hover,
2022
+ .composer-publish-menu:focus-within,
2023
+ .composer-publish-menu.open {
2024
+ z-index: 100;
2025
+ }
1844
2026
  .composer-compact-button,
1845
- .composer-git-button {
2027
+ .composer-git-button,
2028
+ .composer-publish-button {
1846
2029
  color: var(--ctp-teal);
1847
2030
  border-color: rgba(148, 226, 213, 0.36);
1848
2031
  background:
@@ -1857,8 +2040,17 @@ summary { cursor: pointer; color: var(--warning); }
1857
2040
  linear-gradient(120deg, rgba(166, 227, 161, 0.13), rgba(148, 226, 213, 0.10)),
1858
2041
  linear-gradient(180deg, rgba(var(--ctp-surface-rgb), 0.88), rgba(var(--ctp-crust-rgb), 0.88));
1859
2042
  }
2043
+ .composer-publish-button {
2044
+ color: var(--ctp-peach);
2045
+ border-color: rgba(250, 179, 135, 0.38);
2046
+ background:
2047
+ linear-gradient(120deg, rgba(250, 179, 135, 0.13), rgba(245, 194, 231, 0.10)),
2048
+ linear-gradient(180deg, rgba(var(--ctp-surface-rgb), 0.88), rgba(var(--ctp-crust-rgb), 0.88));
2049
+ }
1860
2050
  .composer-compact-button:hover,
1861
- .composer-git-button:hover {
2051
+ .composer-git-button:hover,
2052
+ .composer-publish-button:hover,
2053
+ .composer-publish-button.menu-open {
1862
2054
  color: #11111b;
1863
2055
  background: linear-gradient(120deg, var(--ctp-teal), var(--ctp-blue), var(--ctp-mauve));
1864
2056
  border-color: transparent;
@@ -1866,6 +2058,59 @@ summary { cursor: pointer; color: var(--warning); }
1866
2058
  .composer-git-button:hover {
1867
2059
  background: linear-gradient(120deg, var(--ctp-green), var(--ctp-teal), var(--ctp-blue));
1868
2060
  }
2061
+ .composer-publish-button:hover,
2062
+ .composer-publish-button.menu-open {
2063
+ background: linear-gradient(120deg, var(--ctp-peach), var(--ctp-yellow), var(--ctp-mauve));
2064
+ }
2065
+ .composer-publish-menu-panel {
2066
+ position: absolute;
2067
+ z-index: 100;
2068
+ inset: auto auto 100% 0;
2069
+ display: none;
2070
+ flex-direction: column;
2071
+ align-items: stretch;
2072
+ gap: 0.38rem;
2073
+ width: max-content;
2074
+ min-width: 100%;
2075
+ max-width: min(18rem, calc(100vw - 2rem));
2076
+ max-height: min(60vh, 24rem);
2077
+ padding-bottom: 0.38rem;
2078
+ overflow: auto;
2079
+ scrollbar-width: thin;
2080
+ }
2081
+ .composer-publish-menu:hover .composer-publish-menu-panel,
2082
+ .composer-publish-menu:focus-within .composer-publish-menu-panel,
2083
+ .composer-publish-menu.open .composer-publish-menu-panel {
2084
+ display: flex;
2085
+ }
2086
+ .composer-publish-menu.open .composer-publish-button {
2087
+ border-color: rgba(250, 179, 135, 0.58);
2088
+ }
2089
+ .composer-publish-menu-item {
2090
+ display: inline-flex;
2091
+ align-items: center;
2092
+ justify-content: center;
2093
+ width: min(13rem, calc(100vw - 2rem));
2094
+ min-width: 9rem;
2095
+ max-width: 13rem;
2096
+ margin: 0;
2097
+ color: var(--ctp-peach);
2098
+ border: 1px solid rgba(250, 179, 135, 0.30);
2099
+ border-radius: 0.78rem;
2100
+ background:
2101
+ linear-gradient(120deg, rgba(250, 179, 135, 0.12), rgba(249, 226, 175, 0.08)),
2102
+ var(--ctp-crust);
2103
+ text-align: center;
2104
+ white-space: nowrap;
2105
+ box-shadow: 0 0.75rem 1.6rem rgba(var(--ctp-crust-rgb), 0.30), inset 0 1px 0 rgba(255,255,255,0.045);
2106
+ }
2107
+ .composer-publish-menu-item:hover,
2108
+ .composer-publish-menu-item:focus-visible {
2109
+ color: #11111b;
2110
+ border-color: transparent;
2111
+ background: linear-gradient(120deg, var(--ctp-peach), var(--ctp-yellow));
2112
+ box-shadow: 0 0 1rem rgba(250, 179, 135, 0.20);
2113
+ }
1869
2114
  .composer-row button[data-tooltip]::before,
1870
2115
  .composer-row button[data-tooltip]::after {
1871
2116
  position: absolute;
@@ -2018,6 +2263,61 @@ summary { cursor: pointer; color: var(--warning); }
2018
2263
  border-color: rgba(249, 226, 175, 0.46);
2019
2264
  color: var(--ctp-yellow);
2020
2265
  }
2266
+ .extension-dialog.release-dialog {
2267
+ width: min(64rem, calc(100vw - 1.5rem));
2268
+ max-height: min(82vh, 54rem);
2269
+ }
2270
+ .extension-dialog.release-dialog form {
2271
+ display: grid;
2272
+ grid-template-rows: auto minmax(0, 1fr) auto auto;
2273
+ max-height: calc(min(82vh, 54rem) - 2rem);
2274
+ }
2275
+ .extension-dialog.release-dialog #dialogTitle {
2276
+ color: var(--ctp-green);
2277
+ text-shadow: 0 0 1rem rgba(166, 227, 161, 0.20);
2278
+ }
2279
+ .extension-dialog.release-dialog #dialogMessage {
2280
+ min-height: 14rem;
2281
+ max-height: min(56vh, 34rem);
2282
+ margin: 0.75rem 0 1rem;
2283
+ padding: 0.9rem 1rem;
2284
+ overflow: auto;
2285
+ border: 1px solid rgba(137, 180, 250, 0.25);
2286
+ border-radius: 0.85rem;
2287
+ background: rgba(var(--ctp-crust-rgb), 0.58);
2288
+ color: var(--text);
2289
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
2290
+ font-size: 0.88rem;
2291
+ line-height: 1.48;
2292
+ }
2293
+ .release-dialog-line {
2294
+ display: block;
2295
+ white-space: pre-wrap;
2296
+ overflow-wrap: anywhere;
2297
+ }
2298
+ .release-dialog-heading {
2299
+ margin-top: 0.55rem;
2300
+ color: var(--ctp-blue);
2301
+ font-weight: 800;
2302
+ }
2303
+ .release-dialog-heading:first-child { margin-top: 0; }
2304
+ .release-dialog-success { color: var(--ctp-green); }
2305
+ .release-dialog-warning { color: var(--ctp-yellow); }
2306
+ .release-dialog-danger { color: var(--ctp-red); }
2307
+ .release-dialog-muted { color: rgba(var(--ctp-subtext-rgb), 0.72); }
2308
+ .release-dialog-spacer { min-height: 0.55rem; }
2309
+ .extension-dialog.release-dialog .dialog-options {
2310
+ grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
2311
+ gap: 0.7rem;
2312
+ }
2313
+ .extension-dialog.release-dialog .dialog-options button {
2314
+ text-align: center;
2315
+ font-weight: 800;
2316
+ }
2317
+ .extension-dialog.release-dialog .dialog-options button.release-cancel-action {
2318
+ border-color: rgba(249, 226, 175, 0.38);
2319
+ color: var(--ctp-yellow);
2320
+ }
2021
2321
  .extension-dialog menu {
2022
2322
  display: flex;
2023
2323
  justify-content: flex-end;
@@ -2341,7 +2641,24 @@ summary { cursor: pointer; color: var(--warning); }
2341
2641
  overflow: auto;
2342
2642
  padding: 0.36rem 0.55rem;
2343
2643
  }
2344
- .widget-area .widget:not(.todo-widget) { display: none; }
2644
+ .widget-area .widget:not(.todo-widget):not(.release-npm-widget) { display: none; }
2645
+ .release-npm-widget {
2646
+ gap: 0.45rem;
2647
+ padding: 0.55rem;
2648
+ }
2649
+ .release-npm-header {
2650
+ grid-template-columns: minmax(0, 1fr);
2651
+ align-items: stretch;
2652
+ }
2653
+ .release-npm-meta,
2654
+ .release-npm-actions { justify-content: flex-start; }
2655
+ .release-npm-terminal {
2656
+ max-height: min(28dvh, 16rem);
2657
+ min-height: 4rem;
2658
+ padding: 0.52rem;
2659
+ font-size: 0.72rem;
2660
+ }
2661
+ .release-npm-pill { max-width: 100%; }
2345
2662
  .todo-widget {
2346
2663
  gap: 0.38rem;
2347
2664
  margin: 0.2rem 0;
@@ -2583,7 +2900,38 @@ summary { cursor: pointer; color: var(--warning); }
2583
2900
  .composer-actions-panel > #steerButton,
2584
2901
  #newSessionButton,
2585
2902
  #compactButton,
2586
- #gitWorkflowButton { grid-column: span 1; }
2903
+ #gitWorkflowButton,
2904
+ .composer-actions-panel > .composer-publish-menu { grid-column: span 1; }
2905
+ .composer-actions-panel > .composer-publish-menu {
2906
+ width: 100%;
2907
+ margin-right: 0;
2908
+ }
2909
+ .composer-actions-panel > .composer-publish-menu.open {
2910
+ display: grid;
2911
+ grid-column: 1 / -1;
2912
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2913
+ gap: 0.42rem;
2914
+ }
2915
+ .composer-actions-panel > .composer-publish-menu.open .composer-publish-button,
2916
+ .composer-actions-panel > .composer-publish-menu .composer-publish-menu-panel {
2917
+ grid-column: 1 / -1;
2918
+ }
2919
+ .composer-actions-panel > .composer-publish-menu .composer-publish-menu-panel {
2920
+ position: static;
2921
+ flex-direction: column;
2922
+ width: 100%;
2923
+ min-width: 0;
2924
+ max-width: 100%;
2925
+ max-height: none;
2926
+ margin-left: 0;
2927
+ padding-bottom: 0;
2928
+ overflow: visible;
2929
+ }
2930
+ .composer-actions-panel > .composer-publish-menu .composer-publish-menu-item {
2931
+ width: 100%;
2932
+ max-width: 100%;
2933
+ flex: 1 1 0;
2934
+ }
2587
2935
  .command-suggest {
2588
2936
  max-height: 35dvh;
2589
2937
  font-size: 0.86rem;
@@ -2637,6 +2985,13 @@ summary { cursor: pointer; color: var(--warning); }
2637
2985
  overflow: auto;
2638
2986
  border-radius: 1rem 1rem 0 0;
2639
2987
  }
2988
+ .extension-dialog.release-dialog form {
2989
+ max-height: calc(var(--visual-viewport-height, 100dvh) - 2rem - env(safe-area-inset-top));
2990
+ }
2991
+ .extension-dialog.release-dialog #dialogMessage {
2992
+ min-height: 10rem;
2993
+ max-height: 48dvh;
2994
+ }
2640
2995
  .extension-dialog menu {
2641
2996
  position: sticky;
2642
2997
  bottom: 0;