@hachej/boring-agent 0.1.93 → 0.1.94

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.
@@ -227,9 +227,6 @@
227
227
  .mb-2 {
228
228
  margin-bottom: calc(var(--spacing) * 2);
229
229
  }
230
- .\!ml-auto {
231
- margin-left: auto !important;
232
- }
233
230
  .ml-1 {
234
231
  margin-left: var(--spacing);
235
232
  }
@@ -413,6 +410,12 @@
413
410
  .min-h-6 {
414
411
  min-height: calc(var(--spacing) * 6);
415
412
  }
413
+ .min-h-7 {
414
+ min-height: calc(var(--spacing) * 7);
415
+ }
416
+ .min-h-10 {
417
+ min-height: calc(var(--spacing) * 10);
418
+ }
416
419
  .min-h-16 {
417
420
  min-height: calc(var(--spacing) * 16);
418
421
  }
@@ -422,9 +425,6 @@
422
425
  .\!w-auto {
423
426
  width: auto !important;
424
427
  }
425
- .\!w-full {
426
- width: 100% !important;
427
- }
428
428
  .w-1 {
429
429
  width: var(--spacing);
430
430
  }
@@ -479,15 +479,9 @@
479
479
  .w-px {
480
480
  width: 1px;
481
481
  }
482
- .\!max-w-\[80\%\] {
483
- max-width: 80% !important;
484
- }
485
482
  .\!max-w-\[180px\] {
486
483
  max-width: 180px !important;
487
484
  }
488
- .\!max-w-full {
489
- max-width: 100% !important;
490
- }
491
485
  .max-w-2xl {
492
486
  max-width: var(--container-2xl);
493
487
  }
@@ -497,9 +491,6 @@
497
491
  .max-w-\[45\%\] {
498
492
  max-width: 45%;
499
493
  }
500
- .max-w-\[95\%\] {
501
- max-width: 95%;
502
- }
503
494
  .max-w-\[220px\] {
504
495
  max-width: 220px;
505
496
  }
@@ -570,9 +561,6 @@
570
561
  .grid-cols-1 {
571
562
  grid-template-columns: repeat(1, minmax(0, 1fr));
572
563
  }
573
- .grid-cols-\[auto_1fr\] {
574
- grid-template-columns: auto 1fr;
575
- }
576
564
  .flex-col {
577
565
  flex-direction: column;
578
566
  }
@@ -606,9 +594,6 @@
606
594
  .justify-start {
607
595
  justify-content: flex-start;
608
596
  }
609
- .\!gap-1\.5 {
610
- gap: calc(var(--spacing) * 1.5) !important;
611
- }
612
597
  .\!gap-2 {
613
598
  gap: calc(var(--spacing) * 2) !important;
614
599
  }
@@ -677,9 +662,6 @@
677
662
  text-overflow: ellipsis;
678
663
  white-space: nowrap;
679
664
  }
680
- .\!overflow-visible {
681
- overflow: visible !important;
682
- }
683
665
  .overflow-auto {
684
666
  overflow: auto;
685
667
  }
@@ -698,8 +680,8 @@
698
680
  .overflow-y-hidden {
699
681
  overflow-y: hidden;
700
682
  }
701
- .\!rounded-\[var\(--radius-lg\)\] {
702
- border-radius: var(--radius-lg) !important;
683
+ .overscroll-contain {
684
+ overscroll-behavior: contain;
703
685
  }
704
686
  .\!rounded-full {
705
687
  border-radius: calc(infinity * 1px) !important;
@@ -898,18 +880,6 @@
898
880
  border-color: color-mix(in oklab, var(--destructive) 40%, transparent);
899
881
  }
900
882
  }
901
- .border-input\/40 {
902
- border-color: var(--input);
903
- @supports (color: color-mix(in lab, red, red)) {
904
- border-color: color-mix(in oklab, var(--input) 40%, transparent);
905
- }
906
- }
907
- .border-input\/60 {
908
- border-color: var(--input);
909
- @supports (color: color-mix(in lab, red, red)) {
910
- border-color: color-mix(in oklab, var(--input) 60%, transparent);
911
- }
912
- }
913
883
  .border-primary\/25 {
914
884
  border-color: var(--primary);
915
885
  @supports (color: color-mix(in lab, red, red)) {
@@ -937,9 +907,6 @@
937
907
  background-color: color-mix(in oklab, var(--muted) 40%, transparent) !important;
938
908
  }
939
909
  }
940
- .\!bg-secondary {
941
- background-color: var(--secondary) !important;
942
- }
943
910
  .\!bg-transparent {
944
911
  background-color: transparent !important;
945
912
  }
@@ -1018,12 +985,6 @@
1018
985
  .bg-accent {
1019
986
  background-color: var(--accent);
1020
987
  }
1021
- .bg-accent\/5 {
1022
- background-color: var(--accent);
1023
- @supports (color: color-mix(in lab, red, red)) {
1024
- background-color: color-mix(in oklab, var(--accent) 5%, transparent);
1025
- }
1026
- }
1027
988
  .bg-accent\/10 {
1028
989
  background-color: var(--accent);
1029
990
  @supports (color: color-mix(in lab, red, red)) {
@@ -1093,12 +1054,6 @@
1093
1054
  background-color: color-mix(in oklab, var(--border) 70%, transparent);
1094
1055
  }
1095
1056
  }
1096
- .bg-card\/40 {
1097
- background-color: var(--card);
1098
- @supports (color: color-mix(in lab, red, red)) {
1099
- background-color: color-mix(in oklab, var(--card) 40%, transparent);
1100
- }
1101
- }
1102
1057
  .bg-card\/60 {
1103
1058
  background-color: var(--card);
1104
1059
  @supports (color: color-mix(in lab, red, red)) {
@@ -1114,12 +1069,6 @@
1114
1069
  .bg-destructive {
1115
1070
  background-color: var(--destructive);
1116
1071
  }
1117
- .bg-destructive\/5 {
1118
- background-color: var(--destructive);
1119
- @supports (color: color-mix(in lab, red, red)) {
1120
- background-color: color-mix(in oklab, var(--destructive) 5%, transparent);
1121
- }
1122
- }
1123
1072
  .bg-destructive\/10 {
1124
1073
  background-color: var(--destructive);
1125
1074
  @supports (color: color-mix(in lab, red, red)) {
@@ -1228,9 +1177,6 @@
1228
1177
  .object-cover {
1229
1178
  object-fit: cover;
1230
1179
  }
1231
- .\!p-0 {
1232
- padding: 0 !important;
1233
- }
1234
1180
  .p-0 {
1235
1181
  padding: 0;
1236
1182
  }
@@ -1240,6 +1186,9 @@
1240
1186
  .p-1 {
1241
1187
  padding: var(--spacing);
1242
1188
  }
1189
+ .p-1\.5 {
1190
+ padding: calc(var(--spacing) * 1.5);
1191
+ }
1243
1192
  .p-2 {
1244
1193
  padding: calc(var(--spacing) * 2);
1245
1194
  }
@@ -1261,9 +1210,6 @@
1261
1210
  .\!px-2 {
1262
1211
  padding-inline: calc(var(--spacing) * 2) !important;
1263
1212
  }
1264
- .\!px-4 {
1265
- padding-inline: calc(var(--spacing) * 4) !important;
1266
- }
1267
1213
  .px-0 {
1268
1214
  padding-inline: 0;
1269
1215
  }
@@ -1300,9 +1246,6 @@
1300
1246
  .\!py-0 {
1301
1247
  padding-block: 0 !important;
1302
1248
  }
1303
- .\!py-2\.5 {
1304
- padding-block: calc(var(--spacing) * 2.5) !important;
1305
- }
1306
1249
  .py-0 {
1307
1250
  padding-block: 0;
1308
1251
  }
@@ -1339,9 +1282,6 @@
1339
1282
  .py-px {
1340
1283
  padding-block: 1px;
1341
1284
  }
1342
- .pt-0 {
1343
- padding-top: 0;
1344
- }
1345
1285
  .pt-1 {
1346
1286
  padding-top: var(--spacing);
1347
1287
  }
@@ -1503,6 +1443,10 @@
1503
1443
  --tw-font-weight: var(--font-weight-medium);
1504
1444
  font-weight: var(--font-weight-medium);
1505
1445
  }
1446
+ .font-normal {
1447
+ --tw-font-weight: var(--font-weight-normal);
1448
+ font-weight: var(--font-weight-normal);
1449
+ }
1506
1450
  .font-semibold {
1507
1451
  --tw-font-weight: var(--font-weight-semibold);
1508
1452
  font-weight: var(--font-weight-semibold);
@@ -1551,9 +1495,6 @@
1551
1495
  color: color-mix(in oklab, var(--muted-foreground) 75%, transparent) !important;
1552
1496
  }
1553
1497
  }
1554
- .\!text-secondary-foreground {
1555
- color: var(--secondary-foreground) !important;
1556
- }
1557
1498
  .text-\[color\:var\(--accent\)\] {
1558
1499
  color: var(--accent);
1559
1500
  }
@@ -1617,12 +1558,6 @@
1617
1558
  .text-accent-foreground {
1618
1559
  color: var(--accent-foreground);
1619
1560
  }
1620
- .text-accent\/80 {
1621
- color: var(--accent);
1622
- @supports (color: color-mix(in lab, red, red)) {
1623
- color: color-mix(in oklab, var(--accent) 80%, transparent);
1624
- }
1625
- }
1626
1561
  .text-amber-600 {
1627
1562
  color: var(--color-amber-600);
1628
1563
  }
@@ -1638,12 +1573,6 @@
1638
1573
  color: color-mix(in oklab, var(--destructive) 60%, transparent);
1639
1574
  }
1640
1575
  }
1641
- .text-destructive\/70 {
1642
- color: var(--destructive);
1643
- @supports (color: color-mix(in lab, red, red)) {
1644
- color: color-mix(in oklab, var(--destructive) 70%, transparent);
1645
- }
1646
- }
1647
1576
  .text-destructive\/90 {
1648
1577
  color: var(--destructive);
1649
1578
  @supports (color: color-mix(in lab, red, red)) {
@@ -1983,6 +1912,26 @@
1983
1912
  rotate: 180deg;
1984
1913
  }
1985
1914
  }
1915
+ .group-\[\.is-assistant\]\:w-full {
1916
+ &:is(:where(.group):is(.is-assistant) *) {
1917
+ width: 100%;
1918
+ }
1919
+ }
1920
+ .group-\[\.is-assistant\]\:max-w-\[40\.5rem\] {
1921
+ &:is(:where(.group):is(.is-assistant) *) {
1922
+ max-width: 40.5rem;
1923
+ }
1924
+ }
1925
+ .group-\[\.is-assistant\]\:bg-transparent {
1926
+ &:is(:where(.group):is(.is-assistant) *) {
1927
+ background-color: transparent;
1928
+ }
1929
+ }
1930
+ .group-\[\.is-assistant\]\:p-0 {
1931
+ &:is(:where(.group):is(.is-assistant) *) {
1932
+ padding: 0;
1933
+ }
1934
+ }
1986
1935
  .group-\[\.is-assistant\]\:text-foreground {
1987
1936
  &:is(:where(.group):is(.is-assistant) *) {
1988
1937
  color: var(--foreground);
@@ -1993,7 +1942,12 @@
1993
1942
  margin-left: auto;
1994
1943
  }
1995
1944
  }
1996
- .group-\[\.is-user\]\:rounded-lg {
1945
+ .group-\[\.is-user\]\:max-w-\[80\%\] {
1946
+ &:is(:where(.group):is(.is-user) *) {
1947
+ max-width: 80%;
1948
+ }
1949
+ }
1950
+ .group-\[\.is-user\]\:rounded-\[var\(--radius-lg\)\] {
1997
1951
  &:is(:where(.group):is(.is-user) *) {
1998
1952
  border-radius: var(--radius-lg);
1999
1953
  }
@@ -2008,9 +1962,9 @@
2008
1962
  padding-inline: calc(var(--spacing) * 4);
2009
1963
  }
2010
1964
  }
2011
- .group-\[\.is-user\]\:py-3 {
1965
+ .group-\[\.is-user\]\:py-2\.5 {
2012
1966
  &:is(:where(.group):is(.is-user) *) {
2013
- padding-block: calc(var(--spacing) * 3);
1967
+ padding-block: calc(var(--spacing) * 2.5);
2014
1968
  }
2015
1969
  }
2016
1970
  .group-\[\.is-user\]\:text-foreground {
@@ -2090,6 +2044,11 @@
2090
2044
  border-width: 0px;
2091
2045
  }
2092
2046
  }
2047
+ .empty\:hidden {
2048
+ &:empty {
2049
+ display: none;
2050
+ }
2051
+ }
2093
2052
  .focus-within\:shadow-\[0_1px_3px_-1px_oklch\(0_0_0\/0\.08\)\,0_10px_28px_-14px_oklch\(0_0_0\/0\.16\)\,inset_0_0_0_1px_oklch\(from_var\(--accent\)_l_c_h\/0\.45\)\] {
2094
2053
  &:focus-within {
2095
2054
  --tw-shadow: 0 1px 3px -1px var(--tw-shadow-color, oklch(0 0 0/0.08)), 0 10px 28px -14px var(--tw-shadow-color, oklch(0 0 0/0.16)), inset 0 0 0 1px var(--tw-shadow-color, oklch(from var(--accent) l c h/0.45));
@@ -2109,16 +2068,6 @@
2109
2068
  }
2110
2069
  }
2111
2070
  }
2112
- .hover\:border-border\/70 {
2113
- &:hover {
2114
- @media (hover: hover) {
2115
- border-color: var(--border);
2116
- @supports (color: color-mix(in lab, red, red)) {
2117
- border-color: color-mix(in oklab, var(--border) 70%, transparent);
2118
- }
2119
- }
2120
- }
2121
- }
2122
2071
  .hover\:border-border\/80 {
2123
2072
  &:hover {
2124
2073
  @media (hover: hover) {
@@ -2187,16 +2136,6 @@
2187
2136
  }
2188
2137
  }
2189
2138
  }
2190
- .hover\:bg-card\/70 {
2191
- &:hover {
2192
- @media (hover: hover) {
2193
- background-color: var(--card);
2194
- @supports (color: color-mix(in lab, red, red)) {
2195
- background-color: color-mix(in oklab, var(--card) 70%, transparent);
2196
- }
2197
- }
2198
- }
2199
- }
2200
2139
  .hover\:bg-destructive\/10 {
2201
2140
  &:hover {
2202
2141
  @media (hover: hover) {
@@ -2284,6 +2223,16 @@
2284
2223
  }
2285
2224
  }
2286
2225
  }
2226
+ .hover\:bg-muted\/70 {
2227
+ &:hover {
2228
+ @media (hover: hover) {
2229
+ background-color: var(--muted);
2230
+ @supports (color: color-mix(in lab, red, red)) {
2231
+ background-color: color-mix(in oklab, var(--muted) 70%, transparent);
2232
+ }
2233
+ }
2234
+ }
2235
+ }
2287
2236
  .hover\:bg-primary\/10 {
2288
2237
  &:hover {
2289
2238
  @media (hover: hover) {
@@ -2476,6 +2425,17 @@
2476
2425
  --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
2477
2426
  }
2478
2427
  }
2428
+ .focus-visible\:ring-offset-2 {
2429
+ &:focus-visible {
2430
+ --tw-ring-offset-width: 2px;
2431
+ --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
2432
+ }
2433
+ }
2434
+ .focus-visible\:ring-offset-background {
2435
+ &:focus-visible {
2436
+ --tw-ring-offset-color: var(--background);
2437
+ }
2438
+ }
2479
2439
  .focus-visible\:outline-none {
2480
2440
  &:focus-visible {
2481
2441
  --tw-outline-style: none;
@@ -5666,6 +5626,116 @@
5666
5626
  }
5667
5627
  }
5668
5628
  }
5629
+ [data-boring-agent] .boring-agent-markdown {
5630
+ font-size: 0.8125rem;
5631
+ line-height: 1.25rem;
5632
+ }
5633
+ [data-boring-agent] .boring-agent-markdown p, [data-boring-agent] .boring-agent-markdown ol, [data-boring-agent] .boring-agent-markdown ul {
5634
+ margin-block: 0.75rem;
5635
+ }
5636
+ [data-boring-agent] .boring-agent-markdown h1, [data-boring-agent] .boring-agent-markdown h2, [data-boring-agent] .boring-agent-markdown h3 {
5637
+ color: var(--foreground);
5638
+ font-weight: 600;
5639
+ letter-spacing: -0.015em;
5640
+ }
5641
+ [data-boring-agent] .boring-agent-markdown h1 {
5642
+ margin-block: 1.5rem 0.5rem;
5643
+ font-size: 1.25rem;
5644
+ line-height: 1.5rem;
5645
+ }
5646
+ [data-boring-agent] .boring-agent-markdown h2 {
5647
+ margin-block: 1.5rem 0.5rem;
5648
+ font-size: 1rem;
5649
+ line-height: 1.5rem;
5650
+ }
5651
+ [data-boring-agent] .boring-agent-markdown h3 {
5652
+ margin-block: 1rem 0.5rem;
5653
+ font-size: 0.875rem;
5654
+ line-height: 1.25rem;
5655
+ }
5656
+ [data-boring-agent] .boring-agent-markdown ol, [data-boring-agent] .boring-agent-markdown ul {
5657
+ padding-inline-start: 1.5rem;
5658
+ list-style-position: outside;
5659
+ }
5660
+ [data-boring-agent] .boring-agent-markdown ol {
5661
+ list-style-type: decimal;
5662
+ }
5663
+ [data-boring-agent] .boring-agent-markdown ul {
5664
+ list-style-type: disc;
5665
+ }
5666
+ [data-boring-agent] .boring-agent-markdown li {
5667
+ padding-inline-start: 0.25rem;
5668
+ font: inherit;
5669
+ }
5670
+ [data-boring-agent] .boring-agent-markdown li + li {
5671
+ margin-top: 0.25rem;
5672
+ }
5673
+ [data-boring-agent] .boring-agent-markdown li::marker {
5674
+ color: var(--muted-foreground);
5675
+ }
5676
+ [data-boring-agent] .boring-agent-markdown strong {
5677
+ color: var(--foreground);
5678
+ font-weight: 600;
5679
+ }
5680
+ [data-boring-agent] .boring-agent-markdown a {
5681
+ color: var(--accent);
5682
+ text-underline-offset: 0.25rem;
5683
+ }
5684
+ [data-boring-agent] .boring-agent-markdown a:hover {
5685
+ text-decoration-line: underline;
5686
+ }
5687
+ [data-boring-agent] .boring-agent-markdown blockquote {
5688
+ margin-block: 1rem;
5689
+ padding: 0.75rem 1rem;
5690
+ border: 1px solid var(--border);
5691
+ border-radius: var(--radius-md);
5692
+ background: var(--muted);
5693
+ @supports (color: color-mix(in lab, red, red)) {
5694
+ background: color-mix(in oklab, var(--muted) 45%, transparent);
5695
+ }
5696
+ color: var(--muted-foreground);
5697
+ font-style: normal;
5698
+ }
5699
+ [data-boring-agent] .boring-agent-markdown blockquote p {
5700
+ margin-block: 0;
5701
+ }
5702
+ [data-boring-agent] .boring-agent-markdown table {
5703
+ width: 100%;
5704
+ border-collapse: collapse;
5705
+ font-size: inherit;
5706
+ font-variant-numeric: tabular-nums;
5707
+ text-align: left;
5708
+ }
5709
+ [data-boring-agent] .boring-agent-markdown thead {
5710
+ background: var(--muted);
5711
+ @supports (color: color-mix(in lab, red, red)) {
5712
+ background: color-mix(in oklab, var(--muted) 45%, transparent);
5713
+ }
5714
+ }
5715
+ [data-boring-agent] .boring-agent-markdown th, [data-boring-agent] .boring-agent-markdown td {
5716
+ padding: 0.5rem 1rem;
5717
+ border-bottom: 1px solid var(--border);
5718
+ }
5719
+ [data-boring-agent] .boring-agent-markdown th {
5720
+ font-weight: 600;
5721
+ }
5722
+ [data-boring-agent] .boring-agent-markdown tbody tr:last-child td {
5723
+ border-bottom: 0;
5724
+ }
5725
+ [data-boring-agent] .boring-agent-markdown pre {
5726
+ margin: 0;
5727
+ padding: 0;
5728
+ border: 0;
5729
+ background: transparent;
5730
+ overflow-x: auto;
5731
+ overscroll-behavior-x: contain;
5732
+ }
5733
+ [data-boring-agent] .boring-agent-markdown > *:first-child {
5734
+ margin-top: 0;
5735
+ }
5736
+ [data-boring-agent] .boring-agent-markdown > *:last-child {
5737
+ margin-bottom: 0;
5738
+ }
5669
5739
  [data-theme="dark"] {
5670
5740
  --background: oklch(0.145 0.004 285.823);
5671
5741
  --foreground: oklch(0.985 0 0);
@@ -1,6 +1,6 @@
1
1
  import { D as InterruptReceipt, j as StopReceipt, p as AgentDefinitionErrorCode, q as AgentDeploymentErrorCode } from './piChatEvent-BsMp3MSo.js';
2
2
  import { p as AgentSendInput, j as AgentEvent } from './harness-Cc48o6uS.js';
3
- import { b as AgentSessionRef, n as AgentSendReceipt, A as AgentGateway, a as AuthorizedAgentScope } from './errors-C38f6pol.js';
3
+ import { b as AgentSessionRef, n as AgentSendReceipt, A as AgentGateway, a as AuthorizedAgentScope } from './errors-G6T6S7PQ.js';
4
4
  import { z } from 'zod';
5
5
  import { b as Workspace } from './sandbox-DAD8cWQR.js';
6
6
 
@@ -10,6 +10,8 @@ interface WorkspaceAgentDispatcherContext {
10
10
  }
11
11
  type WorkspaceAgentDispatcherSendInput = Omit<AgentSendInput, 'ctx'>;
12
12
  interface WorkspaceAgentDispatcherDispatchInput extends WorkspaceAgentDispatcherSendInput {
13
+ /** Optional title for a newly created addressed session. */
14
+ title?: string;
13
15
  /** Durable caller-owned idempotency key. */
14
16
  requestId: string;
15
17
  /** Defaults to requestId. */
@@ -16,6 +16,10 @@ interface PiSessionCreateInit {
16
16
  title?: string;
17
17
  modelDefault?: ChatModelSelection;
18
18
  }
19
+ /** Server-only prompt admission selector; browser schemas never accept requireIdle. */
20
+ type AgentPromptPayload = PromptPayload & {
21
+ readonly requireIdle?: true;
22
+ };
19
23
  type PiChatReplayRangeError = {
20
24
  type: 'replay_gap';
21
25
  latestSeq: number;
@@ -45,13 +49,15 @@ interface PiChatSessionService {
45
49
  readAttachment?(ctx: PiSessionRequestContext, sessionId: string, messageId: string, index: number): Promise<PiChatAttachmentResult>;
46
50
  readState(ctx: PiSessionRequestContext, sessionId: string): Promise<PiChatSnapshot>;
47
51
  subscribe(ctx: PiSessionRequestContext, sessionId: string, cursor: number, subscriber: PiChatEventSubscriber): Promise<PiChatEventStreamResult>;
48
- prompt(ctx: PiSessionRequestContext, sessionId: string, payload: PromptPayload): Promise<PromptReceipt>;
52
+ prompt(ctx: PiSessionRequestContext, sessionId: string, payload: AgentPromptPayload): Promise<PromptReceipt>;
49
53
  followUp(ctx: PiSessionRequestContext, sessionId: string, payload: FollowUpPayload): Promise<FollowUpReceipt>;
50
54
  clearQueue(ctx: PiSessionRequestContext, sessionId: string, payload: QueueClearPayload): Promise<QueueClearReceipt>;
51
55
  interrupt(ctx: PiSessionRequestContext, sessionId: string, payload: InterruptPayload): Promise<CommandReceipt>;
52
56
  stop(ctx: PiSessionRequestContext, sessionId: string, payload: StopPayload): Promise<StopReceipt>;
53
57
  }
54
58
  interface AgentCoreSessionService extends PiChatSessionService {
59
+ /** Trusted host-only validation/binding seam; never exposed as an HTTP route. */
60
+ ensurePiSessionBound?(ctx: PiSessionRequestContext, sessionId: string): Promise<void>;
55
61
  createSession(ctx: PiSessionRequestContext, init?: PiSessionCreateInit): Promise<SessionSummary>;
56
62
  deleteSession(ctx: PiSessionRequestContext, sessionId: string): Promise<void>;
57
63
  dispose?(): Promise<void>;
@@ -1,5 +1,5 @@
1
- import { A as AgentGateway, a as AuthorizedAgentScope, b as AgentSessionRef, c as AgentSessionActivity } from '../../../errors-C38f6pol.js';
2
- import { A as AgentGatewayEffect } from '../../../types-uQozUhGt.js';
1
+ import { A as AgentGateway, a as AuthorizedAgentScope, b as AgentSessionRef, c as AgentSessionActivity } from '../../../errors-G6T6S7PQ.js';
2
+ import { A as AgentGatewayEffect } from '../../../types-C-Eroi__.js';
3
3
  import '../../../piChatEvent-BsMp3MSo.js';
4
4
  import 'zod';
5
5
  import 'fastify';
@@ -8,7 +8,7 @@ import '@mariozechner/pi-coding-agent';
8
8
  import '../../../sandbox-DAD8cWQR.js';
9
9
  import '@hachej/boring-bash/agent';
10
10
  import '@hachej/boring-sandbox/providers/node-workspace';
11
- import '../../../piChatSessionService-BrPqKrpY.js';
11
+ import '../../../piChatSessionService-C0KbcGw9.js';
12
12
 
13
13
  /** G1 ships only the embedded bounded-replay contract. */
14
14
  type GatewayReplayConformanceLevel = 'B';
@@ -286,6 +286,83 @@ function gatewayConformance(options) {
286
286
  expect(await connection.stop({ requestId: "stop" })).toEqual(stop);
287
287
  await connection.close();
288
288
  });
289
+ it("keeps strict-idle busy admission retryable and idempotent", async () => {
290
+ const fixture = await options.createFixture();
291
+ const scope = fixture.issueScope();
292
+ const ref = await createSession(fixture, scope, "strict-idle-retry");
293
+ const connection = await fixture.gateway.connectSession({ scope, ref });
294
+ const input = {
295
+ kind: "prompt",
296
+ requestId: "strict-review",
297
+ clientNonce: "strict-review",
298
+ content: "model-facing review",
299
+ displayContent: "Visible review",
300
+ requireIdle: true
301
+ };
302
+ fixture.setActivity(ref, "running");
303
+ await expectCode(connection.send(input), AgentGatewayErrorCode.AGENT_COMMAND_INVALID_STATE);
304
+ fixture.setActivity(ref, "idle");
305
+ const accepted = await connection.send(input);
306
+ expect(accepted).toMatchObject({ accepted: true, disposition: "prompt" });
307
+ await expect(connection.send(input)).resolves.toMatchObject({ ...accepted, duplicate: true });
308
+ await expectCode(
309
+ connection.send({ ...input, displayContent: "changed payload" }),
310
+ AgentGatewayErrorCode.AGENT_REQUEST_CONFLICT
311
+ );
312
+ await connection.close();
313
+ });
314
+ it("admits exactly one of two concurrent strict-idle prompts", async () => {
315
+ const fixture = await options.createFixture();
316
+ const scope = fixture.issueScope();
317
+ const ref = await createSession(fixture, scope, "strict-idle-race");
318
+ const connection = await fixture.gateway.connectSession({ scope, ref });
319
+ fixture.setActivity(ref, "idle");
320
+ const outcome = async (requestId) => {
321
+ try {
322
+ await connection.send({
323
+ kind: "prompt",
324
+ requestId,
325
+ clientNonce: requestId,
326
+ content: requestId,
327
+ requireIdle: true
328
+ });
329
+ return "accepted";
330
+ } catch (error) {
331
+ return error.code;
332
+ }
333
+ };
334
+ const outcomes = await Promise.all([outcome("strict-a"), outcome("strict-b")]);
335
+ expect(outcomes.sort()).toEqual([
336
+ AgentGatewayErrorCode.AGENT_COMMAND_INVALID_STATE,
337
+ "accepted"
338
+ ].sort());
339
+ await connection.close();
340
+ });
341
+ it("keeps ordinary error recovery while strict-idle prompts reject error state", async () => {
342
+ const fixture = await options.createFixture();
343
+ const scope = fixture.issueScope();
344
+ const strictRef = await createSession(fixture, scope, "strict-error");
345
+ const strictConnection = await fixture.gateway.connectSession({ scope, ref: strictRef });
346
+ fixture.setActivity(strictRef, "error");
347
+ await expectCode(strictConnection.send({
348
+ kind: "prompt",
349
+ requestId: "strict-error-prompt",
350
+ clientNonce: "strict-error-prompt",
351
+ content: "strict",
352
+ requireIdle: true
353
+ }), AgentGatewayErrorCode.AGENT_COMMAND_INVALID_STATE);
354
+ await strictConnection.close();
355
+ const recoveryRef = await createSession(fixture, scope, "ordinary-error");
356
+ const recoveryConnection = await fixture.gateway.connectSession({ scope, ref: recoveryRef });
357
+ fixture.setActivity(recoveryRef, "error");
358
+ await expect(recoveryConnection.send({
359
+ kind: "prompt",
360
+ requestId: "ordinary-recovery",
361
+ clientNonce: "ordinary-recovery",
362
+ content: "recover"
363
+ })).resolves.toMatchObject({ disposition: "prompt" });
364
+ await recoveryConnection.close();
365
+ });
289
366
  it("covers the complete command-state table and queue selector semantics", async () => {
290
367
  const fixture = await options.createFixture();
291
368
  const scope = fixture.issueScope();