Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
d80a3fd
docs(security): add comprehensive security audit report
Kirachon Nov 8, 2025
8b40cb2
docs(security): add audit summary and checklist
Kirachon Nov 8, 2025
be7f3a4
ci: staging/prod smoke workflows; docs: Phase 1-3 feature guides + Ph…
Kirachon Nov 8, 2025
6887c92
ci: avoid double-build and runner disk exhaustion; reuse prebuilt ima…
Kirachon Nov 8, 2025
2d2b115
fix(ci): FAST_STARTUP background init to avoid health timeout in CI
Kirachon Nov 8, 2025
5563baa
ci(compose): default feature flags to false to avoid Pydantic bool pa…
Kirachon Nov 9, 2025
16c90c5
fix(compose): add defaults for ALL Pydantic-validated env vars to pre…
Kirachon Nov 9, 2025
993245a
fix(ci): add Accept header to health check curl commands to prevent 4…
Kirachon Nov 9, 2025
1319516
fix(ci): complete Accept header fix for production and flags rollout …
claude Nov 9, 2025
2ff4936
fix(docker): resolve CI failures - embeddings provider, depends_on sy…
claude Nov 9, 2025
c13799f
fix(ci): remove incorrect QDRANT_HOST=localhost override in staging_f…
claude Nov 9, 2025
289e527
fix(ci): correct health check validation - accept 405 as valid server…
claude Nov 10, 2025
4156f4c
fix(ci): properly implement FAST_STARTUP using ASGI lifespan events
claude Nov 10, 2025
963c15d
fix(ci): simplify FAST_STARTUP - skip expensive initialization instea…
claude Nov 10, 2025
2af0622
fix(ci): pass FAST_STARTUP environment variable to docker compose com…
claude Nov 10, 2025
6427e17
chore(ci): remove unnecessary FAST_STARTUP from GITHUB_ENV
claude Nov 10, 2025
6525680
feat: v2.0.0 - Multi-Project Workspace Support
claude Nov 11, 2025
21aada3
feat: v2.5.0 - AI-Powered Development Intelligence Platform
claude Nov 11, 2025
a43f8fd
feat: v3.0.0 - Augment Code Feature Parity + Context-Aware Prompt Enh…
claude Nov 11, 2025
b8f103c
fix: resolve all test failures and production blockers (100% tests pa…
claude Nov 11, 2025
d684dc4
docs: v3.0 complete documentation and testing reports
claude Nov 11, 2025
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
91 changes: 91 additions & 0 deletions .context-workspace.example.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
{
"version": "2.0.0",
"name": "Example Full-Stack Application",
"projects": [
{
"id": "frontend",
"name": "Frontend (React)",
"path": "./frontend",
"type": "web_frontend",
"language": ["typescript", "tsx"],
"dependencies": ["backend", "shared"],
"indexing": {
"enabled": true,
"priority": "high",
"exclude": ["node_modules", "dist", ".next", "coverage"]
},
"metadata": {
"framework": "next.js",
"version": "14.0.0"
}
},
{
"id": "backend",
"name": "Backend (FastAPI)",
"path": "./backend",
"type": "api_server",
"language": ["python"],
"dependencies": ["shared"],
"indexing": {
"enabled": true,
"priority": "high",
"exclude": ["venv", "__pycache__", ".pytest_cache", "*.pyc"]
},
"metadata": {
"framework": "fastapi",
"version": "0.104.0"
}
},
{
"id": "shared",
"name": "Shared Types & Utils",
"path": "./shared",
"type": "library",
"language": ["typescript", "python"],
"dependencies": [],
"indexing": {
"enabled": true,
"priority": "critical",
"exclude": ["node_modules", "dist"]
}
},
{
"id": "docs",
"name": "Documentation",
"path": "./docs",
"type": "documentation",
"language": ["markdown"],
"dependencies": [],
"indexing": {
"enabled": true,
"priority": "low",
"exclude": ["_site", ".jekyll-cache"]
}
}
],
"relationships": [
{
"from": "frontend",
"to": "backend",
"type": "api_client",
"description": "Frontend calls backend REST API"
},
{
"from": "frontend",
"to": "shared",
"type": "imports",
"description": "Shared TypeScript types and utilities"
},
{
"from": "backend",
"to": "shared",
"type": "imports",
"description": "Shared Python utilities and models"
}
],
"search": {
"default_scope": "workspace",
"cross_project_ranking": true,
"relationship_boost": 1.5
}
}
66 changes: 66 additions & 0 deletions .github/workflows/production_smoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Production Smoke (Manual)

on:
workflow_dispatch:

jobs:
smoke:
runs-on: ubuntu-latest
timeout-minutes: 25
environment: production
steps:
- name: Checkout
uses: actions/checkout@v4


- name: Prepare env for Compose (Linux runner)
run: |
echo "USERPROFILE=/home/runner" >> $GITHUB_ENV
echo "EXTERNAL_PROJECTS_PATH=${GITHUB_WORKSPACE}/.." >> $GITHUB_ENV
echo "QDRANT_HOST=qdrant" >> $GITHUB_ENV
echo "QDRANT_PORT=6333" >> $GITHUB_ENV
echo "REDIS_URL=redis://redis:6379/0" >> $GITHUB_ENV
echo "MCP_ENABLED=true" >> $GITHUB_ENV
echo "LOG_LEVEL=INFO" >> $GITHUB_ENV


- name: Build context-server image (dev Dockerfile)
run: |
docker build -f deployment/docker/Dockerfile.dev -t context-server:ci .

- name: Start minimal stack (qdrant, redis, context-server)
run: |
docker compose -f deployment/docker/docker-compose.yml up -d qdrant redis
sleep 15
FAST_STARTUP=true docker compose -f deployment/docker/docker-compose.yml up -d --no-build context-server
sleep 10

- name: Wait for context-server
run: |
for i in $(seq 1 30); do
code=$(curl -s -o /dev/null -w "%{http_code}" -H 'Accept: application/json, text/event-stream' http://localhost:8000/ || true)
if [ "$code" = "405" ] || [ "$code" = "200" ]; then
echo "Server reachable"; break; fi
echo "Waiting for server... ($i)"; sleep 5;
done
code=$(curl -s -o /dev/null -w "%{http_code}" -H 'Accept: application/json, text/event-stream' http://localhost:8000/ || true)
if [ "$code" != "405" ] && [ "$code" != "200" ]; then
echo "Health check failed with code: $code"
docker compose -f deployment/docker/docker-compose.yml logs context-server
exit 1
fi
echo "Server is healthy (HTTP $code)"

- name: Smoke JSON-RPC initialize
run: |
curl -sS -X POST http://localhost:8000/ \
-H 'Accept: application/json, text/event-stream' \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"initialize","id":1,"params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"gha-prod","version":"1.0"}}}' | tee /tmp/init.json
grep -q '"jsonrpc"' /tmp/init.json

- name: Teardown
if: always()
run: |
docker compose -f deployment/docker/docker-compose.yml down -v --remove-orphans

28 changes: 28 additions & 0 deletions .github/workflows/security_scan.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Security Scan

on:
pull_request:
push:
branches: [ main ]

jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install scanners
run: |
python -m pip install --upgrade pip
pip install bandit safety semgrep
- name: Bandit (Python security linter)
run: bandit -q -r src || true
- name: Safety (dependency vulnerabilities)
run: |
pip install -r requirements/base.txt || true
safety check --full-report || true
- name: Semgrep (code scanning)
run: semgrep --config p/ci --error --timeout 120 || true

75 changes: 75 additions & 0 deletions .github/workflows/staging_compose_smoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: Staging Compose Smoke Test

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

concurrency:
group: staging-compose-smoke-${{ github.ref }}
cancel-in-progress: true

jobs:
smoke:
runs-on: ubuntu-latest
timeout-minutes: 25

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

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Prepare env for Compose (Linux runner)
run: |
echo "USERPROFILE=/home/runner" >> $GITHUB_ENV
echo "EXTERNAL_PROJECTS_PATH=${GITHUB_WORKSPACE}/.." >> $GITHUB_ENV
echo "QDRANT_HOST=qdrant" >> $GITHUB_ENV
echo "QDRANT_PORT=6333" >> $GITHUB_ENV
echo "REDIS_URL=redis://redis:6379/0" >> $GITHUB_ENV
echo "MCP_ENABLED=true" >> $GITHUB_ENV
echo "LOG_LEVEL=INFO" >> $GITHUB_ENV


- name: Build context-server image (dev Dockerfile)
run: |
docker build -f deployment/docker/Dockerfile.dev -t context-server:ci .

- name: Start minimal stack (qdrant, redis, context-server)
run: |
docker compose -f deployment/docker/docker-compose.yml up -d qdrant redis
# Give DBs time to get healthy
sleep 15
FAST_STARTUP=true docker compose -f deployment/docker/docker-compose.yml up -d --no-build context-server

- name: Wait for context-server health endpoint
run: |
for i in $(seq 1 30); do
code=$(curl -s -o /dev/null -w "%{http_code}" -H 'Accept: application/json, text/event-stream' http://localhost:8000/ || true)
if [ "$code" = "405" ] || [ "$code" = "200" ]; then
echo "Server reachable"; break; fi
echo "Waiting for server... ($i)"; sleep 5;
done
code=$(curl -s -o /dev/null -w "%{http_code}" -H 'Accept: application/json, text/event-stream' http://localhost:8000/ || true)
if [ "$code" != "405" ] && [ "$code" != "200" ]; then
echo "Health check failed with code: $code"
docker compose -f deployment/docker/docker-compose.yml logs context-server
exit 1
fi
echo "Server is healthy (HTTP $code)"

- name: Smoke JSON-RPC initialize
run: |
curl -sS -X POST http://localhost:8000/ \
-H 'Accept: application/json, text/event-stream' \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"initialize","id":1,"params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"gha-smoke","version":"1.0"}}}' | tee /tmp/init.json
grep -q '"jsonrpc"' /tmp/init.json

- name: Teardown
if: always()
run: |
docker compose -f deployment/docker/docker-compose.yml down -v --remove-orphans

84 changes: 84 additions & 0 deletions .github/workflows/staging_flags_rollout.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: Staging Feature Flags Rollout Smoke

on:
workflow_dispatch:
push:
branches: [ main ]

jobs:
rollout:
runs-on: ubuntu-latest
timeout-minutes: 45
strategy:
fail-fast: false
matrix:
flag:
- ENABLE_DEPLOYMENT_INTEGRATIONS
- ENABLE_CONVERSATION_TRACKING
- ENABLE_PERFORMANCE_PROFILING
- ENABLE_SECURITY_SCANNING
- ENABLE_REALTIME_MONITORING
- ENABLE_CODE_GENERATION
- ENABLE_PREDICTIVE_CACHING
- ENABLE_CACHE_WARMING
steps:
- name: Checkout
uses: actions/checkout@v4


- name: Prepare env for Compose (Linux runner)
run: |
echo "USERPROFILE=/home/runner" >> $GITHUB_ENV
echo "EXTERNAL_PROJECTS_PATH=${GITHUB_WORKSPACE}/.." >> $GITHUB_ENV
echo "QDRANT_HOST=qdrant" >> $GITHUB_ENV
echo "QDRANT_PORT=6333" >> $GITHUB_ENV
echo "REDIS_URL=redis://redis:6379/0" >> $GITHUB_ENV
echo "MCP_ENABLED=true" >> $GITHUB_ENV
echo "LOG_LEVEL=INFO" >> $GITHUB_ENV


- name: Build context-server image (dev)
run: |
docker build -f deployment/docker/Dockerfile.dev -t context-server:ci .

- name: Start dependencies
run: |
docker compose -f deployment/docker/docker-compose.yml up -d qdrant redis
sleep 15

- name: Start context-server with one flag enabled
env:
${{ matrix.flag }}: "true"
run: |
FAST_STARTUP=true docker compose -f deployment/docker/docker-compose.yml up -d --no-build context-server
sleep 10

- name: Check health
run: |
for i in $(seq 1 30); do
code=$(curl -s -o /dev/null -w "%{http_code}" -H 'Accept: application/json, text/event-stream' http://localhost:8000/ || true)
if [ "$code" = "405" ] || [ "$code" = "200" ]; then
echo "Server reachable"; break; fi
echo "Waiting for server... ($i)"; sleep 5;
done
code=$(curl -s -o /dev/null -w "%{http_code}" -H 'Accept: application/json, text/event-stream' http://localhost:8000/ || true)
if [ "$code" != "405" ] && [ "$code" != "200" ]; then
echo "Health check failed with code: $code"
docker compose -f deployment/docker/docker-compose.yml logs context-server
exit 1
fi
echo "Server is healthy (HTTP $code)"

- name: Smoke JSON-RPC initialize
run: |
curl -sS -X POST http://localhost:8000/ \
-H 'Accept: application/json, text/event-stream' \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"initialize","id":1,"params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"gha-flags","version":"1.0"}}}' | tee /tmp/init.json
grep -q '"jsonrpc"' /tmp/init.json

- name: Teardown
if: always()
run: |
docker compose -f deployment/docker/docker-compose.yml down -v --remove-orphans

Loading
Loading