answer42 0.2.13__tar.gz → 0.2.16__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. {answer42-0.2.13 → answer42-0.2.16}/PKG-INFO +1 -1
  2. {answer42-0.2.13 → answer42-0.2.16}/pyproject.toml +1 -1
  3. {answer42-0.2.13 → answer42-0.2.16}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260/Ext/Form/Module.bsl +145 -12
  4. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/assets/MCPTestManager.cf +0 -0
  5. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/server.py +8 -1
  6. {answer42-0.2.13 → answer42-0.2.16}/.gitignore +0 -0
  7. {answer42-0.2.13 → answer42-0.2.16}/LICENSE +0 -0
  8. {answer42-0.2.13 → answer42-0.2.16}/README.md +0 -0
  9. {answer42-0.2.13 → answer42-0.2.16}/credentials.example.json +0 -0
  10. {answer42-0.2.13 → answer42-0.2.16}/docs/agent-installation.md +0 -0
  11. {answer42-0.2.13 → answer42-0.2.16}/docs/architecture.md +0 -0
  12. {answer42-0.2.13 → answer42-0.2.16}/docs/assets/answer42-logo.png +0 -0
  13. {answer42-0.2.13 → answer42-0.2.16}/docs/assets/platform42-logo.svg +0 -0
  14. {answer42-0.2.13 → answer42-0.2.16}/docs/installation.md +0 -0
  15. {answer42-0.2.13 → answer42-0.2.16}/scripts/build_cf.py +0 -0
  16. {answer42-0.2.13 → answer42-0.2.16}/scripts/build_pages.py +0 -0
  17. {answer42-0.2.13 → answer42-0.2.16}/scripts/e2e_stable.py +0 -0
  18. {answer42-0.2.13 → answer42-0.2.16}/scripts/openclaw_mcp_autoreload.py +0 -0
  19. {answer42-0.2.13 → answer42-0.2.16}/scripts/rag_cli.py +0 -0
  20. {answer42-0.2.13 → answer42-0.2.16}/src/cf/ConfigDumpInfo.xml +0 -0
  21. {answer42-0.2.13 → answer42-0.2.16}/src/cf/Configuration.xml +0 -0
  22. {answer42-0.2.13 → answer42-0.2.16}/src/cf/DataProcessors/MCPTestManager/Ext/ObjectModule.bsl +0 -0
  23. {answer42-0.2.13 → answer42-0.2.16}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260/Ext/Form.xml" +0 -0
  24. {answer42-0.2.13 → answer42-0.2.16}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260.xml" +0 -0
  25. {answer42-0.2.13 → answer42-0.2.16}/src/cf/DataProcessors/MCPTestManager.xml +0 -0
  26. {answer42-0.2.13 → answer42-0.2.16}/src/cf/Ext/ManagedApplicationModule.bsl +0 -0
  27. {answer42-0.2.13 → answer42-0.2.16}/src/cf/Languages//320/240/321/203/321/201/321/201/320/272/320/270/320/271.xml" +0 -0
  28. {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Catalogs//320/237/320/241_/320/222/320/273/320/260/320/264/320/265/320/273/320/265/321/206.xml" +0 -0
  29. {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Catalogs//320/237/320/241_/320/241/320/277/321/200/320/260/320/262/320/276/321/207/320/275/320/270/320/2721.xml" +0 -0
  30. {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/ConfigDumpInfo.xml +0 -0
  31. {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Configuration.xml +0 -0
  32. {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Languages//320/240/321/203/321/201/321/201/320/272/320/270/320/271.xml" +0 -0
  33. {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262/Ext/ManagerModule.bsl" +0 -0
  34. {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262/Ext/ObjectModule.bsl" +0 -0
  35. {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262/Templates//320/236/321/201/320/275/320/276/320/262/320/275/320/260/321/217/320/241/321/205/320/265/320/274/320/260/320/232/320/276/320/274/320/277/320/276/320/275/320/276/320/262/320/272/320/270/320/224/320/260/320/275/320/275/321/213/321/205/Ext/Template.xml" +0 -0
  36. {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262/Templates//320/236/321/201/320/275/320/276/320/262/320/275/320/260/321/217/320/241/321/205/320/265/320/274/320/260/320/232/320/276/320/274/320/277/320/276/320/275/320/276/320/262/320/272/320/270/320/224/320/260/320/275/320/275/321/213/321/205.xml" +0 -0
  37. {answer42-0.2.13 → answer42-0.2.16}/src/client_cf/Reports//320/237/320/241_/320/241/320/277/320/270/321/201/320/276/320/272/320/255/320/273/320/265/320/274/320/265/320/275/321/202/320/276/320/262.xml" +0 -0
  38. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/__init__.py +0 -0
  39. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/assets/MCPTestClient.cf +0 -0
  40. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/assets/__init__.py +0 -0
  41. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/assets/skills/answer42/SKILL.md +0 -0
  42. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/assets/skills/answer42-rag/SKILL.md +0 -0
  43. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/bridge.py +0 -0
  44. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/credentials.py +0 -0
  45. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/os_support.py +0 -0
  46. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/platform.py +0 -0
  47. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/protocol.py +0 -0
  48. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/rag/__init__.py +0 -0
  49. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/rag/detect.py +0 -0
  50. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/rag/model.py +0 -0
  51. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/rag/parsers.py +0 -0
  52. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/rag/service.py +0 -0
  53. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/rag/store.py +0 -0
  54. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/recorder.py +0 -0
  55. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/release_helper.py +0 -0
  56. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/runtime.py +0 -0
  57. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/skill_installer.py +0 -0
  58. {answer42-0.2.13 → answer42-0.2.16}/src/mcp_1c/window_control.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: answer42
3
- Version: 0.2.13
3
+ Version: 0.2.16
4
4
  Summary: Answer42 — The Answer to Life, Universe, and 1C — UI Driver. MCP-powered 1C:Enterprise UI automation: click, fill, navigate, test, and introspect managed forms through the test-client API
5
5
  Author: Marvin (AI Assistant), 42Clouds, and contributors
6
6
  Author-email: "Kosolapov Stanislav (proDOOMman)" <prodoomman@gmail.com>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "answer42"
3
- version = "0.2.13"
3
+ version = "0.2.16"
4
4
  description = "Answer42 — The Answer to Life, Universe, and 1C — UI Driver. MCP-powered 1C:Enterprise UI automation: click, fill, navigate, test, and introspect managed forms through the test-client API"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -1169,31 +1169,67 @@
1169
1169
  ИмяПоля = СвойствоСтруктуры(Параметры, "field_name", "");
1170
1170
  ИскатьПоЗаголовку = СвойствоСтруктуры(Параметры, "search_by_title", Ложь);
1171
1171
  Таймаут = СвойствоСтруктуры(Параметры, "timeout", 10);
1172
+ // max_depth отвечает только за глубину сериализации подчинённых объектов
1173
+ // выпадающего списка. Глубина поиска поля управляется отдельно, чтобы
1174
+ // глубокие формы не ломали получение простого списка выбора.
1172
1175
  МаксимальнаяГлубина = СвойствоСтруктуры(Параметры, "max_depth", 3);
1176
+ ГлубинаПоиска = СвойствоСтруктуры(Параметры, "search_depth", 0);
1173
1177
  АктивноеОкно = ТестируемоеПриложение.ПолучитьАктивноеОкно();
1174
1178
 
1175
1179
  ИскомоеИмя = ?(ИскатьПоЗаголовку, "", ИмяПоля);
1176
1180
  ИскомыйЗаголовок = ?(ИскатьПоЗаголовку, ИмяПоля, "");
1177
- Поле = НайтиОбъектРекурсивно(АктивноеОкно, ИскомоеИмя, ИскомыйЗаголовок, "тестируемоеполеформы", 0, МаксимальнаяГлубина);
1181
+ Диагностика = Новый Массив;
1182
+ Поле = НайтиПолеФормыДляВыпадающегоСпискаMCP(АктивноеОкно, ИскомоеИмя, ИскомыйЗаголовок, ГлубинаПоиска, Диагностика);
1178
1183
 
1179
1184
  Если Поле = Неопределено Тогда
1180
- Возврат Новый Структура("found,name,title,opened,items,diagnostics", Ложь, ИмяПоля, "", Ложь, Новый Массив, Новый Массив);
1185
+ Возврат Новый Структура("found,name,title,opened,items,diagnostics", Ложь, ИмяПоля, "", Ложь, Новый Массив, Диагностика);
1181
1186
  КонецЕсли;
1182
1187
 
1183
- Диагностика = Новый Массив;
1184
1188
  Варианты = Новый Массив;
1185
1189
  Открыт = Ложь;
1186
- Источник = "choice_list_presentations";
1190
+ Источник = "choice_list_presentations_opened";
1191
+
1192
+ Попытка
1193
+ Поле.Активизировать();
1194
+ Исключение
1195
+ Диагностика.Добавить("activate_before_presentations_failed: " + ОписаниеОшибки());
1196
+ КонецПопытки;
1187
1197
 
1188
1198
  Попытка
1189
- // Это штатный интерактивный API test-client для списка выбора поля формы.
1190
- // Для некоторых доступных визуально переключателей платформа запрещает интерактивные
1191
- // действия, поэтому ниже есть неинтерактивный fallback через свойство СписокВыбора.
1199
+ // Для ссылочных полей платформа часто заполняет представления списка выбора
1200
+ // только после фактического открытия dropdown. Поэтому сначала открываем
1201
+ // список, затем читаем ПолучитьПредставлениеСпискаВыбора().
1202
+ Поле.ОткрытьВыпадающийСписок();
1203
+ Поле.ОжидатьФормированияВыпадающегоСписка(Таймаут);
1204
+ Открыт = ОткрытВыпадающийСписокПоляMCP(Поле);
1192
1205
  Представления = Поле.ПолучитьПредставлениеСпискаВыбора();
1193
1206
  ВариантыИзПредставленийСпискаВыбора(Представления, Варианты);
1194
- Возврат Новый Структура("found,field,opened,items,diagnostics,source", Истина, ОбъектВСтруктуру(Поле, 0, 1), Ложь, Варианты, Диагностика, Источник);
1207
+ Попытка
1208
+ Поле.ЗакрытьВыпадающийСписок();
1209
+ Исключение
1210
+ Диагностика.Добавить("close_after_presentations_failed: " + ОписаниеОшибки());
1211
+ КонецПопытки;
1212
+ Если Варианты.Количество() > 0 Тогда
1213
+ Возврат Новый Структура("found,field,opened,items,diagnostics,source", Истина, ОбъектВСтруктуру(Поле, 0, 1), Открыт, Варианты, Диагностика, Источник);
1214
+ КонецЕсли;
1195
1215
  Исключение
1196
- Диагностика.Добавить("choice_list_presentations_failed: " + ОписаниеОшибки());
1216
+ Диагностика.Добавить("choice_list_presentations_opened_failed: " + ОписаниеОшибки());
1217
+ Попытка
1218
+ Поле.ЗакрытьВыпадающийСписок();
1219
+ Исключение
1220
+ КонецПопытки;
1221
+ КонецПопытки;
1222
+
1223
+ Источник = "choice_list_presentations_closed";
1224
+ Попытка
1225
+ // Неинтерактивный fallback для полей, где список выбора доступен без открытия.
1226
+ Представления = Поле.ПолучитьПредставлениеСпискаВыбора();
1227
+ ВариантыИзПредставленийСпискаВыбора(Представления, Варианты);
1228
+ Если Варианты.Количество() > 0 Тогда
1229
+ Возврат Новый Структура("found,field,opened,items,diagnostics,source", Истина, ОбъектВСтруктуру(Поле, 0, 1), Ложь, Варианты, Диагностика, Источник);
1230
+ КонецЕсли;
1231
+ Исключение
1232
+ Диагностика.Добавить("choice_list_presentations_closed_failed: " + ОписаниеОшибки());
1197
1233
  КонецПопытки;
1198
1234
 
1199
1235
  Источник = "choice_list_property";
@@ -1217,7 +1253,9 @@
1217
1253
  КонецПопытки;
1218
1254
 
1219
1255
  Попытка
1220
- Поле.ОткрытьВыпадающийСписок();
1256
+ Если Не ОткрытВыпадающийСписокПоляMCP(Поле) Тогда
1257
+ Поле.ОткрытьВыпадающийСписок();
1258
+ КонецЕсли;
1221
1259
  Исключение
1222
1260
  Возврат Новый Структура("found,field,opened,items,diagnostics,source,reason,error", Истина, ОбъектВСтруктуру(Поле, 0, 1), Ложь, Варианты, Диагностика, Источник, "open_dropdown_failed", ОписаниеОшибки());
1223
1261
  КонецПопытки;
@@ -1254,6 +1292,57 @@
1254
1292
  Возврат Новый Структура("found,field,opened,items,diagnostics,source", Истина, ОбъектВСтруктуру(Поле, 0, 1), Открыт, Варианты, Диагностика, Источник);
1255
1293
  КонецФункции
1256
1294
 
1295
+ &НаКлиенте
1296
+ Функция ОткрытВыпадающийСписокПоляMCP(Поле)
1297
+ Попытка
1298
+ Возврат Поле.ВыпадающийСписокОткрыт();
1299
+ Исключение
1300
+ Возврат Ложь;
1301
+ КонецПопытки;
1302
+ КонецФункции
1303
+
1304
+ &НаКлиенте
1305
+ Функция НайтиПолеФормыДляВыпадающегоСпискаMCP(АктивноеОкно, ИскомоеИмя, ИскомыйЗаголовок, ГлубинаПоиска, Диагностика)
1306
+ Если ГлубинаПоиска > 0 Тогда
1307
+ Диагностика.Добавить("field_search_depth: " + Строка(ГлубинаПоиска));
1308
+ Возврат НайтиОбъектРекурсивно(АктивноеОкно, ИскомоеИмя, ИскомыйЗаголовок, "тестируемоеполеформы", 0, ГлубинаПоиска);
1309
+ КонецЕсли;
1310
+
1311
+ // Авто-поиск: сначала дешёвый исторический лимит 3, затем расширяемся.
1312
+ // Это сохраняет лёгкую сериализацию dropdown children (max_depth=3), но
1313
+ // не требует от пользователя угадывать глубину поля в сложных формах.
1314
+ ГлубиныПоиска = Новый Массив;
1315
+ ГлубиныПоиска.Добавить(3);
1316
+ ГлубиныПоиска.Добавить(8);
1317
+ ГлубиныПоиска.Добавить(16);
1318
+ ГлубиныПоиска.Добавить(32);
1319
+ Для Каждого ТекущаяГлубина Из ГлубиныПоиска Цикл
1320
+ Поле = НайтиОбъектРекурсивно(АктивноеОкно, ИскомоеИмя, ИскомыйЗаголовок, "тестируемоеполеформы", 0, ТекущаяГлубина);
1321
+ Если Поле <> Неопределено Тогда
1322
+ Диагностика.Добавить("field_found_at_depth: " + Строка(ТекущаяГлубина));
1323
+ Возврат Поле;
1324
+ КонецЕсли;
1325
+ КонецЦикла;
1326
+ Диагностика.Добавить("field_not_found_up_to_depth: 32");
1327
+ Возврат Неопределено;
1328
+ КонецФункции
1329
+
1330
+ &НаКлиенте
1331
+ Функция ПредставлениеВариантаСпискаВыбораMCP(Представление)
1332
+ Если ТипЗнч(Представление) = Тип("Структура") Тогда
1333
+ Если Представление.Свойство("ПредставлениеДанных") Тогда
1334
+ Возврат Строка(Представление.ПредставлениеДанных);
1335
+ ИначеЕсли Представление.Свойство("ОтображаемыйТекст") Тогда
1336
+ Возврат Строка(Представление.ОтображаемыйТекст);
1337
+ ИначеЕсли Представление.Свойство("Представление") Тогда
1338
+ Возврат Строка(Представление.Представление);
1339
+ ИначеЕсли Представление.Свойство("Значение") Тогда
1340
+ Возврат Строка(Представление.Значение);
1341
+ КонецЕсли;
1342
+ КонецЕсли;
1343
+ Возврат Строка(Представление);
1344
+ КонецФункции
1345
+
1257
1346
  &НаКлиенте
1258
1347
  Процедура ВариантыИзПредставленийСпискаВыбора(Представления, Варианты)
1259
1348
  Для Каждого Представление Из Представления Цикл
@@ -3132,11 +3221,56 @@
3132
3221
  // представление асинхронно и/или пересоздавать объект поля. Поэтому после
3133
3222
  // ввода перечитываем поле из активного окна и коротко ждем фактическое
3134
3223
  // представление данных, прежде чем переходить к fallback-методам.
3224
+ //
3225
+ // Для полей с выпадающим списком (ссылочные поля, поля выбора) платформа
3226
+ // после ВвестиТекст() часто открывает dropdown с отфильтрованными вариантами.
3227
+ // В этом случае выбираем первый вариант и возвращаем его представление.
3135
3228
  Попытка
3136
3229
  Поле.ВвестиТекст(Значение);
3137
3230
  Если ПустаяСтрока(Значение) Тогда
3138
3231
  Возврат Новый Структура("set,field,value,method", Истина, ИмяПоля, Значение, "ВвестиТекст");
3139
3232
  КонецЕсли;
3233
+
3234
+ // Проверяем, открылся ли выпадающий список после ввода текста.
3235
+ // Это характерно для ссылочных полей и полей с выбором из справочника.
3236
+ Если ОткрытВыпадающийСписокПоляMCP(Поле) Тогда
3237
+ Попытка
3238
+ Поле.ОжидатьФормированияВыпадающегоСписка(10);
3239
+ Исключение
3240
+ КонецПопытки;
3241
+ Представления = Поле.ПолучитьПредставлениеСпискаВыбора();
3242
+ Если Представления.Количество() > 0 Тогда
3243
+ // Выбираем первый вариант (индекс 0).
3244
+ ПредставлениеВыбираемогоВарианта = ПредставлениеВариантаСпискаВыбораMCP(Представления[0]);
3245
+ Поле.ВыполнитьВыборИзСпискаВыбора(0);
3246
+ ВыбранноеПредставление = ПредставлениеДанныхПоля(Поле);
3247
+ Если ПустаяСтрока(ВыбранноеПредставление) Тогда
3248
+ ВыбранноеПредставление = ПредставлениеВыбираемогоВарианта;
3249
+ КонецЕсли;
3250
+ Возврат Новый Структура("set,field,value,method,selected", Истина, ИмяПоля, Значение, "ВвестиТекст+ВыполнитьВыборИзСпискаВыбора(0)", ВыбранноеПредставление);
3251
+ Иначе
3252
+ // Список выбора пуст — просто закрываем dropdown.
3253
+ Попытка
3254
+ Поле.ЗакрытьВыпадающийСписок();
3255
+ Исключение
3256
+ КонецПопытки;
3257
+ КонецЕсли;
3258
+ Иначе
3259
+ // Dropdown не открылся автоматически — пробуем открыть явно и выбрать.
3260
+ Попытка
3261
+ Поле.ОткрытьВыпадающийСписок();
3262
+ Поле.ОжидатьФормированияВыпадающегоСписка(10);
3263
+ Поле.ВыполнитьВыборИзСпискаВыбора(Значение);
3264
+ ВыбранноеПредставление = ПредставлениеДанныхПоля(Поле);
3265
+ Если ПустаяСтрока(ВыбранноеПредставление) Тогда
3266
+ ВыбранноеПредставление = Значение;
3267
+ КонецЕсли;
3268
+ Возврат Новый Структура("set,field,value,method,selected", Истина, ИмяПоля, Значение, "ВвестиТекст+ОткрытьВыпадающийСписок+ВыполнитьВыборИзСпискаВыбора", ВыбранноеПредставление);
3269
+ Исключение
3270
+ // Не удалось открыть/выбрать — продолжаем к циклу ожидания представления.
3271
+ КонецПопытки;
3272
+ КонецЕсли;
3273
+
3140
3274
  НачалоОжиданияВвода = ТекущаяУниверсальнаяДатаВМиллисекундах();
3141
3275
  Пока ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоОжиданияВвода < 2000 Цикл
3142
3276
  АктивноеОкно = ТестируемоеПриложение.ПолучитьАктивноеОкно();
@@ -3149,8 +3283,7 @@
3149
3283
  Возврат Новый Структура("set,field,value,method", Истина, ИмяПоля, Значение, "ВвестиТекст");
3150
3284
  КонецЕсли;
3151
3285
  КонецЦикла;
3152
- РезультатВвода = Новый Структура("set,field,value,method,verified,current_value", Истина, ИмяПоля, Значение, "ВвестиТекстБезПодтвержденияПредставления", Ложь, ПредставлениеПослеВвода);
3153
- Возврат РезультатВвода;
3286
+ Ошибки.Добавить("ВвестиТекст=значение введено, но представление не подтвердилось; current_value=" + ПредставлениеПослеВвода);
3154
3287
  Исключение
3155
3288
  Ошибки.Добавить("ВвестиТекст=" + ОписаниеОшибки());
3156
3289
  КонецПопытки;
@@ -2800,6 +2800,7 @@ async def field_dropdown_items(
2800
2800
  search_by_title: Annotated[bool, "Search by visible title instead of technical name"] = False,
2801
2801
  timeout: Annotated[int, "Dropdown formation timeout in seconds"] = 10,
2802
2802
  max_depth: Annotated[int, "Maximum depth used to serialize dropdown child objects"] = 3,
2803
+ search_depth: Annotated[int, "Maximum depth used to find the field; 0 means auto-expand search depth"] = 0,
2803
2804
  *,
2804
2805
  session_id: Annotated[str, "Session id"] = DEFAULT_SESSION,
2805
2806
  ) -> Any:
@@ -2807,7 +2808,13 @@ async def field_dropdown_items(
2807
2808
  return await _bridge_call_recorded(
2808
2809
  session_id,
2809
2810
  "field_dropdown_items",
2810
- {"field_name": field_name, "search_by_title": search_by_title, "timeout": timeout, "max_depth": max_depth},
2811
+ {
2812
+ "field_name": field_name,
2813
+ "search_by_title": search_by_title,
2814
+ "timeout": timeout,
2815
+ "max_depth": max_depth,
2816
+ "search_depth": search_depth,
2817
+ },
2811
2818
  )
2812
2819
 
2813
2820
 
File without changes
File without changes
File without changes
File without changes
File without changes