open-computer-use 0.1.33 → 0.1.35

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "open-computer-use",
3
- "version": "0.1.33",
4
- "description": "Open-source macOS Computer Use MCP server packaged as a Codex plugin.",
3
+ "version": "0.1.35",
4
+ "description": "Open-source cross-platform Computer Use MCP server packaged as a Codex plugin.",
5
5
  "author": {
6
6
  "name": "Leo",
7
7
  "url": "https://github.com/iFurySt"
@@ -19,8 +19,8 @@
19
19
  "mcpServers": "./.mcp.json",
20
20
  "interface": {
21
21
  "displayName": "Open Computer Use",
22
- "shortDescription": "Control macOS apps from Codex with the open local server",
23
- "longDescription": "Open Computer Use packages this repository's open-source macOS automation server as a Codex plugin. It exposes the same nine desktop-control MCP tools through the locally built OpenComputerUse app bundle, with an AX-first and keyboard-first strategy that tries to avoid stealing focus until global pointer input is truly required.",
22
+ "shortDescription": "Control desktop apps from Codex with the open local server",
23
+ "longDescription": "Open Computer Use packages this repository's open-source desktop automation server as a Codex plugin. It exposes the same nine desktop-control MCP tools through a local macOS app bundle or Linux / Windows native binary, with semantic accessibility paths preferred before fallback input.",
24
24
  "developerName": "Leo",
25
25
  "category": "Productivity",
26
26
  "capabilities": [
@@ -32,7 +32,7 @@
32
32
  "privacyPolicyURL": "https://github.com/iFurySt/open-codex-computer-use/blob/main/SECURITY.md",
33
33
  "termsOfServiceURL": "https://github.com/iFurySt/open-codex-computer-use/blob/main/LICENSE",
34
34
  "defaultPrompt": [
35
- "Inspect the current UI state of this Mac app without stealing focus when possible",
35
+ "Inspect the current UI state of this desktop app without stealing focus when possible",
36
36
  "Open a new local document with keyboard shortcuts first, then type content without moving my real pointer unless required",
37
37
  "Drive the fixture app and verify the nine computer-use tools still behave correctly"
38
38
  ],
@@ -8,9 +8,15 @@ candidate_binaries=(
8
8
  "${plugin_root}/Open Computer Use.app/Contents/MacOS/OpenComputerUse"
9
9
  "${plugin_root}/Open Computer Use (Dev).app/Contents/MacOS/OpenComputerUse"
10
10
  "${plugin_root}/OpenComputerUse.app/Contents/MacOS/OpenComputerUse"
11
+ "${plugin_root}/open-computer-use"
12
+ "${plugin_root}/open-computer-use.exe"
11
13
  "${repo_root}/dist/Open Computer Use (Dev).app/Contents/MacOS/OpenComputerUse"
12
14
  "${repo_root}/dist/Open Computer Use.app/Contents/MacOS/OpenComputerUse"
13
15
  "${repo_root}/dist/OpenComputerUse.app/Contents/MacOS/OpenComputerUse"
16
+ "${repo_root}/dist/linux/arm64/open-computer-use"
17
+ "${repo_root}/dist/linux/amd64/open-computer-use"
18
+ "${repo_root}/dist/windows/arm64/open-computer-use.exe"
19
+ "${repo_root}/dist/windows/amd64/open-computer-use.exe"
14
20
  )
15
21
 
16
22
  for app_binary in "${candidate_binaries[@]}"; do
@@ -24,10 +30,15 @@ for app_binary in "${candidate_binaries[@]}"; do
24
30
  fi
25
31
  done
26
32
 
27
- echo "open-computer-use could not find a runnable app bundle." >&2
33
+ if command -v open-computer-use >/dev/null 2>&1; then
34
+ exec open-computer-use mcp
35
+ fi
36
+
37
+ echo "open-computer-use could not find a runnable native runtime." >&2
28
38
  echo "Checked:" >&2
29
39
  for app_binary in "${candidate_binaries[@]}"; do
30
40
  echo " - ${app_binary}" >&2
31
41
  done
42
+ echo " - open-computer-use on PATH" >&2
32
43
  echo "Run ./scripts/install-codex-plugin.sh to populate the Codex plugin cache." >&2
33
44
  exit 1
@@ -10,10 +10,24 @@ marketplace_name="open-computer-use-local"
10
10
  plugin_name="open-computer-use"
11
11
  plugin_source_root="${repo_root}/plugins/${plugin_name}"
12
12
  plugin_manifest="${plugin_source_root}/.codex-plugin/plugin.json"
13
- build_script="${repo_root}/scripts/build-open-computer-use-app.sh"
13
+ macos_build_script="${repo_root}/scripts/build-open-computer-use-app.sh"
14
+ linux_build_script="${repo_root}/scripts/build-open-computer-use-linux.sh"
15
+ windows_build_script="${repo_root}/scripts/build-open-computer-use-windows.sh"
14
16
  configuration="debug"
15
17
  rebuild="false"
16
18
 
19
+ node_arch() {
20
+ node -p "process.arch" 2>/dev/null || true
21
+ }
22
+
23
+ go_arch_for_node_arch() {
24
+ case "$1" in
25
+ arm64) printf '%s\n' "arm64" ;;
26
+ x64) printf '%s\n' "amd64" ;;
27
+ *) return 1 ;;
28
+ esac
29
+ }
30
+
17
31
  resolve_app_bundle() {
18
32
  local -a candidates
19
33
 
@@ -24,8 +38,39 @@ resolve_app_bundle() {
24
38
  fi
25
39
 
26
40
  for bundle_name in "${candidates[@]}"; do
27
- local candidate="${repo_root}/dist/${bundle_name}"
28
- if [[ -d "${candidate}" ]]; then
41
+ for candidate in "${repo_root}/dist/${bundle_name}"; do
42
+ if [[ -d "${candidate}" ]]; then
43
+ printf '%s\n' "${candidate}"
44
+ return 0
45
+ fi
46
+ done
47
+ done
48
+
49
+ return 1
50
+ }
51
+
52
+ resolve_native_binary() {
53
+ local platform="$1"
54
+ local arch="$2"
55
+ local go_arch
56
+ go_arch="$(go_arch_for_node_arch "${arch}" || true)"
57
+ local -a candidates=()
58
+
59
+ case "${platform}" in
60
+ linux)
61
+ if [[ -n "${go_arch}" ]]; then
62
+ candidates+=("${repo_root}/dist/linux/${go_arch}/open-computer-use")
63
+ fi
64
+ ;;
65
+ win32)
66
+ if [[ -n "${go_arch}" ]]; then
67
+ candidates+=("${repo_root}/dist/windows/${go_arch}/open-computer-use.exe")
68
+ fi
69
+ ;;
70
+ esac
71
+
72
+ for candidate in "${candidates[@]}"; do
73
+ if [[ -x "${candidate}" ]]; then
29
74
  printf '%s\n' "${candidate}"
30
75
  return 0
31
76
  fi
@@ -56,16 +101,81 @@ while [[ $# -gt 0 ]]; do
56
101
  esac
57
102
  done
58
103
 
59
- app_bundle="$(resolve_app_bundle || true)"
60
- app_binary="${app_bundle:+${app_bundle}/Contents/MacOS/OpenComputerUse}"
104
+ platform="$(node -p "process.platform")"
105
+ arch="$(node_arch)"
106
+ payload_path=""
107
+
108
+ case "${platform}" in
109
+ darwin)
110
+ payload_path="$(resolve_app_bundle || true)"
111
+ app_binary="${payload_path:+${payload_path}/Contents/MacOS/OpenComputerUse}"
112
+ if [[ "${rebuild}" == "true" || -z "${app_binary}" || ! -x "${app_binary}" ]]; then
113
+ if [[ -x "${macos_build_script}" ]]; then
114
+ "${macos_build_script}" "${configuration}"
115
+ payload_path="$(resolve_app_bundle || true)"
116
+ app_binary="${payload_path:+${payload_path}/Contents/MacOS/OpenComputerUse}"
117
+ else
118
+ echo "Missing runnable app bundle at ${app_binary} and no local build script is available." >&2
119
+ exit 1
120
+ fi
121
+ fi
122
+ if [[ -z "${payload_path}" || ! -x "${app_binary}" ]]; then
123
+ echo "Missing runnable app binary at ${app_binary}" >&2
124
+ exit 1
125
+ fi
126
+ ;;
127
+ linux)
128
+ payload_path="$(resolve_native_binary linux "${arch}" || true)"
129
+ if [[ "${rebuild}" == "true" || -z "${payload_path}" || ! -x "${payload_path}" ]]; then
130
+ go_arch="$(go_arch_for_node_arch "${arch}" || true)"
131
+ if [[ -n "${go_arch}" && -x "${linux_build_script}" ]]; then
132
+ "${linux_build_script}" --configuration "${configuration}" --arch "${go_arch}"
133
+ payload_path="$(resolve_native_binary linux "${arch}" || true)"
134
+ fi
135
+ fi
136
+ if [[ -z "${payload_path}" || ! -x "${payload_path}" ]]; then
137
+ echo "Missing runnable Linux binary for ${platform}-${arch}." >&2
138
+ exit 1
139
+ fi
140
+ ;;
141
+ win32)
142
+ payload_path="$(resolve_native_binary win32 "${arch}" || true)"
143
+ if [[ "${rebuild}" == "true" || -z "${payload_path}" || ! -x "${payload_path}" ]]; then
144
+ go_arch="$(go_arch_for_node_arch "${arch}" || true)"
145
+ if [[ -n "${go_arch}" && -x "${windows_build_script}" ]]; then
146
+ "${windows_build_script}" --configuration "${configuration}" --arch "${go_arch}"
147
+ payload_path="$(resolve_native_binary win32 "${arch}" || true)"
148
+ fi
149
+ fi
150
+ if [[ -z "${payload_path}" || ! -x "${payload_path}" ]]; then
151
+ echo "Missing runnable Windows binary for ${platform}-${arch}." >&2
152
+ exit 1
153
+ fi
154
+ ;;
155
+ *)
156
+ echo "Unsupported Codex plugin install platform: ${platform}-${arch}" >&2
157
+ exit 1
158
+ ;;
159
+ esac
61
160
 
62
- if [[ "${rebuild}" == "true" || -z "${app_binary}" || ! -x "${app_binary}" ]]; then
63
- if [[ -x "${build_script}" ]]; then
64
- "${build_script}" "${configuration}"
65
- app_bundle="$(resolve_app_bundle || true)"
66
- app_binary="${app_bundle:+${app_bundle}/Contents/MacOS/OpenComputerUse}"
67
- else
68
- echo "Missing runnable app bundle at ${app_binary} and no local build script is available." >&2
161
+ if [[ -z "${payload_path}" ]]; then
162
+ echo "Failed to resolve native runtime payload for ${platform}-${arch}" >&2
163
+ exit 1
164
+ fi
165
+
166
+ if [[ ! -e "${payload_path}" ]]; then
167
+ echo "Missing native runtime payload at ${payload_path}" >&2
168
+ exit 1
169
+ fi
170
+
171
+ if [[ ! -d "${payload_path}" && ! -x "${payload_path}" ]]; then
172
+ echo "Native runtime payload is not executable: ${payload_path}" >&2
173
+ exit 1
174
+ fi
175
+
176
+ if [[ "${platform}" != "darwin" ]]; then
177
+ if [[ ! -x "${payload_path}" ]]; then
178
+ echo "Native runtime payload is not executable: ${payload_path}" >&2
69
179
  exit 1
70
180
  fi
71
181
  fi
@@ -80,11 +190,6 @@ if [[ ! -f "${plugin_manifest}" ]]; then
80
190
  exit 1
81
191
  fi
82
192
 
83
- if [[ -z "${app_bundle}" || ! -x "${app_binary}" ]]; then
84
- echo "Missing runnable app binary at ${app_binary}" >&2
85
- exit 1
86
- fi
87
-
88
193
  plugin_version="$(node "${config_helper}" codex-plugin-version "${plugin_manifest}")"
89
194
 
90
195
  if [[ -z "${plugin_version}" ]]; then
@@ -99,7 +204,7 @@ mkdir -p "${codex_home}" "${plugin_cache_root}"
99
204
  rm -rf "${plugin_install_root}"
100
205
  mkdir -p "${plugin_install_root}"
101
206
 
102
- node "${config_helper}" copy-into-dir "${plugin_install_root}" "${plugin_source_root}" "${app_bundle}"
207
+ node "${config_helper}" copy-into-dir "${plugin_install_root}" "${plugin_source_root}" "${payload_path}"
103
208
 
104
209
  node "${config_helper}" codex-plugin-config "${config_path}" "${repo_root}" "${marketplace_name}" "${plugin_name}"
105
210
 
@@ -11,16 +11,17 @@ const mcpConfig = {
11
11
  };
12
12
  const lines = [
13
13
  "",
14
- "Installed open-computer-use@0.1.33.",
14
+ "Installed open-computer-use@0.1.35.",
15
15
  "Package: https://www.npmjs.com/package/open-computer-use",
16
16
  "Commands: open-computer-use, open-computer-use-mcp, open-codex-computer-use-mcp",
17
+ "Native runtime will be selected from bundled artifacts for " + process.platform + "-" + process.arch + ".",
17
18
  "",
18
19
  "Next:",
19
- "1. Run open-computer-use doctor",
20
- "2. In macOS System Settings, grant Accessibility and Screen Recording to your host terminal or MCP client",
21
- "3. Run open-computer-use install-claude-mcp, install-gemini-mcp, install-codex-mcp, or install-opencode-mcp for your host CLI, or install-codex-plugin for the local Codex plugin cache",
20
+ "1. Run open-computer-use --version",
21
+ "2. Add the MCP config below to your host client",
22
+ "3. On macOS, run open-computer-use doctor and grant Accessibility / Screen Recording if prompted",
22
23
  "",
23
- "You can add this to any MCP-capable client:",
24
+ "MCP config:",
24
25
  JSON.stringify(mcpConfig, null, 2),
25
26
  "",
26
27
  ];