Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
176 commits
Select commit Hold shift + click to select a range
45f6f17
fix(docker): Pre-install Playwright Chromium browsers for automated t…
Shironex Feb 2, 2026
b37a287
fix(docker): Address PR #745 review feedback
Shironex Feb 2, 2026
3ccea7a
fix(docker): Address remaining PR #745 review comments
Shironex Feb 2, 2026
aad3ff2
fix(auth): Improve OAuth credential detection and startup warning
Shironex Feb 2, 2026
0aef725
fix(auth): Enhance credential detection logic for OAuth
Shironex Feb 2, 2026
3b361cb
chore: update Codex SDK to version 0.98.0 and add GPT-5.3-Codex model
Shironex Feb 5, 2026
835ffe3
feat: update Claude model to Opus 4.6 and enhance adaptive thinking s…
Shironex Feb 5, 2026
f974534
feat: enhance adaptive thinking model support and update UI components
Shironex Feb 5, 2026
220c8e4
feat: add 'dev-server:url-detected' event type to EventType
Shironex Feb 5, 2026
094f080
chore: final dev commit
DhanushSantosh Feb 14, 2026
152cf00
docs: map existing codebase
Shironex Jan 27, 2026
ef544e7
docs: initialize project
Shironex Jan 27, 2026
a0ea65d
chore: ignore planning docs from version control
Shironex Jan 27, 2026
70fc034
test(01-01): add characterization tests for ConcurrencyManager
Shironex Jan 27, 2026
b73ef9f
feat(01-01): extract ConcurrencyManager class from AutoModeService
Shironex Jan 27, 2026
c92c8e9
refactor(01-01): wire ConcurrencyManager into AutoModeService
Shironex Jan 27, 2026
3bcdc88
feat(01-03): create TypedEventBus class with tests
Shironex Jan 27, 2026
bc9dae0
feat(01-02): extract WorktreeResolver from AutoModeService
Shironex Jan 27, 2026
1eb2820
refactor(01-03): wire TypedEventBus into AutoModeService
Shironex Jan 27, 2026
6029e95
feat(01-02): extract FeatureStateManager from AutoModeService
Shironex Jan 27, 2026
18fd1c6
refactor(01-02): wire WorktreeResolver and FeatureStateManager into A…
Shironex Jan 27, 2026
8387b76
feat(02-01): create PlanApprovalService with timeout and recovery
Shironex Jan 27, 2026
58facb1
test(02-01): add PlanApprovalService tests
Shironex Jan 27, 2026
5dca97d
refactor(02-01): wire PlanApprovalService into AutoModeService
Shironex Jan 27, 2026
2fac438
feat(03-01): create SpecParser module with comprehensive tests
Shironex Jan 27, 2026
ec5179e
refactor(03-01): wire SpecParser into AutoModeService
Shironex Jan 27, 2026
25fa6fd
feat(03-02): create AgentExecutor class with core streaming logic
Shironex Jan 27, 2026
cbb45b6
test(03-02): add AgentExecutor tests
Shironex Jan 27, 2026
8f245e7
refactor(03-02): wire AgentExecutor into AutoModeService
Shironex Jan 27, 2026
e3a1c8c
refactor(03-03): wire runAgent() to delegate to AgentExecutor.execute()
Shironex Jan 27, 2026
b24839b
test(03-03): add AgentExecutor execution tests
Shironex Jan 27, 2026
4912d37
fix(03-03): fix type compatibility and cleanup unused imports
Shironex Jan 27, 2026
ba45587
feat(04-01): create PipelineOrchestrator with step execution and auto…
Shironex Jan 27, 2026
4f00b41
test(04-01): add PipelineOrchestrator unit tests
Shironex Jan 27, 2026
2e577bb
refactor(04-02): wire PipelineOrchestrator into AutoModeService
Shironex Jan 27, 2026
0cd149f
test(04-02): add PipelineOrchestrator delegation and edge case tests
Shironex Jan 27, 2026
7807255
refactor(04-02): remove duplicated pipeline methods from AutoModeService
Shironex Jan 27, 2026
94a8e09
feat(05-01): create AutoLoopCoordinator with loop lifecycle
Shironex Jan 27, 2026
2aa156e
test(05-01): add AutoLoopCoordinator unit tests
Shironex Jan 27, 2026
e0f785a
feat(05-02): create ExecutionService with feature execution lifecycle
Shironex Jan 27, 2026
71a0309
test(05-02): add ExecutionService unit tests
Shironex Jan 27, 2026
18624d1
feat(05-03): create RecoveryService with crash recovery logic
Shironex Jan 27, 2026
828d0a0
test(05-03): add RecoveryService unit tests
Shironex Jan 27, 2026
1b39e25
refactor(05-03): wire coordination services into AutoModeService
Shironex Jan 27, 2026
afa6039
refactor(05-03): remove duplicated methods from AutoModeService
Shironex Jan 27, 2026
1a7dd5d
refactor(05-03): wire ExecutionService delegation in AutoModeService
Shironex Jan 27, 2026
0383f85
chore(06-01): create facade types and directory structure
Shironex Jan 30, 2026
a048462
feat(06-01): create AutoModeServiceFacade with all 23 methods
Shironex Jan 30, 2026
1b32a6b
chore(06-01): create index.ts with exports
Shironex Jan 30, 2026
071af1b
refactor(06-02): migrate Batch 1 query-only routes to facade pattern
Shironex Jan 30, 2026
31f8afc
refactor(06-02): migrate Batch 2 state change routes to facade pattern
Shironex Jan 30, 2026
ade22ef
refactor(06-03): migrate Batch 3 feature lifecycle routes to facade p…
Shironex Jan 30, 2026
7bc1f68
refactor(06-03): migrate Batch 4 complex routes to facade pattern
Shironex Jan 30, 2026
7fd3d61
refactor(06-03): migrate Batch 5 secondary routes and wire router index
Shironex Jan 30, 2026
473f935
refactor(06-04): delete auto-mode-service.ts monolith
Shironex Jan 30, 2026
efd4284
refactor(06-04): trim 5 oversized services to under 500 lines
Shironex Jan 30, 2026
43309e3
refactor(06-04): extract types and condense agent-executor/pipeline-o…
Shironex Jan 30, 2026
0ed4494
chore(deps): update lint-staged version and change node-gyp repositor…
Shironex Jan 30, 2026
df10bcd
fix: lock file
Shironex Jan 30, 2026
28224e1
fix(facade): wire runAgentFn to AgentExecutor.execute
Shironex Jan 31, 2026
49bdaaa
fix(agent-executor): restore wrench emoji in tool output format
Shironex Jan 31, 2026
63b1a35
fix(facade): pass previousContent to AgentExecutor for pipeline steps
Shironex Jan 31, 2026
7c89923
fix: address PR review issues for auto-mode refactor
Shironex Jan 31, 2026
5ffbfb3
fix(server): Address PR #733 review feedback and fix cross-platform t…
Shironex Feb 2, 2026
bcc8542
Fix custom providers not passing model name properly
gsxdsm Feb 15, 2026
0f0f515
feat(auto-mode): implement facade caching and enhance error handling
gsxdsm Feb 15, 2026
0745832
refactor(auto-mode): convert getStatusForProject to async and enhance…
gsxdsm Feb 15, 2026
8542a32
refactor(auto-mode): enhance feature retrieval logic in facade and gl…
gsxdsm Feb 15, 2026
c703441
chore: update .gitignore to include new configuration files
Shironex Feb 15, 2026
09507bf
Merge branch 'v0.15.0rc' into feat/new-claude-and-codex-models
Shironex Feb 15, 2026
8ed1356
fix: address PR #757 review comments
Shironex Feb 15, 2026
67ebf8c
Merge pull request #757 from AutoMaker-Org/feat/new-claude-and-codex-…
Shironex Feb 15, 2026
ad6ce73
Merge remote-tracking branch 'origin/v0.15.0rc' into feature/bug-star…
Shironex Feb 15, 2026
d4f68b6
fix: address PR #747 review comments
Shironex Feb 15, 2026
6f1325f
Merge pull request #747 from AutoMaker-Org/feature/bug-startup-warnin…
Shironex Feb 15, 2026
d4439fa
Merge branch 'v0.15.0rc' into fix/docker-playwright-missing-browsers
Shironex Feb 15, 2026
8226699
fix(docker): add @playwright/test to server devDependencies
Shironex Feb 15, 2026
a08ba1b
fix: address PR #745 review comments
Shironex Feb 15, 2026
1662c6b
Merge pull request #745 from AutoMaker-Org/fix/docker-playwright-miss…
Shironex Feb 15, 2026
a3a5c9e
Merge remote-tracking branch 'upstream/v0.15.0rc' into refactor/auto-…
gsxdsm Feb 15, 2026
a935229
fix: enhance error handling in feature creation process
gsxdsm Feb 15, 2026
f459b73
fix: update kanban card status handling
gsxdsm Feb 15, 2026
7765a12
Feat: Add z.ai usage tracking
gsxdsm Jan 20, 2026
7d5bc72
Feat: Show Gemini Usage in usage dropdown and mobile sidebar
gsxdsm Jan 25, 2026
ac2e8cf
Feat: Add z.ai usage tracking
gsxdsm Jan 20, 2026
41014f6
fix: resolve TypeScript errors after upstream merge
gsxdsm Feb 16, 2026
e9802ac
Feat: Add ability to duplicate a feature and duplicate as a child
gsxdsm Jan 21, 2026
bea26a6
style: Fix inconsistent indentation in components and imports
gsxdsm Feb 16, 2026
eed5e20
fix(agent-service): fallback to effectiveModel when requestedModel is…
gsxdsm Feb 16, 2026
462dbf1
fix: Address code review comments
gsxdsm Feb 16, 2026
434792a
fix: Normalize 'main' branch to __main__ in auto-loop key generation
gsxdsm Feb 16, 2026
0b03e70
fix: Resolve null coalescing, feature verification, and test abort ha…
gsxdsm Feb 16, 2026
ab5d6a0
feat: Improve callback safety and remove unnecessary formatting in au…
gsxdsm Feb 16, 2026
67dd628
test: Add mock for getCurrentBranch in pipeline orchestrator tests
gsxdsm Feb 16, 2026
46dd219
Merge pull request #771 from gsxdsm/refactor/auto-mode-service-gsxdsm
gsxdsm Feb 16, 2026
727a7a5
feat: Exclude waiting_approval cards from active running state display
gsxdsm Feb 16, 2026
2805c0e
Merge pull request #775 from gsxdsm/refactor/auto-mode-service-gsxdsm
gsxdsm Feb 16, 2026
416ef3a
feat: Add error handling to auto-mode facade and implement followUp f…
gsxdsm Feb 17, 2026
4a8c6b0
Update feature-state-manager.test.ts
gsxdsm Feb 17, 2026
30fce3f
test: Update task finalization behavior to keep pending tasks in revi…
gsxdsm Feb 17, 2026
381698b
Merge pull request #776 from gsxdsm/fix/claude-weekly-usage
gsxdsm Feb 17, 2026
aa940d4
feat: Add task retry logic and improve max turns limit
gsxdsm Feb 17, 2026
d5340fd
Update apps/ui/src/components/views/board-view/components/kanban-card…
gsxdsm Feb 17, 2026
8af1b8b
chore: Increase default max turns for agent execution from 20/50 to 100
gsxdsm Feb 17, 2026
f06088a
feat: Update maxTurns default from 20 to 100 and format code
gsxdsm Feb 17, 2026
78ec389
Merge remote-tracking branch 'upstream/main' into feat/duplicate-festure
gsxdsm Feb 17, 2026
fa799d3
feat: Implement optimistic updates for feature persistence
gsxdsm Feb 17, 2026
57446b4
Merge pull request #778 from gsxdsm/fix/features-completed-too-soon
gsxdsm Feb 17, 2026
44ef208
Merge remote-tracking branch 'upstream/v0.15.0rc' into feat/duplicate…
gsxdsm Feb 17, 2026
b9653d6
fix: Strip runtime and state fields when duplicating features
gsxdsm Feb 17, 2026
a09a2c7
fix: Address code review feedback and fix lint errors
gsxdsm Feb 17, 2026
98b925b
Merge remote-tracking branch 'upstream/v0.15.0rc' into patchcraft
DhanushSantosh Feb 17, 2026
b5ad77b
feat: Add feature state reconciliation on server startup
gsxdsm Feb 17, 2026
f7b3f75
feat: Add path validation and security improvements to worktree routes
gsxdsm Feb 17, 2026
dee770c
refactor: Consolidate global settings fetching to avoid duplicate calls
gsxdsm Feb 17, 2026
efcdd84
fix: Add 'ready' status to FeatureStatusWithPipeline type union
gsxdsm Feb 17, 2026
7e84591
Merge pull request #774 from gsxdsm/feat/duplicate-festure
gsxdsm Feb 17, 2026
06ef4f8
Merge pull request #781 from gsxdsm/fix/improve-restart-recovery
gsxdsm Feb 17, 2026
8bb1063
Merge remote-tracking branch 'upstream/v0.15.0rc' into feat/add-zai-u…
gsxdsm Feb 17, 2026
de021f9
fix: Remove unused vars and improve type safety. Improve task recovery
gsxdsm Feb 17, 2026
7fcf3c1
feat: Mobile improvements and Add selective file staging and improve …
gsxdsm Feb 17, 2026
cb44f8a
Comprehensive set of mobile and all improvements phase 1
gsxdsm Feb 18, 2026
1df778a
chore: Add PageTransitionEvent and APP_BUILD_HASH to eslint globals
gsxdsm Feb 18, 2026
c7f515a
feat: Add auto-fix for SSH URLs in lockfile before linting
gsxdsm Feb 18, 2026
f4e87d4
Update apps/ui/src/styles/global.css
gsxdsm Feb 18, 2026
17a99a0
fix: restrict Linux native bindings install to Linux runners only
DhanushSantosh Feb 18, 2026
9af63bc
refactor: Improve all git operations, add stash support, add improved…
gsxdsm Feb 18, 2026
cb99c4b
feat: Replace Select with Popover+Command for branch selection UI
gsxdsm Feb 18, 2026
6b9946d
chore: restore check-sync.sh and DEVELOPMENT_WORKFLOW.md
DhanushSantosh Feb 18, 2026
a2d5c1d
Merge remote-tracking branch 'upstream/v0.15.0rc' into patchcraft
DhanushSantosh Feb 18, 2026
627580a
chore: untrack check-sync.sh and DEVELOPMENT_WORKFLOW.md
DhanushSantosh Feb 18, 2026
43c19c7
Update apps/server/src/routes/worktree/routes/discard-changes.ts
gsxdsm Feb 18, 2026
dd4c738
fix: Address code review comments
gsxdsm Feb 18, 2026
887e2ea
fix: Correct parsing of git output blocks and improve stash UI access…
gsxdsm Feb 18, 2026
bddf1a4
fix: Handle staged-new files correctly in discard changes
gsxdsm Feb 18, 2026
854ba6e
fix: Add symlink validation to prevent path traversal attacks
gsxdsm Feb 18, 2026
13261b7
Update apps/ui/src/components/dialogs/project-file-selector-dialog.tsx
gsxdsm Feb 18, 2026
829c161
Update apps/ui/src/components/views/board-view/dialogs/discard-worktr…
gsxdsm Feb 18, 2026
e6e04d5
Update apps/ui/src/components/views/board-view/worktree-panel/worktre…
gsxdsm Feb 18, 2026
d30296d
feat: Add git log parsing and rebase endpoint with input validation
gsxdsm Feb 18, 2026
00f9891
Merge pull request #783 from DhanushSantosh/patchcraft
DhanushSantosh Feb 18, 2026
5c441f2
feat: Add GPT-5 model variants and improve Codex execution logic. Add…
gsxdsm Feb 18, 2026
6903d3c
fix: Standardize event name and import path
gsxdsm Feb 18, 2026
df9a631
refactor: Enhance session management and error handling in AgentServi…
gsxdsm Feb 19, 2026
983eb21
feat: Address review comments, add stage/unstage functionality, confl…
gsxdsm Feb 19, 2026
4ba0026
feat: Add conflict resolution event types
gsxdsm Feb 19, 2026
4ee160f
fix: Address review comments
gsxdsm Feb 19, 2026
15ca1eb
feat: Add process abort control and improve auth detection
gsxdsm Feb 19, 2026
2d90793
feat: Add TypeScript type annotation and fix session_id default value
gsxdsm Feb 19, 2026
53d07fe
feat: Fix new branch issues and address code review comments
gsxdsm Feb 19, 2026
205f662
fix: Improve error handling and validation across multiple services
gsxdsm Feb 19, 2026
a144a63
fix: Resolve git operation error handling and conflict detection issues
gsxdsm Feb 19, 2026
be4153c
fix: Improve error handling and state management in auto-mode and uti…
gsxdsm Feb 19, 2026
ae10dea
feat: Add includeUntracked option and improve error handling for stas…
gsxdsm Feb 19, 2026
47bd7a7
Merge pull request #782 from gsxdsm/feat/mobile-improvements
gsxdsm Feb 19, 2026
ee52333
chore: refresh lockfile after dependency sync
DhanushSantosh Feb 19, 2026
7df2182
Improve pull request flow, add branch selection for worktree creation…
gsxdsm Feb 20, 2026
0a5540c
Fix concurrency limits and remote branch fetching issues (#788)
gsxdsm Feb 20, 2026
0e020f7
Feature: File Editor (#789)
gsxdsm Feb 21, 2026
c81ea76
Feature: Add PR review comments and resolution, improve AI prompt han…
gsxdsm Feb 21, 2026
3ddf26f
Fix: Dev server detection bug fixes. Settings sync bug fixes. Cli pro…
gsxdsm Feb 21, 2026
f3edfbf
Fix: Delete Worktree Crash + PR Comments + Dev Server UX Improvements…
gsxdsm Feb 21, 2026
f785f12
Changes from fix/pwa-cache-fix (#794)
gsxdsm Feb 21, 2026
28becb1
Fix Docker Compose CORS issues with nginx API proxying (#793)
gsxdsm Feb 21, 2026
dfa7190
Changes from fix/manual-crash (#795)
gsxdsm Feb 22, 2026
91bff21
Feature: Git sync, set-tracking, and push divergence handling (#796)
gsxdsm Feb 22, 2026
72cb942
Fix Codex CLI timeout handling and improve CI workflows (#797)
gsxdsm Feb 22, 2026
629fd24
Improve pull request prompt and generation handling (#800)
gsxdsm Feb 22, 2026
1d73291
Fix event hooks not persisting across server syncs (#799)
gsxdsm Feb 22, 2026
2f071a1
Fix deleting worktree crash and improve UX (#798)
gsxdsm Feb 22, 2026
9305ecc
Fix: Restore views properly, model selection for commit and pr and sp…
gsxdsm Feb 22, 2026
e7504b2
Add quick-add feature with improved workflows (#802)
gsxdsm Feb 23, 2026
0330c70
Feature: worktree view customization and stability fixes (#805)
gsxdsm Feb 24, 2026
51e9a23
Fix agent output validation to prevent false verified status (#807)
gsxdsm Feb 25, 2026
09a4d3f
fix: Resolve Claude-compatible provider for backlog plan when client …
patrick-patel Feb 25, 2026
6b97219
fix: Add dev-server:url-detected to EventType (#808)
patrick-patel Feb 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
18 changes: 13 additions & 5 deletions .github/actions/setup-project/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,24 @@ runs:
cache: 'npm'
cache-dependency-path: package-lock.json

- name: Check for SSH URLs in lockfile
if: inputs.check-lockfile == 'true'
shell: bash
run: npm run lint:lockfile

- name: Configure Git for HTTPS
shell: bash
# Convert SSH URLs to HTTPS for git dependencies (e.g., @electron/node-gyp)
# This is needed because SSH authentication isn't available in CI
run: git config --global url."https://github.com/".insteadOf "git@github.com:"

- name: Auto-fix SSH URLs in lockfile
if: inputs.check-lockfile == 'true'
shell: bash
# Auto-fix any git+ssh:// URLs in package-lock.json before linting
# This handles cases where npm reintroduces SSH URLs for git dependencies
run: node scripts/fix-lockfile-urls.mjs

- name: Check for SSH URLs in lockfile
if: inputs.check-lockfile == 'true'
shell: bash
run: npm run lint:lockfile

- name: Install dependencies
shell: bash
# Use npm install instead of npm ci to correctly resolve platform-specific
Expand All @@ -45,6 +52,7 @@ runs:
run: npm install --ignore-scripts --force

- name: Install Linux native bindings
if: runner.os == 'Linux'
shell: bash
# Workaround for npm optional dependencies bug (npm/cli#4828)
# Explicitly install Linux bindings needed for build tools
Expand Down
18 changes: 10 additions & 8 deletions .github/workflows/e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ jobs:
echo "SERVER_PID=$SERVER_PID" >> $GITHUB_ENV

env:
PORT: 3008
PORT: 3108
TEST_SERVER_PORT: 3108
Comment on lines +49 to +50
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Port numbers are duplicated across multiple env vars (PORT and TEST_SERVER_PORT). Define a single variable and reference it to avoid sync issues when changing test ports.

Copilot uses AI. Check for mistakes.
NODE_ENV: test
# Use a deterministic API key so Playwright can log in reliably
AUTOMAKER_API_KEY: test-api-key-for-e2e-tests
Expand Down Expand Up @@ -81,13 +82,13 @@ jobs:

# Wait for health endpoint
for i in {1..60}; do
if curl -s -f http://localhost:3008/api/health > /dev/null 2>&1; then
if curl -s -f http://localhost:3108/api/health > /dev/null 2>&1; then
echo "Backend server is ready!"
echo "=== Backend logs ==="
cat backend.log
echo ""
echo "Health check response:"
curl -s http://localhost:3008/api/health | jq . 2>/dev/null || echo "Health check: $(curl -s http://localhost:3008/api/health 2>/dev/null || echo 'No response')"
curl -s http://localhost:3108/api/health | jq . 2>/dev/null || echo "Health check: $(curl -s http://localhost:3108/api/health 2>/dev/null || echo 'No response')"
exit 0
fi

Expand All @@ -111,11 +112,11 @@ jobs:
ps aux | grep -E "(node|tsx)" | grep -v grep || echo "No node processes found"
echo ""
echo "=== Port status ==="
netstat -tlnp 2>/dev/null | grep :3008 || echo "Port 3008 not listening"
lsof -i :3008 2>/dev/null || echo "lsof not available or port not in use"
netstat -tlnp 2>/dev/null | grep :3108 || echo "Port 3108 not listening"
lsof -i :3108 2>/dev/null || echo "lsof not available or port not in use"
echo ""
echo "=== Health endpoint test ==="
curl -v http://localhost:3008/api/health 2>&1 || echo "Health endpoint failed"
curl -v http://localhost:3108/api/health 2>&1 || echo "Health endpoint failed"

# Kill the server process if it's still hanging
if kill -0 $SERVER_PID 2>/dev/null; then
Expand All @@ -132,7 +133,8 @@ jobs:
run: npm run test --workspace=apps/ui
env:
CI: true
VITE_SERVER_URL: http://localhost:3008
VITE_SERVER_URL: http://localhost:3108
SERVER_URL: http://localhost:3108
VITE_SKIP_SETUP: 'true'
# Keep UI-side login/defaults consistent
AUTOMAKER_API_KEY: test-api-key-for-e2e-tests
Expand All @@ -147,7 +149,7 @@ jobs:
ps aux | grep -E "(node|tsx)" | grep -v grep || echo "No node processes found"
echo ""
echo "=== Port status ==="
netstat -tlnp 2>/dev/null | grep :3008 || echo "Port 3008 not listening"
netstat -tlnp 2>/dev/null | grep :3108 || echo "Port 3108 not listening"

- name: Upload Playwright report
uses: actions/upload-artifact@v4
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,11 @@ jobs:
upload:
needs: build
runs-on: ubuntu-latest
if: github.event.release.draft == false

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Download macOS artifacts
uses: actions/download-artifact@v4
with:
Expand Down
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,15 @@ pnpm-lock.yaml
yarn.lock

# Fork-specific workflow files (should never be committed)
DEVELOPMENT_WORKFLOW.md
check-sync.sh
# API key files
data/.api-key
data/credentials.json
data/
.codex/

# GSD planning docs (local-only)
.planning/
.mcp.json
.planning
12 changes: 12 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,18 @@ else
export PATH="$PATH:/usr/local/bin:/opt/homebrew/bin:/usr/bin"
fi

# Auto-fix git+ssh:// URLs in package-lock.json if it's being committed
# This prevents CI failures from SSH URLs that npm introduces for git dependencies
if git diff --cached --name-only | grep -q "^package-lock.json$"; then
if command -v node >/dev/null 2>&1; then
if grep -q "git+ssh://" package-lock.json 2>/dev/null; then
echo "Fixing git+ssh:// URLs in package-lock.json..."
node scripts/fix-lockfile-urls.mjs
git add package-lock.json
fi
fi
fi

# Run lint-staged - works with or without nvm
# Prefer npx, fallback to npm exec, both work with system-installed Node.js
if command -v npx >/dev/null 2>&1; then
Expand Down
81 changes: 81 additions & 0 deletions .planning/PROJECT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# AutoModeService Refactoring

## What This Is

A comprehensive refactoring of the `auto-mode-service.ts` file (5k+ lines) into smaller, focused services with clear boundaries. This is an architectural cleanup of accumulated technical debt from rapid development, breaking the "god object" anti-pattern into maintainable, debuggable modules.

## Core Value

All existing auto-mode functionality continues working — features execute, pipelines flow, merges complete — while the codebase becomes maintainable.

## Requirements

### Validated

<!-- Existing functionality that must be preserved -->

- ✓ Single feature execution with AI agent — existing
- ✓ Concurrent execution with configurable limits — existing
- ✓ Pipeline orchestration (backlog → in-progress → approval → verified) — existing
- ✓ Git worktree isolation per feature — existing
- ✓ Automatic merging of completed work — existing
- ✓ Custom pipeline support — existing
- ✓ Test runner integration — existing
- ✓ Event streaming to frontend — existing

### Active

<!-- Refactoring goals -->

- [ ] No service file exceeds ~500 lines
- [ ] Each service has single, clear responsibility
- [ ] Service boundaries make debugging obvious
- [ ] Changes to one service don't risk breaking unrelated features
- [ ] Test coverage for critical paths

### Out of Scope

- New auto-mode features — this is cleanup, not enhancement
- UI changes — backend refactor only
- Performance optimization — maintain current performance, don't optimize
- Other service refactoring — focus on auto-mode-service.ts only

## Context

**Current state:** `apps/server/src/services/auto-mode-service.ts` is ~5700 lines handling:

- Worktree management (create, cleanup, track)
- Agent/task execution coordination
- Concurrency control and queue management
- Pipeline state machine (column transitions)
- Merge handling and conflict resolution
- Event emission for real-time updates

**Technical environment:**

- Express 5 backend, TypeScript
- Event-driven architecture via EventEmitter
- WebSocket streaming to React frontend
- Git worktrees via @automaker/git-utils
- Minimal existing test coverage

**Codebase analysis:** See `.planning/codebase/` for full architecture, conventions, and existing patterns.

## Constraints

- **Breaking changes**: Acceptable — other parts of the app can be updated to match new service interfaces
- **Test coverage**: Currently minimal — must add tests during refactoring to catch regressions
- **Incremental approach**: Required — can't do big-bang rewrite with everything critical
- **Existing patterns**: Follow conventions in `.planning/codebase/CONVENTIONS.md`

## Key Decisions

| Decision | Rationale | Outcome |
| ------------------------- | --------------------------------------------------- | --------- |
| Accept breaking changes | Allows cleaner interfaces, worth the migration cost | — Pending |
| Add tests during refactor | No existing safety net, need to build one | — Pending |
| Incremental extraction | Everything is critical, can't break it all at once | — Pending |

---

_Last updated: 2026-01-27 after initialization_
Loading