answer42 0.2.6__tar.gz → 0.2.7__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.6 → answer42-0.2.7}/PKG-INFO +1 -1
  2. {answer42-0.2.6 → answer42-0.2.7}/pyproject.toml +1 -1
  3. {answer42-0.2.6 → answer42-0.2.7}/scripts/build_pages.py +1 -2
  4. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/server.py +27 -0
  5. {answer42-0.2.6 → answer42-0.2.7}/.gitignore +0 -0
  6. {answer42-0.2.6 → answer42-0.2.7}/LICENSE +0 -0
  7. {answer42-0.2.6 → answer42-0.2.7}/README.md +0 -0
  8. {answer42-0.2.6 → answer42-0.2.7}/credentials.example.json +0 -0
  9. {answer42-0.2.6 → answer42-0.2.7}/docs/agent-installation.md +0 -0
  10. {answer42-0.2.6 → answer42-0.2.7}/docs/architecture.md +0 -0
  11. {answer42-0.2.6 → answer42-0.2.7}/docs/assets/answer42-logo.png +0 -0
  12. {answer42-0.2.6 → answer42-0.2.7}/docs/assets/platform42-logo.svg +0 -0
  13. {answer42-0.2.6 → answer42-0.2.7}/docs/installation.md +0 -0
  14. {answer42-0.2.6 → answer42-0.2.7}/scripts/build_cf.py +0 -0
  15. {answer42-0.2.6 → answer42-0.2.7}/scripts/e2e_stable.py +0 -0
  16. {answer42-0.2.6 → answer42-0.2.7}/scripts/openclaw_mcp_autoreload.py +0 -0
  17. {answer42-0.2.6 → answer42-0.2.7}/scripts/rag_cli.py +0 -0
  18. {answer42-0.2.6 → answer42-0.2.7}/src/cf/ConfigDumpInfo.xml +0 -0
  19. {answer42-0.2.6 → answer42-0.2.7}/src/cf/Configuration.xml +0 -0
  20. {answer42-0.2.6 → answer42-0.2.7}/src/cf/DataProcessors/MCPTestManager/Ext/ObjectModule.bsl +0 -0
  21. {answer42-0.2.6 → answer42-0.2.7}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260/Ext/Form/Module.bsl" +0 -0
  22. {answer42-0.2.6 → answer42-0.2.7}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260/Ext/Form.xml" +0 -0
  23. {answer42-0.2.6 → answer42-0.2.7}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260.xml" +0 -0
  24. {answer42-0.2.6 → answer42-0.2.7}/src/cf/DataProcessors/MCPTestManager.xml +0 -0
  25. {answer42-0.2.6 → answer42-0.2.7}/src/cf/Ext/ManagedApplicationModule.bsl +0 -0
  26. {answer42-0.2.6 → answer42-0.2.7}/src/cf/Languages//320/240/321/203/321/201/321/201/320/272/320/270/320/271.xml" +0 -0
  27. {answer42-0.2.6 → answer42-0.2.7}/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
  28. {answer42-0.2.6 → answer42-0.2.7}/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
  29. {answer42-0.2.6 → answer42-0.2.7}/src/client_cf/ConfigDumpInfo.xml +0 -0
  30. {answer42-0.2.6 → answer42-0.2.7}/src/client_cf/Configuration.xml +0 -0
  31. {answer42-0.2.6 → answer42-0.2.7}/src/client_cf/Languages//320/240/321/203/321/201/321/201/320/272/320/270/320/271.xml" +0 -0
  32. {answer42-0.2.6 → answer42-0.2.7}/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
  33. {answer42-0.2.6 → answer42-0.2.7}/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
  34. {answer42-0.2.6 → answer42-0.2.7}/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
  35. {answer42-0.2.6 → answer42-0.2.7}/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
  36. {answer42-0.2.6 → answer42-0.2.7}/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
  37. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/__init__.py +0 -0
  38. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/assets/MCPTestClient.cf +0 -0
  39. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/assets/MCPTestManager.cf +0 -0
  40. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/assets/__init__.py +0 -0
  41. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/assets/skills/answer42/SKILL.md +0 -0
  42. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/assets/skills/answer42-rag/SKILL.md +0 -0
  43. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/bridge.py +0 -0
  44. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/credentials.py +0 -0
  45. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/os_support.py +0 -0
  46. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/platform.py +0 -0
  47. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/protocol.py +0 -0
  48. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/rag/__init__.py +0 -0
  49. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/rag/detect.py +0 -0
  50. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/rag/model.py +0 -0
  51. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/rag/parsers.py +0 -0
  52. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/rag/service.py +0 -0
  53. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/rag/store.py +0 -0
  54. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/recorder.py +0 -0
  55. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/release_helper.py +0 -0
  56. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/runtime.py +0 -0
  57. {answer42-0.2.6 → answer42-0.2.7}/src/mcp_1c/skill_installer.py +0 -0
  58. {answer42-0.2.6 → answer42-0.2.7}/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.6
3
+ Version: 0.2.7
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.6"
3
+ version = "0.2.7"
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"
@@ -27,8 +27,7 @@ NAV = [
27
27
  ]
28
28
 
29
29
  CSS = """
30
- :root { color-scheme: light dark; --bg:#0b1020; --panel:#111936; --text:#eef3ff; --muted:#aebbe2; --link:#67e8f9; --line:#2b365f; --code:#080d1c; }
31
- @media (prefers-color-scheme: light) { :root { --bg:#f7f9ff; --panel:#ffffff; --text:#111827; --muted:#526078; --link:#0369a1; --line:#dbe3f5; --code:#f1f5f9; } }
30
+ :root { color-scheme: dark; --bg:#0b1020; --panel:#111936; --text:#eef3ff; --muted:#aebbe2; --link:#67e8f9; --line:#2b365f; --code:#080d1c; }
32
31
  * { box-sizing: border-box; }
33
32
  body { margin:0; font:16px/1.62 Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; color:var(--text); background:radial-gradient(circle at 20% 0%, rgba(103,232,249,.18), transparent 28rem), var(--bg); }
34
33
  .wrapper { max-width: 1120px; margin: 0 auto; padding: 28px 20px 56px; }
@@ -2251,10 +2251,37 @@ def _client_failure_diagnostics(sess: SessionState, error: Exception, target_con
2251
2251
  return RuntimeError(message)
2252
2252
 
2253
2253
 
2254
+ def _test_client_startup_error_from_logs(sess: SessionState) -> str:
2255
+ """Return a meaningful early startup error from test-client logs, if any."""
2256
+ fragments: list[str] = []
2257
+ for path in (sess.client_log_dir / "test_client_1c_out.log", sess.client_log_dir / "test_client_stdout.log"):
2258
+ tail = _tail_text_file(path, max_lines=120, max_chars=30000)
2259
+ if tail:
2260
+ fragments.append(tail)
2261
+ if not fragments:
2262
+ return ""
2263
+
2264
+ text = "\n".join(fragments)
2265
+ auth_lines = [line for line in text.splitlines() if _looks_like_auth_failure(line)]
2266
+ if auth_lines:
2267
+ return "\n".join(auth_lines[-20:])
2268
+
2269
+ meaningful = _extract_error_lines(text, max_lines=20)
2270
+ if meaningful and any(marker in meaningful.lower() for marker in _EVENTLOG_ERROR_MARKERS):
2271
+ return meaningful
2272
+ return ""
2273
+
2274
+
2254
2275
  async def _wait_for_test_client_ready(sess: SessionState, host: str, port: int, timeout: float) -> None:
2255
2276
  deadline = time.time() + timeout
2256
2277
  proc = sess.test_client_process
2257
2278
  while time.time() < deadline:
2279
+ startup_error = _test_client_startup_error_from_logs(sess)
2280
+ if startup_error:
2281
+ message = f"Test client startup error before opening test port {host}:{port}:\n{startup_error}"
2282
+ message = _append_file_tail(message, "Лог stdout/stderr клиента тестирования", sess.client_log_dir / "test_client_stdout.log")
2283
+ message = _append_file_tail(message, "Лог 1С /Out клиента тестирования", sess.client_log_dir / "test_client_1c_out.log")
2284
+ raise RuntimeError(message)
2258
2285
  if proc is not None and proc.poll() is not None:
2259
2286
  message = f"Test client process exited before opening test port {host}:{port}; exit_code={proc.returncode}"
2260
2287
  message = _append_file_tail(message, "Лог stdout/stderr клиента тестирования", sess.client_log_dir / "test_client_stdout.log")
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