Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
117 commits
Select commit Hold shift + click to select a range
880caa3
feat(webhook): add signature verification support to handler factory
Mar 14, 2026
cd45671
fix(router): populate rawBody for form-urlencoded GitHub webhook payl…
Mar 14, 2026
89a4303
docs(getting-started): add Codex engine auth options and agent engine…
zbigniewsobiecki Mar 14, 2026
14ad70a
Merge pull request #827 from zbigniewsobiecki/docs/getting-started-co…
zbigniewsobiecki Mar 14, 2026
12e7a68
fix(setup): write TEST_DATABASE_URL to .cascade/env for worker contai…
zbigniewsobiecki Mar 14, 2026
6eac9ae
feat(tests): add shared mock factories and migrate heaviest test file…
aaight Mar 14, 2026
cfdc546
perf(tests): enable isolate: false for unit-core workspace project (#…
aaight Mar 14, 2026
923f7c6
feat(tests): use describe.concurrent() on independent test suites (#830)
aaight Mar 14, 2026
54d1a6b
fix(tests): harden agent worker test environment
zbigniewsobiecki Mar 14, 2026
b6b5c9c
chore: resolve merge conflict with dev in webhookParsing.ts
zbigniewsobiecki Mar 14, 2026
b68b38a
Merge pull request #831 from zbigniewsobiecki/fix/tests-harden-worker…
zbigniewsobiecki Mar 14, 2026
99314a3
fix(router): handle form-urlencoded body in verifyGitHubWebhookSignature
Mar 14, 2026
4a9d399
Merge pull request #817 from zbigniewsobiecki/feature/webhook-signatu…
zbigniewsobiecki Mar 14, 2026
dda7cb7
feat(backends): extract shared env filtering into src/backends/shared…
aaight Mar 14, 2026
eaa7165
refactor(backends): extract shared LLM call logging helper (#833)
aaight Mar 14, 2026
d54cca0
refactor(backends): move contextFiles and nativeToolPrompts to shared…
aaight Mar 14, 2026
948a4d5
feat(backends): add resolveModel() to AgentEngine interface (#835)
aaight Mar 14, 2026
4aee4c7
feat(backends): add beforeExecute/afterExecute lifecycle hooks to Age…
aaight Mar 14, 2026
48a87de
test(backends): add engine contract test for all registered engines (…
aaight Mar 14, 2026
b1ebebe
feat(backends): co-locate engine settings schemas with engines (#838)
aaight Mar 14, 2026
3d89970
feat(dashboard): add Harness tab to project settings with engine/mode…
aaight Mar 14, 2026
58af171
feat(dashboard): move repo/base-branch/branch-prefix fields to Integr…
aaight Mar 14, 2026
4442678
fix(codex): normalize LLM call logging to per-turn boundaries (#841)
aaight Mar 14, 2026
d1ecefb
feat(dashboard): refactor project tabs into URL-backed routes with ex…
aaight Mar 14, 2026
43ccabd
fix(tests): mock runLink to prevent env var leakage in unit tests
Mar 14, 2026
0dbd5d1
Merge pull request #843 from zbigniewsobiecki/fix/test-failures-regre…
zbigniewsobiecki Mar 15, 2026
b47623a
feat(db): add project_credentials table and migration 0040 (#844)
aaight Mar 15, 2026
83a19a3
feat(credentials): resolve credentials from project_credentials table
Mar 15, 2026
09996f7
fix(sidebar): move GLOBAL section below SETTINGS for superadmin users…
aaight Mar 15, 2026
535aba0
feat(dashboard): replace agent config accordion with tabs and rename …
aaight Mar 15, 2026
d69e7b9
fix(tests): truncateAll, env var leakage, DB auto-create, project_cre…
zbigniewsobiecki Mar 15, 2026
274736c
Merge pull request #845 from zbigniewsobiecki/feature/project-credent…
zbigniewsobiecki Mar 15, 2026
7b3e1f0
fix(auth): restrict admin cross-org access to superadmin only (#848)
aaight Mar 15, 2026
0b1a4e1
feat(credentials): use project-scoped credential writes for Codex ref…
aaight Mar 15, 2026
962451f
feat(ui): remove Retained Engine Settings feature (#850)
aaight Mar 15, 2026
b7c0a07
fix(sidebar): remove max-h-48 constraint from Projects container to a…
aaight Mar 15, 2026
ff0052c
docs: reorganize README and move GETTING_STARTED to docs/ (#851)
aaight Mar 15, 2026
748c837
feat(ui): add horizontal scroll to agent tabs in project settings (#853)
aaight Mar 15, 2026
ce00d08
feat(web): add contextual navigation links to run detail page header
Mar 15, 2026
5fe4ee2
chore: temporarily disable docker-dependent integration pre-push hook
Mar 15, 2026
9c58fd8
fix: address review feedback on lefthook and outer guard condition
Mar 15, 2026
7384b95
Merge pull request #854 from zbigniewsobiecki/feature/run-detail-cont…
zbigniewsobiecki Mar 15, 2026
40c5f79
feat(dashboard): add project-scoped credential management (#855)
aaight Mar 15, 2026
43fb90d
feat(credentials): remove org-level credentials UI and CLI, add proje…
aaight Mar 15, 2026
7b2b5bd
feat(stats): add Stats section with charts and time/agent/status filt…
aaight Mar 15, 2026
e8d74ec
feat(web): move Lifecycle automations to separate sidebar section (#859)
aaight Mar 15, 2026
f1a0650
feat(db): drop legacy credentials and integration_credentials tables …
aaight Mar 15, 2026
fea734e
feat(harness): add missing engine API key fields and refactor to mult…
aaight Mar 15, 2026
ccf6a7f
feat(projects): add maxInFlightItems to project configuration (#861)
aaight Mar 15, 2026
5bd39af
feat(web): replace agent config tabs with full-page list/detail navig…
aaight Mar 15, 2026
df5d9c0
feat(triggers): add isPipelineAtCapacity for multi-item in-flight con…
aaight Mar 15, 2026
357dd45
feat(pm): add MediaReference types and markdown image extraction (#865)
aaight Mar 15, 2026
7654d98
feat(backlog-manager): add capacity-aware prompts with maxInFlightIte…
aaight Mar 15, 2026
592601a
feat(dashboard): replace ad-hoc back-navigation with breadcrumbs in h…
aaight Mar 15, 2026
6cfbfcf
feat(users): hide superadmins from dashboard, block non-superadmin ed…
aaight Mar 15, 2026
8b84f39
feat(stats): move stats aggregation to SQL with new workStatsAggregat…
aaight Mar 15, 2026
a2c4d84
feat(dashboard): add Max In-Flight Items field to project general set…
aaight Mar 15, 2026
63deb2b
feat(media): add authenticated image download utilities (#871)
aaight Mar 15, 2026
cb3c45f
feat(trello): add media extraction to TrelloPMProvider adapter (#872)
aaight Mar 15, 2026
351e73d
feat(claude-code): add ClaudeCodeSettingsSchema with effort, thinking…
aaight Mar 15, 2026
f6f4e91
feat(jira): add ADF media node extraction and URL resolution (#874)
aaight Mar 15, 2026
f9c1d50
feat(engine-settings): add 'number' variant to engine setting fields …
aaight Mar 15, 2026
223f438
feat(claude-code): wire effort and thinking settings into SDK executi…
aaight Mar 15, 2026
6f29cad
feat(agents): inject work item images into agent context (#877)
aaight Mar 15, 2026
3166fdb
feat(agent-configs): add per-agent engine settings to agent_configs t…
aaight Mar 15, 2026
aebe7f9
feat(dashboard): improve General project tab UX with Card sections (#…
aaight Mar 15, 2026
77aaab9
feat(ui): rename Harness tab to Engine, add Cards and help text
Mar 15, 2026
77944c8
fix(ui): update stale "Harness tab" references to "Engine tab"
Mar 15, 2026
eb2f908
Merge pull request #880 from zbigniewsobiecki/feature/engine-tab-impr…
zbigniewsobiecki Mar 15, 2026
c933e1b
feat(backends): render context images in LLM backends (#881)
aaight Mar 15, 2026
c6fe44c
feat(engine-settings): implement merge chain for per-agent engine set…
aaight Mar 15, 2026
a2c506d
fix(dashboard): make credentials list resilient to decryption failures
zbigniewsobiecki Mar 15, 2026
cf5a619
Merge pull request #883 from zbigniewsobiecki/fix/dev-deployment-cons…
zbigniewsobiecki Mar 15, 2026
100a7de
feat(dashboard): add per-agent engine settings to agent config forms …
aaight Mar 15, 2026
9d20d2d
fix(stats): stabilize computeDateFrom with useMemo and day-level trun…
aaight Mar 15, 2026
052304c
feat(dashboard): show resolved default values in project config forms…
aaight Mar 15, 2026
526de5d
refactor(router): extract container-manager god module into focused s…
aaight Mar 15, 2026
4bc2a42
test: add coverage for agentTriggerConfigs, PM integrations, integrat…
aaight Mar 15, 2026
60bb5f1
feat(db): add system_prompt and task_prompt columns to agent_configs …
aaight Mar 15, 2026
b04dd90
feat(agentConfigs): add prompt override support to tRPC router (#890)
aaight Mar 15, 2026
17430e1
feat(agents): add project-level prompt overrides to resolution chain …
aaight Mar 15, 2026
8d490ce
feat(dashboard): split agent config detail into Engine/Prompts/Trigge…
aaight Mar 16, 2026
151205b
fix(credentials): add re-encryption tool for project-scoped AAD migra…
zbigniewsobiecki Mar 16, 2026
734ea5c
feat(pm-wizard): fix JIRA edit mode, add project-scoped discovery end…
zbigniewsobiecki Mar 16, 2026
c1c160b
chore(tests): remove redundant vi.clearAllMocks() calls (#895)
zbigniewsobiecki Mar 16, 2026
c873238
fix(dashboard): register engine schemas at startup to fix webhooks 50…
zbigniewsobiecki Mar 16, 2026
275e11b
chore(lint): suppress pre-existing cognitive complexity warnings in d…
zbigniewsobiecki Mar 16, 2026
3af4540
fix(router): register engine schemas at startup to fix webhook proces…
zbigniewsobiecki Mar 16, 2026
279d0e6
fix(worker): register engine schemas at startup to fix job processing…
zbigniewsobiecki Mar 16, 2026
34adcbe
feat(agents): require explicit agent config to enable agent per proje…
aaight Mar 16, 2026
cca6259
feat(ui): a bunch of UI updates — sidebar reorder, compact forms, sta…
aaight Mar 16, 2026
c940a24
feat(dashboard): show org name in sidebar, move org picker from heade…
aaight Mar 16, 2026
2b35576
feat(ui): reorder engine/model/iterations fields — engine first acros…
aaight Mar 16, 2026
ad11ba8
test(db): add integration tests for agentTriggerConfigsRepository (#904)
aaight Mar 16, 2026
7dac502
fix: misc UI and trigger cleanup (#905)
aaight Mar 16, 2026
fbecb36
test(db): add integration tests for agentConfigsRepository (#906)
aaight Mar 16, 2026
5604640
test(db): add integration tests for projectsRepository (#907)
aaight Mar 16, 2026
7b3df55
feat(web): simplify project modal, sidebar plus button, danger zone, …
aaight Mar 16, 2026
ae7c7df
feat: unified run timeout system + YAML default task prompt (#910)
zbigniewsobiecki Mar 16, 2026
6516316
test(integration): add agentDefinitionsRepository integration tests (…
aaight Mar 16, 2026
4c91c72
fix(router): deduplicate concurrent loadProjectConfig fetches to prev…
zbigniewsobiecki Mar 16, 2026
4c64a21
test(integrations): add dedicated integration test suite for integrat…
aaight Mar 16, 2026
fa71797
feat(web): sort Duration by Agent Type chart by totalDurationMs desce…
aaight Mar 16, 2026
e8c8837
chore: remove dead files and unused barrel index re-exports (#915)
aaight Mar 16, 2026
be1b117
docs: audit and fix README, getting-started, and CLAUDE.md accuracy (…
aaight Mar 16, 2026
43e3e2f
feat(dashboard): add OpenRouter model autocomplete to model selection…
aaight Mar 16, 2026
02f8999
feat(cli): add spinner utility and success/info helpers to DashboardC…
aaight Mar 16, 2026
5ff7ccd
test(config): add integration tests for config provider round-trip (#…
aaight Mar 16, 2026
9419f5e
feat(cli): add interactive confirmations for destructive commands (#920)
aaight Mar 16, 2026
013add1
refactor: remove unused exported functions from core modules (#921)
aaight Mar 16, 2026
355db84
test(credentials): extend encryption integration tests with AAD, mixe…
aaight Mar 16, 2026
f59973a
refactor(utils): remove dead utility functions from metrics, trigger …
aaight Mar 16, 2026
47346e9
test(triggers): add integration tests for trigger config resolver (#924)
aaight Mar 16, 2026
b94c20f
feat(cli): add --format, --columns flags and contextual empty-state m…
aaight Mar 16, 2026
6425b44
feat(cli): add actionable error messages with --verbose flag (#926)
aaight Mar 16, 2026
c7007b0
feat(cli): upgrade mutation commands to use success() with context an…
aaight Mar 16, 2026
372912f
fix(webhooks): include Trello API response body in webhook creation e…
zbigniewsobiecki Mar 17, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .cascade/env
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
CI=true
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/cascade
DATABASE_SSL=false
TEST_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/cascade_test
REDIS_URL=redis://localhost:6379
TEST_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/cascade_test
11 changes: 11 additions & 0 deletions .cascade/setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,17 @@ if pg_isready -q 2>/dev/null; then
log_info "Running migrations on cascade_test..."
DATABASE_URL="$TEST_DB_URL" DATABASE_SSL=false npm run db:migrate 2>&1 || \
log_warn "Migration failed on cascade_test - may need manual intervention"

# Write TEST_DATABASE_URL to .cascade/env so resolveTestDbUrl() picks up the
# local postgres in worker containers where Docker is unavailable.
touch .cascade/env
if [ "$OS" = "macos" ]; then
sed -i '' '/^TEST_DATABASE_URL=/d' .cascade/env
else
sed -i '/^TEST_DATABASE_URL=/d' .cascade/env
fi
echo "TEST_DATABASE_URL=${TEST_DB_URL}" >> .cascade/env
log_info "Wrote TEST_DATABASE_URL to .cascade/env: ${TEST_DB_URL}"
else
log_warn "PostgreSQL not ready, skipping migrations"
fi
Expand Down
2 changes: 1 addition & 1 deletion .env.docker.example
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ WORKER_TIMEOUT_MS=1800000

# --- Security (optional) ---
# CREDENTIAL_MASTER_KEY= # Generate: openssl rand -hex 32
# CORS_ORIGIN= # e.g. https://cascade.yourdomain.com
# CORS_ORIGIN= # comma-separated origins, e.g. https://cascade.yourdomain.com,https://dev.cascade.yourdomain.com
# COOKIE_DOMAIN= # e.g. yourdomain.com

# --- Claude Code Backend (optional) ---
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/deploy-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,14 @@ jobs:
cascade-migrator:dev \
npx tsx tools/migrate-hooks.ts --apply

- name: Re-encrypt project credentials with project-scoped AAD (dev)
run: |
docker run --rm \
--env-file /opt/services/cascade-dev.env \
-e DATABASE_URL="${{ secrets.DEV_DATABASE_URL }}" \
cascade-migrator:dev \
npx tsx tools/migrate-project-credentials-reencrypt.ts

- name: Pull and restart cascade-router-dev
run: |
cd /opt/services
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,14 @@ jobs:
cascade-migrator:latest \
npx tsx tools/migrate-hooks.ts --apply

- name: Re-encrypt project credentials with project-scoped AAD
run: |
docker run --rm \
--env-file /opt/services/cascade.env \
-e DATABASE_URL="${{ secrets.DATABASE_URL }}" \
cascade-migrator:latest \
npx tsx tools/migrate-project-credentials-reencrypt.ts

- name: Pull latest worker image
run: docker pull ${{ env.WORKER_IMAGE }}:latest

Expand Down
211 changes: 138 additions & 73 deletions CLAUDE.md

Large diffs are not rendered by default.

8 changes: 7 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Thank you for your interest in contributing to CASCADE! This guide will help you
cd web && npm install && cd ..
```

3. **Configure environment**: Copy `.env.example` to `.env` and fill in the required values. See [GETTING_STARTED.md](./GETTING_STARTED.md) for detailed setup instructions.
3. **Configure environment**: Copy `.env.example` to `.env` and fill in the required values. See [Getting Started](./docs/getting-started.md) for detailed setup instructions.

4. **Set up the database**:
```bash
Expand Down Expand Up @@ -125,6 +125,12 @@ See [CLAUDE.md](./CLAUDE.md) for a detailed architecture overview. Key directori
2. Define its system prompt in `src/agents/prompts/`
3. Register it in the agent registry

## The `.cascade/` Directory

When CASCADE works on a repository, it looks for a `.cascade/` directory at the root of that repo. This directory lets you customize agent behavior — setup scripts, post-edit hooks, test runners, and environment variables.

See **[`.cascade/` Directory Guide](./docs/cascade-directory.md)** for the full reference.

## Getting Help

- Open an [issue](https://github.com/zbigniewsobiecki/cascade/issues) for bugs or feature requests
Expand Down
Loading
Loading