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.
- {answer42-0.2.27 → answer42-0.2.28}/PKG-INFO +1 -1
- {answer42-0.2.27 → answer42-0.2.28}/pyproject.toml +1 -1
- {answer42-0.2.27 → answer42-0.2.28}/scripts/e2e_stable.py +13 -2
- {answer42-0.2.27 → answer42-0.2.28}/.gitignore +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/LICENSE +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/README.md +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/credentials.example.json +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/docs/agent-installation.md +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/docs/architecture.md +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/docs/assets/answer42-logo.png +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/docs/assets/platform42-logo.svg +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/docs/installation.md +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/scripts/build_cf.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/scripts/build_pages.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/scripts/openclaw_mcp_autoreload.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/scripts/rag_cli.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/cf/ConfigDumpInfo.xml +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/cf/Configuration.xml +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/cf/DataProcessors/MCPTestManager/Ext/ObjectModule.bsl +0 -0
- {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
- {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
- {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
- {answer42-0.2.27 → answer42-0.2.28}/src/cf/DataProcessors/MCPTestManager.xml +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/cf/Ext/ManagedApplicationModule.bsl +0 -0
- {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
- {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
- {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
- {answer42-0.2.27 → answer42-0.2.28}/src/client_cf/ConfigDumpInfo.xml +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/client_cf/Configuration.xml +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/__init__.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/assets/MCPTestClient.cf +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/assets/MCPTestManager.cf +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/assets/__init__.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/assets/skills/answer42/SKILL.md +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/assets/skills/answer42-rag/SKILL.md +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/bridge.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/credentials.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/os_support.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/platform.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/protocol.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/rag/__init__.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/rag/detect.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/rag/model.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/rag/parsers.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/rag/service.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/rag/store.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/recorder.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/release_helper.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/runtime.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/server.py +0 -0
- {answer42-0.2.27 → answer42-0.2.28}/src/mcp_1c/skill_installer.py +0 -0
- {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.
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{answer42-0.2.27 → answer42-0.2.28}/src/cf/DataProcessors/MCPTestManager/Ext/ObjectModule.bsl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|