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.
- {answer42-0.4.80 → answer42-0.4.82}/PKG-INFO +1 -1
- {answer42-0.4.80 → answer42-0.4.82}/docs/architecture.md +5 -2
- {answer42-0.4.80 → answer42-0.4.82}/pyproject.toml +1 -1
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/summary_backend.py +50 -2
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/server.py +35 -6
- {answer42-0.4.80 → answer42-0.4.82}/.gitignore +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/LICENSE +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/README.md +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/credentials.example.json +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/docs/agent-installation.md +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/docs/assets/answer42-logo.png +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/docs/assets/platform42-logo.svg +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/docs/installation.md +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/scripts/build_cf.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/scripts/build_pages.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/scripts/e2e_http_smoke.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/scripts/e2e_stable.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/scripts/openclaw_mcp_autoreload.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/scripts/rag_cli.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/cf/ConfigDumpInfo.xml +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/cf/Configuration.xml +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/cf/DataProcessors/MCPTestManager/Ext/ObjectModule.bsl +0 -0
- {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
- {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
- {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
- {answer42-0.4.80 → answer42-0.4.82}/src/cf/DataProcessors/MCPTestManager.xml +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/cf/Ext/ManagedApplicationModule.bsl +0 -0
- {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
- {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
- {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
- {answer42-0.4.80 → answer42-0.4.82}/src/client_cf/ConfigDumpInfo.xml +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/client_cf/Configuration.xml +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/__init__.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/assets/MCPTestClient.cf +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/assets/MCPTestManager.cf +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/assets/__init__.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/assets/skills/answer42/SKILL.md +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/assets/skills/answer42-rag/SKILL.md +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/assets/skills/answer42-universal-report/SKILL.md +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/auth.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/bridge.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/credentials.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/os_support.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/platform.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/protocol.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/__init__.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/detect.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/dump.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/model.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/parsers.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/service.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/store.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/rag/summary_vector.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/recorder.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/release_helper.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/runtime.py +0 -0
- {answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/skill_installer.py +0 -0
- {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.
|
|
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`, `
|
|
202
|
-
|
|
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.
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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=
|
|
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,
|
|
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=
|
|
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=
|
|
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
|
-
|
|
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
|
|
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.4.80 → answer42-0.4.82}/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
|
{answer42-0.4.80 → answer42-0.4.82}/src/mcp_1c/assets/skills/answer42-universal-report/SKILL.md
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
|