answer42 0.4.80__tar.gz → 0.4.82__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 (64) hide show
  1. {answer42-0.4.80 → answer42-0.4.82}/PKG-INFO +1 -1
  2. {answer42-0.4.80 → answer42-0.4.82}/docs/architecture.md +5 -2
  3. {answer42-0.4.80 → answer42-0.4.82}/pyproject.toml +1 -1
  4. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/summary_backend.py +50 -2
  5. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/server.py +35 -6
  6. {answer42-0.4.80 → answer42-0.4.82}/.gitignore +0 -0
  7. {answer42-0.4.80 → answer42-0.4.82}/LICENSE +0 -0
  8. {answer42-0.4.80 → answer42-0.4.82}/README.md +0 -0
  9. {answer42-0.4.80 → answer42-0.4.82}/credentials.example.json +0 -0
  10. {answer42-0.4.80 → answer42-0.4.82}/docs/agent-installation.md +0 -0
  11. {answer42-0.4.80 → answer42-0.4.82}/docs/assets/answer42-logo.png +0 -0
  12. {answer42-0.4.80 → answer42-0.4.82}/docs/assets/platform42-logo.svg +0 -0
  13. {answer42-0.4.80 → answer42-0.4.82}/docs/installation.md +0 -0
  14. {answer42-0.4.80 → answer42-0.4.82}/scripts/build_cf.py +0 -0
  15. {answer42-0.4.80 → answer42-0.4.82}/scripts/build_pages.py +0 -0
  16. {answer42-0.4.80 → answer42-0.4.82}/scripts/e2e_http_smoke.py +0 -0
  17. {answer42-0.4.80 → answer42-0.4.82}/scripts/e2e_stable.py +0 -0
  18. {answer42-0.4.80 → answer42-0.4.82}/scripts/openclaw_mcp_autoreload.py +0 -0
  19. {answer42-0.4.80 → answer42-0.4.82}/scripts/rag_cli.py +0 -0
  20. {answer42-0.4.80 → answer42-0.4.82}/src/cf/ConfigDumpInfo.xml +0 -0
  21. {answer42-0.4.80 → answer42-0.4.82}/src/cf/Configuration.xml +0 -0
  22. {answer42-0.4.80 → answer42-0.4.82}/src/cf/DataProcessors/MCPTestManager/Ext/ObjectModule.bsl +0 -0
  23. {answer42-0.4.80 → answer42-0.4.82}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260/Ext/Form/Module.bsl" +0 -0
  24. {answer42-0.4.80 → answer42-0.4.82}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260/Ext/Form.xml" +0 -0
  25. {answer42-0.4.80 → answer42-0.4.82}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260.xml" +0 -0
  26. {answer42-0.4.80 → answer42-0.4.82}/src/cf/DataProcessors/MCPTestManager.xml +0 -0
  27. {answer42-0.4.80 → answer42-0.4.82}/src/cf/Ext/ManagedApplicationModule.bsl +0 -0
  28. {answer42-0.4.80 → answer42-0.4.82}/src/cf/Languages//320/240/321/203/321/201/321/201/320/272/320/270/320/271.xml" +0 -0
  29. {answer42-0.4.80 → answer42-0.4.82}/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
  30. {answer42-0.4.80 → answer42-0.4.82}/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
  31. {answer42-0.4.80 → answer42-0.4.82}/src/client_cf/ConfigDumpInfo.xml +0 -0
  32. {answer42-0.4.80 → answer42-0.4.82}/src/client_cf/Configuration.xml +0 -0
  33. {answer42-0.4.80 → answer42-0.4.82}/src/client_cf/Languages//320/240/321/203/321/201/321/201/320/272/320/270/320/271.xml" +0 -0
  34. {answer42-0.4.80 → answer42-0.4.82}/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
  35. {answer42-0.4.80 → answer42-0.4.82}/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
  36. {answer42-0.4.80 → answer42-0.4.82}/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
  37. {answer42-0.4.80 → answer42-0.4.82}/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
  38. {answer42-0.4.80 → answer42-0.4.82}/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
  39. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/__init__.py +0 -0
  40. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/assets/MCPTestClient.cf +0 -0
  41. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/assets/MCPTestManager.cf +0 -0
  42. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/assets/__init__.py +0 -0
  43. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/assets/skills/answer42/SKILL.md +0 -0
  44. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/assets/skills/answer42-rag/SKILL.md +0 -0
  45. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/assets/skills/answer42-universal-report/SKILL.md +0 -0
  46. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/auth.py +0 -0
  47. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/bridge.py +0 -0
  48. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/credentials.py +0 -0
  49. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/os_support.py +0 -0
  50. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/platform.py +0 -0
  51. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/protocol.py +0 -0
  52. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/__init__.py +0 -0
  53. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/detect.py +0 -0
  54. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/dump.py +0 -0
  55. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/model.py +0 -0
  56. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/parsers.py +0 -0
  57. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/service.py +0 -0
  58. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/store.py +0 -0
  59. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/summary_vector.py +0 -0
  60. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/recorder.py +0 -0
  61. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/release_helper.py +0 -0
  62. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/runtime.py +0 -0
  63. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/skill_installer.py +0 -0
  64. {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/window_control.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: answer42
3
- Version: 0.4.80
3
+ Version: 0.4.82
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>
@@ -198,8 +198,11 @@ machine-readable code and remediation message for the agent.
198
198
  `start_session()` defaults to `rag_enabled=false` so ordinary sessions do not pay
199
199
  for live configuration registry reads. To bind a summary snapshot explicitly,
200
200
  pass `summary_rag_config`, for example `summary_rag_config="bp"`. Supported
201
- aliases include `bp`, `accounting30` and `Бухгалтерия предприятия`; Answer42
202
- creates a `configuration+fresh` summary snapshot without live autodetection and
201
+ aliases include summary repository codes (`bp`, `bpc`, `ka`, `ut`, `zup`, etc.),
202
+ 1C identifiers (`Accounting30`, `AccountingCorp30`, `ARAutomation20`, etc.) and
203
+ common Russian names such as `Бухгалтерия предприятия`, `Комплексная автоматизация`,
204
+ `Управление торговлей` and `Зарплата и управление персоналом`; Answer42 creates a
205
+ `configuration+fresh` summary snapshot without live autodetection and
203
206
  returns `rag_notice`. Successful explicit binding reports
204
207
  `rag_notice.enabled=true`, `backend="configuration-summary"`, the selected
205
208
  snapshot, layers and `summary_backend` transport/project/ref. If the summary
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "answer42"
3
- version = "0.4.80"
3
+ version = "0.4.82"
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"
@@ -32,11 +32,59 @@ SEARCH_INDEX_PATHS = {"configuration": "{config}/configuration/rag/search-index"
32
32
  EXTENSION_LAYER_ALIASES = {"fresh": "fresh"}
33
33
  CONFIG_ALIASES = {
34
34
  "accounting30": "bp",
35
- "бухгалтерияпредприятия": "bp",
35
+ "accountingbase30": "bpb",
36
+ "accountingcorp30": "bpc",
37
+ "accountingkz30": "bpkz",
38
+ "accountingnpo": "bnko",
39
+ "arautomation20": "ka",
40
+ "bnko": "bnko",
41
+ "bp": "bp",
42
+ "bpb": "bpb",
43
+ "bpc": "bpc",
44
+ "bpkz": "bpkz",
45
+ "hrm30": "zup",
46
+ "ka": "ka",
47
+ "retail23": "rt",
48
+ "retail30": "rtl",
49
+ "rt": "rt",
50
+ "rtl": "rtl",
51
+ "smallbusiness30": "unf",
52
+ "smallbusinesskz3": "unfkz",
53
+ "trade110": "ut",
54
+ "unf": "unf",
55
+ "unfkz": "unfkz",
56
+ "ut": "ut",
57
+ "zup": "zup",
58
+ "бнко": "bnko",
59
+ "бухгалтерия базовая": "bpb",
60
+ "бухгалтерия базовая редакция 3.0": "bpb",
61
+ "бухгалтерия для казахстана": "bpkz",
62
+ "бухгалтерия для казахстана редакция 3.0": "bpkz",
63
+ "бухгалтерия для некоммерческой организации": "bnko",
36
64
  "бухгалтерия предприятия": "bp",
65
+ "бухгалтерия предприятия базовая": "bpb",
66
+ "бухгалтерия предприятия корп": "bpc",
67
+ "бухгалтерия предприятия корп редакция 3.0": "bpc",
68
+ "бухгалтерия предприятия корпоративная": "bpc",
37
69
  "бухгалтерия предприятия редакция 3.0": "bp",
38
70
  "бухгалтерия предприятия, редакция 3.0": "bp",
39
- "bp": "bp",
71
+ "зарплата и управление персоналом": "zup",
72
+ "зарплата и управление персоналом редакция 3": "zup",
73
+ "зуп": "zup",
74
+ "комплексная автоматизация": "ka",
75
+ "комплексная автоматизация 2": "ka",
76
+ "розница": "rt",
77
+ "розница 2": "rt",
78
+ "розница 2.3": "rt",
79
+ "розница 3": "rtl",
80
+ "розница 3.0": "rtl",
81
+ "у н ф": "unf",
82
+ "унф": "unf",
83
+ "унф для казахстана": "unfkz",
84
+ "управление нашей фирмой": "unf",
85
+ "управление нашей фирмой для казахстана": "unfkz",
86
+ "управление торговлей": "ut",
87
+ "управление торговлей 11": "ut",
40
88
  }
41
89
 
42
90
 
@@ -80,6 +80,36 @@ FORM_HINTS_LOCK = os_support.runtime_path("ONEC_MCP_FORM_HINTS_LOCK", "form-hint
80
80
  UI_TREE_RESOURCE_AUTO_THRESHOLD_TOKENS = int(os.getenv("ONEC_MCP_UI_TREE_RESOURCE_AUTO_THRESHOLD_TOKENS", "50000"))
81
81
  UI_TREE_RESOURCE_AUTO_THRESHOLD_BYTES = int(os.getenv("ONEC_MCP_UI_TREE_RESOURCE_AUTO_THRESHOLD_BYTES", "0")) # deprecated fallback; 0 disables
82
82
  NOTIFY_TOOLS_CHANGED_ON_STARTUP = os.getenv("ONEC_MCP_NOTIFY_TOOLS_CHANGED_ON_STARTUP", "1").strip().lower() not in {"0", "false", "no", "off"}
83
+
84
+
85
+ def _float_env(names: str | tuple[str, ...], default: float) -> float:
86
+ env_names = (names,) if isinstance(names, str) else names
87
+ for name in env_names:
88
+ raw = os.getenv(name)
89
+ if raw is None or raw.strip() == "":
90
+ continue
91
+ try:
92
+ return float(raw)
93
+ except ValueError:
94
+ logging.warning("Ignoring invalid float value for %s=%r; trying fallback/default", name, raw)
95
+ return default
96
+
97
+
98
+ START_SESSION_TIMEOUT = _float_env("ONEC_MCP_START_SESSION_TIMEOUT", 99.0)
99
+ START_SESSION_BRIDGE_CONNECT_TIMEOUT = _float_env(
100
+ (
101
+ "ONEC_MCP_START_SESSION_BRIDGE_CONNECT_TIMEOUT",
102
+ "ONEC_MCP_BRIDGE_CONNECT_TIMEOUT",
103
+ ),
104
+ START_SESSION_TIMEOUT,
105
+ )
106
+ START_SESSION_TEST_CLIENT_READY_TIMEOUT = _float_env(
107
+ (
108
+ "ONEC_MCP_START_SESSION_TEST_CLIENT_READY_TIMEOUT",
109
+ "ONEC_MCP_TEST_CLIENT_READY_TIMEOUT",
110
+ ),
111
+ START_SESSION_TIMEOUT,
112
+ )
83
113
  TOOLS_CHANGED_STARTUP_DELAYS = tuple(
84
114
  float(part)
85
115
  for part in re.split(r"[,;\s]+", os.getenv("ONEC_MCP_TOOLS_CHANGED_STARTUP_DELAYS", "1,3,10,30").strip())
@@ -1435,7 +1465,7 @@ async def _reconnect_persisted_session(sess: SessionState) -> bool:
1435
1465
  )
1436
1466
  rt.manager_process = manager_proc
1437
1467
  sess.manager_pid = manager_proc.pid
1438
- await _wait_for_bridge_connected(sess, timeout=60.0)
1468
+ await _wait_for_bridge_connected(sess, timeout=START_SESSION_BRIDGE_CONNECT_TIMEOUT)
1439
1469
  params = {
1440
1470
  "base_url": sess.base_url,
1441
1471
  "username": sess.username,
@@ -4476,7 +4506,7 @@ async def start_session(
4476
4506
  execute: Annotated[str, "External data processor/report path for the test-client /Execute command-line parameter"] = "",
4477
4507
  command_parameter: Annotated[str, "Additional test-client /C value; when extra_args already contains /C, this value is appended with ';'"] = "",
4478
4508
  rag_enabled: Annotated[bool, "Enable built-in RAG for this session"] = False,
4479
- summary_rag_config: Annotated[str, "Explicit Summary RAG configuration alias/code, e.g. bp, accounting30, Бухгалтерия предприятия. Enables configuration+fresh summary snapshot without live autodetection."] = "",
4509
+ summary_rag_config: Annotated[str, "Explicit Summary RAG configuration alias/code, e.g. bp, bpc, ka, ut, zup, Accounting30, Бухгалтерия предприятия. Enables configuration+fresh summary snapshot without live autodetection."] = "",
4480
4510
  include_timings: Annotated[bool, "Include diagnostic startup timing breakdown in the returned _timings field"] = False,
4481
4511
  ) -> dict[str, Any]:
4482
4512
  """One-shot session factory: detect version, start infrastructure and connect the 1C test client."""
@@ -4633,7 +4663,7 @@ async def start_session(
4633
4663
  )
4634
4664
  runtime_state.manager_process = manager_proc
4635
4665
  sess.manager_pid = manager_proc.pid
4636
- await _wait_for_bridge_connected(sess, timeout=60.0)
4666
+ await _wait_for_bridge_connected(sess, timeout=START_SESSION_BRIDGE_CONNECT_TIMEOUT)
4637
4667
  mark_stage("start_manager_and_wait_bridge")
4638
4668
  except Exception as exc:
4639
4669
  diagnostic_error = _manager_failure_diagnostics(sess, exc)
@@ -5412,7 +5442,7 @@ async def _connect_test_client_impl(
5412
5442
  timings[f"{name}_seconds"] = round(now - stage_monotonic, 3)
5413
5443
  stage_monotonic = now
5414
5444
 
5415
- await _wait_for_bridge_connected(sess, timeout=60.0)
5445
+ await _wait_for_bridge_connected(sess, timeout=START_SESSION_BRIDGE_CONNECT_TIMEOUT)
5416
5446
  manager_info = await _verify_manager_protocol(sess)
5417
5447
  mark_stage("verify_manager_protocol")
5418
5448
  r_base = _platform.normalize_infobase_url(base_url or sess.base_url)
@@ -5553,8 +5583,7 @@ async def _connect_test_client_impl(
5553
5583
  _touch_session(sess)
5554
5584
  monitor_task: asyncio.Task[int | None] | None = None
5555
5585
  try:
5556
- wait_timeout = float(os.getenv("ONEC_MCP_TEST_CLIENT_READY_TIMEOUT", "55"))
5557
- await _wait_for_test_client_ready(sess, host, r_port, timeout=wait_timeout)
5586
+ await _wait_for_test_client_ready(sess, host, r_port, timeout=START_SESSION_TEST_CLIENT_READY_TIMEOUT)
5558
5587
  mark_stage("wait_test_client_port")
5559
5588
  if sess.test_client_process is not None:
5560
5589
  monitor_task = asyncio.create_task(_wait_for_test_client_process_exit(sess.test_client_process))
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes