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
9 changes: 9 additions & 0 deletions .github/workflows/pages-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ on:
- "uv.lock"
- "src/ai_company/**"
- "scripts/**"
- "cli/scripts/install.sh"
- "cli/scripts/install.ps1"
- ".github/workflows/pages-preview.yml"
workflow_dispatch:
inputs:
Expand Down Expand Up @@ -131,6 +133,13 @@ jobs:
working-directory: site
run: npm run build

# --- Copy install scripts into /get/ ---
- name: Copy CLI install scripts into Astro output
run: |
mkdir -p site/dist/get
cp cli/scripts/install.sh site/dist/get/install.sh
cp cli/scripts/install.ps1 site/dist/get/install.ps1

# --- Merge outputs ---
- name: Merge Astro + Zensical into final output
run: |
Expand Down
9 changes: 9 additions & 0 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ on:
- "uv.lock"
- "src/ai_company/**"
- "scripts/**"
- "cli/scripts/install.sh"
- "cli/scripts/install.ps1"
- ".github/workflows/pages.yml"
workflow_dispatch:

Expand Down Expand Up @@ -67,6 +69,13 @@ jobs:
working-directory: site
run: npm run build

# --- Copy install scripts into /get/ ---
- name: Copy CLI install scripts into Astro output
run: |
mkdir -p site/dist/get
cp cli/scripts/install.sh site/dist/get/install.sh
cp cli/scripts/install.ps1 site/dist/get/install.ps1

# --- Merge outputs ---
- name: Merge Astro + Zensical into final output
run: |
Expand Down
10 changes: 8 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ cd cli && golangci-lint run # lint
- **Library reference**: `docs/api/` — auto-generated from docstrings via mkdocstrings + Griffe (AST-based, no imports)
- **Custom templates**: `docs/overrides/` (`custom_dir` in `mkdocs.yml` for optional theme/template overrides)
- **Scripts**: `scripts/` — CI/build utility scripts (relaxed ruff rules: `print` and deferred imports allowed)
- **Landing page**: `site/` (Astro, Concept C hybrid design)
- **Landing page**: `site/` (Astro, Concept C hybrid design). Includes `/get/` CLI installation page and shared `Footer` component.
- **Config**: `mkdocs.yml` at repo root (Zensical reads this natively)
- **CI**: `.github/workflows/pages.yml` — exports OpenAPI schema (`scripts/export_openapi.py`), builds Astro landing + Zensical docs, merges, deploys to GitHub Pages
- **Architecture decisions**: `docs/architecture/decisions.md` (decision log)
Expand Down Expand Up @@ -153,6 +153,12 @@ cli/ # Go CLI binary (cross-platform, manages Docker lifecycle)
scripts/ # Install scripts (install.sh, install.ps1)
testdata/ # Golden files for compose generation tests
.goreleaser.yml # GoReleaser config (cross-compile, checksums)

site/ # Astro landing page (synthorg.io)
src/
pages/ # Astro pages (index, get)
components/ # Shared components (Footer)
layouts/ # Base layout (Base.astro)
```

## Shell Usage
Expand Down Expand Up @@ -236,7 +242,7 @@ cli/ # Go CLI binary (cross-platform, manages Docker lifecycle)

- **Path filtering**: `dorny/paths-filter` detects Python/dashboard/docker changes; jobs only run when their domain is affected. CLI has its own workflow (`cli.yml`).
- **Jobs**: lint (ruff) + type-check (mypy) + test (pytest + coverage) + python-audit (pip-audit) + dockerfile-lint (hadolint) + dashboard-lint/type-check/test/build/audit (npm) run in parallel → ci-pass (gate)
- **Pages**: `.github/workflows/pages.yml` — exports OpenAPI schema (`scripts/export_openapi.py`), builds Astro landing + Zensical docs, merges, deploys to GitHub Pages on push to main. Triggers on `docs/**`, `site/**`, `mkdocs.yml`, `pyproject.toml`, `uv.lock`, `src/ai_company/**`, `scripts/**`, workflow file changes, and `workflow_dispatch`.
- **Pages**: `.github/workflows/pages.yml` — exports OpenAPI schema (`scripts/export_openapi.py`), builds Astro landing + Zensical docs, copies CLI install scripts into `/get/`, merges, deploys to GitHub Pages on push to main. Triggers on `docs/**`, `site/**`, `mkdocs.yml`, `pyproject.toml`, `uv.lock`, `src/ai_company/**`, `scripts/**`, `cli/scripts/install.{sh,ps1}`, workflow file changes, and `workflow_dispatch`.
- **PR Preview**: `.github/workflows/pages-preview.yml`
- Builds site on PRs (same path triggers as Pages) and on `workflow_dispatch` (with `pr_number` input, for Dependabot PRs that can't trigger `pull_request` with secrets)
- Dispatch runs resolve PR metadata (head SHA, state, same-repo check) via `gh pr view`; PR-triggered runs use event context directly
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,12 +80,12 @@ Built-in tools (file system, git, sandbox, code runner) plus MCP bridge for exte

```bash
# Linux / macOS
curl -sSfL https://raw.githubusercontent.com/Aureliolo/synthorg/main/cli/scripts/install.sh | bash
curl -sSfL https://synthorg.io/get/install.sh | bash
```

```powershell
# Windows (PowerShell)
irm https://raw.githubusercontent.com/Aureliolo/synthorg/main/cli/scripts/install.ps1 | iex
irm https://synthorg.io/get/install.ps1 | iex
```

### Setup & Run
Expand Down
2 changes: 1 addition & 1 deletion cli/scripts/install.ps1
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# SynthOrg CLI installer for Windows.
# Usage: irm https://raw.githubusercontent.com/Aureliolo/synthorg/main/cli/scripts/install.ps1 | iex
# Usage: irm https://synthorg.io/get/install.ps1 | iex
#
# Environment variables:
# SYNTHORG_VERSION — specific version to install (default: latest)
Expand Down
2 changes: 1 addition & 1 deletion cli/scripts/install.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# SynthOrg CLI installer for Linux and macOS.
# Usage: curl -sSfL https://raw.githubusercontent.com/Aureliolo/synthorg/main/cli/scripts/install.sh | bash
# Usage: curl -sSfL https://synthorg.io/get/install.sh | bash
#
# Environment variables:
# SYNTHORG_VERSION — specific version to install (default: latest)
Expand Down
40 changes: 38 additions & 2 deletions docs/user_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ The recommended way to run SynthOrg is via the CLI:

```bash
# Install CLI (Linux/macOS)
curl -sSfL https://raw.githubusercontent.com/Aureliolo/synthorg/main/cli/scripts/install.sh | bash
curl -sSfL https://synthorg.io/get/install.sh | bash

# Set up and start
synthorg init # Interactive setup wizard
Expand All @@ -35,7 +35,43 @@ cp docker/.env.example docker/.env
docker compose -f docker/compose.yml up -d
```

Container configuration (ports, storage paths, log level) is defined in `docker/.env`. Organization setup is done via the dashboard. Custom template editing through the UI is planned for a future release.
### Containers

| Container | Image | Description |
|-----------|-------|-------------|
| **backend** | `ghcr.io/aureliolo/synthorg` | Python API server (Litestar). 3-stage build, Chainguard distroless runtime (no shell), runs as non-root (UID 65532). |
| **web** | `ghcr.io/aureliolo/synthorg-web` | Nginx + Vue 3 dashboard (PrimeVue + Tailwind CSS). SPA routing, proxies API and WebSocket requests to backend. |

### Environment Variables

Configuration is in `docker/.env` (copy from `docker/.env.example`):

| Variable | Default | Description |
|----------|---------|-------------|
| `AI_COMPANY_JWT_SECRET` | *(auto-generated)* | JWT signing secret. Auto-generated and persisted on first run. Set explicitly only for multi-instance deployments. Must be >= 32 characters if set. |
| `AI_COMPANY_DB_PATH` | `/data/synthorg.db` | SQLite database path (inside container). |
| `AI_COMPANY_MEMORY_DIR` | `/data/memory` | Agent memory storage directory (inside container). |
| `BACKEND_PORT` | `8000` | Host port for the backend API. |
| `WEB_PORT` | `3000` | Host port for the web dashboard. |
| `DOCKER_HOST` | *(unset)* | Docker socket for agent code execution sandbox (optional). |

### First-Run Setup

After the containers are running:

1. **Create an admin account** by sending a POST request to the setup endpoint:

```bash
curl -X POST http://localhost:8000/api/v1/auth/setup \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "your-secure-password"}'
```

2. **Access the dashboard** at [http://localhost:3000](http://localhost:3000) and log in with your admin credentials.

3. **Verify health** with `curl http://localhost:8000/api/v1/health`.

Organization setup (choosing templates, configuring agents) is done via the dashboard. Custom template editing through the UI is planned for a future release.

!!! info "Active Development"
SynthOrg is under active development. The web dashboard is available for monitoring and managing the organization. Templates and some features described here may evolve. Check the [GitHub repository](https://github.com/Aureliolo/synthorg) for current status.
Expand Down
40 changes: 40 additions & 0 deletions site/src/components/Footer.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<footer class="py-12 px-6 border-t border-white/10">
<div class="max-w-6xl mx-auto grid sm:grid-cols-4 gap-8 text-sm">
<div>
<p class="font-semibold mb-3">Framework</p>
<ul class="space-y-2 text-gray-400">
<li><a href="/docs/api/core/" class="hover:text-white transition-colors">Core Models</a></li>
<li><a href="/docs/api/engine/" class="hover:text-white transition-colors">Engine</a></li>
<li><a href="/docs/api/providers/" class="hover:text-white transition-colors">Providers</a></li>
<li><a href="/docs/api/tools/" class="hover:text-white transition-colors">Tools</a></li>
</ul>
</div>
<div>
<p class="font-semibold mb-3">Learn</p>
<ul class="space-y-2 text-gray-400">
<li><a href="/docs/" class="hover:text-white transition-colors">Documentation</a></li>
<li><a href="/get/" class="hover:text-white transition-colors">Get Started</a></li>
<li><a href="/docs/user_guide/" class="hover:text-white transition-colors">User Guide</a></li>
<li><a href="/docs/architecture/" class="hover:text-white transition-colors">Architecture</a></li>
<li><a href="/docs/design/" class="hover:text-white transition-colors">Design Spec</a></li>
<li><a href="/docs/security/" class="hover:text-white transition-colors">Security</a></li>
</ul>
</div>
<div>
<p class="font-semibold mb-3">Community</p>
<ul class="space-y-2 text-gray-400">
<li><a href="https://github.com/Aureliolo/synthorg" class="hover:text-white transition-colors">GitHub</a></li>
<li><a href="https://github.com/Aureliolo/synthorg/blob/main/.github/CHANGELOG.md" class="hover:text-white transition-colors">Changelog</a></li>
</ul>
</div>
<div>
<p class="font-semibold mb-3">Legal</p>
<ul class="space-y-2 text-gray-400">
<li><a href="/docs/licensing/" class="hover:text-white transition-colors">License & Usage (BSL 1.1)</a></li>
</ul>
</div>
</div>
<div class="max-w-6xl mx-auto mt-8 pt-8 border-t border-white/10 text-center text-gray-500 text-xs">
&copy; {new Date().getFullYear()} SynthOrg. Built with Astro.
</div>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
</footer>
Loading
Loading