answer42 0.4.85__tar.gz → 0.4.86__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.85 → answer42-0.4.86}/PKG-INFO +1 -1
  2. {answer42-0.4.85 → answer42-0.4.86}/pyproject.toml +1 -1
  3. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/server.py +43 -0
  4. {answer42-0.4.85 → answer42-0.4.86}/.gitignore +0 -0
  5. {answer42-0.4.85 → answer42-0.4.86}/LICENSE +0 -0
  6. {answer42-0.4.85 → answer42-0.4.86}/README.md +0 -0
  7. {answer42-0.4.85 → answer42-0.4.86}/credentials.example.json +0 -0
  8. {answer42-0.4.85 → answer42-0.4.86}/docs/agent-installation.md +0 -0
  9. {answer42-0.4.85 → answer42-0.4.86}/docs/architecture.md +0 -0
  10. {answer42-0.4.85 → answer42-0.4.86}/docs/assets/answer42-logo.png +0 -0
  11. {answer42-0.4.85 → answer42-0.4.86}/docs/assets/platform42-logo.svg +0 -0
  12. {answer42-0.4.85 → answer42-0.4.86}/docs/installation.md +0 -0
  13. {answer42-0.4.85 → answer42-0.4.86}/scripts/build_cf.py +0 -0
  14. {answer42-0.4.85 → answer42-0.4.86}/scripts/build_pages.py +0 -0
  15. {answer42-0.4.85 → answer42-0.4.86}/scripts/e2e_http_smoke.py +0 -0
  16. {answer42-0.4.85 → answer42-0.4.86}/scripts/e2e_stable.py +0 -0
  17. {answer42-0.4.85 → answer42-0.4.86}/scripts/openclaw_mcp_autoreload.py +0 -0
  18. {answer42-0.4.85 → answer42-0.4.86}/scripts/rag_cli.py +0 -0
  19. {answer42-0.4.85 → answer42-0.4.86}/src/cf/ConfigDumpInfo.xml +0 -0
  20. {answer42-0.4.85 → answer42-0.4.86}/src/cf/Configuration.xml +0 -0
  21. {answer42-0.4.85 → answer42-0.4.86}/src/cf/DataProcessors/MCPTestManager/Ext/ObjectModule.bsl +0 -0
  22. {answer42-0.4.85 → answer42-0.4.86}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260/Ext/Form/Module.bsl" +0 -0
  23. {answer42-0.4.85 → answer42-0.4.86}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260/Ext/Form.xml" +0 -0
  24. {answer42-0.4.85 → answer42-0.4.86}/src/cf/DataProcessors/MCPTestManager/Forms//320/244/320/276/321/200/320/274/320/260.xml" +0 -0
  25. {answer42-0.4.85 → answer42-0.4.86}/src/cf/DataProcessors/MCPTestManager.xml +0 -0
  26. {answer42-0.4.85 → answer42-0.4.86}/src/cf/Ext/ManagedApplicationModule.bsl +0 -0
  27. {answer42-0.4.85 → answer42-0.4.86}/src/cf/Languages//320/240/321/203/321/201/321/201/320/272/320/270/320/271.xml" +0 -0
  28. {answer42-0.4.85 → answer42-0.4.86}/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
  29. {answer42-0.4.85 → answer42-0.4.86}/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
  30. {answer42-0.4.85 → answer42-0.4.86}/src/client_cf/ConfigDumpInfo.xml +0 -0
  31. {answer42-0.4.85 → answer42-0.4.86}/src/client_cf/Configuration.xml +0 -0
  32. {answer42-0.4.85 → answer42-0.4.86}/src/client_cf/Languages//320/240/321/203/321/201/321/201/320/272/320/270/320/271.xml" +0 -0
  33. {answer42-0.4.85 → answer42-0.4.86}/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
  34. {answer42-0.4.85 → answer42-0.4.86}/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
  35. {answer42-0.4.85 → answer42-0.4.86}/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
  36. {answer42-0.4.85 → answer42-0.4.86}/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
  37. {answer42-0.4.85 → answer42-0.4.86}/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
  38. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/__init__.py +0 -0
  39. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/assets/MCPTestClient.cf +0 -0
  40. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/assets/MCPTestManager.cf +0 -0
  41. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/assets/__init__.py +0 -0
  42. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/assets/skills/answer42/SKILL.md +0 -0
  43. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/assets/skills/answer42-rag/SKILL.md +0 -0
  44. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/assets/skills/answer42-universal-report/SKILL.md +0 -0
  45. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/auth.py +0 -0
  46. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/bridge.py +0 -0
  47. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/credentials.py +0 -0
  48. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/os_support.py +0 -0
  49. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/platform.py +0 -0
  50. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/protocol.py +0 -0
  51. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/rag/__init__.py +0 -0
  52. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/rag/detect.py +0 -0
  53. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/rag/dump.py +0 -0
  54. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/rag/model.py +0 -0
  55. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/rag/parsers.py +0 -0
  56. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/rag/service.py +0 -0
  57. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/rag/store.py +0 -0
  58. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/rag/summary_backend.py +0 -0
  59. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/rag/summary_vector.py +0 -0
  60. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/recorder.py +0 -0
  61. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/release_helper.py +0 -0
  62. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/runtime.py +0 -0
  63. {answer42-0.4.85 → answer42-0.4.86}/src/mcp_1c/skill_installer.py +0 -0
  64. {answer42-0.4.85 → answer42-0.4.86}/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.85
3
+ Version: 0.4.86
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.4.85"
3
+ version = "0.4.86"
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"
@@ -681,12 +681,55 @@ _SESSIONS: dict[str, SessionState] = {}
681
681
  def _pid_is_running(pid: int) -> bool:
682
682
  if pid <= 0:
683
683
  return False
684
+ if os_support.IS_WINDOWS:
685
+ # ``os.kill(pid, 0)`` is a POSIX liveness probe. On Windows CPython
686
+ # delegates to TerminateProcess even for signal 0 and may raise
687
+ # unrelated OSError values such as WinError 11 instead of answering
688
+ # whether the process exists. Use the native process handle API there.
689
+ try:
690
+ import ctypes
691
+ from ctypes import wintypes
692
+
693
+ kernel32 = ctypes.WinDLL("kernel32", use_last_error=True)
694
+ open_process = kernel32.OpenProcess
695
+ open_process.argtypes = [wintypes.DWORD, wintypes.BOOL, wintypes.DWORD]
696
+ open_process.restype = wintypes.HANDLE
697
+ close_handle = kernel32.CloseHandle
698
+ close_handle.argtypes = [wintypes.HANDLE]
699
+ close_handle.restype = wintypes.BOOL
700
+ get_exit_code_process = kernel32.GetExitCodeProcess
701
+ get_exit_code_process.argtypes = [wintypes.HANDLE, ctypes.POINTER(wintypes.DWORD)]
702
+ get_exit_code_process.restype = wintypes.BOOL
703
+
704
+ PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
705
+ ERROR_ACCESS_DENIED = 5
706
+ ERROR_INVALID_PARAMETER = 87
707
+ STILL_ACTIVE = 259
708
+ handle = open_process(PROCESS_QUERY_LIMITED_INFORMATION, False, int(pid))
709
+ if not handle:
710
+ error = ctypes.get_last_error()
711
+ if error == ERROR_ACCESS_DENIED:
712
+ return True
713
+ if error == ERROR_INVALID_PARAMETER:
714
+ return False
715
+ return False
716
+ try:
717
+ exit_code = wintypes.DWORD()
718
+ if not get_exit_code_process(handle, ctypes.byref(exit_code)):
719
+ return True
720
+ return int(exit_code.value) == STILL_ACTIVE
721
+ finally:
722
+ close_handle(handle)
723
+ except Exception:
724
+ return False
684
725
  try:
685
726
  os.kill(pid, 0)
686
727
  except ProcessLookupError:
687
728
  return False
688
729
  except PermissionError:
689
730
  return True
731
+ except OSError:
732
+ return False
690
733
  return True
691
734
 
692
735
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes