Initial state: - ia_dev was historically referenced as ./ia_dev in docs and integrations, while the vendored module lives under services/ia_dev. - AnythingLLM sync and hook installation had error masking / weak exit signaling. - Proxy layers did not validate proxy path segments, allowing path normalization tricks. Motivation: - Make the IDE-oriented workflow usable (sync -> act -> deploy/preview) with explicit errors. - Reduce security footguns in proxying and script automation. Resolution: - Standardize IA_DEV_ROOT usage and documentation to services/ia_dev. - Add SSH remote data mirroring + optional AnythingLLM ingestion. - Extend AnythingLLM pull sync to support upload-all/prefix and fail on upload errors. - Harden smart-ide-sso-gateway and smart-ide-global-api proxying with safe-path checks and non-leaking error responses. - Improve ia-dev-gateway runner validation and reduce sensitive path leakage. - Add site scaffold tool (Vite/React) with OIDC + chat via sso-gateway -> orchestrator. Root cause: - Historical layout changes (submodule -> vendored tree) and missing central contracts for path resolution. - Missing validation for proxy path traversal patterns. - Overuse of silent fallbacks (|| true, exit 0 on partial failures) in automation scripts. Impacted features: - Project sync: git pull + AnythingLLM sync + remote data mirror ingestion. - Site frontends: SSO gateway proxy and orchestrator intents (rag.query, chat.local). - Agent execution: ia-dev-gateway script runner and SSE output. Code modified: - scripts/remote-data-ssh-sync.sh - scripts/anythingllm-pull-sync/sync.mjs - scripts/install-anythingllm-post-merge-hook.sh - cron/git-pull-project-clones.sh - services/smart-ide-sso-gateway/src/server.ts - services/smart-ide-global-api/src/server.ts - services/smart-ide-orchestrator/src/server.ts - services/ia-dev-gateway/src/server.ts - services/ia_dev/tools/site-generate.sh Documentation modified: - docs/** (architecture, API docs, ia_dev module + integration, scripts) Configurations modified: - config/services.local.env.example - services/*/.env.example Files in deploy modified: - services/ia_dev/deploy/* Files in logs impacted: - logs/ia_dev.log (runtime only) - .logs/* (runtime only) Databases and other sources modified: - None Off-project modifications: - None Files in .smartIde modified: - .smartIde/agents/*.md - services/ia_dev/.smartIde/** Files in .secrets modified: - None New patch version in VERSION: - 0.0.5 CHANGELOG.md updated: - yes
46 lines
2.5 KiB
Bash
Executable File
46 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Install HTTPS watchdog + systemd timer on the 4NK proxy (192.168.1.100).
|
|
# Does not modify Nginx. Run from ia_dev root: ./deploy/scripts/install-lpldf-https-watch-on-proxy.sh
|
|
set -euo pipefail
|
|
|
|
IA_DEV_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
if [[ -f "${IA_DEV_ROOT}/lib/smart_ide_logs.sh" ]]; then
|
|
# shellcheck source=../../lib/smart_ide_logs.sh
|
|
source "${IA_DEV_ROOT}/lib/smart_ide_logs.sh"
|
|
smart_ide_logs_begin "$IA_DEV_ROOT" "$0" "$*"
|
|
smart_ide_logs_register_exit_trap
|
|
fi
|
|
# shellcheck source=deploy/_lib/ssh.sh
|
|
source "${IA_DEV_ROOT}/deploy/_lib/ssh.sh"
|
|
|
|
readonly SSH_KEY="${DEPLOY_SSH_KEY:-${HOME}/.ssh/id_ed25519}"
|
|
readonly SSH_USER="${DEPLOY_SSH_USER:-ncantu}"
|
|
readonly PROXY_HOST="${DEPLOY_PROXY_HOST:-192.168.1.100}"
|
|
export DEPLOY_SSH_PROXY_HOST="${DEPLOY_SSH_PROXY_HOST:-4nk.myftp.biz}"
|
|
|
|
readonly REMOTE_SCRIPT="/opt/proxy-config/scripts/watch-https-lpldf.sh"
|
|
readonly REMOTE_ENV_DIR="/opt/proxy-config/scripts/env"
|
|
readonly REMOTE_ENV="${REMOTE_ENV_DIR}/watch-https-lpldf.env"
|
|
readonly SERVICE_NAME="lpldf-https-watch"
|
|
|
|
scp_copy "$SSH_KEY" "${IA_DEV_ROOT}/tools/proxy-https-watch-lpldf.sh" "$SSH_USER" "$PROXY_HOST" "/tmp/watch-https-lpldf.sh" "false"
|
|
scp_copy "$SSH_KEY" "${IA_DEV_ROOT}/deploy/proxy-units/${SERVICE_NAME}.service" "$SSH_USER" "$PROXY_HOST" "/tmp/${SERVICE_NAME}.service" "false"
|
|
scp_copy "$SSH_KEY" "${IA_DEV_ROOT}/deploy/proxy-units/${SERVICE_NAME}.timer" "$SSH_USER" "$PROXY_HOST" "/tmp/${SERVICE_NAME}.timer" "false"
|
|
|
|
ssh_run "$SSH_KEY" "$SSH_USER" "$PROXY_HOST" \
|
|
"sudo install -d -m 755 /opt/proxy-config/scripts && \
|
|
sudo install -d -m 700 ${REMOTE_ENV_DIR} && \
|
|
sudo install -m 755 /tmp/watch-https-lpldf.sh ${REMOTE_SCRIPT} && \
|
|
sudo rm -f /tmp/watch-https-lpldf.sh && \
|
|
sudo install -d -m 755 /var/lib/lpldf-https-watch && \
|
|
sudo install -m 644 /tmp/${SERVICE_NAME}.service /etc/systemd/system/${SERVICE_NAME}.service && \
|
|
sudo install -m 644 /tmp/${SERVICE_NAME}.timer /etc/systemd/system/${SERVICE_NAME}.timer && \
|
|
sudo rm -f /tmp/${SERVICE_NAME}.service /tmp/${SERVICE_NAME}.timer && \
|
|
sudo systemctl daemon-reload && \
|
|
sudo systemctl enable --now ${SERVICE_NAME}.timer && \
|
|
sudo systemctl start ${SERVICE_NAME}.service || true && \
|
|
systemctl --no-pager --full status ${SERVICE_NAME}.timer"
|
|
|
|
echo "[install-lpldf-https-watch] Installed ${REMOTE_SCRIPT} and ${SERVICE_NAME}.timer on ${PROXY_HOST}"
|
|
echo "[install-lpldf-https-watch] Optional: create ${REMOTE_ENV} (chmod 600); see tools/proxy-https-watch-lpldf.env.example"
|