diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fc43cf29..85f1ec5e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -32,6 +32,7 @@ jobs: integrations-ai-sdk: ${{ steps.filter.outputs.integrations-ai-sdk }} integrations-chat: ${{ steps.filter.outputs.integrations-chat }} integrations-claude-code: ${{ steps.filter.outputs.integrations-claude-code }} + integrations-codex: ${{ steps.filter.outputs.integrations-codex }} integrations-crewai: ${{ steps.filter.outputs.integrations-crewai }} integrations-litellm: ${{ steps.filter.outputs.integrations-litellm }} integrations-pydantic-ai: ${{ steps.filter.outputs.integrations-pydantic-ai }} @@ -89,6 +90,8 @@ jobs: - 'hindsight-integrations/chat/**' integrations-claude-code: - 'hindsight-integrations/claude-code/**' + integrations-codex: + - 'hindsight-integrations/codex/**' integrations-crewai: - 'hindsight-integrations/crewai/**' integrations-litellm: @@ -207,6 +210,29 @@ jobs: working-directory: ./hindsight-integrations/claude-code run: python -m pytest tests/ -v + test-codex-integration: + needs: [detect-changes] + if: >- + github.event_name == 'workflow_dispatch' || + needs.detect-changes.outputs.integrations-codex == 'true' || + needs.detect-changes.outputs.ci == 'true' + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v6 + + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: '3.11' + + - name: Install pytest + run: pip install pytest + + - name: Run tests + working-directory: ./hindsight-integrations/codex + run: python -m pytest tests/ -v + build-ai-sdk-integration: needs: [detect-changes] if: >- diff --git a/hindsight-docs/docs/sdks/integrations/codex.md b/hindsight-docs/docs/sdks/integrations/codex.md index edb3b697..37bed143 100644 --- a/hindsight-docs/docs/sdks/integrations/codex.md +++ b/hindsight-docs/docs/sdks/integrations/codex.md @@ -4,30 +4,23 @@ sidebar_position: 6 # OpenAI Codex CLI +[View Changelog →](/changelog/integrations/codex) + Persistent memory for [OpenAI Codex CLI](https://github.com/openai/codex) using [Hindsight](https://vectorize.io/hindsight). Three Python hook scripts automatically recall relevant context before each prompt and retain conversations after each turn — no changes to your Codex workflow required. ## Quick Start ```bash -# 1. Clone the Hindsight repo and install the plugin -git clone https://github.com/vectorize-io/hindsight.git -cd hindsight/hindsight-integrations/codex -./install.sh - -# 2. Configure your Hindsight connection -cat > ~/.hindsight/codex.json << 'EOF' -{ - "hindsightApiUrl": "https://api.hindsight.vectorize.io", - "hindsightApiToken": "hsk_your_token_here", - "bankId": "codex" -} -EOF - -# 3. Start Codex — memory is live -codex +curl -fsSL https://hindsight.vectorize.io/get-codex | bash ``` -For a local Hindsight instance, set `hindsightApiUrl` to `http://localhost:9077` and omit `hindsightApiToken`. +The installer will guide you through choosing local or cloud mode and configuring your connection. Once installed, start a new Codex session — memory is live. + +To uninstall: + +```bash +curl -fsSL https://hindsight.vectorize.io/get-codex | bash -s -- --uninstall +``` ## Features @@ -172,7 +165,7 @@ With this config, running Codex in `~/projects/api` and `~/projects/frontend` st ## Troubleshooting -**Hooks not firing**: Check that `~/.codex/config.toml` contains `codex_hooks = true` under `[features]`. Re-run `install.sh` to write this automatically. +**Hooks not firing**: Check that `~/.codex/config.toml` contains `codex_hooks = true` under `[features]`. Re-run the installer to fix this automatically. **No memories recalled**: Recall returns results only after something has been retained. Either complete one Codex session first, or seed your bank manually using the [cookbook example](https://github.com/vectorize-io/hindsight-cookbook/tree/main/applications/codex-memory). diff --git a/hindsight-docs/src/data/integrations.json b/hindsight-docs/src/data/integrations.json index 3f3a29af..8e7f4326 100644 --- a/hindsight-docs/src/data/integrations.json +++ b/hindsight-docs/src/data/integrations.json @@ -90,6 +90,16 @@ "link": "/sdks/integrations/claude-code", "icon": "/img/icons/claudecode.svg" }, + { + "id": "codex", + "name": "OpenAI Codex CLI", + "description": "Automatic long-term memory for OpenAI Codex CLI via Hindsight hooks. Captures every conversation, recalls relevant context on every prompt.", + "type": "official", + "by": "hindsight", + "category": "tool", + "link": "/sdks/integrations/codex", + "icon": "/img/icons/terminal.svg" + }, { "id": "openclaw", "name": "OpenClaw", diff --git a/hindsight-docs/src/pages/changelog/integrations/codex.md b/hindsight-docs/src/pages/changelog/integrations/codex.md new file mode 100644 index 00000000..0748d7d4 --- /dev/null +++ b/hindsight-docs/src/pages/changelog/integrations/codex.md @@ -0,0 +1,19 @@ +--- +hide_table_of_contents: true +--- + +import PageHero from '@site/src/components/PageHero'; + + + +[← Codex CLI integration](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/codex) + +## [0.1.0](https://github.com/vectorize-io/hindsight/tree/integrations/codex/v0.1.0) + +**Features** + +- Added Hindsight memory integration for OpenAI Codex CLI with three hook scripts: SessionStart (daemon warm-up), UserPromptSubmit (auto-recall), and Stop (auto-retain). ([`0b17a67c`](https://github.com/vectorize-io/hindsight/commit/0b17a67c)) +- Full-session retain with session-level upsert using session ID as document ID. ([`0b17a67c`](https://github.com/vectorize-io/hindsight/commit/0b17a67c)) +- Dynamic bank IDs for per-project memory isolation. ([`0b17a67c`](https://github.com/vectorize-io/hindsight/commit/0b17a67c)) +- Automatic daemon lifecycle management with background pre-start. ([`0b17a67c`](https://github.com/vectorize-io/hindsight/commit/0b17a67c)) +- 57 automated tests covering content processing and end-to-end hook behavior. ([`71125cd9`](https://github.com/vectorize-io/hindsight/commit/71125cd9)) diff --git a/hindsight-docs/static/get-codex b/hindsight-docs/static/get-codex new file mode 100755 index 00000000..7ac8cd52 --- /dev/null +++ b/hindsight-docs/static/get-codex @@ -0,0 +1,356 @@ +#!/bin/bash +# +# Install Hindsight Memory for OpenAI Codex CLI +# +# Usage: +# curl -fsSL https://hindsight.vectorize.io/get-codex | bash +# +# Options: +# --uninstall Remove Hindsight hooks +# --mode Mode: local (default) or cloud +# +# Examples: +# curl -fsSL https://hindsight.vectorize.io/get-codex | bash +# curl -fsSL https://hindsight.vectorize.io/get-codex | bash -s -- --mode cloud +# curl -fsSL https://hindsight.vectorize.io/get-codex | bash -s -- --uninstall +# + +set -e + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +CYAN='\033[0;36m' +BOLD='\033[1m' +DIM='\033[2m' +NC='\033[0m' # No Color + +print_info() { + echo -e "${BLUE}ℹ${NC} $1" +} + +print_success() { + echo -e "${GREEN}✓${NC} $1" +} + +print_error() { + echo -e "${RED}✗${NC} $1" + exit 1 +} + +print_warning() { + echo -e "${YELLOW}⚠${NC} $1" +} + +print_step() { + echo "" + echo -e "${BOLD}${CYAN}▸ $1${NC}" + echo "" +} + +print_banner() { + echo "" + # ANSI logo + echo -e " \033[38;2;9;127;184m▄\033[0m\033[48;2;8;130;178m\033[38;2;5;133;186m▄\033[0m \033[48;2;10;143;160m\033[38;2;10;143;165m▄\033[0m\033[38;2;7;140;156m▄\033[0m " + echo -e " \033[38;2;8;125;192m▄\033[0m \033[38;2;3;132;191m▀\033[0m\033[38;2;2;133;192m▄\033[0m \033[38;2;3;132;180m▄\033[0m\033[38;2;1;137;184m▄\033[0m\033[38;2;3;133;174m▄\033[0m \033[38;2;3;142;176m▄\033[0m\033[38;2;4;142;169m▀\033[0m \033[38;2;10;144;164m▄\033[0m " + echo -e "\033[38;2;6;121;195m▀\033[0m\033[38;2;5;128;203m▀\033[0m\033[48;2;5;124;195m\033[38;2;3;125;200m▄\033[0m\033[38;2;2;126;196m▄\033[0m\033[48;2;3;128;188m\033[38;2;1;131;196m▄\033[0m\033[48;2;0;152;219m\033[38;2;2;131;191m▄\033[0m\033[38;2;1;141;196m▀\033[0m\033[38;2;1;135;183m▀\033[0m\033[38;2;1;148;198m▀\033[0m\033[48;2;1;156;202m\033[38;2;2;135;180m▄\033[0m\033[48;2;4;134;169m\033[38;2;1;137;177m▄\033[0m\033[38;2;3;138;173m▄\033[0m\033[48;2;6;137;165m\033[38;2;2;140;170m▄\033[0m\033[38;2;7;144;169m▀\033[0m\033[38;2;7;139;158m▀\033[0m" + echo -e " \033[48;2;2;128;202m\033[38;2;2;124;201m▄\033[0m\033[48;2;1;130;201m\033[38;2;0;135;212m▄\033[0m\033[38;2;2;128;196m▄\033[0m \033[48;2;2;142;204m\033[38;2;7;138;199m▄\033[0m \033[38;2;1;135;186m▄\033[0m\033[48;2;1;142;186m\033[38;2;2;144;194m▄\033[0m\033[48;2;3;138;176m\033[38;2;2;134;176m▄\033[0m " + echo -e " \033[48;2;8;118;200m\033[38;2;8;121;209m▄\033[0m\033[38;2;3;121;203m▀\033[0m \033[38;2;3;122;192m▀\033[0m\033[38;2;1;138;216m▀\033[0m\033[48;2;0;138;210m\033[38;2;3;128;198m▄\033[0m\033[48;2;0;126;188m\033[38;2;2;131;198m▄\033[0m\033[48;2;0;142;205m\033[38;2;3;132;193m▄\033[0m\033[38;2;1;140;196m▀\033[0m \033[38;2;4;134;175m▀\033[0m\033[48;2;13;135;167m\033[38;2;8;136;174m▄\033[0m " + echo "" + echo -e " ${BOLD}HINDSIGHT FOR CODEX CLI${NC}" + echo -e " ${DIM}Give your Codex agent persistent memory${NC}" + echo "" +} + +GITHUB_RAW="https://raw.githubusercontent.com/vectorize-io/hindsight/main/hindsight-integrations/codex" +INSTALL_DIR="${HOME}/.hindsight/codex" +SCRIPTS_DIR="${INSTALL_DIR}/scripts" +CODEX_DIR="${HOME}/.codex" +HOOKS_FILE="${CODEX_DIR}/hooks.json" +CONFIG_FILE="${CODEX_DIR}/config.toml" + +# Script files to download +SCRIPT_FILES=( + "scripts/session_start.py" + "scripts/recall.py" + "scripts/retain.py" + "scripts/lib/__init__.py" + "scripts/lib/bank.py" + "scripts/lib/client.py" + "scripts/lib/config.py" + "scripts/lib/content.py" + "scripts/lib/daemon.py" + "scripts/lib/llm.py" + "scripts/lib/state.py" +) + +# Parse arguments +MODE="" +UNINSTALL=false + +while [[ $# -gt 0 ]]; do + case $1 in + --uninstall) + UNINSTALL=true + shift + ;; + --mode) + MODE="$2" + shift 2 + ;; + --help|-h) + echo "Usage: curl -fsSL https://hindsight.vectorize.io/get-codex | bash [-s -- OPTIONS]" + echo "" + echo "Options:" + echo " --mode Mode: local (default) or cloud" + echo " --uninstall Remove Hindsight hooks" + exit 0 + ;; + *) + print_error "Unknown option: $1" + ;; + esac +done + +# ────────────────────────────────────────────────────────────────────────────── +# Uninstall +# ────────────────────────────────────────────────────────────────────────────── +if [ "$UNINSTALL" = true ]; then + echo "Uninstalling Hindsight Codex integration..." + + if [ -d "${SCRIPTS_DIR}" ]; then + rm -rf "${SCRIPTS_DIR}" + echo " Removed ${SCRIPTS_DIR}" + fi + + if [ -f "${HOOKS_FILE}" ]; then + rm -f "${HOOKS_FILE}" + echo " Removed ${HOOKS_FILE}" + fi + + if [ -f "${CONFIG_FILE}" ]; then + sed -i.bak '/^codex_hooks *= *true/d' "${CONFIG_FILE}" && rm -f "${CONFIG_FILE}.bak" + echo " Removed codex_hooks from ${CONFIG_FILE}" + fi + + echo "" + print_success "Uninstall complete." + exit 0 +fi + +# ────────────────────────────────────────────────────────────────────────────── +# Install +# ────────────────────────────────────────────────────────────────────────────── + +print_banner + +# Step 1: Check prerequisites +print_step "Checking prerequisites" + +if ! command -v python3 &> /dev/null; then + print_error "Python 3 is required.\nInstall from https://python.org" +fi +print_success "Python 3 available" + +if ! command -v curl &> /dev/null && ! command -v wget &> /dev/null; then + print_error "curl or wget is required to download scripts." +fi + +# Step 2: Select mode +if [ -z "$MODE" ]; then + if [ -t 0 ] || [ -e /dev/tty ]; then + echo -e "${DIM}Select deployment mode:${NC}" + echo "" + echo -e " ${BOLD}1)${NC} Local ${DIM}- Run Hindsight on your machine (default)${NC}" + echo -e " ${BOLD}2)${NC} Cloud ${DIM}- Connect to Hindsight Cloud${NC}" + echo "" + if [ -t 0 ]; then + read -p "Enter choice [1]: " mode_choice + else + read -p "Enter choice [1]: " mode_choice /dev/null; then + curl -fsSL "$url" -o "$dest" + else + wget -q "$url" -O "$dest" + fi +} + +for file in "${SCRIPT_FILES[@]}"; do + download_file "${GITHUB_RAW}/${file}" "${SCRIPTS_DIR}/${file#scripts/}" +done + +chmod +x "${SCRIPTS_DIR}/session_start.py" +chmod +x "${SCRIPTS_DIR}/recall.py" +chmod +x "${SCRIPTS_DIR}/retain.py" + +print_success "Scripts installed to ${SCRIPTS_DIR}" + +# Step 4: Download default settings (don't overwrite existing) +SETTINGS_DST="${INSTALL_DIR}/settings.json" +if [ ! -f "${SETTINGS_DST}" ]; then + download_file "${GITHUB_RAW}/settings.json" "${SETTINGS_DST}" + print_success "Default settings written to ${SETTINGS_DST}" +else + print_info "Keeping existing settings at ${SETTINGS_DST}" +fi + +# Step 5: Configure connection +if [ "$MODE" = "cloud" ]; then + print_step "Configuring Hindsight Cloud connection" + + DEFAULT_CLOUD_URL="https://api.hindsight.vectorize.io" + + echo -e "${DIM}Enter your Hindsight Cloud connection details.${NC}" + echo -e "${DIM}Get these from https://ui.hindsight.vectorize.io${NC}" + echo "" + + if [ -t 0 ]; then + read -p "Cloud API URL [$DEFAULT_CLOUD_URL]: " CLOUD_URL + read -p "API Token: " CLOUD_TOKEN + else + read -p "Cloud API URL [$DEFAULT_CLOUD_URL]: " CLOUD_URL "$USER_CONFIG" < "${HOOKS_FILE}" </dev/null; then + if ! grep -q '^codex_hooks' "${CONFIG_FILE}"; then + sed -i.bak '/^\[features\]/a codex_hooks = true' "${CONFIG_FILE}" && rm -f "${CONFIG_FILE}.bak" + print_success "Added codex_hooks = true to ${CONFIG_FILE}" + else + print_info "codex_hooks already enabled" + fi +else + printf '\n[features]\ncodex_hooks = true\n' >> "${CONFIG_FILE}" + print_success "Added codex_hooks = true to ${CONFIG_FILE}" +fi + +# Done! +echo "" +echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" +echo -e "${GREEN} ✓ Installation Complete!${NC}" +echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" +echo "" +echo -e " Hindsight memory is now active in ${BOLD}Codex CLI${NC}." +echo "" +echo -e " ${DIM}Configuration:${NC}" +echo -e " ${CYAN}~/.hindsight/codex/settings.json${NC} ${DIM}(plugin defaults)${NC}" +echo -e " ${CYAN}~/.hindsight/codex.json${NC} ${DIM}(personal overrides)${NC}" +echo "" +echo -e " ${DIM}Start a new Codex session to activate.${NC}" +echo "" +echo -e " ${DIM}Uninstall:${NC}" +echo -e " ${CYAN}curl -fsSL https://hindsight.vectorize.io/get-codex | bash -s -- --uninstall${NC}" +echo "" +echo -e " ${DIM}Documentation:${NC} ${BLUE}https://hindsight.vectorize.io/sdks/integrations/codex${NC}" +echo "" diff --git a/hindsight-integrations/codex/README.md b/hindsight-integrations/codex/README.md index 2efe8578..3d058a15 100644 --- a/hindsight-integrations/codex/README.md +++ b/hindsight-integrations/codex/README.md @@ -21,20 +21,18 @@ Three Codex hooks keep memory in sync automatically: ## Installation ```bash -git clone https://github.com/vectorize-io/hindsight -cd hindsight/hindsight-integrations/codex -./install.sh +curl -fsSL https://hindsight.vectorize.io/get-codex | bash ``` The installer: -1. Copies scripts to `~/.hindsight/codex/scripts/` +1. Downloads scripts to `~/.hindsight/codex/scripts/` 2. Writes `~/.codex/hooks.json` with absolute paths to the scripts 3. Adds `codex_hooks = true` to `~/.codex/config.toml` ### Uninstall ```bash -./install.sh --uninstall +curl -fsSL https://hindsight.vectorize.io/get-codex | bash -s -- --uninstall ``` ## Configuration diff --git a/hindsight-integrations/codex/install.sh b/hindsight-integrations/codex/install.sh deleted file mode 100755 index 4c3e09b8..00000000 --- a/hindsight-integrations/codex/install.sh +++ /dev/null @@ -1,149 +0,0 @@ -#!/usr/bin/env bash -# Hindsight memory integration for OpenAI Codex CLI -# -# This script installs the Hindsight hooks into ~/.codex/ and copies -# the hook scripts to ~/.hindsight/codex/scripts/. -# -# Usage: -# ./install.sh # Install (or update) -# ./install.sh --uninstall # Remove Hindsight hooks - -set -euo pipefail - -INTEGRATION_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -INSTALL_DIR="${HOME}/.hindsight/codex" -SCRIPTS_DIR="${INSTALL_DIR}/scripts" -CODEX_DIR="${HOME}/.codex" -HOOKS_FILE="${CODEX_DIR}/hooks.json" -CONFIG_FILE="${CODEX_DIR}/config.toml" - -# ────────────────────────────────────────────────────────────────────────────── -# Uninstall -# ────────────────────────────────────────────────────────────────────────────── -if [[ "${1:-}" == "--uninstall" ]]; then - echo "Uninstalling Hindsight Codex integration..." - - # Remove scripts directory - if [[ -d "${SCRIPTS_DIR}" ]]; then - rm -rf "${SCRIPTS_DIR}" - echo " Removed ${SCRIPTS_DIR}" - fi - - # Remove hooks.json - if [[ -f "${HOOKS_FILE}" ]]; then - rm -f "${HOOKS_FILE}" - echo " Removed ${HOOKS_FILE}" - fi - - # Remove codex_hooks feature flag from config.toml (if present) - if [[ -f "${CONFIG_FILE}" ]]; then - # Remove the [features] block line for codex_hooks - sed -i.bak '/^codex_hooks *= *true/d' "${CONFIG_FILE}" && rm -f "${CONFIG_FILE}.bak" - echo " Removed codex_hooks from ${CONFIG_FILE}" - fi - - echo "Uninstall complete." - exit 0 -fi - -# ────────────────────────────────────────────────────────────────────────────── -# Install -# ────────────────────────────────────────────────────────────────────────────── -echo "Installing Hindsight Codex integration..." - -# 1. Copy scripts to ~/.hindsight/codex/scripts/ -mkdir -p "${SCRIPTS_DIR}" -cp -r "${INTEGRATION_DIR}/scripts/." "${SCRIPTS_DIR}/" -chmod +x "${SCRIPTS_DIR}/session_start.py" -chmod +x "${SCRIPTS_DIR}/recall.py" -chmod +x "${SCRIPTS_DIR}/retain.py" -echo " Scripts installed to ${SCRIPTS_DIR}" - -# 2. Copy default settings (don't overwrite user's existing settings) -SETTINGS_DST="${INSTALL_DIR}/settings.json" -if [[ ! -f "${SETTINGS_DST}" ]]; then - cp "${INTEGRATION_DIR}/settings.json" "${SETTINGS_DST}" - echo " Default settings written to ${SETTINGS_DST}" -else - echo " Keeping existing settings at ${SETTINGS_DST}" -fi - -# 3. Write ~/.codex/hooks.json with absolute paths -mkdir -p "${CODEX_DIR}" -cat > "${HOOKS_FILE}" </dev/null; then - # Section exists — add codex_hooks under it if not already present - if ! grep -q '^codex_hooks' "${CONFIG_FILE}"; then - # Insert codex_hooks after [features] - sed -i.bak '/^\[features\]/a codex_hooks = true' "${CONFIG_FILE}" && rm -f "${CONFIG_FILE}.bak" - echo " Added codex_hooks = true to [features] in ${CONFIG_FILE}" - else - echo " codex_hooks already enabled in ${CONFIG_FILE}" - fi -else - # No [features] section — append it - printf '\n[features]\ncodex_hooks = true\n' >> "${CONFIG_FILE}" - echo " Added [features] codex_hooks = true to ${CONFIG_FILE}" -fi - -echo "" -echo "Hindsight is installed for Codex." -echo "" -echo "Configuration:" -echo " Edit ${SETTINGS_DST} to customize settings." -echo " Or create ~/.hindsight/codex.json for personal overrides." -echo "" -echo "For Hindsight Cloud, set:" -echo " \"hindsightApiUrl\": \"https://api.hindsight.vectorize.io\"" -echo " \"hindsightApiToken\": \"your-api-key\"" -echo "" -echo "For local daemon mode, set an LLM API key:" -echo " export OPENAI_API_KEY=sk-your-key" -echo "" -echo "Start a new Codex session to activate." diff --git a/hindsight-integrations/codex/scripts/lib/client.py b/hindsight-integrations/codex/scripts/lib/client.py index 277cbafb..58b7bc4c 100644 --- a/hindsight-integrations/codex/scripts/lib/client.py +++ b/hindsight-integrations/codex/scripts/lib/client.py @@ -130,24 +130,6 @@ class HindsightClient: } return self._request("POST", path, body, timeout=timeout) - def reflect( - self, - bank_id: str, - query: str, - budget: str = "mid", - max_tokens: int = 1024, - timeout: int = 30, - ) -> dict: - """Reflect on memories and return a synthesized answer. - - Runs an agentic loop that retrieves facts, mental models, and experiences, - then uses the LLM to formulate a coherent response. Slower than recall - but produces a synthesized prose answer rather than raw facts. - """ - path = f"/v1/default/banks/{urllib.parse.quote(bank_id, safe='')}/reflect" - body = {"query": query, "budget": budget, "max_tokens": max_tokens} - return self._request("POST", path, body, timeout=timeout) - def set_bank_mission( self, bank_id: str, mission: str, retain_mission: Optional[str] = None, timeout: int = 15 ) -> dict: diff --git a/hindsight-integrations/codex/scripts/lib/config.py b/hindsight-integrations/codex/scripts/lib/config.py index be63cda2..dce7e5de 100644 --- a/hindsight-integrations/codex/scripts/lib/config.py +++ b/hindsight-integrations/codex/scripts/lib/config.py @@ -28,7 +28,6 @@ DEFAULTS = { "retainRoles": ["user", "assistant"], "retainEveryNTurns": 10, "retainOverlapTurns": 2, - "retainToolCalls": True, "retainContext": "codex", "retainTags": [], "retainMetadata": {}, @@ -118,7 +117,7 @@ def load_config() -> dict: """ config = dict(DEFAULTS) - # 1. Plugin install settings.json (written by install.sh) + # 1. Plugin install settings.json (written by get-codex installer) install_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) _load_settings_file(os.path.join(install_root, "settings.json"), config) diff --git a/hindsight-integrations/codex/settings.json b/hindsight-integrations/codex/settings.json index 3b092e42..6b18c28a 100644 --- a/hindsight-integrations/codex/settings.json +++ b/hindsight-integrations/codex/settings.json @@ -1,4 +1,5 @@ { + "version": "0.1.0", "hindsightApiUrl": "", "bankId": "codex", "bankMission": "You are a Codex AI coding assistant. Focus on technical decisions, code changes, debugging sessions, and project context relevant to the user's work.", diff --git a/scripts/release-integration.sh b/scripts/release-integration.sh index da204029..23f8485e 100755 --- a/scripts/release-integration.sh +++ b/scripts/release-integration.sh @@ -13,7 +13,7 @@ print_info() { echo -e "${GREEN}[INFO]${NC} $1"; } print_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } print_error() { echo -e "${RED}[ERROR]${NC} $1"; } -VALID_INTEGRATIONS=("litellm" "pydantic-ai" "crewai" "ag2" "ai-sdk" "chat" "openclaw" "langgraph" "nemoclaw" "strands" "claude-code") +VALID_INTEGRATIONS=("litellm" "pydantic-ai" "crewai" "ag2" "ai-sdk" "chat" "openclaw" "langgraph" "nemoclaw" "strands" "claude-code" "codex") usage() { print_error "Usage: $0 " @@ -116,8 +116,12 @@ elif [ -f "$INTEGRATION_DIR/.claude-plugin/plugin.json" ]; then print_info "Updating version in $INTEGRATION_DIR/.claude-plugin/plugin.json" sed -i.bak "s/\"version\": \".*\"/\"version\": \"$VERSION\"/" "$INTEGRATION_DIR/.claude-plugin/plugin.json" rm "$INTEGRATION_DIR/.claude-plugin/plugin.json.bak" +elif [ -f "$INTEGRATION_DIR/settings.json" ] && grep -q '"version"' "$INTEGRATION_DIR/settings.json"; then + print_info "Updating version in $INTEGRATION_DIR/settings.json" + sed -i.bak "s/\"version\": \".*\"/\"version\": \"$VERSION\"/" "$INTEGRATION_DIR/settings.json" + rm "$INTEGRATION_DIR/settings.json.bak" else - print_error "No pyproject.toml, package.json, or plugin.json found in $INTEGRATION_DIR" + print_error "No pyproject.toml, package.json, plugin.json, or versioned settings.json found in $INTEGRATION_DIR" exit 1 fi