Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 1 addition & 6 deletions .zsh/aliases.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,7 @@ alias kca="knowledge-crystallize.sh --all" # Stamp all projects at once
alias dch="diff-check.sh" # Detect drift between repo and ~/.dotfiles
alias cl="changelog-gen.sh" # Regenerate CHANGELOG.md from git log

# Aider tiers (OpenRouter) — sunset planned in PR2, kept here during PR1 coexistence (see ADR-009 / spec AI-011)
alias ai="aider" # daily: DeepSeek V3.2
alias aic="aider --model openrouter/qwen/qwen3-coder-next" # coding: Qwen3 Coder
alias aia="aider --architect --model openrouter/deepseek/deepseek-v3.2-speciale" # architecture: DeepSeek Speciale

# OpenCode (secondary AI coding agent — replaces aider after PR2)
# OpenCode (primary AI coding agent — replaces aider)
alias oc="opencode" # TUI: opencode Go subscription

# tmux session management
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> **Single Source of Truth for AI coding agents in this repo.**
>
> Claude Code, OpenCode, Copilot, Cursor, Codex, Gemini, and Aider all read this file as their canonical system prompt. Per-agent files in `ai/<agent>/` and `.github/` are thin pointers that delegate here, retaining only agent-specific extensions. See [`30-architecture/adr-009-multi-agent-runtime`](https://github.com/mlorentedev/dotfiles) (in vault) for the rationale.
> Claude Code, OpenCode, Copilot, Cursor, Codex, and Gemini all read this file as their canonical system prompt. Per-agent files in `ai/<agent>/` and `.github/` are thin pointers that delegate here, retaining only agent-specific extensions. See [`30-architecture/adr-009-multi-agent-runtime`](https://github.com/mlorentedev/dotfiles) (in vault) for the rationale.

## Identity

Expand Down
32 changes: 0 additions & 32 deletions ai/aider/aider.conf.yml

This file was deleted.

33 changes: 0 additions & 33 deletions ai/aider/aider.model.settings.yml

This file was deleted.

6 changes: 2 additions & 4 deletions powershell/profile.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,8 @@
Set-Alias -Name c -Value claude
Set-Alias -Name g -Value gemini

# Aider tiers (OpenRouter)
function ai { aider @Args }
function aic { aider --model openrouter/qwen/qwen3-coder-next @Args }
function aia { aider --architect --model openrouter/deepseek/deepseek-v3.2-speciale @Args }
# OpenCode (primary AI coding agent — replaces aider)
Set-Alias -Name oc -Value opencode

# ============================================================================
# FUNCTIONS
Expand Down
20 changes: 1 addition & 19 deletions setup-linux.sh
Original file line number Diff line number Diff line change
Expand Up @@ -335,16 +335,7 @@ fi
chmod +x "$HOME/.claude/init-project.sh" 2>/dev/null || true
log_success "Claude Code configured with skills"

# Aider (AI pair programming)
log_info "Setting up Aider configuration..."
if [ -f "$CURRENT_DIR/ai/aider/aider.conf.yml" ]; then
cp "$CURRENT_DIR/ai/aider/aider.conf.yml" "$HOME/.aider.conf.yml"
log_success "Deployed .aider.conf.yml"
fi
if [ -f "$CURRENT_DIR/ai/aider/aider.model.settings.yml" ]; then
cp "$CURRENT_DIR/ai/aider/aider.model.settings.yml" "$HOME/.aider.model.settings.yml"
log_success "Deployed .aider.model.settings.yml"
fi
# Python tooling (uv + poetry) — used by hive MCP server (uvx hive-vault) and general Python workflows
# Install uv (Python package manager — provides uvx)
if ! command -v uv >/dev/null 2>&1; then
log_info "Installing uv..."
Expand Down Expand Up @@ -376,15 +367,6 @@ else
log_info "poetry already installed"
fi

# Install aider via uv (requires Python 3.12 — audioop removed in 3.13)
if command -v uv >/dev/null 2>&1; then
log_info "Installing aider-chat via uv..."
uv tool install --python 3.12 aider-chat 2>/dev/null || true
log_success "Aider installed"
else
log_warning "uv not found, skipping aider installation"
fi

# Create convenience symlinks for versioned-only binaries
PYTHON_DIR=$(ls -d "$HOME/Applications"/python-* 2>/dev/null | sort -V | tail -1) || true
if [ -n "$PYTHON_DIR" ] && [ -d "$PYTHON_DIR/bin" ] && [ ! -e "$PYTHON_DIR/bin/python" ]; then
Expand Down
22 changes: 5 additions & 17 deletions tests/aliases.bats
Original file line number Diff line number Diff line change
Expand Up @@ -32,26 +32,14 @@ setup() {
grep -q 'alias tf="terraform"' "$ALIASES_FILE"
}

# --- Aider tier aliases ---
# --- OpenCode alias (replaces aider tiers) ---

@test "aliases.zsh defines ai alias for daily tier" {
grep -q 'alias ai="aider"' "$ALIASES_FILE"
@test "aliases.zsh defines oc alias for opencode" {
grep -q '^alias oc="opencode"' "$ALIASES_FILE"
}

@test "aliases.zsh defines aic alias for coding tier" {
grep -q 'alias aic=.*qwen.*coder' "$ALIASES_FILE"
}

@test "aliases.zsh defines aia alias for architecture tier" {
grep -q 'alias aia=.*architect.*speciale' "$ALIASES_FILE"
}

@test "aliases.zsh aic uses openrouter provider" {
grep 'alias aic=' "$ALIASES_FILE" | grep -q 'openrouter/'
}

@test "aliases.zsh aia uses openrouter provider" {
grep 'alias aia=' "$ALIASES_FILE" | grep -q 'openrouter/'
@test "aliases.zsh no longer defines aider tier aliases (sunset)" {
! grep -qE '^alias (ai|aic|aia)=' "$ALIASES_FILE"
}

# --- Knowledge aliases ---
Expand Down
23 changes: 15 additions & 8 deletions tests/opencode.bats
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,24 @@ setup() {
[[ $(awk '/^# OpenCode/,/^# GitHub Copilot/' "$SETUP_SCRIPT" | grep -c '2>/dev/null || true') -eq 0 ]]
}

# --- Regression: aider coexistence (PR1 keeps aider; sunset is PR2) ---
# --- Regression: aider sunset (PR2) ---

@test "setup-linux.sh STILL has aider install block (PR1 coexistence)" {
grep -q "# Aider (AI pair programming)" "$SETUP_SCRIPT"
grep -q "uv tool install --python 3.12 aider-chat" "$SETUP_SCRIPT"
@test "setup-linux.sh no longer installs aider" {
! grep -q "uv tool install --python 3.12 aider-chat" "$SETUP_SCRIPT"
! grep -q "# Aider (AI pair programming)" "$SETUP_SCRIPT"
}

@test ".zsh/aliases.zsh STILL has aider aliases (PR1 coexistence)" {
grep -q '^alias ai="aider"' "$ALIASES_FILE"
grep -q '^alias aic="aider' "$ALIASES_FILE"
grep -q '^alias aia="aider' "$ALIASES_FILE"
@test "setup-linux.sh keeps uv install (used by hive MCP server)" {
grep -q "Installing uv" "$SETUP_SCRIPT"
grep -q "https://astral.sh/uv/install.sh" "$SETUP_SCRIPT"
}

@test "ai/aider/ directory removed from repo" {
[[ ! -d "$DOTFILES_DIR/ai/aider" ]]
}

@test ".zsh/aliases.zsh no longer has aider tier aliases" {
! grep -qE '^alias (ai|aic|aia)=' "$ALIASES_FILE"
}

# --- opencode.jsonc structure ---
Expand Down
43 changes: 9 additions & 34 deletions tests/powershell-profile.bats
Original file line number Diff line number Diff line change
Expand Up @@ -22,46 +22,21 @@ setup() {

# --- Aider tier functions ---

@test "profile.ps1 defines ai function for daily tier" {
grep -q 'function ai {' "$PROFILE_SCRIPT"
}

@test "profile.ps1 ai function calls aider" {
grep 'function ai {' "$PROFILE_SCRIPT" | grep -q 'aider'
}
# --- OpenCode alias (replaces aider tier functions, sunset) ---

@test "profile.ps1 defines aic function for coding tier" {
grep -q 'function aic {' "$PROFILE_SCRIPT"
@test "profile.ps1 defines oc alias for opencode" {
grep -qE 'Set-Alias -Name oc -Value opencode' "$PROFILE_SCRIPT"
}

@test "profile.ps1 aic function uses qwen coder model" {
grep 'function aic {' "$PROFILE_SCRIPT" | grep -q 'qwen.*coder'
@test "profile.ps1 no longer defines aider tier functions (sunset)" {
! grep -qE '^function (ai|aic|aia) ' "$PROFILE_SCRIPT"
}

@test "profile.ps1 defines aia function for architecture tier" {
grep -q 'function aia {' "$PROFILE_SCRIPT"
}

@test "profile.ps1 aia function uses architect mode" {
grep 'function aia {' "$PROFILE_SCRIPT" | grep -q '\-\-architect'
}

@test "profile.ps1 aia function uses deepseek speciale" {
grep 'function aia {' "$PROFILE_SCRIPT" | grep -q 'speciale'
}

# --- Parity check: same models in bash and PowerShell ---

@test "parity: aic uses same model in aliases.zsh and profile.ps1" {
bash_model=$(grep 'alias aic=' "$DOTFILES_DIR/.zsh/aliases.zsh" | grep -oP 'openrouter/[^ "]+')
ps_model=$(grep 'function aic {' "$PROFILE_SCRIPT" | grep -oP 'openrouter/[^ }]+')
[[ "$bash_model" = "$ps_model" ]]
}
# --- Parity check: oc alias exists in both bash and PowerShell ---

@test "parity: aia uses same model in aliases.zsh and profile.ps1" {
bash_model=$(grep 'alias aia=' "$DOTFILES_DIR/.zsh/aliases.zsh" | grep -oP 'openrouter/[^ "]+')
ps_model=$(grep 'function aia {' "$PROFILE_SCRIPT" | grep -oP 'openrouter/[^ }]+')
[[ "$bash_model" = "$ps_model" ]]
@test "parity: oc alias defined in both aliases.zsh and profile.ps1" {
grep -qE '^alias oc=' "$DOTFILES_DIR/.zsh/aliases.zsh"
grep -qE 'Set-Alias -Name oc' "$PROFILE_SCRIPT"
}

# --- Other functions ---
Expand Down