Skip to content

Commit eaf415c

Browse files
committed
merge: resolve conflicts with upstream/main
Merged upstream changes including: - WebEndpoint spec + SympoziumConfig controller - web-proxy binary - Various Helm chart updates Kept both MCPServer and WebEndpoint/SympoziumConfig features.
2 parents e4e567d + a5d33e1 commit eaf415c

125 files changed

Lines changed: 13262 additions & 1441 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ jobs:
113113
- apiserver
114114
- ipc-bridge
115115
- webhook
116+
- web-proxy
116117
- channel-telegram
117118
- channel-whatsapp
118119
- channel-discord

.github/workflows/docs.yml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
name: Deploy docs
2+
3+
on:
4+
push:
5+
branches: [main]
6+
paths:
7+
- 'docs/**'
8+
- 'mkdocs.yml'
9+
- 'index.html'
10+
- 'install.sh'
11+
- 'CNAME'
12+
workflow_dispatch:
13+
14+
permissions:
15+
contents: read
16+
pages: write
17+
id-token: write
18+
19+
concurrency:
20+
group: pages
21+
cancel-in-progress: true
22+
23+
jobs:
24+
build:
25+
runs-on: ubuntu-latest
26+
steps:
27+
- uses: actions/checkout@v4
28+
29+
- uses: actions/setup-python@v5
30+
with:
31+
python-version: '3.12'
32+
33+
- name: Install MkDocs Material
34+
run: pip install "mkdocs>=1.6,<2" mkdocs-material
35+
36+
- name: Build docs site
37+
run: mkdocs build --site-dir _site/docs
38+
39+
- name: Assemble root site
40+
run: |
41+
cp index.html _site/index.html
42+
cp install.sh _site/install.sh
43+
cp CNAME _site/CNAME
44+
45+
- uses: actions/upload-pages-artifact@v3
46+
47+
deploy:
48+
needs: build
49+
runs-on: ubuntu-latest
50+
environment:
51+
name: github-pages
52+
url: ${{ steps.deployment.outputs.page_url }}
53+
steps:
54+
- id: deployment
55+
uses: actions/deploy-pages@v4

.github/workflows/release.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ jobs:
106106
- skill-sre-observability
107107
- skill-github-gitops
108108
- skill-llmfit
109+
- web-proxy
109110
steps:
110111
- uses: actions/checkout@v4
111112

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ web/dist/*
4343
!web/dist/index.html
4444
web/node_modules/
4545

46+
# MkDocs build output
47+
site/
48+
4649
output.cast
4750
tmp.gif
4851
whatsapp

AGENTS.md

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ cmd/
2323
apiserver/ # HTTP + WebSocket API server
2424
controller/ # Controller manager (all reconcilers + routers)
2525
ipc-bridge/ # IPC bridge sidecar (fsnotify → NATS)
26+
web-proxy/ # Web proxy (OpenAI-compat API + MCP gateway)
2627
sympozium/ # CLI + TUI (Bubble Tea)
2728
webhook/ # Admission webhook server
2829
channels/
@@ -49,6 +50,7 @@ internal/
4950
orchestrator/ # Pod builder + spawner for agent Jobs
5051
session/ # Session store
5152
webhook/ # Policy enforcer
53+
webproxy/ # Web proxy handlers (OpenAI, MCP, rate limiting)
5254
migrations/ # PostgreSQL schema migrations
5355
test/integration/ # Integration test scripts (shell)
5456
docs/ # Design & contributor documentation
@@ -96,13 +98,13 @@ kind create cluster --name kind
9698
make install
9799

98100
# Build all images
99-
make docker-build TAG=v0.0.32
101+
make docker-build TAG=v0.1.0
100102

101103
# Load images into Kind (all components)
102-
for img in controller apiserver ipc-bridge webhook agent-runner \
104+
for img in controller apiserver ipc-bridge webhook agent-runner web-proxy \
103105
channel-telegram channel-slack channel-discord channel-whatsapp \
104106
skill-k8s-ops skill-sre-observability skill-llmfit; do
105-
kind load docker-image ghcr.io/alexsjones/sympozium/$img:v0.0.32 --name kind
107+
kind load docker-image ghcr.io/alexsjones/sympozium/$img:v0.1.0 --name kind
106108
done
107109

108110
# Deploy the control plane
@@ -121,8 +123,8 @@ make build
121123
make test
122124

123125
# Build specific image + reload into Kind
124-
make docker-build-agent-runner TAG=v0.0.32
125-
kind load docker-image ghcr.io/alexsjones/sympozium/agent-runner:v0.0.32 --name kind
126+
make docker-build-agent-runner TAG=v0.1.0
127+
kind load docker-image ghcr.io/alexsjones/sympozium/agent-runner:v0.1.0 --name kind
126128

127129
# Restart the controller to pick up new images
128130
kubectl rollout restart deployment sympozium-controller-manager -n sympozium-system
@@ -139,7 +141,7 @@ make vet # go vet
139141
make fmt # gofmt
140142
make tidy # go mod tidy
141143
make docker-build # Build all Docker images
142-
make docker-build-<name> TAG=v0.0.32 # Build a specific image
144+
make docker-build-<name> TAG=v0.1.0 # Build a specific image
143145
make generate # Regenerate deepcopy + CRD manifests
144146
make manifests # Regenerate CRD YAML only
145147
make clean # Remove build artifacts
@@ -174,6 +176,7 @@ TEST_MODEL=gpt-5.2 TEST_TIMEOUT=180 ./test/integration/test-write-file.sh
174176
| `test-llmfit-cluster-fit.sh` | `llmfit` skill — agent runs node-level llmfit placement probe workflow |
175177
| `test-telegram-channel.sh` | Telegram channel deployment + message flow |
176178
| `test-slack-channel.sh` | Slack channel deployment (Socket Mode) |
179+
| `test-web-proxy-api.sh` | Web proxy API — healthz, auth, models, chat completions (blocking + streaming), MCP SSE |
177180

178181
### Writing New Tests
179182

@@ -243,6 +246,8 @@ SkillPacks are CRDs containing Markdown instructions + optional sidecar definiti
243246
| Writing tools | `docs/writing-tools.md` | How to add new agent tools |
244247
| Writing skills | `docs/writing-skills.md` | How to create SkillPack CRDs |
245248
| Writing integration tests | `docs/writing-integration-tests.md` | Test patterns and templates |
249+
| Web endpoint skill | `docs/skill-web-endpoint.md` | How to expose agents as HTTP APIs (OpenAI-compat + MCP) |
250+
| Serving mode | `docs/serving-mode.md` | How serving mode works for long-lived agent deployments |
246251
| Sample CRs | `config/samples/` | Example SympoziumInstance, AgentRun, SympoziumPolicy, SympoziumSchedule, SkillPack |
247252
| CRD definitions | `api/v1alpha1/` | Go type definitions for all CRDs |
248253
| Built-in PersonaPacks | `config/personas/` | Pre-configured agent bundles (platform-team, devops-essentials) |
@@ -283,10 +288,10 @@ SkillPacks are CRDs containing Markdown instructions + optional sidecar definiti
283288
go build ./...
284289

285290
# Rebuild affected images
286-
make docker-build-<component> TAG=v0.0.32
291+
make docker-build-<component> TAG=v0.1.0
287292

288293
# Load into Kind
289-
kind load docker-image ghcr.io/alexsjones/sympozium/<component>:v0.0.32 --name kind
294+
kind load docker-image ghcr.io/alexsjones/sympozium/<component>:v0.1.0 --name kind
290295

291296
# Restart controller if controller/ipc-bridge/agent-runner changed
292297
kubectl rollout restart deployment sympozium-controller-manager -n sympozium-system

CONTRIBUTING.md

Lines changed: 60 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,68 @@ See [`AGENTS.md`](AGENTS.md) for the full setup guide. The short version:
2525
# Prerequisites: Go 1.25+, Docker, Kind, kubectl
2626
kind create cluster --name kind
2727
make install # Install CRDs
28-
make docker-build TAG=v0.0.32 # Build all images
28+
make docker-build TAG=v0.1.0 # Build all images
2929
# Load images into Kind (see AGENTS.md for the full loop)
3030
kubectl apply -k config/ # Deploy control plane
3131
```
3232

3333
---
3434

35+
## Local Development (no Docker build/push cycle)
36+
37+
For day-to-day development you can run the controller and API server as local processes against a remote (or local) cluster. This skips the Docker build → image load → rollout cycle entirely, which is especially helpful on low-bandwidth connections or when iterating quickly on controller logic.
38+
39+
All you need is a running cluster with CRDs installed and a valid kubeconfig.
40+
41+
### Run everything locally
42+
43+
```bash
44+
make dev-all
45+
```
46+
47+
This starts four services in parallel:
48+
49+
| Service | Address | What it does |
50+
|---------|---------|-------------|
51+
| Controller | `:9090` (metrics), `:9091` (health) | All CRD reconcilers running locally |
52+
| API server | `:8080` | REST API for the UI |
53+
| Vite dev server | `:5173` | Frontend with hot-reload |
54+
| NATS port-forward | `:4222` | Forwards cluster NATS to localhost |
55+
56+
The in-cluster controller deployment is automatically scaled to zero so there's no conflict. When you Ctrl+C, the in-cluster controller is restored to 1 replica.
57+
58+
Open `http://localhost:5173` in your browser. The API token is `dev-token` (override with `SYMPOZIUM_TOKEN`).
59+
60+
### Run just the controller locally
61+
62+
If you're only working on controller logic and already have `make dev` running for the UI:
63+
64+
```bash
65+
make run-controller
66+
```
67+
68+
This builds and runs the controller manager locally, scaling down the in-cluster one. On exit it restores the in-cluster deployment.
69+
70+
### Run just the API server + UI
71+
72+
If you're only working on the API or frontend and want the in-cluster controller to keep running:
73+
74+
```bash
75+
make dev
76+
```
77+
78+
### Undeploy cluster workloads (keep CRDs)
79+
80+
To stop all in-cluster Sympozium deployments while keeping CRDs and their instances intact:
81+
82+
```bash
83+
kubectl scale deploy -n sympozium-system --replicas=0 --all
84+
```
85+
86+
This is useful when you want the local processes to be the only thing running, or when switching between local and cluster-based development.
87+
88+
---
89+
3590
## GitHub Checks
3691

3792
Every push and PR runs the following checks via GitHub Actions (`.github/workflows/build.yaml`):
@@ -114,17 +169,17 @@ chore(deps): bump gorilla/websocket to v1.5.1
114169

115170
Sympozium follows [Semantic Versioning](https://semver.org/) (`vMAJOR.MINOR.PATCH`):
116171

117-
- **PATCH** (`v0.0.31``v0.0.32`) — Bug fixes, docs, minor improvements
118-
- **MINOR** (`v0.1.0`) — New features, new CRD fields (backward-compatible)
172+
- **PATCH** (`v0.1.0``v0.1.1`) — Bug fixes, docs, minor improvements
173+
- **MINOR** (`v0.1.0``v0.2.0`) — New features, new CRD fields (backward-compatible)
119174
- **MAJOR** (`v1.0.0`) — Breaking API/CRD changes
120175

121176
### Releasing
122177

123178
1. Ensure all changes are committed and pushed to `main`.
124179
2. Create and push a tag:
125180
```bash
126-
git tag v0.0.33
127-
git push origin v0.0.33
181+
git tag v0.1.1
182+
git push origin v0.1.1
128183
```
129184
3. The release workflow automatically:
130185
- Builds CLI binaries for all platforms

0 commit comments

Comments
 (0)