@yadsh/dsh-qa-surface 0.15.2 → 0.15.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/README.md +49 -8
- package/lib/access/model.js +15 -0
- package/lib/access/model.js.map +1 -1
- package/lib/access/service.js +56 -16
- package/lib/access/service.js.map +1 -1
- package/lib/approvals.js +42 -1
- package/lib/approvals.js.map +1 -1
- package/lib/client/QaSessionController.js +103 -3
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +6 -1
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaTranscriptAdapter.js +33 -3
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/components/QaChangelog.js +31 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaComposer.js +3 -0
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaHeader.js +29 -3
- package/lib/client/components/QaHeader.js.map +1 -1
- package/lib/client/components/QaRightRail.js +20 -1
- package/lib/client/components/QaRightRail.js.map +1 -1
- package/lib/client/components/QaSidebar.js +12 -2
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/components/QaSourcesPanel.js +1 -1
- package/lib/client/components/QaSourcesPanel.js.map +1 -1
- package/lib/client/components/QaWorkGroup.js +13 -7
- package/lib/client/components/QaWorkGroup.js.map +1 -1
- package/lib/client/components/QaWorkspaceBrowser.js +5 -1
- package/lib/client/components/QaWorkspaceBrowser.js.map +1 -1
- package/lib/client/settings/styles.js +16 -10
- package/lib/client/settings/styles.js.map +1 -1
- package/lib/client/slash/SlashPalette.js +3 -1
- package/lib/client/slash/SlashPalette.js.map +1 -1
- package/lib/client/styles.js +31 -15
- package/lib/client/styles.js.map +1 -1
- package/lib/client.js +343 -153
- package/lib/client.js.map +1 -1
- package/lib/enforcement/skill-policy.js +2 -1
- package/lib/enforcement/skill-policy.js.map +1 -1
- package/lib/index.js +11 -9
- package/lib/index.js.map +1 -1
- package/lib/qa-tools/file-delete-gate.js +35 -10
- package/lib/qa-tools/file-delete-gate.js.map +1 -1
- package/lib/qa-tools/file-delete.js +1 -1
- package/lib/qa-tools/file-delete.js.map +1 -1
- package/lib/slash/catalog.js.map +1 -1
- package/lib/typert.host.js +75 -75
- package/lib/typert.remote-client.js +75 -75
- package/lib/types/access/model.d.ts +13 -0
- package/lib/types/access/service.d.ts +26 -0
- package/lib/types/approvals.d.ts +18 -1
- package/lib/types/client/QaSessionController.d.ts +23 -0
- package/lib/types/client/components/QaHeader.d.ts +10 -1
- package/lib/types/client/components/QaRightRail.d.ts +7 -1
- package/lib/types/client/components/QaSidebar.d.ts +5 -0
- package/lib/types/client/components/QaWorkGroup.d.ts +5 -2
- package/lib/types/client/settings/styles.d.ts +6 -0
- package/lib/types/index.d.ts +6 -4
- package/lib/types/qa-tools/file-delete-gate.d.ts +24 -7
- package/lib/types/slash/catalog.d.ts +5 -0
- package/lib/types/types.d.ts +5 -2
- package/package.json +4 -4
package/lib/client.js
CHANGED
|
@@ -8721,7 +8721,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8721
8721
|
},
|
|
8722
8722
|
sourceLocation: {
|
|
8723
8723
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8724
|
-
"line":
|
|
8724
|
+
"line": 1034,
|
|
8725
8725
|
"column": 9
|
|
8726
8726
|
}
|
|
8727
8727
|
},
|
|
@@ -8757,7 +8757,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8757
8757
|
},
|
|
8758
8758
|
sourceLocation: {
|
|
8759
8759
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8760
|
-
"line":
|
|
8760
|
+
"line": 1045,
|
|
8761
8761
|
"column": 3
|
|
8762
8762
|
}
|
|
8763
8763
|
},
|
|
@@ -8784,7 +8784,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8784
8784
|
},
|
|
8785
8785
|
sourceLocation: {
|
|
8786
8786
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8787
|
-
"line":
|
|
8787
|
+
"line": 1019,
|
|
8788
8788
|
"column": 3
|
|
8789
8789
|
}
|
|
8790
8790
|
},
|
|
@@ -8833,7 +8833,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8833
8833
|
},
|
|
8834
8834
|
sourceLocation: {
|
|
8835
8835
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8836
|
-
"line":
|
|
8836
|
+
"line": 1059,
|
|
8837
8837
|
"column": 3
|
|
8838
8838
|
}
|
|
8839
8839
|
},
|
|
@@ -8869,7 +8869,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8869
8869
|
},
|
|
8870
8870
|
sourceLocation: {
|
|
8871
8871
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8872
|
-
"line":
|
|
8872
|
+
"line": 1025,
|
|
8873
8873
|
"column": 3
|
|
8874
8874
|
}
|
|
8875
8875
|
},
|
|
@@ -8905,7 +8905,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8905
8905
|
},
|
|
8906
8906
|
sourceLocation: {
|
|
8907
8907
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8908
|
-
"line":
|
|
8908
|
+
"line": 1104,
|
|
8909
8909
|
"column": 3
|
|
8910
8910
|
}
|
|
8911
8911
|
},
|
|
@@ -8954,7 +8954,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8954
8954
|
},
|
|
8955
8955
|
sourceLocation: {
|
|
8956
8956
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8957
|
-
"line":
|
|
8957
|
+
"line": 1081,
|
|
8958
8958
|
"column": 3
|
|
8959
8959
|
}
|
|
8960
8960
|
},
|
|
@@ -8990,7 +8990,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8990
8990
|
},
|
|
8991
8991
|
sourceLocation: {
|
|
8992
8992
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8993
|
-
"line":
|
|
8993
|
+
"line": 1071,
|
|
8994
8994
|
"column": 3
|
|
8995
8995
|
}
|
|
8996
8996
|
},
|
|
@@ -9026,7 +9026,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9026
9026
|
},
|
|
9027
9027
|
sourceLocation: {
|
|
9028
9028
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9029
|
-
"line":
|
|
9029
|
+
"line": 1093,
|
|
9030
9030
|
"column": 3
|
|
9031
9031
|
}
|
|
9032
9032
|
},
|
|
@@ -9075,7 +9075,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9075
9075
|
},
|
|
9076
9076
|
sourceLocation: {
|
|
9077
9077
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9078
|
-
"line":
|
|
9078
|
+
"line": 1052,
|
|
9079
9079
|
"column": 3
|
|
9080
9080
|
}
|
|
9081
9081
|
},
|
|
@@ -9124,7 +9124,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9124
9124
|
},
|
|
9125
9125
|
sourceLocation: {
|
|
9126
9126
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9127
|
-
"line":
|
|
9127
|
+
"line": 740,
|
|
9128
9128
|
"column": 3
|
|
9129
9129
|
}
|
|
9130
9130
|
},
|
|
@@ -9160,7 +9160,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9160
9160
|
},
|
|
9161
9161
|
sourceLocation: {
|
|
9162
9162
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9163
|
-
"line":
|
|
9163
|
+
"line": 774,
|
|
9164
9164
|
"column": 3
|
|
9165
9165
|
}
|
|
9166
9166
|
},
|
|
@@ -9196,7 +9196,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9196
9196
|
},
|
|
9197
9197
|
sourceLocation: {
|
|
9198
9198
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9199
|
-
"line":
|
|
9199
|
+
"line": 861,
|
|
9200
9200
|
"column": 3
|
|
9201
9201
|
}
|
|
9202
9202
|
},
|
|
@@ -9223,7 +9223,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9223
9223
|
},
|
|
9224
9224
|
sourceLocation: {
|
|
9225
9225
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9226
|
-
"line":
|
|
9226
|
+
"line": 795,
|
|
9227
9227
|
"column": 3
|
|
9228
9228
|
}
|
|
9229
9229
|
},
|
|
@@ -9250,7 +9250,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9250
9250
|
},
|
|
9251
9251
|
sourceLocation: {
|
|
9252
9252
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9253
|
-
"line":
|
|
9253
|
+
"line": 848,
|
|
9254
9254
|
"column": 3
|
|
9255
9255
|
}
|
|
9256
9256
|
},
|
|
@@ -9286,7 +9286,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9286
9286
|
},
|
|
9287
9287
|
sourceLocation: {
|
|
9288
9288
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9289
|
-
"line":
|
|
9289
|
+
"line": 734,
|
|
9290
9290
|
"column": 3
|
|
9291
9291
|
}
|
|
9292
9292
|
},
|
|
@@ -9313,7 +9313,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9313
9313
|
},
|
|
9314
9314
|
sourceLocation: {
|
|
9315
9315
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9316
|
-
"line":
|
|
9316
|
+
"line": 785,
|
|
9317
9317
|
"column": 3
|
|
9318
9318
|
}
|
|
9319
9319
|
},
|
|
@@ -9349,7 +9349,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9349
9349
|
},
|
|
9350
9350
|
sourceLocation: {
|
|
9351
9351
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9352
|
-
"line":
|
|
9352
|
+
"line": 729,
|
|
9353
9353
|
"column": 3
|
|
9354
9354
|
}
|
|
9355
9355
|
},
|
|
@@ -9376,7 +9376,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9376
9376
|
},
|
|
9377
9377
|
sourceLocation: {
|
|
9378
9378
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9379
|
-
"line":
|
|
9379
|
+
"line": 758,
|
|
9380
9380
|
"column": 3
|
|
9381
9381
|
}
|
|
9382
9382
|
},
|
|
@@ -9412,7 +9412,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9412
9412
|
},
|
|
9413
9413
|
sourceLocation: {
|
|
9414
9414
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9415
|
-
"line":
|
|
9415
|
+
"line": 874,
|
|
9416
9416
|
"column": 3
|
|
9417
9417
|
}
|
|
9418
9418
|
},
|
|
@@ -9448,7 +9448,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9448
9448
|
},
|
|
9449
9449
|
sourceLocation: {
|
|
9450
9450
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9451
|
-
"line":
|
|
9451
|
+
"line": 835,
|
|
9452
9452
|
"column": 3
|
|
9453
9453
|
}
|
|
9454
9454
|
},
|
|
@@ -9484,7 +9484,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9484
9484
|
},
|
|
9485
9485
|
sourceLocation: {
|
|
9486
9486
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9487
|
-
"line":
|
|
9487
|
+
"line": 808,
|
|
9488
9488
|
"column": 3
|
|
9489
9489
|
}
|
|
9490
9490
|
},
|
|
@@ -9520,7 +9520,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9520
9520
|
},
|
|
9521
9521
|
sourceLocation: {
|
|
9522
9522
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9523
|
-
"line":
|
|
9523
|
+
"line": 821,
|
|
9524
9524
|
"column": 3
|
|
9525
9525
|
}
|
|
9526
9526
|
},
|
|
@@ -9547,7 +9547,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9547
9547
|
},
|
|
9548
9548
|
sourceLocation: {
|
|
9549
9549
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9550
|
-
"line":
|
|
9550
|
+
"line": 764,
|
|
9551
9551
|
"column": 3
|
|
9552
9552
|
}
|
|
9553
9553
|
},
|
|
@@ -9606,7 +9606,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9606
9606
|
},
|
|
9607
9607
|
sourceLocation: {
|
|
9608
9608
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9609
|
-
"line":
|
|
9609
|
+
"line": 1476,
|
|
9610
9610
|
"column": 3
|
|
9611
9611
|
}
|
|
9612
9612
|
},
|
|
@@ -9642,7 +9642,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9642
9642
|
},
|
|
9643
9643
|
sourceLocation: {
|
|
9644
9644
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9645
|
-
"line":
|
|
9645
|
+
"line": 1356,
|
|
9646
9646
|
"column": 3
|
|
9647
9647
|
}
|
|
9648
9648
|
},
|
|
@@ -9702,7 +9702,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9702
9702
|
},
|
|
9703
9703
|
sourceLocation: {
|
|
9704
9704
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9705
|
-
"line":
|
|
9705
|
+
"line": 1336,
|
|
9706
9706
|
"column": 3
|
|
9707
9707
|
}
|
|
9708
9708
|
},
|
|
@@ -9738,7 +9738,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9738
9738
|
},
|
|
9739
9739
|
sourceLocation: {
|
|
9740
9740
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9741
|
-
"line":
|
|
9741
|
+
"line": 1371,
|
|
9742
9742
|
"column": 3
|
|
9743
9743
|
}
|
|
9744
9744
|
},
|
|
@@ -9797,7 +9797,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9797
9797
|
},
|
|
9798
9798
|
sourceLocation: {
|
|
9799
9799
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9800
|
-
"line":
|
|
9800
|
+
"line": 1381,
|
|
9801
9801
|
"column": 3
|
|
9802
9802
|
}
|
|
9803
9803
|
},
|
|
@@ -9833,7 +9833,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9833
9833
|
},
|
|
9834
9834
|
sourceLocation: {
|
|
9835
9835
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9836
|
-
"line":
|
|
9836
|
+
"line": 1418,
|
|
9837
9837
|
"column": 3
|
|
9838
9838
|
}
|
|
9839
9839
|
},
|
|
@@ -9892,7 +9892,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9892
9892
|
},
|
|
9893
9893
|
sourceLocation: {
|
|
9894
9894
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9895
|
-
"line":
|
|
9895
|
+
"line": 1230,
|
|
9896
9896
|
"column": 3
|
|
9897
9897
|
}
|
|
9898
9898
|
},
|
|
@@ -9941,7 +9941,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9941
9941
|
},
|
|
9942
9942
|
sourceLocation: {
|
|
9943
9943
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9944
|
-
"line":
|
|
9944
|
+
"line": 1243,
|
|
9945
9945
|
"column": 3
|
|
9946
9946
|
}
|
|
9947
9947
|
},
|
|
@@ -10010,7 +10010,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10010
10010
|
},
|
|
10011
10011
|
sourceLocation: {
|
|
10012
10012
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10013
|
-
"line":
|
|
10013
|
+
"line": 1216,
|
|
10014
10014
|
"column": 3
|
|
10015
10015
|
}
|
|
10016
10016
|
},
|
|
@@ -10037,7 +10037,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10037
10037
|
},
|
|
10038
10038
|
sourceLocation: {
|
|
10039
10039
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10040
|
-
"line":
|
|
10040
|
+
"line": 1210,
|
|
10041
10041
|
"column": 3
|
|
10042
10042
|
}
|
|
10043
10043
|
},
|
|
@@ -10086,7 +10086,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10086
10086
|
},
|
|
10087
10087
|
sourceLocation: {
|
|
10088
10088
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10089
|
-
"line":
|
|
10089
|
+
"line": 1261,
|
|
10090
10090
|
"column": 3
|
|
10091
10091
|
}
|
|
10092
10092
|
},
|
|
@@ -10114,7 +10114,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10114
10114
|
},
|
|
10115
10115
|
sourceLocation: {
|
|
10116
10116
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10117
|
-
"line":
|
|
10117
|
+
"line": 1469,
|
|
10118
10118
|
"column": 3
|
|
10119
10119
|
}
|
|
10120
10120
|
},
|
|
@@ -10142,7 +10142,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10142
10142
|
},
|
|
10143
10143
|
sourceLocation: {
|
|
10144
10144
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10145
|
-
"line":
|
|
10145
|
+
"line": 1280,
|
|
10146
10146
|
"column": 3
|
|
10147
10147
|
}
|
|
10148
10148
|
},
|
|
@@ -10169,7 +10169,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10169
10169
|
},
|
|
10170
10170
|
sourceLocation: {
|
|
10171
10171
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10172
|
-
"line":
|
|
10172
|
+
"line": 1316,
|
|
10173
10173
|
"column": 3
|
|
10174
10174
|
}
|
|
10175
10175
|
},
|
|
@@ -10218,7 +10218,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10218
10218
|
},
|
|
10219
10219
|
sourceLocation: {
|
|
10220
10220
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10221
|
-
"line":
|
|
10221
|
+
"line": 1446,
|
|
10222
10222
|
"column": 3
|
|
10223
10223
|
}
|
|
10224
10224
|
},
|
|
@@ -10277,7 +10277,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10277
10277
|
},
|
|
10278
10278
|
sourceLocation: {
|
|
10279
10279
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10280
|
-
"line":
|
|
10280
|
+
"line": 1402,
|
|
10281
10281
|
"column": 3
|
|
10282
10282
|
}
|
|
10283
10283
|
},
|
|
@@ -10326,7 +10326,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10326
10326
|
},
|
|
10327
10327
|
sourceLocation: {
|
|
10328
10328
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10329
|
-
"line":
|
|
10329
|
+
"line": 1325,
|
|
10330
10330
|
"column": 3
|
|
10331
10331
|
}
|
|
10332
10332
|
},
|
|
@@ -10376,7 +10376,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10376
10376
|
},
|
|
10377
10377
|
sourceLocation: {
|
|
10378
10378
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10379
|
-
"line":
|
|
10379
|
+
"line": 1428,
|
|
10380
10380
|
"column": 3
|
|
10381
10381
|
}
|
|
10382
10382
|
},
|
|
@@ -10412,7 +10412,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10412
10412
|
},
|
|
10413
10413
|
sourceLocation: {
|
|
10414
10414
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10415
|
-
"line":
|
|
10415
|
+
"line": 1461,
|
|
10416
10416
|
"column": 3
|
|
10417
10417
|
}
|
|
10418
10418
|
},
|
|
@@ -10461,7 +10461,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10461
10461
|
},
|
|
10462
10462
|
sourceLocation: {
|
|
10463
10463
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10464
|
-
"line":
|
|
10464
|
+
"line": 1134,
|
|
10465
10465
|
"column": 3
|
|
10466
10466
|
}
|
|
10467
10467
|
},
|
|
@@ -10520,7 +10520,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10520
10520
|
},
|
|
10521
10521
|
sourceLocation: {
|
|
10522
10522
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10523
|
-
"line":
|
|
10523
|
+
"line": 1162,
|
|
10524
10524
|
"column": 3
|
|
10525
10525
|
}
|
|
10526
10526
|
},
|
|
@@ -10556,7 +10556,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10556
10556
|
},
|
|
10557
10557
|
sourceLocation: {
|
|
10558
10558
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10559
|
-
"line":
|
|
10559
|
+
"line": 1125,
|
|
10560
10560
|
"column": 3
|
|
10561
10561
|
}
|
|
10562
10562
|
},
|
|
@@ -10615,7 +10615,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10615
10615
|
},
|
|
10616
10616
|
sourceLocation: {
|
|
10617
10617
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10618
|
-
"line":
|
|
10618
|
+
"line": 1149,
|
|
10619
10619
|
"column": 3
|
|
10620
10620
|
}
|
|
10621
10621
|
},
|
|
@@ -10651,7 +10651,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10651
10651
|
},
|
|
10652
10652
|
sourceLocation: {
|
|
10653
10653
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10654
|
-
"line":
|
|
10654
|
+
"line": 1188,
|
|
10655
10655
|
"column": 9
|
|
10656
10656
|
}
|
|
10657
10657
|
},
|
|
@@ -10710,7 +10710,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10710
10710
|
},
|
|
10711
10711
|
sourceLocation: {
|
|
10712
10712
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10713
|
-
"line":
|
|
10713
|
+
"line": 1175,
|
|
10714
10714
|
"column": 3
|
|
10715
10715
|
}
|
|
10716
10716
|
},
|
|
@@ -10759,7 +10759,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10759
10759
|
},
|
|
10760
10760
|
sourceLocation: {
|
|
10761
10761
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10762
|
-
"line":
|
|
10762
|
+
"line": 1305,
|
|
10763
10763
|
"column": 3
|
|
10764
10764
|
}
|
|
10765
10765
|
},
|
|
@@ -10795,7 +10795,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10795
10795
|
},
|
|
10796
10796
|
sourceLocation: {
|
|
10797
10797
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10798
|
-
"line":
|
|
10798
|
+
"line": 1299,
|
|
10799
10799
|
"column": 3
|
|
10800
10800
|
}
|
|
10801
10801
|
},
|
|
@@ -10854,7 +10854,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10854
10854
|
},
|
|
10855
10855
|
sourceLocation: {
|
|
10856
10856
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10857
|
-
"line":
|
|
10857
|
+
"line": 1287,
|
|
10858
10858
|
"column": 3
|
|
10859
10859
|
}
|
|
10860
10860
|
},
|
|
@@ -10913,7 +10913,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10913
10913
|
},
|
|
10914
10914
|
sourceLocation: {
|
|
10915
10915
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10916
|
-
"line":
|
|
10916
|
+
"line": 1555,
|
|
10917
10917
|
"column": 9
|
|
10918
10918
|
}
|
|
10919
10919
|
},
|
|
@@ -10972,7 +10972,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10972
10972
|
},
|
|
10973
10973
|
sourceLocation: {
|
|
10974
10974
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10975
|
-
"line":
|
|
10975
|
+
"line": 1584,
|
|
10976
10976
|
"column": 9
|
|
10977
10977
|
}
|
|
10978
10978
|
},
|
|
@@ -11021,7 +11021,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11021
11021
|
},
|
|
11022
11022
|
sourceLocation: {
|
|
11023
11023
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11024
|
-
"line":
|
|
11024
|
+
"line": 1596,
|
|
11025
11025
|
"column": 9
|
|
11026
11026
|
}
|
|
11027
11027
|
},
|
|
@@ -11070,7 +11070,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11070
11070
|
},
|
|
11071
11071
|
sourceLocation: {
|
|
11072
11072
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11073
|
-
"line":
|
|
11073
|
+
"line": 920,
|
|
11074
11074
|
"column": 9
|
|
11075
11075
|
}
|
|
11076
11076
|
},
|
|
@@ -11088,7 +11088,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11088
11088
|
},
|
|
11089
11089
|
sourceLocation: {
|
|
11090
11090
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11091
|
-
"line":
|
|
11091
|
+
"line": 889,
|
|
11092
11092
|
"column": 3
|
|
11093
11093
|
}
|
|
11094
11094
|
},
|
|
@@ -11137,7 +11137,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11137
11137
|
},
|
|
11138
11138
|
sourceLocation: {
|
|
11139
11139
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11140
|
-
"line":
|
|
11140
|
+
"line": 1664,
|
|
11141
11141
|
"column": 9
|
|
11142
11142
|
}
|
|
11143
11143
|
},
|
|
@@ -11173,7 +11173,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11173
11173
|
},
|
|
11174
11174
|
sourceLocation: {
|
|
11175
11175
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11176
|
-
"line":
|
|
11176
|
+
"line": 1541,
|
|
11177
11177
|
"column": 9
|
|
11178
11178
|
}
|
|
11179
11179
|
},
|
|
@@ -11209,7 +11209,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11209
11209
|
},
|
|
11210
11210
|
sourceLocation: {
|
|
11211
11211
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11212
|
-
"line":
|
|
11212
|
+
"line": 1570,
|
|
11213
11213
|
"column": 9
|
|
11214
11214
|
}
|
|
11215
11215
|
},
|
|
@@ -11258,7 +11258,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11258
11258
|
},
|
|
11259
11259
|
sourceLocation: {
|
|
11260
11260
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11261
|
-
"line":
|
|
11261
|
+
"line": 1725,
|
|
11262
11262
|
"column": 9
|
|
11263
11263
|
}
|
|
11264
11264
|
},
|
|
@@ -11276,7 +11276,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11276
11276
|
},
|
|
11277
11277
|
sourceLocation: {
|
|
11278
11278
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11279
|
-
"line":
|
|
11279
|
+
"line": 907,
|
|
11280
11280
|
"column": 3
|
|
11281
11281
|
}
|
|
11282
11282
|
},
|
|
@@ -11325,7 +11325,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11325
11325
|
},
|
|
11326
11326
|
sourceLocation: {
|
|
11327
11327
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11328
|
-
"line":
|
|
11328
|
+
"line": 1615,
|
|
11329
11329
|
"column": 9
|
|
11330
11330
|
}
|
|
11331
11331
|
},
|
|
@@ -11374,7 +11374,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11374
11374
|
},
|
|
11375
11375
|
sourceLocation: {
|
|
11376
11376
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11377
|
-
"line":
|
|
11377
|
+
"line": 1691,
|
|
11378
11378
|
"column": 9
|
|
11379
11379
|
}
|
|
11380
11380
|
},
|
|
@@ -11410,7 +11410,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11410
11410
|
},
|
|
11411
11411
|
sourceLocation: {
|
|
11412
11412
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11413
|
-
"line":
|
|
11413
|
+
"line": 1489,
|
|
11414
11414
|
"column": 9
|
|
11415
11415
|
}
|
|
11416
11416
|
},
|
|
@@ -11446,7 +11446,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11446
11446
|
},
|
|
11447
11447
|
sourceLocation: {
|
|
11448
11448
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11449
|
-
"line":
|
|
11449
|
+
"line": 1795,
|
|
11450
11450
|
"column": 3
|
|
11451
11451
|
}
|
|
11452
11452
|
},
|
|
@@ -11482,7 +11482,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11482
11482
|
},
|
|
11483
11483
|
sourceLocation: {
|
|
11484
11484
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11485
|
-
"line":
|
|
11485
|
+
"line": 1789,
|
|
11486
11486
|
"column": 3
|
|
11487
11487
|
}
|
|
11488
11488
|
},
|
|
@@ -11509,7 +11509,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11509
11509
|
},
|
|
11510
11510
|
sourceLocation: {
|
|
11511
11511
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11512
|
-
"line":
|
|
11512
|
+
"line": 1783,
|
|
11513
11513
|
"column": 3
|
|
11514
11514
|
}
|
|
11515
11515
|
},
|
|
@@ -11558,7 +11558,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11558
11558
|
},
|
|
11559
11559
|
sourceLocation: {
|
|
11560
11560
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11561
|
-
"line":
|
|
11561
|
+
"line": 1814,
|
|
11562
11562
|
"column": 3
|
|
11563
11563
|
}
|
|
11564
11564
|
},
|
|
@@ -11585,7 +11585,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11585
11585
|
},
|
|
11586
11586
|
sourceLocation: {
|
|
11587
11587
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11588
|
-
"line":
|
|
11588
|
+
"line": 1840,
|
|
11589
11589
|
"column": 3
|
|
11590
11590
|
}
|
|
11591
11591
|
},
|
|
@@ -11634,7 +11634,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11634
11634
|
},
|
|
11635
11635
|
sourceLocation: {
|
|
11636
11636
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11637
|
-
"line":
|
|
11637
|
+
"line": 1804,
|
|
11638
11638
|
"column": 3
|
|
11639
11639
|
}
|
|
11640
11640
|
},
|
|
@@ -11683,7 +11683,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11683
11683
|
},
|
|
11684
11684
|
sourceLocation: {
|
|
11685
11685
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11686
|
-
"line":
|
|
11686
|
+
"line": 1827,
|
|
11687
11687
|
"column": 3
|
|
11688
11688
|
}
|
|
11689
11689
|
},
|
|
@@ -11719,7 +11719,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11719
11719
|
},
|
|
11720
11720
|
sourceLocation: {
|
|
11721
11721
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11722
|
-
"line":
|
|
11722
|
+
"line": 1857,
|
|
11723
11723
|
"column": 3
|
|
11724
11724
|
}
|
|
11725
11725
|
},
|
|
@@ -11778,7 +11778,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11778
11778
|
},
|
|
11779
11779
|
sourceLocation: {
|
|
11780
11780
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11781
|
-
"line":
|
|
11781
|
+
"line": 1872,
|
|
11782
11782
|
"column": 3
|
|
11783
11783
|
}
|
|
11784
11784
|
},
|
|
@@ -11814,7 +11814,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11814
11814
|
},
|
|
11815
11815
|
sourceLocation: {
|
|
11816
11816
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
11817
|
-
"line":
|
|
11817
|
+
"line": 1528,
|
|
11818
11818
|
"column": 9
|
|
11819
11819
|
}
|
|
11820
11820
|
}
|
|
@@ -16342,6 +16342,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16342
16342
|
*/
|
|
16343
16343
|
const QA_REGENERATE_MARKER = "Перегенерируй свой предыдущий ответ — дай новый вариант, не повторяя предыдущий.";
|
|
16344
16344
|
/**
|
|
16345
|
+
* Terminal row of a turn a person stopped. "Готово" claims a complete answer,
|
|
16346
|
+
* and a stopped turn commits a prefix instead, so the row says both what
|
|
16347
|
+
* happened and what the reader is holding.
|
|
16348
|
+
*/
|
|
16349
|
+
const QA_TURN_STOPPED_COPY = "Ход остановлен: ответ неполный. Отправь запрос ещё раз, чтобы получить ответ целиком.";
|
|
16350
|
+
/**
|
|
16345
16351
|
* Durable image references carried by user content. The core ContentBlock
|
|
16346
16352
|
* vocabulary is not installed client-side, so the shape is matched
|
|
16347
16353
|
* structurally against the host contract ({type:"image", attachment:{...}}).
|
|
@@ -16431,6 +16437,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16431
16437
|
}
|
|
16432
16438
|
function collectAssistant(node, turns, toolHeads, showReasoning, workspaceRoot) {
|
|
16433
16439
|
const turn = getTurn(turns, node.turn);
|
|
16440
|
+
if (node.interrupted === true) turn.stoppedAt = node.seq;
|
|
16434
16441
|
const text = visibleAssistantText(node.blocks, workspaceRoot);
|
|
16435
16442
|
if (text !== "") turn.text.push({
|
|
16436
16443
|
id: `assistant:${node.messageId ?? node.seq}`,
|
|
@@ -16538,6 +16545,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16538
16545
|
function emitTurn(legacy, running, turn, output, erroredCode) {
|
|
16539
16546
|
const timing = legacy.turnTimings.get(turn.turn);
|
|
16540
16547
|
const completed = timing?.endTime !== void 0 || legacy.turnEnds.has(turn.turn);
|
|
16548
|
+
const stoppedAt = erroredCode === void 0 ? turn.stoppedAt : void 0;
|
|
16541
16549
|
const sortedText = [...turn.text].sort((left, right) => left.order - right.order);
|
|
16542
16550
|
const partial = sortedText.find((message) => message.status === "streaming");
|
|
16543
16551
|
const committed = sortedText.filter((message) => message.status === "committed");
|
|
@@ -16562,7 +16570,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16562
16570
|
id: `work:${turn.turn}`,
|
|
16563
16571
|
role: "work",
|
|
16564
16572
|
turn: turn.turn,
|
|
16565
|
-
status: erroredCode !== void 0 ? "error" : completed || !running ? "complete" : "running",
|
|
16573
|
+
status: erroredCode !== void 0 ? "error" : stoppedAt !== void 0 ? "stopped" : completed || !running ? "complete" : "running",
|
|
16566
16574
|
...timing?.startTime === void 0 ? {} : { startedAt: timing.startTime },
|
|
16567
16575
|
...timing?.endTime === void 0 ? {} : { endedAt: timing.endTime },
|
|
16568
16576
|
items
|
|
@@ -16595,6 +16603,15 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16595
16603
|
...turn.artifacts.length === 0 ? {} : { artifacts: turn.artifacts }
|
|
16596
16604
|
}
|
|
16597
16605
|
});
|
|
16606
|
+
if (stoppedAt !== void 0) output.push({
|
|
16607
|
+
order: stoppedAt + .5,
|
|
16608
|
+
message: {
|
|
16609
|
+
id: `turn-stopped:${turn.turn}`,
|
|
16610
|
+
role: "system",
|
|
16611
|
+
text: QA_TURN_STOPPED_COPY,
|
|
16612
|
+
status: "info"
|
|
16613
|
+
}
|
|
16614
|
+
});
|
|
16598
16615
|
}
|
|
16599
16616
|
/** Project end-user messages plus optional operator-approved work detail. */
|
|
16600
16617
|
function projectTranscript(snapshot, options = {}) {
|
|
@@ -16926,6 +16943,17 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16926
16943
|
*/
|
|
16927
16944
|
const SLASH_CATALOG_STALE_MS = 3e3;
|
|
16928
16945
|
/**
|
|
16946
|
+
* How long a refused retain waits for its row to come into this browser's
|
|
16947
|
+
* Session catalog. Short on purpose, and shorter than the adoption timeout: the
|
|
16948
|
+
* row arrives either as a Host push or as the answer of the one pull asked for
|
|
16949
|
+
* here, so it is a round-trip away — while a whole `timeoutMs` of patience
|
|
16950
|
+
* would stack a second window onto the waits that follow and hold a chat that
|
|
16951
|
+
* never opens on screen for two of them. A row that misses this window loses
|
|
16952
|
+
* the chat, and the plate's «Повторить» re-runs the adoption on a catalog that
|
|
16953
|
+
* has had the pull.
|
|
16954
|
+
*/
|
|
16955
|
+
const CATALOG_ROW_PATIENCE_MS = 5e3;
|
|
16956
|
+
/**
|
|
16929
16957
|
* Spacing of the parked-request poll. A request is answered by a person, so a
|
|
16930
16958
|
* second of latency is invisible; the poll only runs while a turn runs.
|
|
16931
16959
|
*/
|
|
@@ -17995,7 +18023,15 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
17995
18023
|
*/
|
|
17996
18024
|
async bind(id, options) {
|
|
17997
18025
|
const { operation, report = true, attest = true, track = true, allowCompatibilityReadOnly = false } = options;
|
|
17998
|
-
const
|
|
18026
|
+
const retainAttemptedAt = Date.now();
|
|
18027
|
+
let reference;
|
|
18028
|
+
try {
|
|
18029
|
+
reference = this.sessions.retain(id, { source: QA_SURFACE_SESSION_SOURCE });
|
|
18030
|
+
} catch (error) {
|
|
18031
|
+
if (this.catalogLists(id)) throw error;
|
|
18032
|
+
if (!await this.awaitCatalogRow(id, retainAttemptedAt, operation, error)) return false;
|
|
18033
|
+
reference = this.sessions.retain(id, { source: QA_SURFACE_SESSION_SOURCE });
|
|
18034
|
+
}
|
|
17999
18035
|
let binding = this.sessions.binding(id);
|
|
18000
18036
|
try {
|
|
18001
18037
|
if (binding === void 0) {
|
|
@@ -18063,6 +18099,53 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
18063
18099
|
return true;
|
|
18064
18100
|
}
|
|
18065
18101
|
/**
|
|
18102
|
+
* Whether this browser's Session catalog names one id. The Host answers a
|
|
18103
|
+
* retain from exactly this set, so a refusal of a listed session is a refusal
|
|
18104
|
+
* of a session it knows — never the race this adoption can wait out.
|
|
18105
|
+
*/
|
|
18106
|
+
catalogLists(id) {
|
|
18107
|
+
return Object.hasOwn(this.sessions.list.getSnapshot().byId, id);
|
|
18108
|
+
}
|
|
18109
|
+
/**
|
|
18110
|
+
* Wait for this browser's Session catalog to come to know one id, after
|
|
18111
|
+
* {@link bind} was refused a reference to it, and answer whether the chat on
|
|
18112
|
+
* screen still belongs to the adoption that asked (`false` — it moved on, and
|
|
18113
|
+
* nothing is retained). Only an id the catalog does not name reaches here: a
|
|
18114
|
+
* refusal of a session it already lists is not this race and goes back as it
|
|
18115
|
+
* came, so there is always a row to wait for. A refusal is only final once
|
|
18116
|
+
* that row has had its chance: this is the one window where the race is
|
|
18117
|
+
* repairable rather than reportable, so the failure the caller reads stays the
|
|
18118
|
+
* Host's own refusal, not a timeout nobody asked for.
|
|
18119
|
+
*
|
|
18120
|
+
* Both timestamps are logged because the race is intermittent and the stand
|
|
18121
|
+
* keeps no other trace of it: the server never sees a retain, so its journal
|
|
18122
|
+
* cannot say which chat lost the create, and the next round needs the id and
|
|
18123
|
+
* the two moments to line this up with its own observations.
|
|
18124
|
+
*/
|
|
18125
|
+
async awaitCatalogRow(id, retainAttemptedAt, operation, failure) {
|
|
18126
|
+
if (this.disposed || operation !== this.generation) return false;
|
|
18127
|
+
console.warn("dsh-qa-surface: sessions.retain raced the session catalog", {
|
|
18128
|
+
sessionId: id,
|
|
18129
|
+
retainAttemptedAt: new Date(retainAttemptedAt).toISOString()
|
|
18130
|
+
});
|
|
18131
|
+
this.sessions.refresh().catch((cause) => {
|
|
18132
|
+
console.warn("dsh-qa-surface: session catalog refresh refused", {
|
|
18133
|
+
sessionId: id,
|
|
18134
|
+
cause: cause instanceof Error ? cause.message : String(cause)
|
|
18135
|
+
});
|
|
18136
|
+
});
|
|
18137
|
+
try {
|
|
18138
|
+
await waitFor(this.sessions.list, (snapshot) => Object.hasOwn(snapshot.byId, id), Math.min(this.timeoutMs, CATALOG_ROW_PATIENCE_MS));
|
|
18139
|
+
} catch {
|
|
18140
|
+
throw failure;
|
|
18141
|
+
}
|
|
18142
|
+
console.warn("dsh-qa-surface: session catalog row landed", {
|
|
18143
|
+
sessionId: id,
|
|
18144
|
+
waitedMs: Date.now() - retainAttemptedAt
|
|
18145
|
+
});
|
|
18146
|
+
return !this.disposed && operation === this.generation;
|
|
18147
|
+
}
|
|
18148
|
+
/**
|
|
18066
18149
|
* Give up on an adoption the chat on screen has outgrown, and answer whether
|
|
18067
18150
|
* that is what happened (`true` — the caller has nothing left to publish).
|
|
18068
18151
|
*
|
|
@@ -19524,6 +19607,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19524
19607
|
}
|
|
19525
19608
|
//#endregion
|
|
19526
19609
|
//#region src/client/slash/SlashPalette.tsx
|
|
19610
|
+
/** Whether a Host-supplied description is written in the surface's language. */
|
|
19611
|
+
const isCyrillic = /[А-Яа-яЁё]/u;
|
|
19527
19612
|
const KIND_LABEL = Object.freeze({
|
|
19528
19613
|
skill: "Навык",
|
|
19529
19614
|
command: "Команда"
|
|
@@ -19599,6 +19684,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19599
19684
|
}), props.showDescriptions && entry.description !== "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
19600
19685
|
className: "dsh-qa-slash__description",
|
|
19601
19686
|
"data-testid": "qa-slash-row-description",
|
|
19687
|
+
lang: isCyrillic.test(entry.description) ? "ru" : "en",
|
|
19602
19688
|
children: entry.description
|
|
19603
19689
|
}) : null]
|
|
19604
19690
|
}, entry.id);
|
|
@@ -19918,6 +20004,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
19918
20004
|
if (await props.onSend(text, attachments, pick?.id ?? null)) {
|
|
19919
20005
|
setDraft("");
|
|
19920
20006
|
props.onAttachmentsChange([]);
|
|
20007
|
+
setAttachmentError(null);
|
|
19921
20008
|
}
|
|
19922
20009
|
} finally {
|
|
19923
20010
|
setSubmitting(false);
|
|
@@ -20491,7 +20578,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
20491
20578
|
]
|
|
20492
20579
|
});
|
|
20493
20580
|
}
|
|
20494
|
-
function QaHeader({ logoUrl, title, viewingSubagent, onCloseSubagent, roleSelector, themeSwitcher, administration, agentCount, agentsOpen, onToggleAgents, sourcesVisible, sourcesCount, sourcesComplete, sourcesOpen, onOpenSources, fileCount, filesEnabled, filesOpen, onOpenFiles, settings, history, panelLauncher, showReset, resetDisabled, onReset }) {
|
|
20581
|
+
function QaHeader({ logoUrl, title, viewingSubagent, onCloseSubagent, roleSelector, themeSwitcher, administration, agentCount, agentsOpen, onToggleAgents, sourcesVisible, sourcesCount, sourcesComplete, sourcesOpen, onOpenSources, fileCount, filesEnabled, filesOpen, onOpenFiles, settings, history, panelLauncher, showReset, resetDisabled, onReset, onBackToChat }) {
|
|
20495
20582
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("header", {
|
|
20496
20583
|
className: "dsh-qa-header",
|
|
20497
20584
|
"data-testid": "qa-surface-header",
|
|
@@ -20548,9 +20635,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
20548
20635
|
type: "button",
|
|
20549
20636
|
className: "dsh-qa-header__agents",
|
|
20550
20637
|
"data-testid": "qa-surface-header-agents",
|
|
20551
|
-
disabled: agentCount === 0,
|
|
20638
|
+
"aria-disabled": agentCount === 0 || void 0,
|
|
20552
20639
|
"aria-expanded": agentsOpen,
|
|
20553
|
-
|
|
20640
|
+
...agentCount === 0 ? { "aria-label": "Агенты: субагентов в этом чате пока нет" } : {},
|
|
20641
|
+
title: agentCount === 0 ? "Субагентов в этом чате пока нет" : "Показать субагентов этого чата",
|
|
20642
|
+
onClick: () => {
|
|
20643
|
+
if (agentCount === 0) return;
|
|
20644
|
+
onToggleAgents();
|
|
20645
|
+
},
|
|
20554
20646
|
children: [
|
|
20555
20647
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
20556
20648
|
viewBox: "0 0 16 16",
|
|
@@ -20571,8 +20663,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
20571
20663
|
type: "button",
|
|
20572
20664
|
className: "dsh-qa-header__sources",
|
|
20573
20665
|
"data-testid": "qa-surface-header-sources",
|
|
20574
|
-
disabled: sourcesCount === 0 && sourcesComplete,
|
|
20575
20666
|
"aria-expanded": sourcesOpen,
|
|
20667
|
+
...sourcesCount === 0 && sourcesComplete ? { "aria-label": "Источники: этот ответ обошёлся без источников" } : {},
|
|
20668
|
+
title: sourcesCount === 0 && sourcesComplete ? "Этот ответ обошёлся без источников" : "Показать источники этого ответа",
|
|
20576
20669
|
onClick: onOpenSources,
|
|
20577
20670
|
children: [
|
|
20578
20671
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
@@ -20592,9 +20685,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
20592
20685
|
type: "button",
|
|
20593
20686
|
className: "dsh-qa-header__files",
|
|
20594
20687
|
"data-testid": "qa-surface-header-files",
|
|
20595
|
-
disabled: !filesEnabled,
|
|
20688
|
+
"aria-disabled": !filesEnabled || void 0,
|
|
20596
20689
|
"aria-expanded": filesOpen,
|
|
20597
|
-
|
|
20690
|
+
...!filesEnabled ? { "aria-label": "Файлы: в этом чате нет ни вложений, ни читаемого рабочего каталога" } : {},
|
|
20691
|
+
title: !filesEnabled ? "В этом чате нет ни вложений, ни читаемого рабочего каталога" : "Показать файлы этого чата",
|
|
20692
|
+
onClick: () => {
|
|
20693
|
+
if (!filesEnabled) return;
|
|
20694
|
+
onOpenFiles();
|
|
20695
|
+
},
|
|
20598
20696
|
children: [
|
|
20599
20697
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
20600
20698
|
viewBox: "0 0 16 16",
|
|
@@ -20647,9 +20745,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
20647
20745
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
20648
20746
|
className: "dsh-qa-header__tabs",
|
|
20649
20747
|
"data-testid": "qa-surface-header-tabs",
|
|
20650
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
20748
|
+
children: onBackToChat === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
20651
20749
|
"aria-current": "page",
|
|
20652
20750
|
children: "Чат"
|
|
20751
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
20752
|
+
type: "button",
|
|
20753
|
+
className: "dsh-qa-header__tab",
|
|
20754
|
+
"data-testid": "qa-surface-header-chat-tab",
|
|
20755
|
+
"aria-current": "page",
|
|
20756
|
+
"aria-label": "Вернуться к чату",
|
|
20757
|
+
title: "Закрыть панель и вернуться к чату",
|
|
20758
|
+
onClick: onBackToChat,
|
|
20759
|
+
children: "Чат"
|
|
20653
20760
|
})
|
|
20654
20761
|
})]
|
|
20655
20762
|
})
|
|
@@ -50182,6 +50289,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
50182
50289
|
}
|
|
50183
50290
|
//#endregion
|
|
50184
50291
|
//#region src/client/components/QaWorkGroup.tsx
|
|
50292
|
+
/** Whether one turn is over: a settled group opens collapsed and stays closed. */
|
|
50293
|
+
function isSettled(status) {
|
|
50294
|
+
return status === "complete" || status === "error" || status === "stopped";
|
|
50295
|
+
}
|
|
50185
50296
|
function Chevron({ open }) {
|
|
50186
50297
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
50187
50298
|
className: "dsh-qa-work__chevron",
|
|
@@ -50356,15 +50467,15 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
50356
50467
|
const now = useNow(status === "running" && startedAt !== void 0);
|
|
50357
50468
|
const previousStatus = (0, react.useRef)(status);
|
|
50358
50469
|
(0, react.useEffect)(() => {
|
|
50359
|
-
if (previousStatus.current === "running" && (status
|
|
50360
|
-
else if (previousStatus.current
|
|
50470
|
+
if (previousStatus.current === "running" && isSettled(status)) setOpen(false);
|
|
50471
|
+
else if (isSettled(previousStatus.current)) {
|
|
50361
50472
|
if (status === "running") setOpen(true);
|
|
50362
50473
|
}
|
|
50363
50474
|
previousStatus.current = status;
|
|
50364
50475
|
}, [status]);
|
|
50365
50476
|
const elapsed = (endedAt ?? now) - (startedAt ?? now);
|
|
50366
50477
|
const duration = startedAt === void 0 ? null : formatWorkDuration(elapsed);
|
|
50367
|
-
const label = status === "running" ? `${thinkingPhrase(elapsed, thinkingPhrases)}${duration === null ? "" : ` (${duration})`}` : status === "error" ? duration === null ? "Ход прерван" : `Прервано за ${duration}` : duration === null ? "Ход работы" : `Готово за ${duration}`;
|
|
50478
|
+
const label = status === "running" ? `${thinkingPhrase(elapsed, thinkingPhrases)}${duration === null ? "" : ` (${duration})`}` : status === "error" ? duration === null ? "Ход прерван" : `Прервано за ${duration}` : status === "stopped" ? duration === null ? "Ход остановлен" : `Остановлено на ${duration}` : duration === null ? "Ход работы" : `Готово за ${duration}`;
|
|
50368
50479
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
50369
50480
|
className: "dsh-qa-work",
|
|
50370
50481
|
"data-testid": "qa-surface-work-group",
|
|
@@ -52961,15 +53072,39 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
52961
53072
|
}
|
|
52962
53073
|
//#endregion
|
|
52963
53074
|
//#region src/client/components/QaChangelog.tsx
|
|
52964
|
-
const QA_VERSION = "0.15.
|
|
53075
|
+
const QA_VERSION = "0.15.4";
|
|
52965
53076
|
const QA_CHANGELOG = [
|
|
53077
|
+
{
|
|
53078
|
+
version: "0.15.4",
|
|
53079
|
+
date: "2026-10-08",
|
|
53080
|
+
sections: [{
|
|
53081
|
+
title: "Исправления",
|
|
53082
|
+
items: [
|
|
53083
|
+
"Мелкие контролы поверхности стали объяснять себя, а основной текст — читаться с 16 px. Чипы «Агенты», «Источники» и «Файлы» при пустом списке просто глушились: серая кнопка выпадала из обхода Tab, не отвечала на наведение и не говорила, что именно кончилось; теперь она остаётся доступной, а причина пустоты читается в её имени и подсказке. «Чат» в шапке выглядел выбранной вкладкой, но не нажимался — когда поверх разговора открыта панель, это кнопка, которая закрывает панель и возвращает к чату, а пока ничего не открыто, он остаётся подписью. На телефоне панель, занимающая весь экран, имела один выход — крестик 26 px: у него и зона попадания размером с палец, и имя, называющее закрываемую вкладку, а Escape закрывает панель, где бы ни стоял курсор; действия у сообщения на этой ширине такие же. Ответ ассистента больше не мельчает ни относительно собственного вопроса, ни на узком экране, и карточки входа и настроек переехали на тот же кегль — ниже 16 px остались только служебные подписи. Заголовок беседы в истории, который не влезал целиком, обрывается многоточием, полное имя даёт подсказка, а поиск ищет по всему имени; третий быстрый вопрос на узкой ширине больше не отсекается — чипы переносятся. Красная строка об отказе слишком большого файла уходит вместе с отправленным сообщением, а не висит над пустым полем; «Рабочий каталог» в панели «Файлы» напечатан один раз; карточка «Ожидает одобрения» называет причину по-русски, а описания команд в палитре по `/` объявляют свой язык, чтобы перевод не звучал как ошибка.",
|
|
53084
|
+
"Кнопка «Источники» в шапке больше не блокируется пустым списком, и пустой список объясняет себя сам. Ход, ответивший по памяти или по тому, что уже было в этом разговоре, в список ничего не добавляет: чтения памяти не узнаёт ни один экстрактор, и это замысел, а не поломка. Прежний интерфейс молчал дважды — под ответом не было чипа, а кнопка стояла заблокированной без счётчика и без причины, и вместе с ней закрывалась единственная поверхность, способная объяснить пустоту. Теперь кнопка жива всегда, когда её показывает развёртывание, а панель на пустом завершённом ходе перечисляет, какие материалы в неё попадают, и говорит, что пустой список — не сбой сбора. Пока ход ещё идёт или делегированный запуск остался должен свои источники, объяснение молчит: об этом уже говорит строка о недоступных источниках, и два противоречащих текста на одном экране не встречаются.",
|
|
53085
|
+
"Остановленный ход больше не притворяется завершённым. Кнопка «стоп» обрывала ответ, а под ходом читалось «Готово за 2 с»: «готово» обещает целый ответ, и человек, остановивший ход, чтобы переформулировать вопрос, видел успех вместо того, что сделал сам. Теперь у остановки свой итог — строка «Остановлено на N с» и плашка о том, что ответ неполный и как получить его целиком. Всё, что успело прийти, остаётся обычным сообщением: его можно скопировать и оценить, так что остановка ничего уже написанного не съедает. У сбоя провайдера по-прежнему свой итог — остановка его не подменяет.",
|
|
53086
|
+
"Палитра слэш-команд в чате, который ещё не начался, называет те же навыки, что и в чате, где уже шёл ответ. Пока за разговором не стоял живой агент, список строился по одному общему allow-list'у развёртывания и не сужался ролью: в него попадал навык, который в этом чате вызвать нельзя — имя подсвечивалось, Enter подставлял его в строку, а в ответ приходил отказ, — и наоборот, доступный навык мог не показаться. Теперь роль учитывается при обоих чтениях, а список, который палитра показывает, и список, которым проверяется введённая строка, выводятся из одного правила, поэтому предложение в палитре и возможность его вызвать больше не могут разойтись.",
|
|
53087
|
+
"Делегированный вызов больше не ставит ход на паузу, которую никто не может снять. Проверяющий, вызванный из чата, не умеет спрашивать человека — харнесс отказывает таким запросам, — но заявка на подтверждение вставала карточкой над композером родителя и держала весь ход: на стенде так ждало то двенадцать минут, то больше часа, пока в основном чате шёл только таймер «думаю». Теперь запрос на подтверждение от дочерней сессии отклоняется сразу там, где он поднят, с объяснением, что дочь спрашивать не может, — модель получает это как находку, а оператор не получает зависший ход. Отдельно закрыто то, что привело к заявке: проверяющему ответа выдаются только инструменты чтения и поиска, а имена удаления файла, записи файлов и запуска команд исключены из его набора — и списком по умолчанию, и проверкой на сборке дочерней сессии.",
|
|
53088
|
+
"Запрос на одобрение, который никто не увидел, перестаёт владеть ходом навсегда: карточка, оставшаяся без ответа, гаснет по истечении ожидания и означает отказ, как и явный отказ оператора. Ничего при этом не разрешается автоматически: ни один путь не одобряет вызов без человека.",
|
|
53089
|
+
"Первый вопрос, заданный в новый черновик, больше не открывается плашкой «Не удалось начать чат.» над разговором, который стенд на самом деле создал. Список чатов браузер держит у себя, и право на сессию хост выдаёт по этому списку: идентификатор, которого в нём ещё нет, отвергается строкой `sessions.retain: unknown session`. Разговор же рождается на сервере — через собственный Remote стенда, — и ответ «создано» успевал дойти до браузера раньше, чем строка нового разговора в его список попала. Первая попытка закрепиться за сессией приходилась ровно на это окно, поэтому экран докладывал об отказе и молчал, что чат тем временем уже стоит в боковом списке строкой, в которую никто не вошёл. Теперь поверхность сначала ждёт, пока каталог браузера назовёт этот идентификатор, и сама просит свежий список, а не ждёт, что успеет прийти раньше — собственный кадр сервера или его очередная выгрузка. Ждёт недолго, на одну выгрузку: строка приходит пушем или ответом на этот же запрос, а целый таймаут ожидания лег бы вторым слоем поверх тех, что идут следом, и чат, которому не открыться, держал бы экран вдвое дольше. Если строка так и не пришла, в журнале остаётся отказ самого хоста, а не «истекло ожидание», которого никто не заказывал; отказ хоста для чата, который список уже называет, остаётся самим собой — поверхность не ждёт строку, которая на месте, и не рисует гонку там, где её не было. Отказ самой выгрузки тоже слышен: чат, потерянный в таком виде, читается как медленный каталог, а на деле это нечитаемый каталог. Случается это не на каждом входе, поэтому обе половины гонки пишутся в журнал браузера: отказ удержания — с его моментом, и пришедшая следом строка каталога — с тем, сколько пришлось ждать. Раунд, который чат всё-таки потерял, сможет сказать, на какой стороне создания он его потерял. Тот же порядок и для чата, который поверхность возвращает при открытии: он тоже сначала ждёт, пока список его назовёт, и только потом закрепляется за сессией."
|
|
53090
|
+
]
|
|
53091
|
+
}]
|
|
53092
|
+
},
|
|
53093
|
+
{
|
|
53094
|
+
version: "0.15.3",
|
|
53095
|
+
date: "2026-10-08",
|
|
53096
|
+
sections: [{
|
|
53097
|
+
title: "Исправления",
|
|
53098
|
+
items: ["Палитра слэш-команд в чате, который ещё не начался, называет те же навыки, что и в чате, где уже шёл ответ. Пока за разговором не стоял живой агент, список строился по одному общему allow-list'у развёртывания и не сужался ролью: в него попадал навык, который в этом чате вызвать нельзя — имя подсвечивалось, Enter подставлял его в строку, а в ответ приходил отказ, — и наоборот, доступный навык мог не показаться. Теперь роль учитывается при обоих чтениях, а список, который палитра показывает, и список, которым проверяется введённая строка, выводятся из одного правила, поэтому предложение в палитре и возможность его вызвать больше не могут разойтись."]
|
|
53099
|
+
}]
|
|
53100
|
+
},
|
|
52966
53101
|
{
|
|
52967
53102
|
version: "0.15.2",
|
|
52968
53103
|
date: "2026-10-07",
|
|
52969
53104
|
sections: [
|
|
52970
53105
|
{
|
|
52971
53106
|
title: "Исправления",
|
|
52972
|
-
items: ["Кнопка «Копировать» работает на стенде, открытом по http по адресу в локальной сети. Браузер доверяет буфер обмена только защищённым страницам, поэтому на таком стенде современного интерфейса буфера нет вовсе — и нажатие молчало: ни ошибки, ни отметки «Скопировано», ни текста в буфере, а проверка вставлялась пустой. Теперь поверхность сначала пробует буфер, а когда его нет, копирует через временное поле — этот путь доступен и на незащищённой странице. Так копируются код-блок в ответе, ответ целиком и значение интеграционного токена. Если браузер не отдал буфер ни одним путём, на месте кнопки появляется строка «Скопируйте вручную», а там, где кнопка осталась рабочей, та же строка встаёт рядом с ней после отказа: молчание больше не выглядит удачным копированием."]
|
|
53107
|
+
items: ["Кнопка «Копировать» работает на стенде, открытом по http по адресу в локальной сети. Браузер доверяет буфер обмена только защищённым страницам, поэтому на таком стенде современного интерфейса буфера нет вовсе — и нажатие молчало: ни ошибки, ни отметки «Скопировано», ни текста в буфере, а проверка вставлялась пустой. Теперь поверхность сначала пробует буфер, а когда его нет, копирует через временное поле — этот путь доступен и на незащищённой странице. Так копируются код-блок в ответе, ответ целиком и значение интеграционного токена. Если браузер не отдал буфер ни одним путём, на месте кнопки появляется строка «Скопируйте вручную», а там, где кнопка осталась рабочей, та же строка встаёт рядом с ней после отказа: молчание больше не выглядит удачным копированием.", "Палитра слэш-команд в чате, который ещё не начался, называет те же навыки, что и в чате, где уже шёл ответ. Пока за разговором не стоял живой агент, список строился по одному общему allow-list'у развёртывания и не сужался ролью: в него попадал навык, который в этом чате вызвать нельзя — имя подсвечивалось, Enter подставлял его в строку, а в ответ приходил отказ, — и наоборот, доступный навык мог не показаться. Теперь роль учитывается при обоих чтениях, а список, который палитра показывает, и список, которым проверяется введённая строка, выводятся из одного правила, поэтому предложение в палитре и возможность его вызвать больше не могут разойтись."]
|
|
52973
53108
|
},
|
|
52974
53109
|
{
|
|
52975
53110
|
title: "Изменения",
|
|
@@ -53513,7 +53648,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
53513
53648
|
className: "dsh-qa-changelog__date",
|
|
53514
53649
|
children: entry.date
|
|
53515
53650
|
}),
|
|
53516
|
-
entry.version === "0.15.
|
|
53651
|
+
entry.version === "0.15.4" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
53517
53652
|
className: "dsh-qa-changelog__current",
|
|
53518
53653
|
children: "текущая"
|
|
53519
53654
|
}) : null
|
|
@@ -53811,12 +53946,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
53811
53946
|
const summary = byId[id];
|
|
53812
53947
|
if (summary === void 0 || isDelegatedSession(summary)) continue;
|
|
53813
53948
|
const ownerName = ownerNameOf?.(id);
|
|
53949
|
+
const label = summary.blank ? "Новый чат" : summary.displayTitle;
|
|
53950
|
+
const full = summary.title;
|
|
53951
|
+
const clipped = !summary.blank && full !== void 0 && full.length > label.length;
|
|
53814
53952
|
rows.push({
|
|
53815
53953
|
id,
|
|
53816
|
-
title:
|
|
53954
|
+
title: clipped ? `${label.trimEnd()}…` : label,
|
|
53817
53955
|
running: summary.running,
|
|
53818
53956
|
active: id === activeId,
|
|
53819
53957
|
meta: relativeTime(summary.updatedAt, now),
|
|
53958
|
+
...clipped && full !== void 0 ? { fullName: full } : {},
|
|
53820
53959
|
updatedAt: summary.updatedAt,
|
|
53821
53960
|
...ownerName === void 0 ? {} : { ownerName }
|
|
53822
53961
|
});
|
|
@@ -53899,7 +54038,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
53899
54038
|
});
|
|
53900
54039
|
}
|
|
53901
54040
|
function rowMatches(row, query) {
|
|
53902
|
-
return row.title.toLowerCase().includes(query) || row.ownerName?.toLowerCase().includes(query) === true;
|
|
54041
|
+
return row.title.toLowerCase().includes(query) || (row.fullName?.toLowerCase().includes(query) ?? false) || row.ownerName?.toLowerCase().includes(query) === true;
|
|
53903
54042
|
}
|
|
53904
54043
|
/**
|
|
53905
54044
|
* How each chat is named by the controls acting on it, keyed by id. A title is
|
|
@@ -54006,6 +54145,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
54006
54145
|
className: "dsh-qa-sidebar__item-main",
|
|
54007
54146
|
"data-testid": "qa-surface-sidebar-item-open",
|
|
54008
54147
|
"aria-current": row.active ? "true" : void 0,
|
|
54148
|
+
title: row.fullName ?? row.title,
|
|
54009
54149
|
onClick: () => {
|
|
54010
54150
|
props.onSwitch(row.id);
|
|
54011
54151
|
closeDrawer();
|
|
@@ -54803,22 +54943,23 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
54803
54943
|
});
|
|
54804
54944
|
}
|
|
54805
54945
|
const crumbs = crumbsOf(directory);
|
|
54946
|
+
const trail = directory === "" ? crumbs.slice(1) : crumbs;
|
|
54806
54947
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
54807
54948
|
className: "dsh-qa-ws",
|
|
54808
54949
|
"data-testid": "qa-surface-workspace",
|
|
54809
54950
|
children: [
|
|
54810
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("nav", {
|
|
54951
|
+
trail.length === 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("nav", {
|
|
54811
54952
|
className: "dsh-qa-ws__crumbs",
|
|
54812
54953
|
"data-testid": "qa-surface-workspace-crumbs",
|
|
54813
54954
|
"aria-label": "Путь в рабочем каталоге",
|
|
54814
|
-
children:
|
|
54955
|
+
children: trail.map((crumb, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [index > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
54815
54956
|
"aria-hidden": "true",
|
|
54816
54957
|
children: "/"
|
|
54817
54958
|
}) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
54818
54959
|
type: "button",
|
|
54819
54960
|
className: "dsh-qa-ws__crumb",
|
|
54820
54961
|
"data-testid": "qa-surface-workspace-crumb",
|
|
54821
|
-
"aria-current": index ===
|
|
54962
|
+
"aria-current": index === trail.length - 1 ? "true" : void 0,
|
|
54822
54963
|
onClick: () => setDirectory(crumb.path),
|
|
54823
54964
|
children: crumb.label
|
|
54824
54965
|
})] }, crumb.path))
|
|
@@ -54975,9 +55116,24 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
54975
55116
|
* The chat's right rail: a fixed column whose top edge is the tab strip,
|
|
54976
55117
|
* mirroring the Harness right Sidebar's chrome. Tabs are plain chips with
|
|
54977
55118
|
* counts; the strip's last control collapses the whole column.
|
|
55119
|
+
*
|
|
55120
|
+
* On the phone layout the column is the whole surface, so the strip's control
|
|
55121
|
+
* is the only way back and Escape has to answer from anywhere on the page —
|
|
55122
|
+
* the focus may well still sit in the composer behind the panel. A dialog above
|
|
55123
|
+
* the rail keeps the key: the innermost thing on the page is what the reader
|
|
55124
|
+
* means to dismiss.
|
|
54978
55125
|
*/
|
|
54979
55126
|
function QaRightRail({ tabs, activeTab, onTabSelect, onClose }) {
|
|
54980
55127
|
const active = tabs.find((tab) => tab.id === activeTab) ?? tabs[0];
|
|
55128
|
+
(0, react.useEffect)(() => {
|
|
55129
|
+
const onKey = (event) => {
|
|
55130
|
+
if (event.key !== "Escape" || event.defaultPrevented) return;
|
|
55131
|
+
if (isQaModalOpen()) return;
|
|
55132
|
+
onClose();
|
|
55133
|
+
};
|
|
55134
|
+
window.addEventListener("keydown", onKey);
|
|
55135
|
+
return () => window.removeEventListener("keydown", onKey);
|
|
55136
|
+
}, [onClose]);
|
|
54981
55137
|
if (active === void 0) return null;
|
|
54982
55138
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("aside", {
|
|
54983
55139
|
className: "dsh-qa-panel",
|
|
@@ -55003,8 +55159,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
55003
55159
|
type: "button",
|
|
55004
55160
|
className: "dsh-qa-panel__close",
|
|
55005
55161
|
"data-testid": "qa-surface-rail-close",
|
|
55006
|
-
"aria-label":
|
|
55007
|
-
title:
|
|
55162
|
+
"aria-label": `Закрыть панель «${active.title}» и вернуться к чату`,
|
|
55163
|
+
title: `Закрыть панель «${active.title}»`,
|
|
55008
55164
|
onClick: onClose,
|
|
55009
55165
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
55010
55166
|
viewBox: "0 0 16 16",
|
|
@@ -55308,39 +55464,47 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
55308
55464
|
}) : null, detail === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
55309
55465
|
className: "dsh-qa-sources__list",
|
|
55310
55466
|
"data-testid": "qa-sources-list",
|
|
55311
|
-
children: [
|
|
55312
|
-
|
|
55313
|
-
|
|
55314
|
-
|
|
55315
|
-
"Некоторые источники делегированных запусков недоступны (",
|
|
55316
|
-
incompleteOrigins?.length ?? 1,
|
|
55317
|
-
")."
|
|
55318
|
-
]
|
|
55319
|
-
}) : null, groups.map((group) => {
|
|
55320
|
-
const visible = expanded.has(group.key) ? group.sources : group.sources.slice(0, display.maxInitiallyVisiblePerGroup);
|
|
55321
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
55322
|
-
className: "dsh-qa-sources__group",
|
|
55323
|
-
"data-testid": `qa-sources-group-${group.key}`,
|
|
55467
|
+
children: [
|
|
55468
|
+
!complete ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
|
|
55469
|
+
className: "dsh-qa-sources__incomplete",
|
|
55470
|
+
"data-testid": "qa-sources-incomplete",
|
|
55324
55471
|
children: [
|
|
55325
|
-
|
|
55326
|
-
|
|
55327
|
-
|
|
55328
|
-
})] }),
|
|
55329
|
-
visible.map((source) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(QaSourceCard, {
|
|
55330
|
-
source,
|
|
55331
|
-
showOriginBadges: display.showOriginBadges,
|
|
55332
|
-
onOpen: () => setDetailId(source.id)
|
|
55333
|
-
}, source.id)),
|
|
55334
|
-
visible.length < group.sources.length ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
55335
|
-
type: "button",
|
|
55336
|
-
className: "dsh-qa-sources__more",
|
|
55337
|
-
"data-testid": "qa-sources-more",
|
|
55338
|
-
onClick: () => setExpanded(/* @__PURE__ */ new Set([...expanded, group.key])),
|
|
55339
|
-
children: ["Показать ещё ", group.sources.length - visible.length]
|
|
55340
|
-
}) : null
|
|
55472
|
+
"Некоторые источники делегированных запусков недоступны (",
|
|
55473
|
+
incompleteOrigins?.length ?? 1,
|
|
55474
|
+
")."
|
|
55341
55475
|
]
|
|
55342
|
-
},
|
|
55343
|
-
|
|
55476
|
+
}) : null,
|
|
55477
|
+
complete && sources.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
55478
|
+
className: "dsh-qa-sources__empty",
|
|
55479
|
+
"data-testid": "qa-sources-empty",
|
|
55480
|
+
children: "Здесь появляются материалы, которые ход читал или открывал сам: файл рабочего каталога, веб-страница, выдача веб-поиска, ответ Jira, Confluence или базы знаний. Ответ, собранный по памяти или по тому, что уже было в этом разговоре, сюда ничего не добавляет — поэтому пустой список после завершённого хода означает именно это, а не сбой сбора."
|
|
55481
|
+
}) : null,
|
|
55482
|
+
groups.map((group) => {
|
|
55483
|
+
const visible = expanded.has(group.key) ? group.sources : group.sources.slice(0, display.maxInitiallyVisiblePerGroup);
|
|
55484
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
55485
|
+
className: "dsh-qa-sources__group",
|
|
55486
|
+
"data-testid": `qa-sources-group-${group.key}`,
|
|
55487
|
+
children: [
|
|
55488
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("h3", { children: [group.label, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
55489
|
+
"data-testid": "qa-sources-group-count",
|
|
55490
|
+
children: group.sources.length
|
|
55491
|
+
})] }),
|
|
55492
|
+
visible.map((source) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(QaSourceCard, {
|
|
55493
|
+
source,
|
|
55494
|
+
showOriginBadges: display.showOriginBadges,
|
|
55495
|
+
onOpen: () => setDetailId(source.id)
|
|
55496
|
+
}, source.id)),
|
|
55497
|
+
visible.length < group.sources.length ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
55498
|
+
type: "button",
|
|
55499
|
+
className: "dsh-qa-sources__more",
|
|
55500
|
+
"data-testid": "qa-sources-more",
|
|
55501
|
+
onClick: () => setExpanded(/* @__PURE__ */ new Set([...expanded, group.key])),
|
|
55502
|
+
children: ["Показать ещё ", group.sources.length - visible.length]
|
|
55503
|
+
}) : null
|
|
55504
|
+
]
|
|
55505
|
+
}, group.key);
|
|
55506
|
+
})
|
|
55507
|
+
]
|
|
55344
55508
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(QaSourceDetail, {
|
|
55345
55509
|
source: detail,
|
|
55346
55510
|
sessionId,
|
|
@@ -64650,6 +64814,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
64650
64814
|
config.ui.showHeader ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(QaHeader, {
|
|
64651
64815
|
logoUrl: config.branding.logoUrl,
|
|
64652
64816
|
title: conversationTitle,
|
|
64817
|
+
onBackToChat: rail.railOpen || agentsOpen ? () => {
|
|
64818
|
+
rail.close();
|
|
64819
|
+
setAgentsOpen(false);
|
|
64820
|
+
} : void 0,
|
|
64653
64821
|
viewingSubagent: state.viewingSubagent !== null,
|
|
64654
64822
|
onCloseSubagent: handleCloseSubagent,
|
|
64655
64823
|
roleSelector: access === void 0 || selectedSubrole === null || previewing ? void 0 : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(QaRoleSelector, {
|
|
@@ -65296,17 +65464,17 @@ body[data-dsh-qa-surface="active"] div:has(>[data-shell-overlay])>:not([data-she
|
|
|
65296
65464
|
.dsh-qa-auth__logo{width:32px;height:32px;fill:none;stroke:var(--dsh-qa-brand);stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}
|
|
65297
65465
|
.dsh-qa-auth__brand h1{margin:0;color:var(--dsw-alias-label-primary);font-size:19px;font-weight:600;line-height:26px}
|
|
65298
65466
|
.dsh-qa-auth__tabs{display:flex;gap:4px;padding:3px;border-radius:9px;background:var(--dsw-alias-bg-module-platform)}
|
|
65299
|
-
.dsh-qa-auth__tab{appearance:none;flex:1;padding:6px 0;border:0;border-radius:7px;background:0 0;color:var(--dsw-alias-label-secondary);font:inherit;font-size:
|
|
65467
|
+
.dsh-qa-auth__tab{appearance:none;flex:1;padding:6px 0;border:0;border-radius:7px;background:0 0;color:var(--dsw-alias-label-secondary);font:inherit;font-size:16px;font-weight:500;line-height:22px;cursor:pointer;transition:background .12s,color .12s}
|
|
65300
65468
|
.dsh-qa-auth__tab:hover{color:var(--dsw-alias-label-primary)}
|
|
65301
65469
|
.dsh-qa-auth__tab--active{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary)}
|
|
65302
65470
|
.dsh-qa-auth__tab:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:-2px}
|
|
65303
65471
|
.dsh-qa-auth__field{display:flex;flex-direction:column;gap:5px}
|
|
65304
|
-
.dsh-qa-auth__field span{color:var(--dsw-alias-label-secondary);font-size:
|
|
65305
|
-
.dsh-qa-auth__field input{appearance:none;width:100%;padding:9px 11px;border:1px solid var(--dsw-alias-border-l2);border-radius:9px;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);font:inherit;font-size:
|
|
65472
|
+
.dsh-qa-auth__field span{color:var(--dsw-alias-label-secondary);font-size:16px;line-height:22px}
|
|
65473
|
+
.dsh-qa-auth__field input{appearance:none;width:100%;padding:9px 11px;border:1px solid var(--dsw-alias-border-l2);border-radius:9px;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);font:inherit;font-size:16px;line-height:22px}
|
|
65306
65474
|
.dsh-qa-auth__field input:focus{outline:none;border-color:var(--dsh-qa-brand)}
|
|
65307
65475
|
.dsh-qa-auth__field input:disabled{opacity:.55}
|
|
65308
|
-
.dsh-qa-auth__error{margin:0;color:var(--dsh-qa-error);font-size:
|
|
65309
|
-
.dsh-qa-auth__submit{appearance:none;margin-top:2px;padding:10px 0;border:0;border-radius:9px;background:var(--dsh-qa-brand);color:var(--dsh-qa-accent-contrast);font:inherit;font-size:
|
|
65476
|
+
.dsh-qa-auth__error{margin:0;color:var(--dsh-qa-error);font-size:16px;line-height:22px}
|
|
65477
|
+
.dsh-qa-auth__submit{appearance:none;margin-top:2px;padding:10px 0;border:0;border-radius:9px;background:var(--dsh-qa-brand);color:var(--dsh-qa-accent-contrast);font:inherit;font-size:16px;font-weight:600;line-height:22px;cursor:pointer;transition:background .12s}
|
|
65310
65478
|
.dsh-qa-auth__submit:hover{background:var(--dsh-qa-accent-hover)}
|
|
65311
65479
|
.dsh-qa-auth__submit:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
|
|
65312
65480
|
.dsh-qa-auth__submit:disabled{opacity:.6;cursor:default}
|
|
@@ -65468,8 +65636,8 @@ body[data-dsh-qa-surface="active"] div:has(>[data-shell-overlay])>:not([data-she
|
|
|
65468
65636
|
.dsh-qa-header h1{max-width:min(42vw,420px);min-width:0;overflow:hidden;margin:0;color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:20px;text-overflow:ellipsis;white-space:nowrap}
|
|
65469
65637
|
.dsh-qa-header__reset{padding:5px 10px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;cursor:pointer}
|
|
65470
65638
|
.dsh-qa-header__agents{display:inline-flex;align-items:center;gap:6px;flex:none;padding:5px 10px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;line-height:20px;cursor:pointer}
|
|
65471
|
-
.dsh-qa-header__agents:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
65472
|
-
.dsh-qa-header__agents:disabled{opacity:.45;cursor:default}
|
|
65639
|
+
.dsh-qa-header__agents:hover:not(:disabled):not([aria-disabled="true"]){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
65640
|
+
.dsh-qa-header__agents:disabled,.dsh-qa-header__agents[aria-disabled="true"]{opacity:.45;cursor:default}
|
|
65473
65641
|
.dsh-qa-header__agents[aria-expanded="true"]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
65474
65642
|
.dsh-qa-header__agents svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
|
|
65475
65643
|
.dsh-qa-header__agents:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
|
|
@@ -65504,13 +65672,12 @@ body[data-dsh-qa-surface="active"] div:has(>[data-shell-overlay])>:not([data-she
|
|
|
65504
65672
|
.dsh-qa-agents__open{flex:none;color:var(--dsh-qa-accent);font-size:12px;font-weight:500;line-height:18px}
|
|
65505
65673
|
.dsh-qa-header__sources{display:inline-flex;align-items:center;gap:6px;flex:none;padding:5px 10px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;line-height:20px;cursor:pointer}
|
|
65506
65674
|
.dsh-qa-header__sources:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
65507
|
-
.dsh-qa-header__sources:disabled{opacity:.45;cursor:default}
|
|
65508
65675
|
.dsh-qa-header__sources[aria-expanded="true"]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
65509
65676
|
.dsh-qa-header__sources svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
|
|
65510
65677
|
.dsh-qa-header__sources:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
|
|
65511
65678
|
.dsh-qa-header__files{display:inline-flex;align-items:center;gap:6px;flex:none;padding:5px 10px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;line-height:20px;cursor:pointer}
|
|
65512
|
-
.dsh-qa-header__files:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
65513
|
-
.dsh-qa-header__files:disabled{opacity:.45;cursor:default}
|
|
65679
|
+
.dsh-qa-header__files:hover:not(:disabled):not([aria-disabled="true"]){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
65680
|
+
.dsh-qa-header__files:disabled,.dsh-qa-header__files[aria-disabled="true"]{opacity:.45;cursor:default}
|
|
65514
65681
|
.dsh-qa-header__files[aria-expanded="true"]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
65515
65682
|
.dsh-qa-header__files svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
|
|
65516
65683
|
.dsh-qa-header__files:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
|
|
@@ -65581,8 +65748,11 @@ body[data-dsh-qa-surface="active"] div:has(>[data-shell-overlay])>:not([data-she
|
|
|
65581
65748
|
.dsh-qa-header__reset:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}
|
|
65582
65749
|
.dsh-qa-header__reset:disabled{opacity:.45;cursor:default}
|
|
65583
65750
|
.dsh-qa-header__tabs{position:relative;z-index:1;display:flex;gap:32px;margin-top:4px}
|
|
65584
|
-
.dsh-qa-header__tabs span{position:relative;padding:0 0 11px;color:var(--dsh-qa-accent);font-size:13px;font-weight:500;line-height:16px}
|
|
65585
|
-
.dsh-qa-
|
|
65751
|
+
.dsh-qa-header__tabs span,.dsh-qa-header__tab{position:relative;padding:0 0 11px;color:var(--dsh-qa-accent);font-size:13px;font-weight:500;line-height:16px}
|
|
65752
|
+
.dsh-qa-header__tab{appearance:none;background:0 0;border:0;cursor:pointer;font-family:inherit}
|
|
65753
|
+
.dsh-qa-header__tab:hover{text-decoration:underline}
|
|
65754
|
+
.dsh-qa-header__tab:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsh-qa-accent));outline-offset:2px}
|
|
65755
|
+
.dsh-qa-header__tabs span::after,.dsh-qa-header__tab::after{content:"";position:absolute;right:0;bottom:1px;left:0;height:2px;border-radius:2px;background:var(--dsh-qa-accent)}
|
|
65586
65756
|
.dsh-qa-extension-panel__resizer{position:relative;z-index:2;flex:0 0 5px;width:5px;touch-action:none;cursor:col-resize;background:var(--dsw-alias-border-l2)}
|
|
65587
65757
|
.dsh-qa-extension-panel__resizer:hover,.dsh-qa-extension-panel__resizer:focus-visible{background:var(--dsh-qa-accent);outline:0}
|
|
65588
65758
|
.dsh-qa-extension-panel{display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary)}
|
|
@@ -65687,6 +65857,7 @@ body[data-dsh-qa-surface="active"] div:has(>[data-shell-overlay])>:not([data-she
|
|
|
65687
65857
|
span.dsh-qa-files__thumb{display:inline-block}
|
|
65688
65858
|
img.dsh-qa-files__thumb{object-fit:cover;background:var(--dsw-alias-bg-layer-3)}
|
|
65689
65859
|
.dsh-qa-sources__list{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 10px 12px}
|
|
65860
|
+
.dsh-qa-sources__empty{margin:4px 2px 12px;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:17px}
|
|
65690
65861
|
.dsh-qa-sources__group{margin:0 0 14px}
|
|
65691
65862
|
.dsh-qa-sources__group h3{display:flex;align-items:center;gap:7px;margin:4px 4px 8px;color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600;line-height:18px}
|
|
65692
65863
|
.dsh-qa-sources__group h3 span{display:inline-grid;place-items:center;min-width:19px;height:18px;padding:0 5px;border-radius:999px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-tertiary);font-size:10px}
|
|
@@ -65745,7 +65916,20 @@ a.dsh-qa-sources__title:hover{text-decoration:underline}
|
|
|
65745
65916
|
.dsh-qa-message--assistant{align-items:flex-start;margin-right:auto}
|
|
65746
65917
|
.dsh-qa-message--work{align-items:flex-start;margin:-4px 0 14px}
|
|
65747
65918
|
.dsh-qa-message--system{align-items:center;margin:4px auto 20px}
|
|
65748
|
-
|
|
65919
|
+
/*
|
|
65920
|
+
The type scale of this surface: what the reader is asked to read is 16px, and
|
|
65921
|
+
nothing that carries a decision sits below it — the assistant's answer, the
|
|
65922
|
+
operator's own draft and the composer's status line all match the 16px the
|
|
65923
|
+
user bubble is drawn at, so a reply never reads smaller than the question.
|
|
65924
|
+
|
|
65925
|
+
Deliberate exceptions, all of them chrome rather than content: the header row
|
|
65926
|
+
and the tab marker (13px), the panel tab chips and their counts (13px/10px),
|
|
65927
|
+
message meta and timestamps (11-12px), the quick-question chips (13px),
|
|
65928
|
+
system notices and turn lines (13px), code and workspace file names
|
|
65929
|
+
(monospace, 11-13px), the admin console's tables and badges (10-12px), the
|
|
65930
|
+
composer's key hint (11px) and the welcome lede (14px).
|
|
65931
|
+
*/
|
|
65932
|
+
.dsh-qa-message__content{max-width:100%;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--dsw-alias-label-primary);font-size:16px;line-height:1.62}
|
|
65749
65933
|
.dsh-qa-message--user .dsh-qa-message__content{max-width:min(525px,82%);padding:10px 16px;border-radius:22px;background:var(--dsw-specific-bubble);font-size:16px;line-height:24px}
|
|
65750
65934
|
.dsh-qa-message[data-status="pending"] .dsh-qa-message__content{opacity:.78}
|
|
65751
65935
|
.dsh-qa-message__pending{display:flex;align-items:center;gap:6px;margin-top:6px;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}
|
|
@@ -65818,7 +66002,7 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
|
|
|
65818
66002
|
properties, so a font-size preference or a light/dark switch moves both
|
|
65819
66003
|
surfaces together. A container that needs a denser scale (the source
|
|
65820
66004
|
preview, the work-item text) overrides the ladder for its own subtree. */
|
|
65821
|
-
.dsh-qa-md{min-width:0;white-space:normal;overflow-wrap:anywhere;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-markdown-base-font-family,inherit);font-size:var(--dsw-font-markdown-base-font-size,
|
|
66005
|
+
.dsh-qa-md{min-width:0;white-space:normal;overflow-wrap:anywhere;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-markdown-base-font-family,inherit);font-size:var(--dsw-font-markdown-base-font-size,16px);font-weight:400;line-height:var(--dsw-font-markdown-base-line-height,24px)}
|
|
65822
66006
|
.dsh-qa-md>:first-child{margin-top:0}
|
|
65823
66007
|
.dsh-qa-md>:last-child{margin-bottom:0}
|
|
65824
66008
|
.dsh-qa-md p{margin:16px 0}
|
|
@@ -66107,7 +66291,7 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
|
|
|
66107
66291
|
row — title, role, palette, action cluster — is wider than the viewport with
|
|
66108
66292
|
every child refusing to shrink, so it wraps instead of pushing «Настройки»
|
|
66109
66293
|
past the clipped edge. */
|
|
66110
|
-
@media (max-width:600px){.dsh-qa-sidebar{display:none}.dsh-qa-sidebar[data-qa-drawer="open"]{display:flex;position:fixed;inset:0 auto 0 0;z-index:24;width:min(320px,86vw);max-width:100%;border-right:1px solid var(--dsw-alias-border-l2);box-shadow:0 18px 44px rgba(0,0,0,.28);padding-bottom:env(safe-area-inset-bottom)}.dsh-qa-sidebar__scrim{display:block;position:fixed;inset:0;z-index:22;background:var(--dsh-qa-overlay)}.dsh-qa-sidebar__resize{display:none}.dsh-qa-sidebar__collapse,.dsh-qa-sidebar__expand{width:44px;height:44px}.dsh-qa-sidebar__new,.dsh-qa-sidebar__item-main{min-height:44px}.dsh-qa-header__history{display:inline-flex}.dsh-qa-panel,.dsh-qa-agents{position:absolute;inset:0;z-index:6;width:100%;border-left:0}.dsh-qa-header__inner{padding-left:16px;padding-right:16px}.dsh-qa-header h1{max-width:48vw}.dsh-qa-header__title-row{flex-wrap:wrap;row-gap:6px}.dsh-qa-width-handle{display:none}.dsh-qa-transcript__inner{--dsh-qa-bleed:0px;max-width:100%;padding:16px 16px 28px}.dsh-qa-footer__inner{max-width:100%}.dsh-qa-message{margin-bottom:16px}.dsh-qa-
|
|
66294
|
+
@media (max-width:600px){.dsh-qa-sidebar{display:none}.dsh-qa-sidebar[data-qa-drawer="open"]{display:flex;position:fixed;inset:0 auto 0 0;z-index:24;width:min(320px,86vw);max-width:100%;border-right:1px solid var(--dsw-alias-border-l2);box-shadow:0 18px 44px rgba(0,0,0,.28);padding-bottom:env(safe-area-inset-bottom)}.dsh-qa-sidebar__scrim{display:block;position:fixed;inset:0;z-index:22;background:var(--dsh-qa-overlay)}.dsh-qa-sidebar__resize{display:none}.dsh-qa-sidebar__collapse,.dsh-qa-sidebar__expand{width:44px;height:44px}.dsh-qa-sidebar__new,.dsh-qa-sidebar__item-main{min-height:44px}.dsh-qa-header__history{display:inline-flex}.dsh-qa-panel,.dsh-qa-agents{position:absolute;inset:0;z-index:6;width:100%;border-left:0}.dsh-qa-panel__close{width:44px;height:44px}.dsh-qa-panel__tab{min-height:44px}.dsh-qa-header__inner{padding-left:16px;padding-right:16px}.dsh-qa-header h1{max-width:48vw}.dsh-qa-header__title-row{flex-wrap:wrap;row-gap:6px}.dsh-qa-width-handle{display:none}.dsh-qa-transcript__inner{--dsh-qa-bleed:0px;max-width:100%;padding:16px 16px 28px}.dsh-qa-footer__inner{max-width:100%}.dsh-qa-message{margin-bottom:16px}.dsh-qa-message__actions{height:44px}.dsh-qa-message__actions button{width:44px;height:44px}.dsh-qa-message--user .dsh-qa-message__content{max-width:88%}.dsh-qa-footer{padding-left:10px;padding-right:10px;padding-bottom:max(8px,env(safe-area-inset-bottom))}.dsh-qa-composer{min-height:84px;padding-top:12px}.dsh-qa-quick-questions{flex-wrap:wrap;overflow-x:visible}.dsh-qa-composer__hint{font-size:0}.dsh-qa-composer__hint::after{content:"Enter: отправить";font-size:11px}}
|
|
66111
66295
|
@media (max-height:480px) and (orientation:landscape){.dsh-qa-header__inner{padding-top:6px}.dsh-qa-header__tabs{display:none}.dsh-qa-transcript__inner{padding-top:12px}.dsh-qa-footer{padding-top:12px}.dsh-qa-composer{min-height:72px;gap:4px;padding-top:8px}}
|
|
66112
66296
|
@media (prefers-reduced-motion:reduce){.dsh-qa-message__cursor,.dsh-qa-message__pending-spinner,.dsh-qa-work__spinner,.dsh-qa-work-item__spinner,.dsh-qa-command__spinner{animation:none}.dsh-qa-work__chevron{transition:none}.dsh-qa-rail__frame,.dsh-qa-rail__pos,.dsh-qa-rail__mark::before,.dsh-qa-rail__mark--busy::before,.dsh-qa-rail__preview{transition:none;animation:none}}
|
|
66113
66297
|
${QA_ADMIN_CONSOLE_STYLES}
|
|
@@ -68884,13 +69068,19 @@ ${QA_ROOT_STYLES}`;
|
|
|
68884
69068
|
* pair rather than a hard-coded outline: the Host's `focus.css` suppresses an
|
|
68885
69069
|
* outline under pointer modality at a specificity our rule cannot win, so a
|
|
68886
69070
|
* hard-coded ring is one that goes missing rather than one that degrades.
|
|
69071
|
+
*
|
|
69072
|
+
* The type scale is the surface's: text the operator reads in order to decide —
|
|
69073
|
+
* section titles, field labels, the values in the controls, the toggle copy —
|
|
69074
|
+
* is 16px, a control's own label and an outcome line are 14px, and only chrome
|
|
69075
|
+
* stays small on purpose: the «Изменено» badge (9px), the status chips (11px),
|
|
69076
|
+
* the monospace data rows (11px) and the footer note (10px).
|
|
68887
69077
|
*/
|
|
68888
69078
|
const QA_SETTINGS_STYLES = `.qa-card-body,.qa-card-body *{box-sizing:border-box}
|
|
68889
69079
|
.qa-card-body{display:grid;gap:18px;color:var(--dsw-alias-label-primary)}
|
|
68890
69080
|
.qa-card-section{display:grid;gap:12px}
|
|
68891
69081
|
.qa-card-section__title{display:flex;justify-content:space-between;align-items:center;gap:12px}
|
|
68892
|
-
.qa-card-section__title h3{font-size:
|
|
68893
|
-
.qa-card-muted{color:var(--dsw-alias-label-tertiary);font-size:
|
|
69082
|
+
.qa-card-section__title h3{font-size:16px;margin:0;display:flex;align-items:center;gap:7px}
|
|
69083
|
+
.qa-card-muted{color:var(--dsw-alias-label-tertiary);font-size:16px;margin:0;line-height:1.5}
|
|
68894
69084
|
.qa-card-modified{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-module-platform);border-radius:999px;padding:1px 7px}
|
|
68895
69085
|
.qa-card-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:0}
|
|
68896
69086
|
/* One field per row, like the first-party plugin cards: two columns drifted
|
|
@@ -68899,22 +69089,22 @@ ${QA_ROOT_STYLES}`;
|
|
|
68899
69089
|
.qa-card-grid>*,.qa-card-section>.qa-card-field{padding:12px 0}
|
|
68900
69090
|
.qa-card-grid>*+*,.qa-card-section>.qa-card-field:not(:first-child){border-top:.5px solid var(--dsw-alias-border-l2)}
|
|
68901
69091
|
.qa-card-field{display:grid;gap:6px}
|
|
68902
|
-
.qa-card-field>span{font-size:
|
|
68903
|
-
.qa-card-control{width:100%;height:34px;border:.5px solid var(--dsw-alias-border-l4);border-radius:8px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);padding:0 12px;font:inherit;font-size:
|
|
69092
|
+
.qa-card-field>span{font-size:16px;color:var(--dsw-alias-label-primary);font-weight:500}
|
|
69093
|
+
.qa-card-control{width:100%;height:34px;border:.5px solid var(--dsw-alias-border-l4);border-radius:8px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);padding:0 12px;font:inherit;font-size:16px;line-height:1.5;outline:none}
|
|
68904
69094
|
textarea.qa-card-control{height:auto;padding:8px 12px;line-height:1.5;resize:vertical}
|
|
68905
69095
|
.qa-card-control:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));outline-offset:-1px}
|
|
68906
69096
|
.qa-card-control:disabled{cursor:default;opacity:.45}
|
|
68907
69097
|
.qa-card-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:12px}
|
|
68908
69098
|
.qa-card-toggle-copy{display:grid;gap:2px;min-width:0}
|
|
68909
|
-
.qa-card-toggle-copy strong{font-size:
|
|
68910
|
-
.qa-card-toggle-copy span{font-size:
|
|
69099
|
+
.qa-card-toggle-copy strong{font-size:16px;font-weight:500;color:var(--dsw-alias-label-primary)}
|
|
69100
|
+
.qa-card-toggle-copy span{font-size:16px;line-height:1.5;color:var(--dsw-alias-label-tertiary)}
|
|
68911
69101
|
.qa-card-toggle{appearance:none;width:34px;height:19px;border-radius:999px;background:var(--dsw-alias-label-dimmed);position:relative;cursor:pointer;transition:.18s;flex:none}
|
|
68912
69102
|
.qa-card-toggle:after{content:'';position:absolute;top:3px;left:3px;width:13px;height:13px;border-radius:50%;background:var(--dsw-alias-bg-layer-3);transition:.18s}
|
|
68913
69103
|
.qa-card-toggle:checked{background:var(--dsw-alias-brand-primary)}
|
|
68914
69104
|
.qa-card-toggle:checked:after{transform:translateX(15px)}
|
|
68915
69105
|
.qa-card-toggle:disabled{cursor:default;opacity:.45}
|
|
68916
69106
|
.qa-card-toggle:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));outline-offset:2px}
|
|
68917
|
-
.qa-card-btn{height:34px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-primary);padding:0 12px;font:inherit;font-size:
|
|
69107
|
+
.qa-card-btn{height:34px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-primary);padding:0 12px;font:inherit;font-size:14px;font-weight:600;cursor:pointer;white-space:nowrap}
|
|
68918
69108
|
.qa-card-btn:hover:not(:disabled){border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-interactive-bg-hover)}
|
|
68919
69109
|
.qa-card-btn:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));outline-offset:-1px}
|
|
68920
69110
|
.qa-card-btn:disabled{cursor:default;opacity:.45}
|
|
@@ -68923,11 +69113,11 @@ textarea.qa-card-control{height:auto;padding:8px 12px;line-height:1.5;resize:ver
|
|
|
68923
69113
|
.qa-card-chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;padding:3px 10px;font-size:11px;color:var(--dsw-alias-label-secondary)}
|
|
68924
69114
|
.qa-card-chip b{font-weight:600;color:var(--dsw-alias-label-primary)}
|
|
68925
69115
|
.qa-card-chip.off{color:var(--dsw-alias-label-tertiary)}
|
|
68926
|
-
.qa-card-notice{padding:9px 11px;border-radius:8px;background:var(--dsw-alias-bg-module-platform);border:1px solid var(--dsw-alias-border-l2);font-size:
|
|
69116
|
+
.qa-card-notice{padding:9px 11px;border-radius:8px;background:var(--dsw-alias-bg-module-platform);border:1px solid var(--dsw-alias-border-l2);font-size:14px;line-height:1.5;color:var(--dsw-alias-label-secondary)}
|
|
68927
69117
|
.qa-card-notice.warn{border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}
|
|
68928
|
-
.qa-card-error{padding:9px 11px;border-radius:8px;background:color-mix(in srgb, var(--dsw-alias-state-error-primary, #b3261e) 8%, transparent);color:var(--dsw-alias-state-error-primary, #b3261e);font-size:
|
|
69118
|
+
.qa-card-error{padding:9px 11px;border-radius:8px;background:color-mix(in srgb, var(--dsw-alias-state-error-primary, #b3261e) 8%, transparent);color:var(--dsw-alias-state-error-primary, #b3261e);font-size:14px;line-height:1.5}
|
|
68929
69119
|
.qa-card-advanced{border:1px solid var(--dsw-alias-border-l2);border-radius:10px;padding:0 12px}
|
|
68930
|
-
.qa-card-advanced summary{cursor:pointer;padding:11px 0;font-size:
|
|
69120
|
+
.qa-card-advanced summary{cursor:pointer;padding:11px 0;font-size:16px;font-weight:600}
|
|
68931
69121
|
.qa-card-advanced summary:focus-visible{outline:var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));outline-offset:-1px}
|
|
68932
69122
|
.qa-card-advanced-content{padding:2px 0 13px;display:grid;gap:10px}
|
|
68933
69123
|
.qa-card-rows{display:grid;gap:6px}
|