@yadsh/dsh-qa-surface 0.11.1 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/access/service.js +2 -1
- package/lib/access/service.js.map +1 -1
- package/lib/client/QaSessionController.js +24 -2
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +9 -2
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/components/QaChangelog.js +46 -11
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaSidebar.js +13 -15
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/settings/card.js +2 -2
- package/lib/client/settings/card.js.map +1 -1
- package/lib/client/settings/sections/docs.js +41 -0
- package/lib/client/settings/sections/docs.js.map +1 -0
- package/lib/client/settings/sections.js +1 -0
- package/lib/client/settings/sections.js.map +1 -1
- package/lib/client/slash/SlashPalette.js +4 -13
- package/lib/client/slash/SlashPalette.js.map +1 -1
- package/lib/client/slash/palette-rows.js +45 -0
- package/lib/client/slash/palette-rows.js.map +1 -0
- package/lib/client/slash/useSlashNavigation.js +8 -2
- package/lib/client/slash/useSlashNavigation.js.map +1 -1
- package/lib/client/styles.js +1 -2
- package/lib/client/styles.js.map +1 -1
- package/lib/client/turn-sources.js +20 -0
- package/lib/client/turn-sources.js.map +1 -1
- package/lib/client.js +398 -206
- package/lib/client.js.map +1 -1
- package/lib/config-resolvers/defaults.js +7 -0
- package/lib/config-resolvers/defaults.js.map +1 -1
- package/lib/config-resolvers/integration.js +7 -1
- package/lib/config-resolvers/integration.js.map +1 -1
- package/lib/config-resolvers/shared.js +12 -0
- package/lib/config-resolvers/shared.js.map +1 -1
- package/lib/config-resolvers/tools.js +26 -0
- package/lib/config-resolvers/tools.js.map +1 -1
- package/lib/config.js +21 -0
- package/lib/config.js.map +1 -1
- package/lib/index.js +10 -2
- package/lib/index.js.map +1 -1
- package/lib/launch-token.js +22 -17
- package/lib/launch-token.js.map +1 -1
- package/lib/qa-tools/catalog.js +13 -2
- package/lib/qa-tools/catalog.js.map +1 -1
- package/lib/qa-tools/docs-tools.js +334 -32
- package/lib/qa-tools/docs-tools.js.map +1 -1
- package/lib/qa-tools/index.js +2 -0
- package/lib/qa-tools/index.js.map +1 -1
- package/lib/secure-session.js +8 -0
- package/lib/secure-session.js.map +1 -1
- package/lib/shared/docs-version.js +19 -0
- package/lib/shared/docs-version.js.map +1 -0
- package/lib/typert.host.js +71 -68
- package/lib/typert.remote-client.js +70 -67
- package/lib/types/client/QaSessionController.d.ts +14 -0
- package/lib/types/client/components/QaWidthHandle.d.ts +0 -1
- package/lib/types/client/settings/sections/docs.d.ts +15 -0
- package/lib/types/client/settings/sections.d.ts +1 -0
- package/lib/types/client/slash/palette-rows.d.ts +43 -0
- package/lib/types/client/turn-sources.d.ts +14 -0
- package/lib/types/config-resolvers/integration.d.ts +7 -1
- package/lib/types/config-resolvers/shared.d.ts +8 -0
- package/lib/types/config-resolvers/tools.d.ts +9 -0
- package/lib/types/launch-token.d.ts +10 -3
- package/lib/types/qa-tools/catalog.d.ts +11 -1
- package/lib/types/qa-tools/docs-tools.d.ts +38 -5
- package/lib/types/qa-tools/index.d.ts +7 -0
- package/lib/types/shared/docs-version.d.ts +15 -0
- package/lib/types/types.d.ts +34 -0
- package/package.json +5 -5
package/lib/client.js
CHANGED
|
@@ -7294,7 +7294,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7294
7294
|
"dynamicActivation": boolean().readonly(),
|
|
7295
7295
|
"activationSkill": string().readonly(),
|
|
7296
7296
|
"activationMode": literal("all").readonly(),
|
|
7297
|
-
"activationPresets": array(string()).readonly()
|
|
7297
|
+
"activationPresets": array(string()).readonly(),
|
|
7298
|
+
"docsRoot": string().readonly(),
|
|
7299
|
+
"docsDefaultVersion": string().readonly(),
|
|
7300
|
+
"docsDefaultVersionEnabled": boolean().readonly()
|
|
7298
7301
|
}).readonly(),
|
|
7299
7302
|
"sources": object({
|
|
7300
7303
|
"enabled": boolean().readonly(),
|
|
@@ -7970,7 +7973,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7970
7973
|
},
|
|
7971
7974
|
sourceLocation: {
|
|
7972
7975
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
7973
|
-
"line":
|
|
7976
|
+
"line": 915,
|
|
7974
7977
|
"column": 9
|
|
7975
7978
|
}
|
|
7976
7979
|
},
|
|
@@ -8006,7 +8009,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8006
8009
|
},
|
|
8007
8010
|
sourceLocation: {
|
|
8008
8011
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8009
|
-
"line":
|
|
8012
|
+
"line": 926,
|
|
8010
8013
|
"column": 3
|
|
8011
8014
|
}
|
|
8012
8015
|
},
|
|
@@ -8033,7 +8036,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8033
8036
|
},
|
|
8034
8037
|
sourceLocation: {
|
|
8035
8038
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8036
|
-
"line":
|
|
8039
|
+
"line": 900,
|
|
8037
8040
|
"column": 3
|
|
8038
8041
|
}
|
|
8039
8042
|
},
|
|
@@ -8082,7 +8085,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8082
8085
|
},
|
|
8083
8086
|
sourceLocation: {
|
|
8084
8087
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8085
|
-
"line":
|
|
8088
|
+
"line": 940,
|
|
8086
8089
|
"column": 3
|
|
8087
8090
|
}
|
|
8088
8091
|
},
|
|
@@ -8118,7 +8121,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8118
8121
|
},
|
|
8119
8122
|
sourceLocation: {
|
|
8120
8123
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8121
|
-
"line":
|
|
8124
|
+
"line": 906,
|
|
8122
8125
|
"column": 3
|
|
8123
8126
|
}
|
|
8124
8127
|
},
|
|
@@ -8154,7 +8157,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8154
8157
|
},
|
|
8155
8158
|
sourceLocation: {
|
|
8156
8159
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8157
|
-
"line":
|
|
8160
|
+
"line": 985,
|
|
8158
8161
|
"column": 3
|
|
8159
8162
|
}
|
|
8160
8163
|
},
|
|
@@ -8203,7 +8206,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8203
8206
|
},
|
|
8204
8207
|
sourceLocation: {
|
|
8205
8208
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8206
|
-
"line":
|
|
8209
|
+
"line": 962,
|
|
8207
8210
|
"column": 3
|
|
8208
8211
|
}
|
|
8209
8212
|
},
|
|
@@ -8239,7 +8242,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8239
8242
|
},
|
|
8240
8243
|
sourceLocation: {
|
|
8241
8244
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8242
|
-
"line":
|
|
8245
|
+
"line": 952,
|
|
8243
8246
|
"column": 3
|
|
8244
8247
|
}
|
|
8245
8248
|
},
|
|
@@ -8275,7 +8278,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8275
8278
|
},
|
|
8276
8279
|
sourceLocation: {
|
|
8277
8280
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8278
|
-
"line":
|
|
8281
|
+
"line": 974,
|
|
8279
8282
|
"column": 3
|
|
8280
8283
|
}
|
|
8281
8284
|
},
|
|
@@ -8324,7 +8327,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8324
8327
|
},
|
|
8325
8328
|
sourceLocation: {
|
|
8326
8329
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8327
|
-
"line":
|
|
8330
|
+
"line": 933,
|
|
8328
8331
|
"column": 3
|
|
8329
8332
|
}
|
|
8330
8333
|
},
|
|
@@ -8373,7 +8376,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8373
8376
|
},
|
|
8374
8377
|
sourceLocation: {
|
|
8375
8378
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8376
|
-
"line":
|
|
8379
|
+
"line": 656,
|
|
8377
8380
|
"column": 3
|
|
8378
8381
|
}
|
|
8379
8382
|
},
|
|
@@ -8409,7 +8412,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8409
8412
|
},
|
|
8410
8413
|
sourceLocation: {
|
|
8411
8414
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8412
|
-
"line":
|
|
8415
|
+
"line": 690,
|
|
8413
8416
|
"column": 3
|
|
8414
8417
|
}
|
|
8415
8418
|
},
|
|
@@ -8445,7 +8448,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8445
8448
|
},
|
|
8446
8449
|
sourceLocation: {
|
|
8447
8450
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8448
|
-
"line":
|
|
8451
|
+
"line": 763,
|
|
8449
8452
|
"column": 3
|
|
8450
8453
|
}
|
|
8451
8454
|
},
|
|
@@ -8472,7 +8475,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8472
8475
|
},
|
|
8473
8476
|
sourceLocation: {
|
|
8474
8477
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8475
|
-
"line":
|
|
8478
|
+
"line": 711,
|
|
8476
8479
|
"column": 3
|
|
8477
8480
|
}
|
|
8478
8481
|
},
|
|
@@ -8499,7 +8502,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8499
8502
|
},
|
|
8500
8503
|
sourceLocation: {
|
|
8501
8504
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8502
|
-
"line":
|
|
8505
|
+
"line": 750,
|
|
8503
8506
|
"column": 3
|
|
8504
8507
|
}
|
|
8505
8508
|
},
|
|
@@ -8535,7 +8538,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8535
8538
|
},
|
|
8536
8539
|
sourceLocation: {
|
|
8537
8540
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8538
|
-
"line":
|
|
8541
|
+
"line": 650,
|
|
8539
8542
|
"column": 3
|
|
8540
8543
|
}
|
|
8541
8544
|
},
|
|
@@ -8562,7 +8565,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8562
8565
|
},
|
|
8563
8566
|
sourceLocation: {
|
|
8564
8567
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8565
|
-
"line":
|
|
8568
|
+
"line": 701,
|
|
8566
8569
|
"column": 3
|
|
8567
8570
|
}
|
|
8568
8571
|
},
|
|
@@ -8598,7 +8601,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8598
8601
|
},
|
|
8599
8602
|
sourceLocation: {
|
|
8600
8603
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8601
|
-
"line":
|
|
8604
|
+
"line": 645,
|
|
8602
8605
|
"column": 3
|
|
8603
8606
|
}
|
|
8604
8607
|
},
|
|
@@ -8625,7 +8628,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8625
8628
|
},
|
|
8626
8629
|
sourceLocation: {
|
|
8627
8630
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8628
|
-
"line":
|
|
8631
|
+
"line": 674,
|
|
8629
8632
|
"column": 3
|
|
8630
8633
|
}
|
|
8631
8634
|
},
|
|
@@ -8661,7 +8664,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8661
8664
|
},
|
|
8662
8665
|
sourceLocation: {
|
|
8663
8666
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8664
|
-
"line":
|
|
8667
|
+
"line": 776,
|
|
8665
8668
|
"column": 3
|
|
8666
8669
|
}
|
|
8667
8670
|
},
|
|
@@ -8697,7 +8700,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8697
8700
|
},
|
|
8698
8701
|
sourceLocation: {
|
|
8699
8702
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8700
|
-
"line":
|
|
8703
|
+
"line": 724,
|
|
8701
8704
|
"column": 3
|
|
8702
8705
|
}
|
|
8703
8706
|
},
|
|
@@ -8733,7 +8736,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8733
8736
|
},
|
|
8734
8737
|
sourceLocation: {
|
|
8735
8738
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8736
|
-
"line":
|
|
8739
|
+
"line": 737,
|
|
8737
8740
|
"column": 3
|
|
8738
8741
|
}
|
|
8739
8742
|
},
|
|
@@ -8760,7 +8763,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8760
8763
|
},
|
|
8761
8764
|
sourceLocation: {
|
|
8762
8765
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8763
|
-
"line":
|
|
8766
|
+
"line": 680,
|
|
8764
8767
|
"column": 3
|
|
8765
8768
|
}
|
|
8766
8769
|
},
|
|
@@ -8819,7 +8822,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8819
8822
|
},
|
|
8820
8823
|
sourceLocation: {
|
|
8821
8824
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8822
|
-
"line":
|
|
8825
|
+
"line": 1251,
|
|
8823
8826
|
"column": 3
|
|
8824
8827
|
}
|
|
8825
8828
|
},
|
|
@@ -8855,7 +8858,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8855
8858
|
},
|
|
8856
8859
|
sourceLocation: {
|
|
8857
8860
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8858
|
-
"line":
|
|
8861
|
+
"line": 1153,
|
|
8859
8862
|
"column": 3
|
|
8860
8863
|
}
|
|
8861
8864
|
},
|
|
@@ -8914,7 +8917,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8914
8917
|
},
|
|
8915
8918
|
sourceLocation: {
|
|
8916
8919
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8917
|
-
"line":
|
|
8920
|
+
"line": 1135,
|
|
8918
8921
|
"column": 3
|
|
8919
8922
|
}
|
|
8920
8923
|
},
|
|
@@ -8950,7 +8953,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
8950
8953
|
},
|
|
8951
8954
|
sourceLocation: {
|
|
8952
8955
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
8953
|
-
"line":
|
|
8956
|
+
"line": 1168,
|
|
8954
8957
|
"column": 3
|
|
8955
8958
|
}
|
|
8956
8959
|
},
|
|
@@ -9009,7 +9012,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9009
9012
|
},
|
|
9010
9013
|
sourceLocation: {
|
|
9011
9014
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9012
|
-
"line":
|
|
9015
|
+
"line": 1178,
|
|
9013
9016
|
"column": 3
|
|
9014
9017
|
}
|
|
9015
9018
|
},
|
|
@@ -9036,7 +9039,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9036
9039
|
},
|
|
9037
9040
|
sourceLocation: {
|
|
9038
9041
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9039
|
-
"line":
|
|
9042
|
+
"line": 1246,
|
|
9040
9043
|
"column": 3
|
|
9041
9044
|
}
|
|
9042
9045
|
},
|
|
@@ -9063,7 +9066,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9063
9066
|
},
|
|
9064
9067
|
sourceLocation: {
|
|
9065
9068
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9066
|
-
"line":
|
|
9069
|
+
"line": 1081,
|
|
9067
9070
|
"column": 3
|
|
9068
9071
|
}
|
|
9069
9072
|
},
|
|
@@ -9090,7 +9093,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9090
9093
|
},
|
|
9091
9094
|
sourceLocation: {
|
|
9092
9095
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9093
|
-
"line":
|
|
9096
|
+
"line": 1115,
|
|
9094
9097
|
"column": 3
|
|
9095
9098
|
}
|
|
9096
9099
|
},
|
|
@@ -9139,7 +9142,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9139
9142
|
},
|
|
9140
9143
|
sourceLocation: {
|
|
9141
9144
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9142
|
-
"line":
|
|
9145
|
+
"line": 1223,
|
|
9143
9146
|
"column": 3
|
|
9144
9147
|
}
|
|
9145
9148
|
},
|
|
@@ -9198,7 +9201,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9198
9201
|
},
|
|
9199
9202
|
sourceLocation: {
|
|
9200
9203
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9201
|
-
"line":
|
|
9204
|
+
"line": 1199,
|
|
9202
9205
|
"column": 3
|
|
9203
9206
|
}
|
|
9204
9207
|
},
|
|
@@ -9247,7 +9250,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9247
9250
|
},
|
|
9248
9251
|
sourceLocation: {
|
|
9249
9252
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9250
|
-
"line":
|
|
9253
|
+
"line": 1124,
|
|
9251
9254
|
"column": 3
|
|
9252
9255
|
}
|
|
9253
9256
|
},
|
|
@@ -9296,7 +9299,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9296
9299
|
},
|
|
9297
9300
|
sourceLocation: {
|
|
9298
9301
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9299
|
-
"line":
|
|
9302
|
+
"line": 1211,
|
|
9300
9303
|
"column": 3
|
|
9301
9304
|
}
|
|
9302
9305
|
},
|
|
@@ -9332,7 +9335,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9332
9335
|
},
|
|
9333
9336
|
sourceLocation: {
|
|
9334
9337
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9335
|
-
"line":
|
|
9338
|
+
"line": 1238,
|
|
9336
9339
|
"column": 3
|
|
9337
9340
|
}
|
|
9338
9341
|
},
|
|
@@ -9381,7 +9384,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9381
9384
|
},
|
|
9382
9385
|
sourceLocation: {
|
|
9383
9386
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9384
|
-
"line":
|
|
9387
|
+
"line": 1015,
|
|
9385
9388
|
"column": 3
|
|
9386
9389
|
}
|
|
9387
9390
|
},
|
|
@@ -9440,7 +9443,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9440
9443
|
},
|
|
9441
9444
|
sourceLocation: {
|
|
9442
9445
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9443
|
-
"line":
|
|
9446
|
+
"line": 1043,
|
|
9444
9447
|
"column": 3
|
|
9445
9448
|
}
|
|
9446
9449
|
},
|
|
@@ -9476,7 +9479,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9476
9479
|
},
|
|
9477
9480
|
sourceLocation: {
|
|
9478
9481
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9479
|
-
"line":
|
|
9482
|
+
"line": 1006,
|
|
9480
9483
|
"column": 3
|
|
9481
9484
|
}
|
|
9482
9485
|
},
|
|
@@ -9535,7 +9538,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9535
9538
|
},
|
|
9536
9539
|
sourceLocation: {
|
|
9537
9540
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9538
|
-
"line":
|
|
9541
|
+
"line": 1030,
|
|
9539
9542
|
"column": 3
|
|
9540
9543
|
}
|
|
9541
9544
|
},
|
|
@@ -9571,7 +9574,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9571
9574
|
},
|
|
9572
9575
|
sourceLocation: {
|
|
9573
9576
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9574
|
-
"line":
|
|
9577
|
+
"line": 1069,
|
|
9575
9578
|
"column": 9
|
|
9576
9579
|
}
|
|
9577
9580
|
},
|
|
@@ -9630,7 +9633,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9630
9633
|
},
|
|
9631
9634
|
sourceLocation: {
|
|
9632
9635
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9633
|
-
"line":
|
|
9636
|
+
"line": 1056,
|
|
9634
9637
|
"column": 3
|
|
9635
9638
|
}
|
|
9636
9639
|
},
|
|
@@ -9679,7 +9682,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9679
9682
|
},
|
|
9680
9683
|
sourceLocation: {
|
|
9681
9684
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9682
|
-
"line":
|
|
9685
|
+
"line": 1104,
|
|
9683
9686
|
"column": 3
|
|
9684
9687
|
}
|
|
9685
9688
|
},
|
|
@@ -9715,7 +9718,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9715
9718
|
},
|
|
9716
9719
|
sourceLocation: {
|
|
9717
9720
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9718
|
-
"line":
|
|
9721
|
+
"line": 1098,
|
|
9719
9722
|
"column": 3
|
|
9720
9723
|
}
|
|
9721
9724
|
},
|
|
@@ -9774,7 +9777,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9774
9777
|
},
|
|
9775
9778
|
sourceLocation: {
|
|
9776
9779
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9777
|
-
"line":
|
|
9780
|
+
"line": 1086,
|
|
9778
9781
|
"column": 3
|
|
9779
9782
|
}
|
|
9780
9783
|
},
|
|
@@ -9833,7 +9836,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9833
9836
|
},
|
|
9834
9837
|
sourceLocation: {
|
|
9835
9838
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9836
|
-
"line":
|
|
9839
|
+
"line": 1327,
|
|
9837
9840
|
"column": 9
|
|
9838
9841
|
}
|
|
9839
9842
|
},
|
|
@@ -9892,7 +9895,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9892
9895
|
},
|
|
9893
9896
|
sourceLocation: {
|
|
9894
9897
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9895
|
-
"line":
|
|
9898
|
+
"line": 1356,
|
|
9896
9899
|
"column": 9
|
|
9897
9900
|
}
|
|
9898
9901
|
},
|
|
@@ -9941,7 +9944,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9941
9944
|
},
|
|
9942
9945
|
sourceLocation: {
|
|
9943
9946
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9944
|
-
"line":
|
|
9947
|
+
"line": 1368,
|
|
9945
9948
|
"column": 9
|
|
9946
9949
|
}
|
|
9947
9950
|
},
|
|
@@ -9990,7 +9993,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9990
9993
|
},
|
|
9991
9994
|
sourceLocation: {
|
|
9992
9995
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
9993
|
-
"line":
|
|
9996
|
+
"line": 801,
|
|
9994
9997
|
"column": 9
|
|
9995
9998
|
}
|
|
9996
9999
|
},
|
|
@@ -10008,7 +10011,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10008
10011
|
},
|
|
10009
10012
|
sourceLocation: {
|
|
10010
10013
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10011
|
-
"line":
|
|
10014
|
+
"line": 791,
|
|
10012
10015
|
"column": 3
|
|
10013
10016
|
}
|
|
10014
10017
|
},
|
|
@@ -10057,7 +10060,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10057
10060
|
},
|
|
10058
10061
|
sourceLocation: {
|
|
10059
10062
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10060
|
-
"line":
|
|
10063
|
+
"line": 1436,
|
|
10061
10064
|
"column": 9
|
|
10062
10065
|
}
|
|
10063
10066
|
},
|
|
@@ -10093,7 +10096,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10093
10096
|
},
|
|
10094
10097
|
sourceLocation: {
|
|
10095
10098
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10096
|
-
"line":
|
|
10099
|
+
"line": 1313,
|
|
10097
10100
|
"column": 9
|
|
10098
10101
|
}
|
|
10099
10102
|
},
|
|
@@ -10129,7 +10132,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10129
10132
|
},
|
|
10130
10133
|
sourceLocation: {
|
|
10131
10134
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10132
|
-
"line":
|
|
10135
|
+
"line": 1342,
|
|
10133
10136
|
"column": 9
|
|
10134
10137
|
}
|
|
10135
10138
|
},
|
|
@@ -10178,7 +10181,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10178
10181
|
},
|
|
10179
10182
|
sourceLocation: {
|
|
10180
10183
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10181
|
-
"line":
|
|
10184
|
+
"line": 1497,
|
|
10182
10185
|
"column": 9
|
|
10183
10186
|
}
|
|
10184
10187
|
},
|
|
@@ -10227,7 +10230,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10227
10230
|
},
|
|
10228
10231
|
sourceLocation: {
|
|
10229
10232
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10230
|
-
"line":
|
|
10233
|
+
"line": 1387,
|
|
10231
10234
|
"column": 9
|
|
10232
10235
|
}
|
|
10233
10236
|
},
|
|
@@ -10276,7 +10279,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10276
10279
|
},
|
|
10277
10280
|
sourceLocation: {
|
|
10278
10281
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10279
|
-
"line":
|
|
10282
|
+
"line": 1463,
|
|
10280
10283
|
"column": 9
|
|
10281
10284
|
}
|
|
10282
10285
|
},
|
|
@@ -10312,7 +10315,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10312
10315
|
},
|
|
10313
10316
|
sourceLocation: {
|
|
10314
10317
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10315
|
-
"line":
|
|
10318
|
+
"line": 1264,
|
|
10316
10319
|
"column": 9
|
|
10317
10320
|
}
|
|
10318
10321
|
},
|
|
@@ -10348,7 +10351,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10348
10351
|
},
|
|
10349
10352
|
sourceLocation: {
|
|
10350
10353
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10351
|
-
"line":
|
|
10354
|
+
"line": 1567,
|
|
10352
10355
|
"column": 3
|
|
10353
10356
|
}
|
|
10354
10357
|
},
|
|
@@ -10384,7 +10387,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10384
10387
|
},
|
|
10385
10388
|
sourceLocation: {
|
|
10386
10389
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10387
|
-
"line":
|
|
10390
|
+
"line": 1561,
|
|
10388
10391
|
"column": 3
|
|
10389
10392
|
}
|
|
10390
10393
|
},
|
|
@@ -10411,7 +10414,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10411
10414
|
},
|
|
10412
10415
|
sourceLocation: {
|
|
10413
10416
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10414
|
-
"line":
|
|
10417
|
+
"line": 1555,
|
|
10415
10418
|
"column": 3
|
|
10416
10419
|
}
|
|
10417
10420
|
},
|
|
@@ -10460,7 +10463,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10460
10463
|
},
|
|
10461
10464
|
sourceLocation: {
|
|
10462
10465
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10463
|
-
"line":
|
|
10466
|
+
"line": 1586,
|
|
10464
10467
|
"column": 3
|
|
10465
10468
|
}
|
|
10466
10469
|
},
|
|
@@ -10487,7 +10490,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10487
10490
|
},
|
|
10488
10491
|
sourceLocation: {
|
|
10489
10492
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10490
|
-
"line":
|
|
10493
|
+
"line": 1612,
|
|
10491
10494
|
"column": 3
|
|
10492
10495
|
}
|
|
10493
10496
|
},
|
|
@@ -10536,7 +10539,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10536
10539
|
},
|
|
10537
10540
|
sourceLocation: {
|
|
10538
10541
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10539
|
-
"line":
|
|
10542
|
+
"line": 1576,
|
|
10540
10543
|
"column": 3
|
|
10541
10544
|
}
|
|
10542
10545
|
},
|
|
@@ -10585,7 +10588,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10585
10588
|
},
|
|
10586
10589
|
sourceLocation: {
|
|
10587
10590
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10588
|
-
"line":
|
|
10591
|
+
"line": 1599,
|
|
10589
10592
|
"column": 3
|
|
10590
10593
|
}
|
|
10591
10594
|
},
|
|
@@ -10621,7 +10624,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10621
10624
|
},
|
|
10622
10625
|
sourceLocation: {
|
|
10623
10626
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10624
|
-
"line":
|
|
10627
|
+
"line": 1629,
|
|
10625
10628
|
"column": 3
|
|
10626
10629
|
}
|
|
10627
10630
|
},
|
|
@@ -10680,7 +10683,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10680
10683
|
},
|
|
10681
10684
|
sourceLocation: {
|
|
10682
10685
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10683
|
-
"line":
|
|
10686
|
+
"line": 1644,
|
|
10684
10687
|
"column": 3
|
|
10685
10688
|
}
|
|
10686
10689
|
},
|
|
@@ -10716,7 +10719,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10716
10719
|
},
|
|
10717
10720
|
sourceLocation: {
|
|
10718
10721
|
"file": "packages/dsh-qa-surface/src/index.ts",
|
|
10719
|
-
"line":
|
|
10722
|
+
"line": 1300,
|
|
10720
10723
|
"column": 9
|
|
10721
10724
|
}
|
|
10722
10725
|
}
|
|
@@ -11444,7 +11447,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11444
11447
|
dynamicActivation: true,
|
|
11445
11448
|
activationSkill: "qa-surface",
|
|
11446
11449
|
activationMode: "all",
|
|
11447
|
-
activationPresets: Object.freeze([])
|
|
11450
|
+
activationPresets: Object.freeze([]),
|
|
11451
|
+
docsRoot: "",
|
|
11452
|
+
docsDefaultVersion: "",
|
|
11453
|
+
docsDefaultVersionEnabled: false
|
|
11448
11454
|
}),
|
|
11449
11455
|
sources: Object.freeze({
|
|
11450
11456
|
enabled: true,
|
|
@@ -11696,8 +11702,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
11696
11702
|
};
|
|
11697
11703
|
}
|
|
11698
11704
|
const QA_INTEGRATION_TTL_DAYS_MAX = 3650;
|
|
11705
|
+
/**
|
|
11706
|
+
* The operator may choose any wait Node can represent faithfully. The former
|
|
11707
|
+
* ten-minute product ceiling cut off legitimate long analyses, while values
|
|
11708
|
+
* above the runtime ceiling wrap to an almost immediate timer.
|
|
11709
|
+
*/
|
|
11699
11710
|
const QA_INTEGRATION_TIMEOUT_MS_MIN = 5e3;
|
|
11700
|
-
|
|
11711
|
+
/** Largest delay Node schedules without overflowing to an immediate timer. */
|
|
11712
|
+
const QA_INTEGRATION_TIMEOUT_MS_MAX = 2147483647;
|
|
11701
11713
|
const QA_INTEGRATION_BODY_BYTES_MIN = 1048576;
|
|
11702
11714
|
const QA_INTEGRATION_BODY_BYTES_MAX = 67108864;
|
|
11703
11715
|
const QA_INTEGRATION_ATTACHMENT_BYTES_MIN = 1024;
|
|
@@ -12029,6 +12041,26 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
12029
12041
|
});
|
|
12030
12042
|
}
|
|
12031
12043
|
//#endregion
|
|
12044
|
+
//#region src/shared/docs-version.ts
|
|
12045
|
+
/**
|
|
12046
|
+
* The documentation version grammar, shared by the Host and the browser half.
|
|
12047
|
+
*
|
|
12048
|
+
* This module must stay dependency-free: the settings card bundle inlines the
|
|
12049
|
+
* resolver that validates a configured default version, and a browser build
|
|
12050
|
+
* must not pull the QA tool runtime — or the Node builtins it reads files with
|
|
12051
|
+
* — into the page just to learn what a version looks like.
|
|
12052
|
+
*/
|
|
12053
|
+
/** `3.8`, `v2`, `2024.1`: the directory segment a corpus names an edition with. */
|
|
12054
|
+
const VERSION_SEGMENT = /^v?\d+(?:\.\d+)*$/iu;
|
|
12055
|
+
/**
|
|
12056
|
+
* Whether a path segment — or a configured default version — is a documentation
|
|
12057
|
+
* version. A default the corpus can never match is refused where it is written
|
|
12058
|
+
* rather than answered with an empty search.
|
|
12059
|
+
*/
|
|
12060
|
+
function isDocumentationVersion(value) {
|
|
12061
|
+
return VERSION_SEGMENT.test(value.trim());
|
|
12062
|
+
}
|
|
12063
|
+
//#endregion
|
|
12032
12064
|
//#region src/config-resolvers/tools.ts
|
|
12033
12065
|
/**
|
|
12034
12066
|
* The public skill-name grammar (`@deepseek-ai/dsh-skill`): lowercase
|
|
@@ -12044,11 +12076,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
12044
12076
|
if (activationMode !== "all") throw new Error(`tools.activationMode must be "all"; got "${String(activationMode)}"`);
|
|
12045
12077
|
const activationPresets = [...input.tools?.activationPresets ?? DEFAULT_QA_SURFACE_CONFIG.tools.activationPresets];
|
|
12046
12078
|
for (const preset of activationPresets) if (preset.length === 0) throw new Error("tools.activationPresets must not contain empty names");
|
|
12079
|
+
const defaultVersion = (input.tools?.docsDefaultVersion ?? DEFAULT_QA_SURFACE_CONFIG.tools.docsDefaultVersion).trim();
|
|
12080
|
+
if (defaultVersion !== "" && !isDocumentationVersion(defaultVersion)) throw new Error(`tools.docsDefaultVersion must be a documentation version such as "3.8", got "${defaultVersion}"`);
|
|
12047
12081
|
return Object.freeze({
|
|
12048
12082
|
activationSkill,
|
|
12049
12083
|
activationMode,
|
|
12050
12084
|
activationPresets: Object.freeze(activationPresets),
|
|
12051
|
-
dynamicActivation: input.tools?.dynamicActivation ?? DEFAULT_QA_SURFACE_CONFIG.tools.dynamicActivation
|
|
12085
|
+
dynamicActivation: input.tools?.dynamicActivation ?? DEFAULT_QA_SURFACE_CONFIG.tools.dynamicActivation,
|
|
12086
|
+
docsRoot: input.tools?.docsRoot ?? DEFAULT_QA_SURFACE_CONFIG.tools.docsRoot,
|
|
12087
|
+
docsDefaultVersion: defaultVersion,
|
|
12088
|
+
docsDefaultVersionEnabled: input.tools?.docsDefaultVersionEnabled ?? DEFAULT_QA_SURFACE_CONFIG.tools.docsDefaultVersionEnabled
|
|
12052
12089
|
});
|
|
12053
12090
|
}
|
|
12054
12091
|
//#endregion
|
|
@@ -14628,6 +14665,25 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
14628
14665
|
}
|
|
14629
14666
|
return [...collectors.entries()].sort(([left], [right]) => left - right).map(([, collector]) => collector.snapshot());
|
|
14630
14667
|
}
|
|
14668
|
+
/**
|
|
14669
|
+
* The directory a projected source path is anchored on: the chat's own cwd.
|
|
14670
|
+
*
|
|
14671
|
+
* Both channels read the same durable tool results, and the Host's evidence —
|
|
14672
|
+
* the set the source preview checks a request against — canonicalizes every
|
|
14673
|
+
* recorded path against the session's own cwd. A projection anchored on
|
|
14674
|
+
* anything else splits one file into two spellings the moment the two
|
|
14675
|
+
* directories differ (an adopted chat, a chat whose cwd was pinned under an
|
|
14676
|
+
* older configuration): the rail then shows a path the Host does not hold, and
|
|
14677
|
+
* the detailed view refuses a source the answer just cited as no longer
|
|
14678
|
+
* evidence until the rail is rebuilt from the Host's own bundles. The
|
|
14679
|
+
* configured pin stays the fallback for a chat the browser cannot place yet.
|
|
14680
|
+
*/
|
|
14681
|
+
function sourceAnchorRoot(chatCwd, configuredCwd) {
|
|
14682
|
+
const chat = chatCwd?.trim();
|
|
14683
|
+
if (chat !== void 0 && chat !== "") return chat;
|
|
14684
|
+
const configured = configuredCwd?.trim();
|
|
14685
|
+
return configured === void 0 || configured === "" ? void 0 : configured;
|
|
14686
|
+
}
|
|
14631
14687
|
//#endregion
|
|
14632
14688
|
//#region src/client/subagent-codenames.ts
|
|
14633
14689
|
/**
|
|
@@ -16275,7 +16331,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16275
16331
|
const snapshot = this.session.getSnapshot();
|
|
16276
16332
|
const sessionId = String(this.session.sessionId);
|
|
16277
16333
|
const conversationSnapshot = this.conversationBinding?.snapshot.getSnapshot();
|
|
16278
|
-
const projectedSourceBundles = projectTurnSources(conversationSnapshot, sessionId, this.
|
|
16334
|
+
const projectedSourceBundles = projectTurnSources(conversationSnapshot, sessionId, this.sourceAnchor(sessionId));
|
|
16279
16335
|
const sourceBundles = this.hostSources.merge(projectedSourceBundles);
|
|
16280
16336
|
if (!snapshot.running) this.hostSources.refresh(sessionId, () => this.publish());
|
|
16281
16337
|
this.probePending(sessionId, connected);
|
|
@@ -16318,6 +16374,23 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
16318
16374
|
this.emit();
|
|
16319
16375
|
}
|
|
16320
16376
|
/**
|
|
16377
|
+
* The directory the transcript's source paths are anchored on: the chat's
|
|
16378
|
+
* own cwd, never the configured pin while the chat is known.
|
|
16379
|
+
*
|
|
16380
|
+
* The Host records and previews sources anchored on the session's own cwd,
|
|
16381
|
+
* so the projection has to use that same directory. Anchoring it on
|
|
16382
|
+
* `session.cwd` puts a second spelling of the same file into the rail the
|
|
16383
|
+
* moment the two differ — an adopted chat, a chat created under an older
|
|
16384
|
+
* configuration — and the preview then refuses, as no longer evidence, a
|
|
16385
|
+
* source the answer just cited: the path it was asked for is not the path
|
|
16386
|
+
* the Host holds. The configured pin remains the fallback for a chat the
|
|
16387
|
+
* browser's list does not carry yet.
|
|
16388
|
+
*/
|
|
16389
|
+
sourceAnchor(sessionId) {
|
|
16390
|
+
const list = this.sessions.list.getSnapshot();
|
|
16391
|
+
return sourceAnchorRoot((Object.hasOwn(list.byId, sessionId) ? list.byId[sessionId] : void 0)?.cwd, this.config.session.cwd);
|
|
16392
|
+
}
|
|
16393
|
+
/**
|
|
16321
16394
|
* Display names of the known subagent sessions keyed by session id, for
|
|
16322
16395
|
* settlement notices to sign with. The durable catalogs carry each
|
|
16323
16396
|
* delegation's description verbatim; a child the host listed without a
|
|
@@ -17310,6 +17383,39 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
17310
17383
|
});
|
|
17311
17384
|
});
|
|
17312
17385
|
//#endregion
|
|
17386
|
+
//#region src/client/slash/palette-rows.ts
|
|
17387
|
+
/**
|
|
17388
|
+
* Bucket ranked rows by kind, one group per kind.
|
|
17389
|
+
*
|
|
17390
|
+
* A kind with no row contributes no group, and the group order follows the
|
|
17391
|
+
* ranking (the best row's own kind leads) rather than a fixed
|
|
17392
|
+
* skill-then-command order, so the top of the list never disagrees with the
|
|
17393
|
+
* ranking above it.
|
|
17394
|
+
*/
|
|
17395
|
+
function groupPaletteRows(rows) {
|
|
17396
|
+
const buckets = /* @__PURE__ */ new Map();
|
|
17397
|
+
rows.forEach((entry, index) => {
|
|
17398
|
+
const row = Object.freeze({
|
|
17399
|
+
entry,
|
|
17400
|
+
index
|
|
17401
|
+
});
|
|
17402
|
+
const bucket = buckets.get(entry.kind);
|
|
17403
|
+
if (bucket === void 0) {
|
|
17404
|
+
buckets.set(entry.kind, [row]);
|
|
17405
|
+
return;
|
|
17406
|
+
}
|
|
17407
|
+
bucket.push(row);
|
|
17408
|
+
});
|
|
17409
|
+
return Object.freeze([...buckets.entries()].map(([kind, group]) => Object.freeze({
|
|
17410
|
+
kind,
|
|
17411
|
+
rows: Object.freeze([...group])
|
|
17412
|
+
})));
|
|
17413
|
+
}
|
|
17414
|
+
/** The entries of every group, in the order the palette draws them. */
|
|
17415
|
+
function flattenPaletteGroups(groups) {
|
|
17416
|
+
return Object.freeze(groups.flatMap((group) => group.rows.map((row) => row.entry)));
|
|
17417
|
+
}
|
|
17418
|
+
//#endregion
|
|
17313
17419
|
//#region src/client/slash/SlashPalette.tsx
|
|
17314
17420
|
const KIND_LABEL = Object.freeze({
|
|
17315
17421
|
skill: "Навык",
|
|
@@ -17319,27 +17425,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
17319
17425
|
skill: "Навыки",
|
|
17320
17426
|
command: "Команды"
|
|
17321
17427
|
});
|
|
17322
|
-
function groupRows(rows) {
|
|
17323
|
-
const groups = [];
|
|
17324
|
-
rows.forEach((entry, index) => {
|
|
17325
|
-
const tail = groups.at(-1);
|
|
17326
|
-
if (tail !== void 0 && tail.kind === entry.kind) {
|
|
17327
|
-
tail.rows.push({
|
|
17328
|
-
entry,
|
|
17329
|
-
index
|
|
17330
|
-
});
|
|
17331
|
-
return;
|
|
17332
|
-
}
|
|
17333
|
-
groups.push({
|
|
17334
|
-
kind: entry.kind,
|
|
17335
|
-
rows: [{
|
|
17336
|
-
entry,
|
|
17337
|
-
index
|
|
17338
|
-
}]
|
|
17339
|
-
});
|
|
17340
|
-
});
|
|
17341
|
-
return groups;
|
|
17342
|
-
}
|
|
17343
17428
|
/**
|
|
17344
17429
|
* The palette itself: a listbox over rows the composer has already filtered
|
|
17345
17430
|
* and ranked. It owns no state — an empty list means "nothing matches", and
|
|
@@ -17351,7 +17436,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
17351
17436
|
*/
|
|
17352
17437
|
const QaSlashPalette = (0, react.memo)(function QaSlashPalette(props) {
|
|
17353
17438
|
const message = props.state === "error" ? props.error ?? "Не удалось загрузить команды" : props.state === "loading" ? "Загрузка действий…" : props.rows.length === 0 ? "Ничего не найдено" : null;
|
|
17354
|
-
const groups =
|
|
17439
|
+
const groups = groupPaletteRows(props.rows);
|
|
17355
17440
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
17356
17441
|
className: "dsh-qa-slash",
|
|
17357
17442
|
role: "listbox",
|
|
@@ -17523,7 +17608,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
17523
17608
|
}, [options.reopen]);
|
|
17524
17609
|
const rows = (0, react.useMemo)(() => {
|
|
17525
17610
|
if (query === void 0) return [];
|
|
17526
|
-
return rankSlashEntries(slash.entries, query, { fuzzy: options.fuzzySearch }).slice(0, options.maxVisible);
|
|
17611
|
+
return flattenPaletteGroups(groupPaletteRows(rankSlashEntries(slash.entries, query, { fuzzy: options.fuzzySearch }))).slice(0, options.maxVisible);
|
|
17527
17612
|
}, [
|
|
17528
17613
|
slash.entries,
|
|
17529
17614
|
query,
|
|
@@ -49852,6 +49937,76 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
49852
49937
|
};
|
|
49853
49938
|
}
|
|
49854
49939
|
//#endregion
|
|
49940
|
+
//#region src/client/user-settings/fields.tsx
|
|
49941
|
+
function QaSettingsField(props) {
|
|
49942
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
49943
|
+
className: "dsh-qa-settings__field",
|
|
49944
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
49945
|
+
className: "dsh-qa-settings__field-label",
|
|
49946
|
+
children: [props.label, props.children]
|
|
49947
|
+
}), props.hint === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
49948
|
+
className: "dsh-qa-settings__field-hint",
|
|
49949
|
+
children: props.hint
|
|
49950
|
+
})]
|
|
49951
|
+
});
|
|
49952
|
+
}
|
|
49953
|
+
function QaSettingsSection(props) {
|
|
49954
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
49955
|
+
className: "dsh-qa-settings__section",
|
|
49956
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
|
|
49957
|
+
className: "dsh-qa-settings__section-head",
|
|
49958
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
|
|
49959
|
+
className: "dsh-qa-settings__section-title",
|
|
49960
|
+
children: props.title
|
|
49961
|
+
}), props.aside]
|
|
49962
|
+
}), props.children]
|
|
49963
|
+
});
|
|
49964
|
+
}
|
|
49965
|
+
function QaSettingsToggle(props) {
|
|
49966
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
49967
|
+
className: "dsh-qa-settings__toggle-row",
|
|
49968
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
49969
|
+
className: "dsh-qa-settings__toggle",
|
|
49970
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
49971
|
+
type: "checkbox",
|
|
49972
|
+
checked: props.checked,
|
|
49973
|
+
disabled: props.disabled === true,
|
|
49974
|
+
onChange: (event) => props.onChange(event.currentTarget.checked)
|
|
49975
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
49976
|
+
className: "dsh-qa-settings__toggle-label",
|
|
49977
|
+
children: props.label
|
|
49978
|
+
})]
|
|
49979
|
+
}), props.hint === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
49980
|
+
className: "dsh-qa-settings__field-hint",
|
|
49981
|
+
children: props.hint
|
|
49982
|
+
})]
|
|
49983
|
+
});
|
|
49984
|
+
}
|
|
49985
|
+
function QaSettingsNotice(props) {
|
|
49986
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
49987
|
+
className: `dsh-qa-settings__notice dsh-qa-settings__notice--${props.tone}`,
|
|
49988
|
+
role: props.tone === "error" ? "alert" : "status",
|
|
49989
|
+
children: props.children
|
|
49990
|
+
});
|
|
49991
|
+
}
|
|
49992
|
+
function QaSettingsActions(props) {
|
|
49993
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
49994
|
+
className: "dsh-qa-settings__actions",
|
|
49995
|
+
children: props.children
|
|
49996
|
+
});
|
|
49997
|
+
}
|
|
49998
|
+
function QaSettingsButton(props) {
|
|
49999
|
+
const tone = props.tone ?? "plain";
|
|
50000
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
50001
|
+
type: props.type ?? "button",
|
|
50002
|
+
className: `dsh-qa-settings__button dsh-qa-settings__button--${tone}`,
|
|
50003
|
+
disabled: props.disabled === true,
|
|
50004
|
+
...props.title === void 0 ? {} : { title: props.title },
|
|
50005
|
+
...props.onClick === void 0 ? {} : { onClick: props.onClick },
|
|
50006
|
+
children: props.label
|
|
50007
|
+
});
|
|
50008
|
+
}
|
|
50009
|
+
//#endregion
|
|
49855
50010
|
//#region src/client/components/QaModal.tsx
|
|
49856
50011
|
/**
|
|
49857
50012
|
* Open dialogs, innermost last. A dialog opened from another one (the tool
|
|
@@ -49932,8 +50087,41 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
49932
50087
|
}
|
|
49933
50088
|
//#endregion
|
|
49934
50089
|
//#region src/client/components/QaChangelog.tsx
|
|
49935
|
-
const QA_VERSION = "0.
|
|
50090
|
+
const QA_VERSION = "0.12.0";
|
|
49936
50091
|
const QA_CHANGELOG = [
|
|
50092
|
+
{
|
|
50093
|
+
version: "0.12.0",
|
|
50094
|
+
date: "2026-09-22",
|
|
50095
|
+
sections: [{
|
|
50096
|
+
title: "Новое",
|
|
50097
|
+
items: ["Стенд может назвать редакцию документации, по которой отвечает. Корпус публикуется сразу в нескольких редакциях — одна и та же глава про монтаж или про интеграцию лежит отдельно для 3.7 и для 3.8, — и вопрос «как настроить интеграцию» попадал в ту редакцию, которая встретилась поиску первой. Теперь в настройках, в разделе «Документация», задаётся версия по умолчанию: поиск, которому не назвали версию и не сузили подкаталог, ищет только по ней. Версия, названная в самом вопросе к поиску или в пути, сильнее умолчания — спросить про другую редакцию по-прежнему можно. Рядом видно, откуда стенд читает документацию: общий корпус развёртывания или каталог docs рабочего каталога чата. В ответе поиска видно, что редакцию подставил стенд, а не спрашивающий: «version 3.8, the stand's default»."]
|
|
50098
|
+
}, {
|
|
50099
|
+
title: "Исправления",
|
|
50100
|
+
items: [
|
|
50101
|
+
"Первое сообщение нового чата больше не исчезает. После создания разговора стенд закрепляет его за учётной записью; это обновление списка чатов ошибочно перезапускало контроллер ровно между проверкой допуска и отправкой вопроса. Поле ввода уже очищалось, вопрос на мгновение появлялся в переписке, затем снова показывался пустой экран, а ошибки не было. Теперь изменение списка принадлежащих пользователю чатов не считается новым входом: первый вопрос остаётся на экране и доходит до только что созданного разговора.",
|
|
50102
|
+
"Удаление чата из истории теперь требует явного подтверждения. Первый клик открывает диалог с названием чата и пояснением, что удаляется запись этого браузера, а сам разговор остаётся на стенде; действие можно отменить кнопкой, крестиком, кликом по фону или Escape.",
|
|
50103
|
+
"Настройки документации применяются без перезапуска стенда. Смена общего корня или версии по умолчанию раньше меняла карточку настроек, но уже созданные инструменты продолжали читать прежний снимок. Заодно общий каталог может называться не только docs — в ответах путь всё равно остаётся привычным docs/…, редакция V2 совпадает с v2, исключённые редакции не расходуют предел обхода, а поиск по явно заданному пути не приписывает выбор версии умолчанию стенда.",
|
|
50104
|
+
"Права роли больше не расширяются самим фактом подключения динамического набора инструментов. В чате с учётной записью инструмент доступен только тогда, когда он указан в роли или выдан разрешённым навыком; подключённый к агенту, но не разрешённый ролью инструмент получает отказ до выполнения.",
|
|
50105
|
+
"Поиск по документации находит документы, а не описи. У корпуса есть служебные каталоги рядом с документами — дерево картинок, описи, разбор спорных случаев, — и поиск читал их первыми: подчёркивание в имени сортируется раньше букв, а опись перечисляет все модули и версии корпуса, поэтому она отвечала на любой вопрос о продукте и выбирала весь лимит ответа до того, как открывался первый документ. На стенде с таким корпусом поиск без указания пути не находил вообще ничего: обход считал картинки, упирался в предел и останавливался, не дойдя до текстов. Теперь порядок обхода — документы, затем отдельные файлы, затем служебные каталоги; очередь каталогов решается путём, а не порядком обнаружения (служебная опись в корне больше не опережает документ модуля на уровень глубже); картинки, архивы и офисные файлы узнаются по расширению и не читаются вовсе; ни они, ни файлы вне выбранной области не расходуют предел прочитанных документов. Поиск, который ничего не нашёл, теперь говорит это, прочитав корпус.",
|
|
50106
|
+
"Фильтры «версия» и «модуль» снова работают. Ответ поиска называет редакцию и модуль, по которым он искал, но в объявленной схеме ответа эти два поля не были описаны, а стенд отказывает в ответе с неописанным полем: каждый вызов с фильтром падал с «returned invalid output» уже после выполненного поиска — то есть ровно тот вызов, ради которого фильтры и сделаны. Оба поля объявлены."
|
|
50107
|
+
]
|
|
50108
|
+
}]
|
|
50109
|
+
},
|
|
50110
|
+
{
|
|
50111
|
+
version: "0.11.2",
|
|
50112
|
+
date: "2026-09-22",
|
|
50113
|
+
sections: [{
|
|
50114
|
+
title: "Исправления",
|
|
50115
|
+
items: [
|
|
50116
|
+
"Помощник снова может читать документацию стенда там, где она лежит. Поиск и чтение документации искали её строго в каталоге docs рабочего каталога чата. Пока документация лежала рядом с чатом, это работало; на стенде с личным каталогом у каждой учётной записи рабочий каталог чата — её собственный (внутри /workspace/work), а документация опубликована один раз, отдельно. Инструмент исправно отвечал «в рабочем каталоге этого чата нет каталога docs», хотя документация на стенде есть, и так было и в чате, и у каждого эксперта: путь к ней знали только файловые инструменты, которым путь называют явно. Теперь стенд называет корень документации настройкой (tools.docsRoot, на этом стенде — /workspace/docs), и оба инструмента читают ровно это дерево: те же пути в ответе, те же проверки (корень существует, это настоящий каталог, не ссылка; путь за пределы дерева отвергается). На стенде без личных каталогов ничего не изменилось — там по-прежнему ищется docs рядом с чатом.",
|
|
50117
|
+
"Инструменты, которые стенд выдал помощнику сам, больше не отказывают в чате с учётной записью. Поиск и чтение документации, диагностика набора инструментов и удаление файла в рабочем каталоге выданы помощнику стендом, а не ролью: их нет ни в одном списке роли, и роль не может их отозвать. Разрешение на вызов проверяют два уровня, и в чате с учётной записью про эти инструменты знал только один — второй строил границы разговора из списка стенда, инструментов роли и того, что роль может выдать по навыку, и выданных стендом инструментов там не находил. Получался отказ «инструмент вне профиля возможностей разговора», по которому невозможно понять, чего именно не хватает: инструмент виден помощнику, стенд его выдал, а вызов всё равно не проходит. Теперь границы разговора считают инструменты стенда так же, как это уже работало в чатах без учётных записей, а проверка профиля читает их из набора самого помощника. То, чего стенд помощнику не выдавал, остаётся за ролью: отказ на такой инструмент по-прежнему называет профиль, а не разговор.",
|
|
50118
|
+
"Внешняя программа может ждать ответ дольше десяти минут. Предел ожидания для интеграции был ограничен сверху десятью минутами, и это вовсе не бюджет стенда: пока стенд ждёт, он ничего не тратит. Ограничение обрезало ровно те вопросы, для которых интеграция и нужна, — разбор на пятнадцать минут возвращался отметкой «нужен специалист», пока ответ ещё писался. Нижняя граница осталась (пять секунд: меньше — уже не ожидание), верхняя снята, и тридцать минут теперь задаются настройкой, а не отвергаются.",
|
|
50119
|
+
"Источник из правой рейки открывается сразу после ответа, а не только после перезагрузки страницы. Список источников собирается из тех же записей о работе инструментов, по которым стенд решает, можно ли открыть файл, — но путь в этом списке строился от каталога, заданного настройкой стенда, а доказательства чата считают пути от рабочего каталога самого чата. Пока это один и тот же каталог, разницы нет; как только они разные (разговор, начатый при прежней настройке, или каталог пользователя внутри общего рабочего каталога), один и тот же файл получал в панели второе написание, и панель просила стенд открыть именно его — а такого пути в доказательствах чата нет. В ответ на клик приходило «источник больше не входит в доказательства этого чата», хотя источник только что был в ответе, и тот же источник открывался после перезагрузки страницы — тогда список пересобирался уже по доказательствам стенда. Теперь список источников строится от рабочего каталога чата, от того же каталога, что и доказательства, поэтому источник открывается с первого клика, а отказ остался там, где он честный: файл, которого в доказательствах этого чата нет, панель по-прежнему не открывает.",
|
|
50120
|
+
"Переход по ссылке /qa больше не заканчивается экраном «доступ закрыт». Адрес стенда открывает интерфейс не сам по себе: браузер должен предъявить одноразовый токен, по которому стенд выставляет входную куку, — иначе корневой вход закрыт, и вместо чата видно требование токена. Токен этот стенд получает от себя же, но запрашивал его только один раз за запуск и запоминал в том числе ответ «пока не готово»: если первый заход совпадал с запуском стенда, куку в этом браузере уже нельзя было получить до перезапуска, и выглядело это как случайный отказ. Теперь выданный токен по-прежнему запоминается, а неудачная попытка — нет: следующий переход по адресу стенда повторяет попытку и открывает интерфейс, а об одной и той же причине в журнал пишется одна строка, а не по строке на каждый заход.",
|
|
50121
|
+
"Палитра слэш-команд больше не повторяет заголовок группы. Навыки и команды подбираются общим списком, и самым подходящим может оказаться запрос, где команда встаёт между двумя навыками: заголовок «Навыки» рисовался ещё раз после неё, и одна группа выглядела как две. Теперь у каждой группы ровно один заголовок: строки одного вида стоят подряд, порядок внутри группы прежний, а выше всех остаётся та группа, в которой оказался лучший ответ, — поэтому Enter по-прежнему выбирает строку, которая видна первой, а стрелки идут по списку так, как он нарисован."
|
|
50122
|
+
]
|
|
50123
|
+
}]
|
|
50124
|
+
},
|
|
49937
50125
|
{
|
|
49938
50126
|
version: "0.11.1",
|
|
49939
50127
|
date: "2026-09-22",
|
|
@@ -49966,9 +50154,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
49966
50154
|
"Приложенный документ теперь разбирается целиком — и помощником, и панелью «Файлы». Загруженный файл стенд хранит в отдельном хранилище вложений, вне рабочего каталога чата, и читать его помощнику разрешено: путь к нему стоит в самом вопросе. Но инструменты работы с документами об этом хранилище не знали и отказывались открывать файл, который помощнику как раз разрешили прочитать, — просьба разобрать приложенный документ заканчивалась ответом «файла нет», хотя файл на месте, а приложенный документ Word нельзя было посмотреть в панели «Файлы». Теперь хранилище вложений передаётся этим инструментам так же, как его знает остальная часть стенда: документ разбирается по тому же пути, что пришёл в вопросе, а доступ к остальному содержимому хранилища не открывается — читается ровно один названный файл, и только на чтение. Доступ выдаётся тому чату, который его получил, вместе с его дочерними помощниками, и снимается вместе с чатом.",
|
|
49967
50155
|
"Документ Word или PDF можно приложить к вопросу — раньше он отбивался прямо при перетаскивании. Список приложимых файлов был списком текстовых расширений: он так и назывался в настройках, и сообщение об отказе перечисляло свой набор «md, txt, log и другие», никак не связанный с настройкой стенда. Получалось несоответствие: стенд разбирает такие документы конвейером документов и показывает документ Word прямо в чате, а приложить его было нельзя. Теперь разрешённые расширения — это то, чем стенд действительно умеет работать: к текстовым файлам добавлены docx и pdf, а если формат всё-таки не разрешён, отказ называет само расширение и говорит, что список задаёт оператор стенда. Там, где список задан явно, он остаётся ровно таким, каким его задали, — добавление работает для стендов, которые полагаются на значения по умолчанию.",
|
|
49968
50156
|
"Приложенный документ Word или PDF читается своим инструментом, а не универсальным чтением файла. Документ из вложения лежит на диске путём, и универсальное чтение отказывает таким форматам как бинарным — «cannot read …docx: binary file». Этот отказ ничего не говорит о том, есть ли файл на месте, но читался он именно так: агент решал, что документа нет, начинал искать его по рабочим каталогам и сообщал пользователю, что до файла не дотянуться, хотя конвейер документов всё это время был доступен. В разделе «Заметки модели» появилась заметка о документах: она называет инструменты конвейера (document_inspect, document_to_markdown, а для вложения по ссылке — document_from_url), говорит, что отказ универсального чтения на офисных форматах — это ожидаемый ответ, а не повод искать файл в другом месте, и что отказ самого конвейера нужно назвать вместе с путём, который он назвал. Заметка включается и переписывается своими словами, как и остальные, — стенду без конвейера документов её стоит выключить.",
|
|
49969
|
-
"
|
|
49970
|
-
"Список чатов показывает только ваши чаты. Обычно список собирался и из ваших разговоров, и из того, что этот браузер запомнил раньше, поэтому на общем компьютере — в переговорке, у стенда, за одной учётной записью Windows — в него попадали разговоры, начатые до вас: с их названиями, временем и значком работы помощника в момент, когда чужой разговор шёл. Теперь список — это ровно ваши чаты: чужой разговор в нём не появится, а разговор, начатый или открытый после входа, виден сразу, без перезагрузки страницы. На стенде без учётных записей ничего не изменилось: список по-прежнему ваш собственный. Имена фоновых помощников в плашках о завершении берутся только из ваших разговоров.",
|
|
49971
|
-
"Помощник снова может читать документацию стенда там, где она лежит. Поиск и чтение документации искали её строго в каталоге docs рабочего каталога чата. Пока документация лежала рядом с чатом, это работало; на стенде с личным каталогом у каждой учётной записи рабочий каталог чата — её собственный (внутри /workspace/work), а документация опубликована один раз, отдельно. Инструмент исправно отвечал «в рабочем каталоге этого чата нет каталога docs», хотя документация на стенде есть, и так было и в чате, и у каждого эксперта: путь к ней знали только файловые инструменты, которым путь называют явно. Теперь стенд называет корень документации настройкой (tools.docsRoot, на этом стенде — /workspace/docs), и оба инструмента читают ровно это дерево: те же пути в ответе, те же проверки (корень существует, это настоящий каталог, не ссылка; путь за пределы дерева отвергается). На стенде без личных каталогов ничего не изменилось — там по-прежнему ищется docs рядом с чатом. Инструменты, которые стенд выдал помощнику сам, больше не отказывают в чате с учётной записью. Поиск и чтение документации, диагностика набора инструментов и удаление файла в рабочем каталоге выданы помощнику стендом, а не ролью: их нет ни в одном списке роли, и роль не может их отозвать. Разрешение на вызов проверяют два уровня, и в чате с учётной записью про эти инструменты знал только один — второй строил границы разговора из списка стенда, инструментов роли и того, что роль может выдать по навыку, и выданных стендом инструментов там не находил. Получался отказ «инструмент вне профиля возможностей разговора», по которому невозможно понять, чего именно не хватает: инструмент виден помощнику, стенд его выдал, а вызов всё равно не проходит. Теперь границы разговора считают инструменты стенда так же, как это уже работало в чатах без учётных записей, а проверка профиля читает их из набора самого помощника. То, чего стенд помощнику не выдавал, остаётся за ролью: отказ на такой инструмент по-прежнему называет профиль, а не разговор."
|
|
50157
|
+
"Список чатов показывает только ваши чаты. Обычно список собирался и из ваших разговоров, и из того, что этот браузер запомнил раньше, поэтому на общем компьютере — в переговорке, у стенда, за одной учётной записью Windows — в него попадали разговоры, начатые до вас: с их названиями, временем и значком работы помощника в момент, когда чужой разговор шёл. Теперь список — это ровно ваши чаты: чужой разговор в нём не появится, а разговор, начатый или открытый после входа, виден сразу, без перезагрузки страницы. На стенде без учётных записей ничего не изменилось: список по-прежнему ваш собственный. Имена фоновых помощников в плашках о завершении берутся только из ваших разговоров."
|
|
49972
50158
|
]
|
|
49973
50159
|
}]
|
|
49974
50160
|
},
|
|
@@ -50008,16 +50194,22 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
50008
50194
|
"Вопрос, на который уже нельзя ответить, больше не остаётся на экране. Запрос жил до тех пор, пока его не закроют: при остановке хода вопрос снимался по сигналу самого вызова, но запрос без такого сигнала или ход, завершившийся другим путём, оставляли форму навсегда — ответ на неё уходил в никуда, а оператор видел живое на вид поле. Теперь стенд закрывает всё, что осталось от хода, как только спросивший помощник перестаёт работать, а страница продолжает сверяться со стендом, пока форма на экране: ответ, которого стенд уже не ждёт, отклоняется вместо тихой отправки.",
|
|
50009
50195
|
"Вопрос, оставшийся до перезагрузки страницы, снова появляется после неё. Страница читает список вопросов чата сразу при его открытии и при каждом восстановлении связи, а не только пока идёт ход: раньше перезагрузка могла показать пустое поле ввода, за которым агент продолжал ждать ответа.",
|
|
50010
50196
|
"Сбой при чтении персональных навыков одного аккаунта больше не прячет навыки у всех. Чтение каталога навыков, которому не повезло с файловой системой (отказ доступа, гонка чтения каталога), отдавало ошибку в реестр навыков харнесса, и тот в ответ переставал публиковать список доступных навыков целиком: модель получала «навык недоступен» на любое имя, включая навыки плагинов и корпоративные. Теперь такой сбой вырождается в «у этого аккаунта навыков не прочитано» и пишется в журнал событием skill.discover-failed, а остальной каталог продолжает публиковаться.",
|
|
50011
|
-
"Раздел «Общие возможности» в консоли администратора снова видит навыки и инструменты, которые монтирует агентский пресет. Список читался «глобально», а каталог навыков стенда и семейство инструментов пресета живут в области видимости пресета: администратор не видел ни корпоративных навыков поиска, ни инструментов пресета и не мог ничего из них выдать или отозвать. Теперь страница читает реестры глазами того пресета, под которым идут QA-чаты (задаётся session.agentPreset, на стенде это qa-research), а если пресет не удалось собрать — как и раньше остаётся глобальный вид, и страница не падает."
|
|
50197
|
+
"Раздел «Общие возможности» в консоли администратора снова видит навыки и инструменты, которые монтирует агентский пресет. Список читался «глобально», а каталог навыков стенда и семейство инструментов пресета живут в области видимости пресета: администратор не видел ни корпоративных навыков поиска, ни инструментов пресета и не мог ничего из них выдать или отозвать. Теперь страница читает реестры глазами того пресета, под которым идут QA-чаты (задаётся session.agentPreset, на стенде это qa-research), а если пресет не удалось собрать — как и раньше остаётся глобальный вид, и страница не падает.",
|
|
50198
|
+
"Стенд больше не принимает давно не открывавшийся разговор за удалённый: перед очисткой он сверяется и с долговременным хранилищем, а при неполном ответе ничего не удаляет.",
|
|
50199
|
+
"После настоящего удаления разговора больше не остаются оценки, очередь на разбор и другие служебные записи; админка обновляет это состояние при открытии."
|
|
50012
50200
|
]
|
|
50013
50201
|
},
|
|
50014
50202
|
{
|
|
50015
50203
|
title: "Прочее",
|
|
50016
|
-
items: [
|
|
50204
|
+
items: [
|
|
50205
|
+
"Оператору стенда: настройка вопросов, которая ничего не делает, теперь видна в журнале и в карточке настроек. Если вопросы включены, а инструмент ask_user_question не входит в список разрешённых (lockdown.toolPolicy.allow), форма не появится никогда; если инструмент разрешён, а вопросы выключены, каждый запрос отклоняется. Оба случая пишут в журнал одно предупреждение question.config-incomplete на чат с указанием, какой половины не хватает, а в разделе «Состояние» появилась плашка «Вопросы модели» с тем же предупреждением — сам чат при этом открывается как обычно.",
|
|
50206
|
+
"Оператору стенда: в журнале появились события о ходе вопроса — запрос принят и ждёт ответа (question.claimed), ответ получен (question.answered), вопрос закрыт оператором (question.cancelled) или снят вместе с ходом (question.aborted), запрос отдан другому интерфейсу (question.delegated), ответ отклонён (question.refused). Текст ответа в журнал не попадает: только число вопросов и то, был ли среди ответов свободный текст.",
|
|
50207
|
+
"Оператору стенда: разговоры из личных папок посетителей ожидаемо остаются в разделе Ungrouped. Для старых разговоров, чей каталог совпадает с рабочей областью, добавлена безопасная команда qa-attach-sessions с предварительным просмотром и резервной копией."
|
|
50208
|
+
]
|
|
50017
50209
|
},
|
|
50018
50210
|
{
|
|
50019
50211
|
title: "Новое",
|
|
50020
|
-
items: ["В конфигурации стенда значение enabled для interaction.questions означает то же, что и interactive: включать вопросы модели стало можно любым из двух написаний."]
|
|
50212
|
+
items: ["В конфигурации стенда значение enabled для interaction.questions означает то же, что и interactive: включать вопросы модели стало можно любым из двух написаний.", "Администратор может удалить разговор со стенда вместе со служебными сессиями, оценками, разбором и источниками. Удаление требует подтверждения, записывается в журнал действий и отказывается работать, если разговор ещё открыт или хранилище нельзя безопасно очистить."]
|
|
50021
50213
|
}
|
|
50022
50214
|
]
|
|
50023
50215
|
},
|
|
@@ -50027,7 +50219,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
50027
50219
|
sections: [
|
|
50028
50220
|
{
|
|
50029
50221
|
title: "Новое",
|
|
50030
|
-
items: [
|
|
50222
|
+
items: []
|
|
50031
50223
|
},
|
|
50032
50224
|
{
|
|
50033
50225
|
title: "Исправления",
|
|
@@ -50035,20 +50227,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
50035
50227
|
"Ответы агента стали заметно отзывчивее на загруженном стенде: раньше данные о том, какие документы и страницы агент прочитал, хранились в одном общем файле стенда, и каждый ход агента — включая ходы всех его помощников — переписывал этот файл целиком. Стоимость хода росла вместе со всей накопленной историей стенда: на реальных данных один ход стоил от 7 миллисекунд на небольшом стенде до 106 на большом, и всё это время сервер не отвечал никому из пользователей. Теперь данные каждого чата лежат отдельно, и ход переписывает только свой чат: на том же объёме — 4.2 миллисекунды вместо 106. Разбор ответа и панель источников работают как раньше.",
|
|
50036
50228
|
"Открытие чата больше не переписывает все данные стенда. Список пользователей и записи о том, кому принадлежит какой чат, лежали в одном файле настроек, и он целиком перезаписывался при каждом действии — а записей становится на одну больше с каждым созданным чатом, так что со временем это становилось всё дороже. Теперь каждое действие записывает только своё изменение, и открытие чата стоит одинаково на стенде любого возраста.",
|
|
50037
50229
|
"Удалённые чаты больше не копятся в консоли администратора. Запись о том, кому принадлежит чат, переживала сам чат: «удалить» в браузере лишь скрывало его, а серверный список возвращал обратно, поэтому в «Разговорах», в счётчиках и в аналитике навсегда оставались чаты, которых уже нет. Теперь при создании новых чатов стенд убирает записи о тех, которых больше нет на стенде, — и никогда не трогает записи существующих чатов, даже очень старых.",
|
|
50038
|
-
"Стенд больше не убирает записи о существующих чатах. Убирая из «Разговоров» чаты, которых нет, стенд спрашивал только о тех, что открывались после последнего запуска: чат, к которому сутки не обращались, выглядел как удалённый, и запись о нём исчезала — разговор пропадал из истории своего владельца, из счётчиков и из аналитики, хотя сам он был цел. Теперь стенд сверяется и с тем, что лежит в хранилище, а если ответить наверняка не может, не убирает ничего.",
|
|
50039
|
-
"Удалённый чат больше не оставляет после себя оценок и очереди на разбор. Оценки ответов, вердикты рецензентов и очередь на разбор хранились по идентификатору чата и переживали его: в «Обратной связи», в очереди и в аналитике оставались записи о разговоре, которого уже нет, а открыть его было нельзя. Теперь вместе с записью о владении убираются и они; журнал действий администраторов остаётся нетронутым.",
|
|
50040
|
-
"Админка показывает состояние на момент открытия: «Разговоры», счётчики и аналитика больше не ждут, пока кто-нибудь создаст новый чат, чтобы убрать из списка исчезнувшие.",
|
|
50041
50230
|
"Файл настроек стенда стал в разы меньше: политика доступа каждого чата хранилась в нём отдельной копией, хотя у всех чатов она одна и та же. На одном стенде из 25 копий различными оказались две — эта часть уменьшилась без потери данных: каждый чат по-прежнему помнит именно тот набор возможностей, с которым был открыт.",
|
|
50042
50231
|
"Обновление стенда до этой версии сохраняет все учётные записи, пароли и привязку чатов к пользователям: прежний файл настроек переносится автоматически при первом запуске, а сам файл не удаляется, а сохраняется рядом с пометкой о переносе."
|
|
50043
50232
|
]
|
|
50044
50233
|
},
|
|
50045
50234
|
{
|
|
50046
50235
|
title: "Прочее",
|
|
50047
|
-
items: [
|
|
50048
|
-
"У хранения данных чатов появился предел: на чат сохраняются источники последних 200 ходов, на стенде — 500 последних чатов, а чат, к которому не обращались месяц, освобождает место. Это касается только служебных данных разбора: сам текст разговора не удаляется, старый чат открывается как раньше, но панель источников у него может быть пустой.",
|
|
50049
|
-
"Оператору стенда: пределы хранения настраиваются (сколько ходов и чатов держать, через сколько дней освобождать, как часто убирать записи о несуществующих чатах). Значения по умолчанию подобраны под обычную нагрузку, менять их не обязательно.",
|
|
50050
|
-
"Оператору стенда: в списке чатов DSH разговоры стенда показываются в разделе «Ungrouped». Так и должно быть при включённых личных папках посетителей: чат работает в своей папке внутри рабочей области, а список группирует только те чаты, чей рабочий каталог совпадает с рабочей областью целиком, и перенести чат в область задним числом нельзя. Исключение — чаты, созданные прежней настройкой, когда рабочий каталог задавался напрямую (или задавался тем же каталогом, но записанным иначе, например через прямые слэши): их можно вернуть в рабочую область командой qa-attach-sessions при остановленном стенде — она сначала показывает, что изменит, а с ключом --write вносит правку и сохраняет копию реестра рабочей области. На чаты посетителей с личными папками команда не влияет."
|
|
50051
|
-
]
|
|
50236
|
+
items: ["У хранения данных чатов появился предел: на чат сохраняются источники последних 200 ходов, на стенде — 500 последних чатов, а чат, к которому не обращались месяц, освобождает место. Это касается только служебных данных разбора: сам текст разговора не удаляется, старый чат открывается как раньше, но панель источников у него может быть пустой.", "Оператору стенда: пределы хранения настраиваются (сколько ходов и чатов держать, через сколько дней освобождать, как часто убирать записи о несуществующих чатах). Значения по умолчанию подобраны под обычную нагрузку, менять их не обязательно."]
|
|
50052
50237
|
},
|
|
50053
50238
|
{
|
|
50054
50239
|
title: "Исправления",
|
|
@@ -50328,12 +50513,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
50328
50513
|
className: "dsh-qa-changelog__date",
|
|
50329
50514
|
children: entry.date
|
|
50330
50515
|
}),
|
|
50331
|
-
entry.version === "0.
|
|
50516
|
+
entry.version === "0.12.0" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
50332
50517
|
className: "dsh-qa-changelog__current",
|
|
50333
50518
|
children: "текущая"
|
|
50334
50519
|
}) : null
|
|
50335
50520
|
]
|
|
50336
|
-
}), entry.sections.map((section) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
50521
|
+
}), entry.sections.map((section, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
50337
50522
|
className: "dsh-qa-changelog__section",
|
|
50338
50523
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
|
|
50339
50524
|
className: "dsh-qa-changelog__section-title",
|
|
@@ -50342,7 +50527,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
50342
50527
|
className: "dsh-qa-changelog__list",
|
|
50343
50528
|
children: section.items.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: item }, item))
|
|
50344
50529
|
})]
|
|
50345
|
-
}, section.title))]
|
|
50530
|
+
}, `${section.title}:${index}`))]
|
|
50346
50531
|
}, entry.version))
|
|
50347
50532
|
});
|
|
50348
50533
|
}
|
|
@@ -50759,13 +50944,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
50759
50944
|
});
|
|
50760
50945
|
const normalizedQuery = query.trim().toLowerCase();
|
|
50761
50946
|
const visibleRows = normalizedQuery === "" ? props.rows : props.rows.filter((row) => rowMatches(row, normalizedQuery));
|
|
50762
|
-
const
|
|
50947
|
+
const confirmingRow = confirmingId === null ? void 0 : props.rows.find((row) => row.id === confirmingId);
|
|
50763
50948
|
const sections = props.groupByOwner === true ? buildOwnerSections(visibleRows) : [{
|
|
50764
50949
|
name: "",
|
|
50765
50950
|
rows: visibleRows
|
|
50766
50951
|
}];
|
|
50767
50952
|
const renderRow = (row) => {
|
|
50768
|
-
const confirming = confirmingVisible && confirmingId === row.id;
|
|
50769
50953
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
50770
50954
|
className: row.active ? "dsh-qa-sidebar__item dsh-qa-sidebar__item--active" : "dsh-qa-sidebar__item",
|
|
50771
50955
|
children: [
|
|
@@ -50797,22 +50981,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
50797
50981
|
})(),
|
|
50798
50982
|
props.onDelete === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
50799
50983
|
type: "button",
|
|
50800
|
-
className:
|
|
50801
|
-
"aria-label":
|
|
50802
|
-
title:
|
|
50803
|
-
onClick: () =>
|
|
50804
|
-
|
|
50805
|
-
setConfirmingId(null);
|
|
50806
|
-
props.onDelete?.(row.id);
|
|
50807
|
-
return;
|
|
50808
|
-
}
|
|
50809
|
-
setConfirmingId(row.id);
|
|
50810
|
-
},
|
|
50811
|
-
children: confirming ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
50812
|
-
viewBox: "0 0 16 16",
|
|
50813
|
-
"aria-hidden": "true",
|
|
50814
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "m3.5 8.5 3 3L12.5 5" })
|
|
50815
|
-
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
50984
|
+
className: "dsh-qa-sidebar__item-delete",
|
|
50985
|
+
"aria-label": "Удалить чат",
|
|
50986
|
+
title: "Удалить чат",
|
|
50987
|
+
onClick: () => setConfirmingId(row.id),
|
|
50988
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
50816
50989
|
viewBox: "0 0 16 16",
|
|
50817
50990
|
"aria-hidden": "true",
|
|
50818
50991
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M2.5 4h11M6.5 4V2.5h3V4m-6.2 0 .6 9.5h7.2L12 4" })
|
|
@@ -50950,6 +51123,32 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
50950
51123
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(QaChangelogModal, {
|
|
50951
51124
|
open: changelogOpen,
|
|
50952
51125
|
onClose: () => setChangelogOpen(false)
|
|
51126
|
+
}),
|
|
51127
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(QaModal, {
|
|
51128
|
+
open: confirmingRow !== void 0,
|
|
51129
|
+
title: "Удалить чат",
|
|
51130
|
+
closeLabel: "Закрыть подтверждение удаления чата",
|
|
51131
|
+
onClose: () => setConfirmingId(null),
|
|
51132
|
+
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(QaSettingsButton, {
|
|
51133
|
+
label: "Отмена",
|
|
51134
|
+
onClick: () => setConfirmingId(null)
|
|
51135
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(QaSettingsButton, {
|
|
51136
|
+
tone: "danger",
|
|
51137
|
+
label: "Удалить из истории",
|
|
51138
|
+
onClick: () => {
|
|
51139
|
+
if (confirmingRow === void 0) return;
|
|
51140
|
+
setConfirmingId(null);
|
|
51141
|
+
props.onDelete?.(confirmingRow.id);
|
|
51142
|
+
}
|
|
51143
|
+
})] }),
|
|
51144
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
|
|
51145
|
+
className: "dsh-qa-settings__lead",
|
|
51146
|
+
children: [
|
|
51147
|
+
"Удалить чат «",
|
|
51148
|
+
confirmingRow?.title ?? "Новый чат",
|
|
51149
|
+
"» из истории в этом браузере? Сам разговор останется на стенде."
|
|
51150
|
+
]
|
|
51151
|
+
})
|
|
50953
51152
|
})
|
|
50954
51153
|
]
|
|
50955
51154
|
});
|
|
@@ -52417,76 +52616,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
52417
52616
|
return `${title.slice(0, 51).trimEnd()}…`;
|
|
52418
52617
|
}
|
|
52419
52618
|
//#endregion
|
|
52420
|
-
//#region src/client/user-settings/fields.tsx
|
|
52421
|
-
function QaSettingsField(props) {
|
|
52422
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
52423
|
-
className: "dsh-qa-settings__field",
|
|
52424
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
52425
|
-
className: "dsh-qa-settings__field-label",
|
|
52426
|
-
children: [props.label, props.children]
|
|
52427
|
-
}), props.hint === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
52428
|
-
className: "dsh-qa-settings__field-hint",
|
|
52429
|
-
children: props.hint
|
|
52430
|
-
})]
|
|
52431
|
-
});
|
|
52432
|
-
}
|
|
52433
|
-
function QaSettingsSection(props) {
|
|
52434
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
52435
|
-
className: "dsh-qa-settings__section",
|
|
52436
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
|
|
52437
|
-
className: "dsh-qa-settings__section-head",
|
|
52438
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
|
|
52439
|
-
className: "dsh-qa-settings__section-title",
|
|
52440
|
-
children: props.title
|
|
52441
|
-
}), props.aside]
|
|
52442
|
-
}), props.children]
|
|
52443
|
-
});
|
|
52444
|
-
}
|
|
52445
|
-
function QaSettingsToggle(props) {
|
|
52446
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
52447
|
-
className: "dsh-qa-settings__toggle-row",
|
|
52448
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
52449
|
-
className: "dsh-qa-settings__toggle",
|
|
52450
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
52451
|
-
type: "checkbox",
|
|
52452
|
-
checked: props.checked,
|
|
52453
|
-
disabled: props.disabled === true,
|
|
52454
|
-
onChange: (event) => props.onChange(event.currentTarget.checked)
|
|
52455
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
52456
|
-
className: "dsh-qa-settings__toggle-label",
|
|
52457
|
-
children: props.label
|
|
52458
|
-
})]
|
|
52459
|
-
}), props.hint === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
52460
|
-
className: "dsh-qa-settings__field-hint",
|
|
52461
|
-
children: props.hint
|
|
52462
|
-
})]
|
|
52463
|
-
});
|
|
52464
|
-
}
|
|
52465
|
-
function QaSettingsNotice(props) {
|
|
52466
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
52467
|
-
className: `dsh-qa-settings__notice dsh-qa-settings__notice--${props.tone}`,
|
|
52468
|
-
role: props.tone === "error" ? "alert" : "status",
|
|
52469
|
-
children: props.children
|
|
52470
|
-
});
|
|
52471
|
-
}
|
|
52472
|
-
function QaSettingsActions(props) {
|
|
52473
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
52474
|
-
className: "dsh-qa-settings__actions",
|
|
52475
|
-
children: props.children
|
|
52476
|
-
});
|
|
52477
|
-
}
|
|
52478
|
-
function QaSettingsButton(props) {
|
|
52479
|
-
const tone = props.tone ?? "plain";
|
|
52480
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
52481
|
-
type: props.type ?? "button",
|
|
52482
|
-
className: `dsh-qa-settings__button dsh-qa-settings__button--${tone}`,
|
|
52483
|
-
disabled: props.disabled === true,
|
|
52484
|
-
...props.title === void 0 ? {} : { title: props.title },
|
|
52485
|
-
...props.onClick === void 0 ? {} : { onClick: props.onClick },
|
|
52486
|
-
children: props.label
|
|
52487
|
-
});
|
|
52488
|
-
}
|
|
52489
|
-
//#endregion
|
|
52490
52619
|
//#region src/client/user-settings/GeneralSettingsPage.tsx
|
|
52491
52620
|
/**
|
|
52492
52621
|
* Placeholder with a purpose: the section exists so the dialog has a home for
|
|
@@ -58436,6 +58565,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
58436
58565
|
const accounts = props.accounts;
|
|
58437
58566
|
const accountsSnapshot = (0, react.useSyncExternalStore)(accounts?.subscribe ?? noopSubscribe$1, accounts?.getSnapshot ?? noopAccountsSnapshot, accounts?.getSnapshot ?? noopAccountsSnapshot);
|
|
58438
58567
|
const accountsStage = accountsSnapshot.stage;
|
|
58568
|
+
const accessPrincipal = accountsSnapshot.stage === "authed" ? `${accountsSnapshot.user.id}:${accountsSnapshot.user.role}` : null;
|
|
58439
58569
|
const adminRoute = isAdminPath(route.pathname, config.route.path);
|
|
58440
58570
|
const [access, setAccess] = (0, react.useState)();
|
|
58441
58571
|
const [selectedSubrole, setSelectedSubrole] = (0, react.useState)(null);
|
|
@@ -58472,7 +58602,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
58472
58602
|
minContentWidth: config.ui.minContentWidth
|
|
58473
58603
|
});
|
|
58474
58604
|
(0, react.useEffect)(() => {
|
|
58475
|
-
if (
|
|
58605
|
+
if (accessPrincipal === null) {
|
|
58476
58606
|
setAccess(void 0);
|
|
58477
58607
|
setSelectedSubrole(null);
|
|
58478
58608
|
clear();
|
|
@@ -58488,8 +58618,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
58488
58618
|
live = false;
|
|
58489
58619
|
};
|
|
58490
58620
|
}, [
|
|
58621
|
+
accessPrincipal,
|
|
58491
58622
|
accounts,
|
|
58492
|
-
accountsSnapshot,
|
|
58493
58623
|
props.accessApi,
|
|
58494
58624
|
clear
|
|
58495
58625
|
]);
|
|
@@ -59521,7 +59651,7 @@ body[data-dsh-qa-surface="active"] div:has(>[data-shell-overlay])>:not([data-she
|
|
|
59521
59651
|
.dsh-qa-sidebar__item-main{appearance:none;display:flex;align-items:center;gap:8px;width:100%;min-width:0;border:0;background:0 0;cursor:pointer;text-align:left;font:inherit;padding:7px 8px;border-radius:8px}
|
|
59522
59652
|
.dsh-qa-sidebar__item-main:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
|
|
59523
59653
|
.dsh-qa-sidebar__item-delete{appearance:none;position:absolute;top:50%;right:4px;display:flex;align-items:center;justify-content:center;width:26px;height:26px;border:0;background:var(--dsw-alias-bg-layer-2);cursor:pointer;color:var(--dsw-alias-label-tertiary);padding:5px;border-radius:6px;opacity:0;transform:translateY(-50%);transition:opacity .12s}
|
|
59524
|
-
.dsh-qa-sidebar__item:hover .dsh-qa-sidebar__item-delete,.dsh-qa-sidebar__item-delete:focus-visible
|
|
59654
|
+
.dsh-qa-sidebar__item:hover .dsh-qa-sidebar__item-delete,.dsh-qa-sidebar__item-delete:focus-visible{opacity:1}
|
|
59525
59655
|
.dsh-qa-sidebar__item-delete:hover{color:var(--dsw-alias-label-primary)}
|
|
59526
59656
|
.dsh-qa-sidebar__item-audit{appearance:none;flex:none;display:inline-flex;align-items:center;gap:4px;height:22px;margin-right:4px;padding:0 8px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-secondary);font:inherit;font-size:11px;line-height:16px;cursor:pointer;transition:border-color .12s,color .12s}
|
|
59527
59657
|
.dsh-qa-sidebar__item-audit--with-delete{margin-right:28px}
|
|
@@ -59533,7 +59663,6 @@ body[data-dsh-qa-surface="active"] div:has(>[data-shell-overlay])>:not([data-she
|
|
|
59533
59663
|
.dsh-qa-sidebar__item-audit-verdict--warn{color:var(--dsw-alias-state-warn-primary)}
|
|
59534
59664
|
.dsh-qa-sidebar__item-audit-verdict--bad{color:var(--dsw-alias-state-error-primary)}
|
|
59535
59665
|
.dsh-qa-sidebar__item-delete:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}
|
|
59536
|
-
.dsh-qa-sidebar__item-delete--confirm{color:var(--dsh-qa-error-hover)}
|
|
59537
59666
|
.dsh-qa-sidebar__item-delete svg{width:14px;height:14px;display:block;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
|
|
59538
59667
|
.dsh-qa-sidebar__item-title{flex:1;min-width:0;overflow:hidden;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:18px;text-overflow:ellipsis;white-space:nowrap}
|
|
59539
59668
|
.dsh-qa-sidebar__item--active .dsh-qa-sidebar__item-title{color:var(--dsw-alias-label-primary);font-weight:500}
|
|
@@ -61092,6 +61221,68 @@ ${QA_ROOT_STYLES}`;
|
|
|
61092
61221
|
});
|
|
61093
61222
|
}
|
|
61094
61223
|
//#endregion
|
|
61224
|
+
//#region src/client/settings/sections/docs.tsx
|
|
61225
|
+
/**
|
|
61226
|
+
* Documentation: which edition of the corpus a question is answered from.
|
|
61227
|
+
*
|
|
61228
|
+
* A published corpus carries several editions of the same module under
|
|
61229
|
+
* `docs/<module>/<version>/…`, and a chat asked about "the product" reads
|
|
61230
|
+
* whichever edition it meets first. A stand that knows which edition it is
|
|
61231
|
+
* about names it here, and `docs_search` stays inside it unless the call itself
|
|
61232
|
+
* names a `version` or narrows `path`. The switch keeps the value while turning
|
|
61233
|
+
* the behaviour off, so a stand can stop defaulting without losing the version
|
|
61234
|
+
* it configured.
|
|
61235
|
+
*/
|
|
61236
|
+
const DOCS_PATHS = [["tools", "docsDefaultVersion"], ["tools", "docsDefaultVersionEnabled"]];
|
|
61237
|
+
/** The documentation corpus the QA tools read, and the edition they default to. */
|
|
61238
|
+
function DocsSection(props) {
|
|
61239
|
+
const tools = props.config?.tools;
|
|
61240
|
+
const version = (tools?.docsDefaultVersion ?? "").trim();
|
|
61241
|
+
const enabled = tools?.docsDefaultVersionEnabled ?? false;
|
|
61242
|
+
const disabled = !props.writable;
|
|
61243
|
+
const paths = DOCS_PATHS;
|
|
61244
|
+
const root = (props.effective?.tools.docsRoot ?? "").trim();
|
|
61245
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Section, {
|
|
61246
|
+
title: "Документация",
|
|
61247
|
+
modified: overriddenAny(props, paths),
|
|
61248
|
+
aside: resetAside(props, paths),
|
|
61249
|
+
children: [
|
|
61250
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
61251
|
+
className: "qa-card-muted",
|
|
61252
|
+
children: "Поиск и чтение документации ходят по корпусу стенда — дереву docs/<модуль>/<версия>/…. Поиск обходит модули раньше служебных каталогов (тех, что начинаются с подчёркивания), а в каждом попадании называет модуль и версию документа."
|
|
61253
|
+
}),
|
|
61254
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Toggle, {
|
|
61255
|
+
label: "Версия по умолчанию",
|
|
61256
|
+
hint: "Поиск, которому не назвали версию и не сузили подкаталог, остаётся внутри этой редакции корпуса. Явные version или path сильнее: они решают сами.",
|
|
61257
|
+
checked: enabled,
|
|
61258
|
+
disabled,
|
|
61259
|
+
onChange: (checked) => {
|
|
61260
|
+
props.write(["tools", "docsDefaultVersionEnabled"], checked);
|
|
61261
|
+
}
|
|
61262
|
+
}),
|
|
61263
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextField, {
|
|
61264
|
+
label: "Версия",
|
|
61265
|
+
value: tools?.docsDefaultVersion ?? "",
|
|
61266
|
+
disabled,
|
|
61267
|
+
placeholder: "3.8",
|
|
61268
|
+
hint: "Как в пути к документу: 3.8, v2, 2024.1. Пусто — дефолта нет, поиск идёт по всем редакциям. Другое значение Host отклонит: версия, которой нет в дереве, отвечала бы «документа нет».",
|
|
61269
|
+
onChange: (value) => {
|
|
61270
|
+
props.write(["tools", "docsDefaultVersion"], value);
|
|
61271
|
+
}
|
|
61272
|
+
}),
|
|
61273
|
+
enabled && version === "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Notice, {
|
|
61274
|
+
tone: "warn",
|
|
61275
|
+
children: "Флаг включён, а версия не задана: поиск по-прежнему идёт по всем редакциям корпуса."
|
|
61276
|
+
}) : null,
|
|
61277
|
+
props.effective === null ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Facts, { items: [{
|
|
61278
|
+
label: "Корень документации",
|
|
61279
|
+
value: root === "" ? "docs/ рабочего каталога чата" : root,
|
|
61280
|
+
note: root === "" ? "развёртывание не назвало общий корпус" : "tools.docsRoot развёртывания"
|
|
61281
|
+
}] })
|
|
61282
|
+
]
|
|
61283
|
+
});
|
|
61284
|
+
}
|
|
61285
|
+
//#endregion
|
|
61095
61286
|
//#region src/client/settings/sections/embedding.tsx
|
|
61096
61287
|
/**
|
|
61097
61288
|
* Embedding: one CSP field with a wide blast radius — an overly generous
|
|
@@ -62728,6 +62919,7 @@ ${QA_ROOT_STYLES}`;
|
|
|
62728
62919
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SlashSection, { ...sectionProps }),
|
|
62729
62920
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(AccountsSection, { ...sectionProps }),
|
|
62730
62921
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SourcesSection, { ...sectionProps }),
|
|
62922
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DocsSection, { ...sectionProps }),
|
|
62731
62923
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(NotesSection, { ...sectionProps }),
|
|
62732
62924
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(AttachmentsSection, { ...sectionProps }),
|
|
62733
62925
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(EmbeddingSection, { ...sectionProps }),
|