mirror of
https://github.com/HKUDS/OpenSpace.git
synced 2026-10-11 03:37:55 +00:00
133 lines
4.9 KiB
Bash
133 lines
4.9 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd)"
|
|
REPO_PYTHON="$REPO_ROOT/.venv/bin/python"
|
|
CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
|
|
BIN_DIR="$CODEX_HOME/bin"
|
|
|
|
if [[ ! -x "$REPO_PYTHON" ]]; then
|
|
echo "Missing OpenSpace Python runtime: $REPO_PYTHON" >&2
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$BIN_DIR"
|
|
|
|
cat > "$BIN_DIR/openspace-global-mcp" <<EOF
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
REPO_ROOT="$REPO_ROOT"
|
|
CODEX_HOME="$CODEX_HOME"
|
|
REPO_PYTHON="\$REPO_ROOT/.venv/bin/python"
|
|
|
|
if [[ ! -x "\$REPO_PYTHON" ]]; then
|
|
echo "Missing OpenSpace Python runtime: \$REPO_PYTHON" >&2
|
|
exit 1
|
|
fi
|
|
|
|
workspace="\${OPENSPACE_WORKSPACE:-\$PWD}"
|
|
workspace_explicit=0
|
|
if [[ -n "\${OPENSPACE_WORKSPACE:-}" ]]; then
|
|
workspace_explicit=1
|
|
fi
|
|
if git_root="\$(git -C "\$workspace" rev-parse --show-toplevel 2>/dev/null)"; then
|
|
workspace="\$git_root"
|
|
fi
|
|
|
|
if [[ "\$workspace_explicit" == "0" && ( -z "\$workspace" || "\$workspace" == "/" || "\$workspace" == "." ) ]]; then
|
|
project_skill_dir="\${HOME}/.codex/projects/default/skills"
|
|
mkdir -p "\$project_skill_dir" "\${HOME}/.codex/skills"
|
|
unset OPENSPACE_WORKSPACE
|
|
export OPENSPACE_HOST_SKILL_DIRS="\${HOME}/.codex/projects/default/skills,\${HOME}/.codex/skills"
|
|
export OPENSPACE_MCP_PROXY_MODE="direct"
|
|
export OPENSPACE_MCP_DAEMON_STATE_DIR="\${OPENSPACE_MCP_DAEMON_STATE_DIR:-\${CODEX_HOME}/state/openspace}"
|
|
mkdir -p "\$OPENSPACE_MCP_DAEMON_STATE_DIR"
|
|
echo "Warning: Codex Desktop did not provide a usable workspace. Shared OpenSpace daemons were disabled for safety; workspace-aware tools must rely on explicit workspace_dir." >&2
|
|
exec "\$REPO_PYTHON" -m openspace.mcp_proxy --kind main --transport stdio
|
|
fi
|
|
|
|
project_name="\$(basename "\$workspace")"
|
|
if [[ -z "\$project_name" || "\$project_name" == "/" || "\$project_name" == "." ]]; then
|
|
project_name="default"
|
|
fi
|
|
|
|
project_skill_dir="\${HOME}/.codex/projects/\${project_name}/skills"
|
|
mkdir -p "\$project_skill_dir" "\${HOME}/.codex/skills"
|
|
|
|
export OPENSPACE_WORKSPACE="\$workspace"
|
|
export OPENSPACE_HOST_SKILL_DIRS="\${OPENSPACE_HOST_SKILL_DIRS:-\${project_skill_dir},\${HOME}/.codex/skills}"
|
|
export OPENSPACE_MCP_PROXY_MODE="\${OPENSPACE_MCP_PROXY_MODE:-daemon}"
|
|
export OPENSPACE_MCP_DAEMON_STATE_DIR="\${OPENSPACE_MCP_DAEMON_STATE_DIR:-\${CODEX_HOME}/state/openspace}"
|
|
mkdir -p "\$OPENSPACE_MCP_DAEMON_STATE_DIR"
|
|
|
|
exec "\$REPO_PYTHON" -m openspace.mcp_proxy --kind main --transport stdio
|
|
EOF
|
|
|
|
cat > "$BIN_DIR/openspace-evolution-global-mcp" <<EOF
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
REPO_ROOT="$REPO_ROOT"
|
|
CODEX_HOME="$CODEX_HOME"
|
|
REPO_PYTHON="\$REPO_ROOT/.venv/bin/python"
|
|
|
|
if [[ ! -x "\$REPO_PYTHON" ]]; then
|
|
echo "Missing OpenSpace Python runtime: \$REPO_PYTHON" >&2
|
|
exit 1
|
|
fi
|
|
|
|
workspace="\${OPENSPACE_WORKSPACE:-\$PWD}"
|
|
workspace_explicit=0
|
|
if [[ -n "\${OPENSPACE_WORKSPACE:-}" ]]; then
|
|
workspace_explicit=1
|
|
fi
|
|
if git_root="\$(git -C "\$workspace" rev-parse --show-toplevel 2>/dev/null)"; then
|
|
workspace="\$git_root"
|
|
fi
|
|
|
|
if [[ "\$workspace_explicit" == "0" && ( -z "\$workspace" || "\$workspace" == "/" || "\$workspace" == "." ) ]]; then
|
|
project_skill_dir="\${HOME}/.codex/projects/default/skills"
|
|
mkdir -p "\$project_skill_dir" "\${HOME}/.codex/skills"
|
|
unset OPENSPACE_WORKSPACE
|
|
export OPENSPACE_HOST_SKILL_DIRS="\${HOME}/.codex/projects/default/skills,\${HOME}/.codex/skills"
|
|
export OPENSPACE_MCP_PROXY_MODE="direct"
|
|
export OPENSPACE_MCP_DAEMON_STATE_DIR="\${OPENSPACE_MCP_DAEMON_STATE_DIR:-\${CODEX_HOME}/state/openspace}"
|
|
mkdir -p "\$OPENSPACE_MCP_DAEMON_STATE_DIR"
|
|
echo "Warning: Codex Desktop did not provide a usable workspace. Shared OpenSpace daemons were disabled for safety; workspace-aware tools must rely on explicit workspace_dir." >&2
|
|
exec "\$REPO_PYTHON" -m openspace.mcp_proxy --kind evolution --transport stdio
|
|
fi
|
|
|
|
export OPENSPACE_WORKSPACE="\$workspace"
|
|
|
|
project_name="\$(basename "\$OPENSPACE_WORKSPACE")"
|
|
if [[ -z "\$project_name" || "\$project_name" == "/" || "\$project_name" == "." ]]; then
|
|
project_name="default"
|
|
fi
|
|
|
|
project_skill_dir="\${HOME}/.codex/projects/\${project_name}/skills"
|
|
mkdir -p "\$project_skill_dir" "\${HOME}/.codex/skills"
|
|
|
|
export OPENSPACE_HOST_SKILL_DIRS="\${OPENSPACE_HOST_SKILL_DIRS:-\${project_skill_dir},\${HOME}/.codex/skills}"
|
|
export OPENSPACE_MCP_PROXY_MODE="\${OPENSPACE_MCP_PROXY_MODE:-daemon}"
|
|
export OPENSPACE_MCP_DAEMON_STATE_DIR="\${OPENSPACE_MCP_DAEMON_STATE_DIR:-\${CODEX_HOME}/state/openspace}"
|
|
mkdir -p "\$OPENSPACE_MCP_DAEMON_STATE_DIR"
|
|
|
|
exec "\$REPO_PYTHON" -m openspace.mcp_proxy --kind evolution --transport stdio
|
|
EOF
|
|
|
|
chmod +x "$BIN_DIR/openspace-global-mcp" "$BIN_DIR/openspace-evolution-global-mcp"
|
|
|
|
cat <<EOF
|
|
Installed:
|
|
- $BIN_DIR/openspace-global-mcp
|
|
- $BIN_DIR/openspace-evolution-global-mcp
|
|
|
|
Next:
|
|
1. Point your global ~/.codex/config.toml MCP entries at those two wrapper scripts.
|
|
2. Keep your global ~/.codex/AGENTS.md rules in sync with the repo docs.
|
|
|
|
Reference:
|
|
- $REPO_ROOT/docs/global-codex-integration.md
|
|
EOF
|