answer42 0.2.27__tar.gz → 0.2.28__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.27 → answer42-0.2.28}/PKG-INFO +1 -1
  2. {answer42-0.2.27 → answer42-0.2.28}/pyproject.toml +1 -1
  3. {answer42-0.2.27 → answer42-0.2.28}/scripts/e2e_stable.py +13 -2
  4. {answer42-0.2.27 → answer42-0.2.28}/.gitignore +0 -0
  5. {answer42-0.2.27 → answer42-0.2.28}/LICENSE +0 -0
  6. {answer42-0.2.27 → answer42-0.2.28}/README.md +0 -0
  7. {answer42-0.2.27 → answer42-0.2.28}/credentials.example.json +0 -0
  8. {answer42-0.2.27 → answer42-0.2.28}/docs/agent-installation.md +0 -0
  9. {answer42-0.2.27 → answer42-0.2.28}/docs/architecture.md +0 -0
  10. {answer42-0.2.27 → answer42-0.2.28}/docs/assets/answer42-logo.png +0 -0
  11. {answer42-0.2.27 → answer42-0.2.28}/docs/assets/platform42-logo.svg +0 -0
  12. {answer42-0.2.27 → answer42-0.2.28}/docs/installation.md +0 -0
  13. {answer42-0.2.27 → answer42-0.2.28}/scripts/build_cf.py +0 -0
  14. {answer42-0.2.27 → answer42-0.2.28}/scripts/build_pages.py +0 -0
  15. {answer42-0.2.27 → answer42-0.2.28}/scripts/openclaw_mcp_autoreload.py +0 -0
  16. {answer42-0.2.27 → answer42-0.2.28}/scripts/rag_cli.py +0 -0
  17. {answer42-0.2.27 → answer42-0.2.28}/src/cf/ConfigDumpInfo.xml +0 -0
  18. {answer42-0.2.27 → answer42-0.2.28}/src/cf/Configuration.xml +0 -0
  19. {answer42-0.2.27 → answer42-0.2.28}/src/cf/DataProcessors/MCPTestManager/Ext/ObjectModule.bsl +0 -0
  20. {answer42-0.2.27 → answer42-0.2.28}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260/Ext/Form/Module.bsl" +0 -0
  21. {answer42-0.2.27 → answer42-0.2.28}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260/Ext/Form.xml" +0 -0
  22. {answer42-0.2.27 → answer42-0.2.28}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260.xml" +0 -0
  23. {answer42-0.2.27 → answer42-0.2.28}/src/cf/DataProcessors/MCPTestManager.xml +0 -0
  24. {answer42-0.2.27 → answer42-0.2.28}/src/cf/Ext/ManagedApplicationModule.bsl +0 -0
  25. {answer42-0.2.27 → answer42-0.2.28}/src/cf/Languages//320/240/321/203/321/201/321/201/320/272/320/270/320/271.xml" +0 -0
  26. {answer42-0.2.27 → answer42-0.2.28}/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
  27. {answer42-0.2.27 → answer42-0.2.28}/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
  28. {answer42-0.2.27 → answer42-0.2.28}/src/client_cf/ConfigDumpInfo.xml +0 -0
  29. {answer42-0.2.27 → answer42-0.2.28}/src/client_cf/Configuration.xml +0 -0
  30. {answer42-0.2.27 → answer42-0.2.28}/src/client_cf/Languages//320/240/321/203/321/201/321/201/320/272/320/270/320/271.xml" +0 -0
  31. {answer42-0.2.27 → answer42-0.2.28}/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
  32. {answer42-0.2.27 → answer42-0.2.28}/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
  33. {answer42-0.2.27 → answer42-0.2.28}/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
  34. {answer42-0.2.27 → answer42-0.2.28}/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
  35. {answer42-0.2.27 → answer42-0.2.28}/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
  36. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/__init__.py +0 -0
  37. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/assets/MCPTestClient.cf +0 -0
  38. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/assets/MCPTestManager.cf +0 -0
  39. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/assets/__init__.py +0 -0
  40. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/assets/skills/answer42/SKILL.md +0 -0
  41. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/assets/skills/answer42-rag/SKILL.md +0 -0
  42. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/bridge.py +0 -0
  43. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/credentials.py +0 -0
  44. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/os_support.py +0 -0
  45. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/platform.py +0 -0
  46. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/protocol.py +0 -0
  47. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/rag/__init__.py +0 -0
  48. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/rag/detect.py +0 -0
  49. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/rag/model.py +0 -0
  50. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/rag/parsers.py +0 -0
  51. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/rag/service.py +0 -0
  52. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/rag/store.py +0 -0
  53. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/recorder.py +0 -0
  54. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/release_helper.py +0 -0
  55. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/runtime.py +0 -0
  56. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/server.py +0 -0
  57. {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/skill_installer.py +0 -0
  58. {answer42-0.2.27 → answer42-0.2.28}/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.27
3
+ Version: 0.2.28
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.27"
3
+ version = "0.2.28"
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"
@@ -19,6 +19,7 @@ from __future__ import annotations
19
19
  import asyncio
20
20
  import json
21
21
  import os
22
+ import shutil
22
23
  import subprocess
23
24
  import sys
24
25
  import tempfile
@@ -61,19 +62,29 @@ def _prebuild_shared_client_base(shared_id: str) -> None:
61
62
  This avoids three child MCP servers racing to create/load the same file
62
63
  infobase. The shared ibsrv itself is still started lazily by start_session.
63
64
  """
65
+ from mcp_1c import __version__
64
66
  from mcp_1c import platform as _platform
65
67
  from mcp_1c import runtime
68
+ from mcp_1c.server import _file_sha256
66
69
 
67
70
  platform_dir = _platform.find_platform_dir(os.environ.get("ONEC_VERSION") or None)
68
71
  ibcmd = str(platform_dir / "ibcmd")
69
72
  db_path = Path(os.getenv("ONEC_MCP_SHARED_CLIENT_BASE_DIR", "/tmp/answer42/shared-client-bases")) / shared_id / "ib"
70
- if db_path.exists() and any(db_path.iterdir()):
71
- return
72
73
  cf_path = runtime.DEFAULT_CLIENT_CF_BUILT
73
74
  if not Path(cf_path).exists():
74
75
  raise FileNotFoundError(f"MCPTestClient.cf not found at {cf_path}.")
76
+ marker_path = db_path.parent / f".{db_path.name}.answer42-cf.json"
77
+ marker_data = {"answer42_version": __version__, "cf_sha256": _file_sha256(Path(cf_path)), "cf_path": str(cf_path)}
78
+ if db_path.exists() and any(db_path.iterdir()) and marker_path.exists():
79
+ try:
80
+ if json.loads(marker_path.read_text(encoding="utf-8")) == marker_data:
81
+ return
82
+ except Exception:
83
+ pass
84
+ shutil.rmtree(db_path, ignore_errors=True)
75
85
  runtime.create_file_infobase(ibcmd, db_path)
76
86
  runtime.load_configuration(ibcmd, db_path, cf_path)
87
+ marker_path.write_text(json.dumps(marker_data, ensure_ascii=False, indent=2), encoding="utf-8")
77
88
 
78
89
 
79
90
  def _safe_suffix(value: str) -> str:
File without changes
File without changes
File without changes
File without changes
File without changes