chore(installer): bundle installer & submodule fixes#3
chore(installer): bundle installer & submodule fixes#3davidraehles wants to merge 6 commits intomainfrom
Conversation
- Added support for `--no-vkb`, `--no-constraints`, `--no-transcript`, `--no-logging`, and `--no-health` flags in `bin/coding` - Updated `scripts/launch-claude.sh` and `scripts/launch-copilot.sh` to forward service arguments - Modified `scripts/start-services-robust.js` to conditionally start services based on CLI flags - Default behavior remains unchanged (all services start by default)
- Implements a 'Board of Directors' workflow with 5 distinct AI personas (Pragmatist, Architect, Security Officer, Performance Zealot, User Advocate). - Adds `bin/coding board` command to trigger the consensus process. - Implements `BoardMeeting` class for orchestration (Proposal -> Anonymization -> Voting -> Tally). - Adds `LLMClient` for lightweight API interaction (Anthropic/OpenAI). - Adds unit tests for the voting logic.
…n; update installer run artifacts
* origin/feat/board-of-directors: feat: add Board of Directors consensus mechanism feat: add CLI options to configure service startup
There was a problem hiding this comment.
Pull request overview
This PR consolidates installer improvements focusing on HTTPS submodule configuration and modern Docker Compose syntax updates, along with deployment metadata updates and removal of deprecated ukb command references.
Key Changes:
- Converts Git submodules from SSH to HTTPS URLs for broader accessibility
- Updates Docker command from
docker-composetodocker compose(modern syntax) - Removes deprecated
ukbcommand references from cleanup scripts
Reviewed changes
Copilot reviewed 17 out of 19 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
.gitmodules |
Converts submodule URLs from SSH (git@github.com:) to HTTPS (https://github.com/) for improved accessibility |
scripts/start-services-robust.js |
Updates to modern docker compose command syntax (removing hyphen from docker-compose) |
scripts/cleanup-aliases.sh |
Removes cleanup of deprecated ukb aliases and functions, keeping only vkb and claude-mcp |
.activate |
Updates paths and removes ukb command reference (note: contains user-specific paths) |
enhanced-lsl-deployment-report.md |
Updates deployment ID and timestamp to lsl-20251201-123841 |
.lsl/config.json |
Updates deployment metadata with new timestamp |
integrations/browser-access/package-lock.json |
Adds "peer": true flag to dependencies (@playwright/test, express, zod) |
uninstall.sh.backup-20251201-123841 |
Backup file of uninstall script (note: should be excluded from version control) |
Files not reviewed (1)
- integrations/browser-access/package-lock.json: Language not supported
Comments suppressed due to low confidence (1)
scripts/start-services-robust.js:222
- Inconsistent indentation: the
returnstatement has extra indentation (8 spaces) compared to the surrounding code at the same block level (6 spaces). This should be:
return {
service: 'constraint-monitor-docker',Instead of:
return {
service: 'constraint-monitor-docker',💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review for a chance to win a $100 gift card. Take the survey.
| #!/bin/bash | ||
| # Coding Tools System - Uninstall Script | ||
| # Removes installations but preserves data | ||
|
|
||
| set -euo pipefail | ||
|
|
||
| # Colors for output | ||
| RED='\033[0;31m' | ||
| GREEN='\033[0;32m' | ||
| YELLOW='\033[1;33m' | ||
| BLUE='\033[0;34m' | ||
| NC='\033[0m' # No Color | ||
|
|
||
| CODING_REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | ||
|
|
||
| echo -e "${YELLOW}🗑️ Coding Tools System - Uninstaller${NC}" | ||
| echo -e "${YELLOW}=========================================${NC}" | ||
| echo "" | ||
| echo -e "${RED}⚠️ WARNING: This will remove installed components${NC}" | ||
| echo -e "${GREEN}✅ Your knowledge data (.data/knowledge-graph/ and .data/knowledge-export/) will be preserved${NC}" | ||
| echo "" | ||
| read -p "Continue with uninstall? (y/N) " -n 1 -r | ||
| echo | ||
| if [[ ! $REPLY =~ ^[Yy]$ ]]; then | ||
| echo "Uninstall cancelled." | ||
| exit 0 | ||
| fi | ||
|
|
||
| echo -e "\n${BLUE}🔧 Removing shell configuration...${NC}" | ||
| # Remove from common shell configs | ||
| for rc_file in "$HOME/.bashrc" "$HOME/.zshrc" "$HOME/.bash_profile"; do | ||
| if [[ -f "$rc_file" ]]; then | ||
| # Remove old Claude Knowledge Management System entries | ||
| sed -i '/# Claude Knowledge Management System/,+3d' "$rc_file" 2>/dev/null || true | ||
| # Remove new Coding Tools entries | ||
| sed -i '/# Coding Tools - Start/,/# Coding Tools - End/d' "$rc_file" 2>/dev/null || true | ||
| # Remove any CODING_TOOLS_PATH or CODING_REPO entries | ||
| sed -i '/CODING_TOOLS_PATH/d' "$rc_file" 2>/dev/null || true | ||
| sed -i '/CODING_REPO/d' "$rc_file" 2>/dev/null || true | ||
| # Remove team configuration | ||
| sed -i '/# Coding Tools - Team Configuration/,+1d' "$rc_file" 2>/dev/null || true | ||
| sed -i '/CODING_TEAM/d' "$rc_file" 2>/dev/null || true | ||
| # Remove any PATH additions for coding tools | ||
| sed -i '/knowledge-management.*coding/d' "$rc_file" 2>/dev/null || true | ||
| echo " Cleaned $rc_file" | ||
| fi | ||
| done | ||
|
|
||
| echo -e "\n${BLUE}🗑️ Removing installed components...${NC}" | ||
| # Remove bin directory | ||
| if [[ -d "$CODING_REPO/bin" ]]; then | ||
| rm -rf "$CODING_REPO/bin" | ||
| echo " Removed bin directory" | ||
| fi | ||
|
|
||
| # Clean memory-visualizer (git submodule - preserve source) | ||
| if [[ -d "$CODING_REPO/integrations/memory-visualizer" ]]; then | ||
| echo " Cleaning memory-visualizer (git submodule)..." | ||
| rm -rf "$CODING_REPO/integrations/memory-visualizer/node_modules" | ||
| rm -rf "$CODING_REPO/integrations/memory-visualizer/dist" | ||
| echo " Removed build artifacts (source code preserved)" | ||
| fi | ||
|
|
||
| # Clean mcp-server-browserbase (git submodule - preserve source) | ||
| if [[ -d "$CODING_REPO/integrations/mcp-server-browserbase" ]]; then | ||
| echo " Cleaning mcp-server-browserbase (git submodule)..." | ||
| rm -rf "$CODING_REPO/integrations/mcp-server-browserbase/node_modules" | ||
| rm -rf "$CODING_REPO/integrations/mcp-server-browserbase/dist" | ||
| echo " Removed build artifacts (source code preserved)" | ||
| fi | ||
|
|
||
| # Clean semantic analysis MCP server (git submodule - preserve source) | ||
| if [[ -d "$CODING_REPO/integrations/mcp-server-semantic-analysis" ]]; then | ||
| echo " Cleaning semantic analysis MCP server (git submodule)..." | ||
|
|
||
| # Remove node_modules | ||
| if [[ -d "$CODING_REPO/integrations/mcp-server-semantic-analysis/node_modules" ]]; then | ||
| rm -rf "$CODING_REPO/integrations/mcp-server-semantic-analysis/node_modules" | ||
| echo " Removed Node.js dependencies" | ||
| fi | ||
|
|
||
| # Remove built dist directory | ||
| if [[ -d "$CODING_REPO/integrations/mcp-server-semantic-analysis/dist" ]]; then | ||
| rm -rf "$CODING_REPO/integrations/mcp-server-semantic-analysis/dist" | ||
| echo " Removed built TypeScript files" | ||
| fi | ||
|
|
||
| # Remove logs directory | ||
| if [[ -d "$CODING_REPO/integrations/mcp-server-semantic-analysis/logs" ]]; then | ||
| rm -rf "$CODING_REPO/integrations/mcp-server-semantic-analysis/logs" | ||
| echo " Removed semantic analysis logs" | ||
| fi | ||
|
|
||
| echo " Git submodule source code preserved" | ||
| fi | ||
|
|
||
| # Clean Serena MCP server (git submodule - preserve source) | ||
| if [[ -d "$CODING_REPO/integrations/serena" ]]; then | ||
| echo " Cleaning Serena MCP server (git submodule)..." | ||
|
|
||
| # Remove .venv directory (uv virtual environment) | ||
| if [[ -d "$CODING_REPO/integrations/serena/.venv" ]]; then | ||
| rm -rf "$CODING_REPO/integrations/serena/.venv" | ||
| echo " Removed Python virtual environment" | ||
| fi | ||
|
|
||
| # Remove __pycache__ directories | ||
| find "$CODING_REPO/integrations/serena" -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true | ||
| echo " Removed Python cache files" | ||
|
|
||
| # Remove .pyc files | ||
| find "$CODING_REPO/integrations/serena" -name "*.pyc" -type f -exec rm -f {} + 2>/dev/null || true | ||
|
|
||
| # Remove uv.lock file | ||
| if [[ -f "$CODING_REPO/integrations/serena/uv.lock" ]]; then | ||
| rm -f "$CODING_REPO/integrations/serena/uv.lock" | ||
| echo " Removed uv lock file" | ||
| fi | ||
|
|
||
| echo " Git submodule source code preserved" | ||
| fi | ||
|
|
||
| # Clean up node_modules in MCP servers (non-submodules) | ||
| for dir in "integrations/browser-access"; do | ||
| if [[ -d "$CODING_REPO/$dir/node_modules" ]]; then | ||
| rm -rf "$CODING_REPO/$dir/node_modules" | ||
| echo " Removed $dir/node_modules" | ||
| fi | ||
| if [[ -d "$CODING_REPO/$dir/dist" ]]; then | ||
| rm -rf "$CODING_REPO/$dir/dist" | ||
| echo " Removed $dir/dist" | ||
| fi | ||
| done | ||
|
|
||
| # Note: memory-visualizer and mcp-server-semantic-analysis are git submodules | ||
| # and have already been cleaned above | ||
|
|
||
| # Remove .coding-tools directory | ||
| if [[ -d "$HOME/.coding-tools" ]]; then | ||
| rm -rf "$HOME/.coding-tools" | ||
| echo " Removed ~/.coding-tools" | ||
| fi | ||
|
|
||
| # Remove logs | ||
| rm -f "$CODING_REPO/install.log" 2>/dev/null || true | ||
| # ukb removed - no temp logs to clean | ||
| rm -f /tmp/vkb-server.* 2>/dev/null || true | ||
|
|
||
| # Remove MCP configuration files | ||
| echo -e "\n${BLUE}🔧 Removing MCP configuration files...${NC}" | ||
| rm -f "$CODING_REPO/claude-code-mcp-processed.json" 2>/dev/null || true | ||
|
|
||
| # Remove user-level MCP configuration (optional - ask user) | ||
| echo "" | ||
| read -p "Remove user-level MCP configuration? This affects all projects using Claude Code. (y/N) " -n 1 -r | ||
| echo | ||
| if [[ $REPLY =~ ^[Yy]$ ]]; then | ||
| USER_MCP_CONFIG="$HOME/.config/claude-code-mcp.json" | ||
| if [[ -f "$USER_MCP_CONFIG" ]]; then | ||
| rm -f "$USER_MCP_CONFIG" | ||
| echo " Removed user-level MCP configuration" | ||
| fi | ||
|
|
||
| # Remove from Claude app directory | ||
| if [[ "$OSTYPE" == "darwin"* ]]; then | ||
| CLAUDE_CONFIG_DIR="$HOME/Library/Application Support/Claude" | ||
| elif [[ "$OSTYPE" == "linux-gnu"* ]]; then | ||
| CLAUDE_CONFIG_DIR="$HOME/.config/Claude" | ||
| elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "win32" ]]; then | ||
| CLAUDE_CONFIG_DIR="${APPDATA:-$HOME/AppData/Roaming}/Claude" | ||
| fi | ||
|
|
||
| if [[ -n "$CLAUDE_CONFIG_DIR" ]] && [[ -f "$CLAUDE_CONFIG_DIR/claude-code-mcp.json" ]]; then | ||
| rm -f "$CLAUDE_CONFIG_DIR/claude-code-mcp.json" | ||
| echo " Removed Claude app MCP configuration" | ||
| fi | ||
| else | ||
| echo " Keeping user-level MCP configuration" | ||
| fi | ||
|
|
||
| # Remove constraint monitor and LSL hooks | ||
| echo -e "\n${BLUE}🔗 Removing Hooks (Constraints + LSL)...${NC}" | ||
| SETTINGS_FILE="$HOME/.claude/settings.json" | ||
|
|
||
| if [[ ! -f "$SETTINGS_FILE" ]]; then | ||
| echo " No settings file found - hooks already removed" | ||
| else | ||
| # Check if jq is available | ||
| if ! command -v jq >/dev/null 2>&1; then | ||
| echo -e "${YELLOW} ⚠️ jq not found - cannot automatically remove hooks${NC}" | ||
| echo " Please manually edit: $SETTINGS_FILE" | ||
| echo " Remove PreToolUse hooks containing 'pre-tool-hook-wrapper.js'" | ||
| echo " Remove PostToolUse hooks containing 'tool-interaction-hook-wrapper.js'" | ||
| else | ||
| # Backup settings file | ||
| BACKUP_FILE="${SETTINGS_FILE}.backup.$(date +%Y%m%d_%H%M%S)" | ||
| cp "$SETTINGS_FILE" "$BACKUP_FILE" | ||
| echo " Backed up settings to: $BACKUP_FILE" | ||
|
|
||
| # Remove both PreToolUse and PostToolUse hooks | ||
| TEMP_FILE=$(mktemp) | ||
| jq 'if .hooks.PreToolUse then | ||
| .hooks.PreToolUse = [ | ||
| .hooks.PreToolUse[] | | ||
| select(.hooks[]?.command | contains("pre-tool-hook-wrapper.js") | not) | ||
| ] | ||
| else . end | | ||
| if .hooks.PreToolUse == [] then | ||
| del(.hooks.PreToolUse) | ||
| else . end | | ||
| if .hooks.PostToolUse then | ||
| .hooks.PostToolUse = [ | ||
| .hooks.PostToolUse[] | | ||
| select(.hooks[]?.command | contains("tool-interaction-hook-wrapper.js") | not) | ||
| ] | ||
| else . end | | ||
| if .hooks.PostToolUse == [] then | ||
| del(.hooks.PostToolUse) | ||
| else . end' "$SETTINGS_FILE" > "$TEMP_FILE" | ||
|
|
||
| # Validate and apply | ||
| if jq empty "$TEMP_FILE" 2>/dev/null; then | ||
| mv "$TEMP_FILE" "$SETTINGS_FILE" | ||
| echo " ✅ Removed PreToolUse and PostToolUse hooks from settings" | ||
| else | ||
| rm -f "$TEMP_FILE" | ||
| echo -e "${RED} ❌ Failed to update settings - JSON validation failed${NC}" | ||
| echo " Original settings preserved in: $BACKUP_FILE" | ||
| fi | ||
| fi | ||
| fi | ||
|
|
||
| echo -e "\n${BLUE}🗑️ Removing knowledge databases...${NC}" | ||
| # Remove .data directory with database files (optional - ask user) | ||
| if [[ -d "$CODING_REPO/.data" ]]; then | ||
| echo "" | ||
| read -p "Remove .data directory (contains SQLite knowledge database)? This will delete all learning history. (y/N) " -n 1 -r | ||
| echo | ||
| if [[ $REPLY =~ ^[Yy]$ ]]; then | ||
| rm -rf "$CODING_REPO/.data" | ||
| echo " Removed .data directory" | ||
| else | ||
| echo -e "${GREEN} Kept .data directory with knowledge database${NC}" | ||
| fi | ||
| fi | ||
|
|
||
| # Inform about Qdrant collections | ||
| echo -e "\n${YELLOW}ℹ️ Note about Qdrant collections:${NC}" | ||
| echo " If you were using Qdrant for vector search, you may want to remove collections:" | ||
| echo " docker exec qdrant-container /bin/sh -c \"rm -rf /qdrant/storage/collections/knowledge_*\"" | ||
| echo " Or stop the Qdrant container:" | ||
| echo " docker stop qdrant-container" | ||
|
|
||
| echo -e "\n${GREEN}✅ Uninstall completed!${NC}" | ||
| echo -e "${GREEN}📊 Your knowledge data preservation status:${NC}" | ||
|
|
||
| # Check for GraphDB and knowledge exports | ||
| if [[ -d "$CODING_REPO/.data/knowledge-graph" ]]; then | ||
| echo " $CODING_REPO/.data/knowledge-graph/ - PRESERVED (GraphDB)" | ||
| fi | ||
|
|
||
| if [[ -d "$CODING_REPO/.data/knowledge-export" ]]; then | ||
| EXPORT_FILES=$(find "$CODING_REPO/.data/knowledge-export" -name "*.json" 2>/dev/null || true) | ||
| if [[ -n "$EXPORT_FILES" ]]; then | ||
| echo -e "${GREEN}📊 Knowledge export files preserved:${NC}" | ||
| echo "$EXPORT_FILES" | while read -r file; do | ||
| [[ -n "$file" ]] && echo " $(basename "$file")" | ||
| done | ||
| fi | ||
| fi | ||
|
|
||
| if [[ -d "$CODING_REPO/.data" ]]; then | ||
| echo -e "${GREEN}📊 Knowledge database preserved:${NC}" | ||
| echo " $CODING_REPO/.data/knowledge.db (SQLite database with learning history)" | ||
| fi | ||
|
|
||
| echo "" | ||
| echo "To reinstall, run: ./install.sh" | ||
| echo "Your team configuration will need to be set up again during installation." No newline at end of file |
There was a problem hiding this comment.
The backup file uninstall.sh.backup-20251201-123841 is listed in .gitignore via the *.backup pattern (line 24) but is still being tracked. Backup files should not be committed to version control as they clutter the repository.
To fix this, remove the file from git tracking:
git rm --cached uninstall.sh.backup-20251201-123841The .gitignore pattern will then prevent future backup files from being committed.
| export CODING_REPO="/home/q494415/workspace/agentic-coding-framework" | ||
| export PATH="/home/q494415/workspace/agentic-coding-framework/bin:$PATH" |
There was a problem hiding this comment.
The .activate file is listed in .gitignore (line 64) but is still being tracked in the repository. This file contains user-specific paths (/home/q494415/workspace/agentic-coding-framework) that should not be committed.
To fix this, the file should be removed from git tracking:
git rm --cached .activateThis will remove it from the repository while keeping the local file. Users can then create their own .activate file based on their environment.
|
Merged remote branches and into this feature branch locally and pushed the merge commits. I ran the project's robust startup (🚀 Starting Coding Services (Robust Mode)... ═══════════════════════════════════════════════════════════════════════ 🧹 Pre-startup cleanup: Checking for dangling processes... Found 1 dangling transcript monitor process(es) ✅ Pre-startup cleanup complete - system ready for fresh start 📋 Starting REQUIRED services (Live Logging System)... [ServiceStarter] 🚀 Starting Transcript Monitor... 🔵 Starting OPTIONAL services (graceful degradation enabled)... [ServiceStarter] 🚀 Starting VKB Server... [ServiceStarter] 🚀 Starting Constraint Monitor... [ServiceStarter] 🚀 Starting Health Verifier... [ServiceStarter] 🚀 Starting StatusLine Health Monitor... ═══════════════════════════════════════════════════════════════════════ ✅ Successfully started: 6 services
[Status] Created /home/q494415/workspace/agentic-coding-framework/.services-running.json 🎉 Startup complete in FULL mode! |
This PR bundles local installer fixes (HTTPS submodules and docker compose usage) and related artifacts so we can review and merge.
It also prepares for merging the feature branches and into this branch for testing.