mirror of
https://github.com/coleam00/Archon
synced 2026-04-21 13:37:41 +00:00
feat: prepare for open-source migration to coleam00/Archon
- Replace all dynamous-community/remote-coding-agent references with coleam00/Archon - Replace all ghcr.io/dynamous-community/remote-coding-agent with ghcr.io/coleam00/archon - Change license from proprietary Dynamous to MIT - Fix cd directory name in docs (remote-coding-agent → Archon) - Remove hardcoded local paths from skills and docs - Add Windows x64 binary to release pipeline (cross-compiled from Linux) - Add --minify --bytecode flags to binary compilation - Create PowerShell install script (scripts/install.ps1) - Fix isBinaryBuild() detection for Bun 1.3.5+ (use import.meta.dir virtual FS check) - Scaffold Astro Starlight docs site at website/ (Astro 6 + Starlight 0.38) - Add deploy-docs.yml workflow for GitHub Pages - Update test.yml branch triggers (develop → dev) - Add install section with curl/PowerShell/Homebrew/Docker to README - Add badges and archon.diy docs link to README - Create SECURITY.md with vulnerability disclosure policy - Update CONTRIBUTING.md for public audience - Add website/ and eslint ignores for Astro-generated files Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
0cb45400ed
commit
ae346c2a67
57 changed files with 8330 additions and 138 deletions
|
|
@ -34,7 +34,7 @@ If `$ARGUMENTS` is empty, ask the user for the issue number before proceeding.
|
|||
Ensure you are testing against the latest code on `main` so results are accurate.
|
||||
|
||||
```bash
|
||||
cd /mnt/c/Users/colem/dynamous-community/remote-coding-agent
|
||||
cd /path/to/archon
|
||||
|
||||
# Stash any local changes to avoid conflicts
|
||||
git stash 2>/dev/null || true
|
||||
|
|
@ -67,7 +67,7 @@ sleep 2
|
|||
### 0.3 Start Archon Backend + Frontend
|
||||
|
||||
```bash
|
||||
cd /mnt/c/Users/colem/dynamous-community/remote-coding-agent
|
||||
cd /path/to/archon
|
||||
|
||||
# Start both backend and frontend together
|
||||
bun run dev &
|
||||
|
|
|
|||
|
|
@ -67,17 +67,17 @@ which agent-browser 2>/dev/null || npx agent-browser --version 2>/dev/null
|
|||
Start both services. Backend must be up before frontend SSE connections work.
|
||||
|
||||
```bash
|
||||
# From the repo root: /mnt/c/Users/colem/dynamous-community/remote-coding-agent
|
||||
# From the repo root: /path/to/archon
|
||||
|
||||
# Start backend (port 3090)
|
||||
cd /mnt/c/Users/colem/dynamous-community/remote-coding-agent && bun run dev:server &
|
||||
cd /path/to/archon && bun run dev:server &
|
||||
sleep 5 # Wait for server initialization + DB
|
||||
|
||||
# Verify backend is healthy
|
||||
curl -s http://localhost:3090/api/health | head -c 200
|
||||
|
||||
# Start frontend (port 5173)
|
||||
cd /mnt/c/Users/colem/dynamous-community/remote-coding-agent && bun run dev:web &
|
||||
cd /path/to/archon && bun run dev:web &
|
||||
sleep 5 # Wait for Vite dev server
|
||||
|
||||
# Verify frontend is serving
|
||||
|
|
@ -100,7 +100,7 @@ curl -s http://localhost:3090/api/codebases | python3 -m json.tool 2>/dev/null |
|
|||
# Register the current repo as a codebase (if none exist)
|
||||
curl -s -X POST http://localhost:3090/api/codebases \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"path": "/mnt/c/Users/colem/dynamous-community/remote-coding-agent"}'
|
||||
-d '{"path": "/path/to/archon"}'
|
||||
|
||||
# Create a test conversation
|
||||
curl -s -X POST http://localhost:3090/api/conversations \
|
||||
|
|
@ -154,7 +154,7 @@ Take screenshots at each major test point: `agent-browser screenshot /tmp/archon
|
|||
|
||||
**2.2 Add Project (Local Path)**
|
||||
- Click `+` again
|
||||
- Fill in a local path (e.g., `/mnt/c/Users/colem/dynamous-community/remote-coding-agent`)
|
||||
- Fill in a local path (e.g., `/path/to/archon`)
|
||||
- Submit and verify the project appears
|
||||
- Verify deduplication: if the path was already registered, it should not create a duplicate
|
||||
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ complexity, each building on the previous. (Prepped by Rasmus.)
|
|||
|
||||
**Follow the full guide**: [part2-guide.md](part2-guide.md) — contains all
|
||||
copy-paste prompts, feature tables, architecture diagrams, bash commands,
|
||||
talking points, and cleanup steps. Runs on this codebase (`dynamous-community/remote-coding-agent`).
|
||||
talking points, and cleanup steps. Runs on this codebase (`coleam00/Archon`).
|
||||
|
||||
**Section summary** (see part2-guide.md for full demo steps):
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
**Host**: Rasmus
|
||||
**Duration**: ~35 min
|
||||
**Codebase**: `dynamous-community/remote-coding-agent` (this repo)
|
||||
**Codebase**: `coleam00/Archon` (this repo)
|
||||
**Required**: Claude Code v2.1.63+, GitHub CLI (`gh`)
|
||||
|
||||
---
|
||||
|
|
|
|||
38
.github/workflows/deploy-docs.yml
vendored
Normal file
38
.github/workflows/deploy-docs.yml
vendored
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
name: Deploy Docs
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths: ['website/**']
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
concurrency:
|
||||
group: pages
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: withastro/action@v3
|
||||
with:
|
||||
path: ./website
|
||||
node-version: 22
|
||||
package-manager: npm@latest
|
||||
|
||||
deploy:
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
2
.github/workflows/publish.yml
vendored
2
.github/workflows/publish.yml
vendored
|
|
@ -48,6 +48,8 @@ jobs:
|
|||
type=semver,pattern={{major}}
|
||||
type=sha
|
||||
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'main') }}
|
||||
flavor: |
|
||||
latest=auto
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v5
|
||||
|
|
|
|||
35
.github/workflows/release.yml
vendored
35
.github/workflows/release.yml
vendored
|
|
@ -26,6 +26,9 @@ jobs:
|
|||
- os: ubuntu-latest
|
||||
target: bun-linux-arm64
|
||||
binary: archon-linux-arm64
|
||||
- os: ubuntu-latest
|
||||
target: bun-windows-x64
|
||||
binary: archon-windows-x64.exe
|
||||
- os: macos-latest
|
||||
target: bun-darwin-x64
|
||||
binary: archon-darwin-x64
|
||||
|
|
@ -48,7 +51,7 @@ jobs:
|
|||
- name: Build binary
|
||||
run: |
|
||||
mkdir -p dist
|
||||
bun build --compile --target=${{ matrix.target }} --outfile=dist/${{ matrix.binary }} packages/cli/src/cli.ts
|
||||
bun build --compile --minify --bytecode --target=${{ matrix.target }} --outfile=dist/${{ matrix.binary }} packages/cli/src/cli.ts
|
||||
|
||||
- name: Upload binary artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
|
|
@ -101,36 +104,56 @@ jobs:
|
|||
## Installation
|
||||
|
||||
### Quick Install (Recommended)
|
||||
|
||||
**macOS / Linux**
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/scripts/install.sh | bash
|
||||
curl -fsSL https://archon.diy/install | bash
|
||||
```
|
||||
|
||||
**Windows (PowerShell)**
|
||||
```powershell
|
||||
irm https://archon.diy/install.ps1 | iex
|
||||
```
|
||||
|
||||
**Homebrew (macOS / Linux)**
|
||||
```bash
|
||||
brew install coleam00/archon/archon
|
||||
```
|
||||
|
||||
**Docker**
|
||||
```bash
|
||||
docker run --rm -v "$PWD:/workspace" ghcr.io/coleam00/archon:latest workflow list
|
||||
```
|
||||
|
||||
### Manual Installation
|
||||
|
||||
**macOS (Apple Silicon)**
|
||||
```bash
|
||||
curl -fsSL https://github.com/dynamous-community/remote-coding-agent/releases/latest/download/archon-darwin-arm64 -o /usr/local/bin/archon
|
||||
curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-darwin-arm64 -o /usr/local/bin/archon
|
||||
chmod +x /usr/local/bin/archon
|
||||
```
|
||||
|
||||
**macOS (Intel)**
|
||||
```bash
|
||||
curl -fsSL https://github.com/dynamous-community/remote-coding-agent/releases/latest/download/archon-darwin-x64 -o /usr/local/bin/archon
|
||||
curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-darwin-x64 -o /usr/local/bin/archon
|
||||
chmod +x /usr/local/bin/archon
|
||||
```
|
||||
|
||||
**Linux (x64)**
|
||||
```bash
|
||||
curl -fsSL https://github.com/dynamous-community/remote-coding-agent/releases/latest/download/archon-linux-x64 -o /usr/local/bin/archon
|
||||
curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-linux-x64 -o /usr/local/bin/archon
|
||||
chmod +x /usr/local/bin/archon
|
||||
```
|
||||
|
||||
**Linux (ARM64)**
|
||||
```bash
|
||||
curl -fsSL https://github.com/dynamous-community/remote-coding-agent/releases/latest/download/archon-linux-arm64 -o /usr/local/bin/archon
|
||||
curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-linux-arm64 -o /usr/local/bin/archon
|
||||
chmod +x /usr/local/bin/archon
|
||||
```
|
||||
|
||||
**Windows (Manual)**
|
||||
Download `archon-windows-x64.exe` from the assets below, rename to `archon.exe`, and add to your PATH.
|
||||
|
||||
### Verify installation
|
||||
```bash
|
||||
archon version
|
||||
|
|
|
|||
4
.github/workflows/test.yml
vendored
4
.github/workflows/test.yml
vendored
|
|
@ -2,9 +2,9 @@ name: Test Suite
|
|||
|
||||
on:
|
||||
push:
|
||||
branches: [main, develop]
|
||||
branches: [main, dev]
|
||||
pull_request:
|
||||
branches: [main, develop]
|
||||
branches: [main, dev]
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,9 @@ package-lock.json
|
|||
.claude/
|
||||
.archon/
|
||||
|
||||
# Website (Astro/Starlight - uses own formatting)
|
||||
website/
|
||||
|
||||
# GitHub templates (don't auto-format)
|
||||
.github/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
## Project Overview
|
||||
|
||||
**Remote Agentic Coding Platform**: Control AI coding assistants (Claude Code SDK, Codex SDK) remotely from Slack, Telegram, and GitHub. Built with **Bun + TypeScript + SQLite/PostgreSQL**, single-developer tool for practitioners of the Dynamous Agentic Coding Course. Architecture prioritizes simplicity, flexibility, and user control.
|
||||
**Remote Agentic Coding Platform**: Control AI coding assistants (Claude Code SDK, Codex SDK) remotely from Slack, Telegram, and GitHub. Built with **Bun + TypeScript + SQLite/PostgreSQL**, single-developer tool for AI-assisted development practitioners. Architecture prioritizes simplicity, flexibility, and user control.
|
||||
|
||||
## Core Principles
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Contributing
|
||||
|
||||
Thank you for your interest in contributing to the Remote Agentic Coding Platform.
|
||||
Thank you for your interest in contributing to Archon!
|
||||
|
||||
## Getting Started
|
||||
|
||||
|
|
@ -20,9 +20,14 @@ Before submitting a PR, ensure:
|
|||
bun run type-check # TypeScript types
|
||||
bun run lint # ESLint
|
||||
bun run format # Prettier
|
||||
bun test # Bun tests
|
||||
bun run test # All tests (per-package isolation)
|
||||
|
||||
# Or run the full validation suite:
|
||||
bun run validate
|
||||
```
|
||||
|
||||
**Important:** Use `bun run test` (not `bun test` from the repo root) to avoid mock pollution across packages.
|
||||
|
||||
### Commit Messages
|
||||
|
||||
- Use present tense ("Add feature" not "Added feature")
|
||||
|
|
@ -31,7 +36,7 @@ bun test # Bun tests
|
|||
|
||||
### Pull Requests
|
||||
|
||||
1. Create a feature branch from `main`
|
||||
1. Create a feature branch from `dev`
|
||||
2. Make your changes
|
||||
3. Ensure all checks pass
|
||||
4. Submit a PR with a clear description
|
||||
|
|
@ -49,4 +54,4 @@ See [CLAUDE.md](./CLAUDE.md) for detailed architecture documentation.
|
|||
|
||||
## Questions?
|
||||
|
||||
Open an issue for questions or discussion.
|
||||
Open an [issue](https://github.com/coleam00/Archon/issues) or start a [discussion](https://github.com/coleam00/Archon/discussions).
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ RUN bun run build:web && \
|
|||
FROM oven/bun:1.2-slim AS production
|
||||
|
||||
# OCI Labels for GHCR
|
||||
LABEL org.opencontainers.image.source="https://github.com/dynamous-community/remote-coding-agent"
|
||||
LABEL org.opencontainers.image.source="https://github.com/coleam00/Archon"
|
||||
LABEL org.opencontainers.image.description="Control AI coding assistants remotely from Telegram, Slack, Discord, and GitHub"
|
||||
LABEL org.opencontainers.image.licenses="MIT"
|
||||
|
||||
|
|
|
|||
43
LICENSE
43
LICENSE
|
|
@ -1,30 +1,21 @@
|
|||
# DYNAMOUS COMMUNITY - PROPRIETARY LICENSE
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 Cole Medin / Dynamous
|
||||
Copyright (c) 2025-2026 Cole Medin
|
||||
|
||||
## TERMS AND CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
1. **GRANT OF LICENSE**: This code (and other resources in the repository) is licensed exclusively to paying members of the Dynamous AI Mastery community.
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
2. **RESTRICTED ACCESS**: Access to this repository and its contents is restricted to current, active paying members of the Dynamous community. It may not be shared with anyone outside of currently paying Dynamous community members in any way. No forking this repository to share with others or downloading the code and sending it to non-members.
|
||||
|
||||
3. **USAGE RIGHTS**: Members are permitted to use the code for personal and commercial projects. Members may modify the code for their own use.
|
||||
|
||||
4. **RESTRICTIONS**:
|
||||
- Members may not redistribute, share, publish, or otherwise make available any portion of this code outside of the Dynamous community.
|
||||
- Members may not sublicense, sell, rent, or lease the code to any third party.
|
||||
- Members may not remove or alter any copyright notices or attributions in the code.
|
||||
|
||||
5. **TERMINATION**: This license automatically terminates if a member cancels their Dynamous membership or violates any of these terms. Upon termination, the member must cease all use of the code and delete all copies. The exception to this which applies to a membership cancellation can be read in #9.
|
||||
|
||||
6. **OWNERSHIP**: All intellectual property rights to the code, including copyright, remain with Cole Medin / Dynamous. This license does not transfer ownership of the code.
|
||||
|
||||
7. **NO WARRANTY**: The code is provided "as is" without warranty of any kind, express or implied. Cole Medin / Dynamous is not liable for any damages arising from the use of this code.
|
||||
|
||||
8. **UPDATES**: Cole Medin / Dynamous reserves the right to update or modify this license at any time. Continued use of the code after any modification constitutes acceptance of the new terms.
|
||||
|
||||
9. **LEGACY ACCESS**: If a member has maintained active paid membership for at least 3 months, they will retain personal usage rights to any code they accessed during their membership period, even after their membership ends. However, redistribution restrictions remain in effect permanently.
|
||||
|
||||
10. **COMMUNITY SUNSET PROVISION**: In the event that the Dynamous community officially closes or becomes inactive (defined as no updates to the repository for 12 consecutive months), all current and former members who maintained membership in good standing will automatically receive a perpetual license to use the code for personal and commercial projects, though redistribution restrictions will remain in effect.
|
||||
|
||||
By accessing or using this repository, you acknowledge that you have read this license, understand it, and agree to be bound by its terms.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
|
|
|||
40
README.md
40
README.md
|
|
@ -1,11 +1,39 @@
|
|||
# Archon
|
||||
|
||||
[](LICENSE)
|
||||
[](https://github.com/coleam00/Archon/actions/workflows/test.yml)
|
||||
[](https://archon.diy)
|
||||
|
||||
Make AI coding deterministic and repeatable.
|
||||
|
||||
Archon is a workflow engine for AI coding agents. Define your development processes as YAML workflows — planning, implementation, validation, code review, PR creation — and run them reliably across all your projects.
|
||||
|
||||
Think n8n, but for software development.
|
||||
|
||||
## Install
|
||||
|
||||
**macOS / Linux**
|
||||
```bash
|
||||
curl -fsSL https://archon.diy/install | bash
|
||||
```
|
||||
|
||||
**Windows (PowerShell)**
|
||||
```powershell
|
||||
irm https://archon.diy/install.ps1 | iex
|
||||
```
|
||||
|
||||
**Homebrew**
|
||||
```bash
|
||||
brew install coleam00/archon/archon
|
||||
```
|
||||
|
||||
**Docker**
|
||||
```bash
|
||||
docker run --rm -v "$PWD:/workspace" ghcr.io/coleam00/archon:latest workflow list
|
||||
```
|
||||
|
||||
See the [Installation Guide](https://archon.diy/getting-started/installation/) for all options.
|
||||
|
||||
## Why Archon?
|
||||
|
||||
When you ask an AI agent to "fix this bug", what happens depends on the model's mood. It might skip planning. It might forget to run tests. It might write a PR description that ignores your template. Every run is different.
|
||||
|
|
@ -115,8 +143,8 @@ See the [E2E Testing Guide](docs/e2e-testing.md) for platform-specific setup.
|
|||
### Setup (2 min)
|
||||
|
||||
```bash
|
||||
git clone https://github.com/dynamous-community/remote-coding-agent
|
||||
cd remote-coding-agent
|
||||
git clone https://github.com/coleam00/Archon
|
||||
cd Archon
|
||||
bun install
|
||||
claude
|
||||
```
|
||||
|
|
@ -249,6 +277,8 @@ The Web UI and CLI work out of the box. Optionally connect a chat platform for r
|
|||
|
||||
## Documentation
|
||||
|
||||
Full documentation is available at **[archon.diy](https://archon.diy)**.
|
||||
|
||||
| Topic | Description |
|
||||
|-------|-------------|
|
||||
| [Getting Started](docs/getting-started.md) | Setup guide (Web UI or CLI) |
|
||||
|
|
@ -267,8 +297,10 @@ The Web UI and CLI work out of the box. Optionally connect a chat platform for r
|
|||
|
||||
## Contributing
|
||||
|
||||
Contributions welcome. See the open [issues](https://github.com/dynamous-community/remote-coding-agent/issues) for things to work on.
|
||||
Contributions welcome! See the open [issues](https://github.com/coleam00/Archon/issues) for things to work on.
|
||||
|
||||
Please read [CONTRIBUTING.md](CONTRIBUTING.md) before submitting a pull request.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
[MIT](LICENSE)
|
||||
|
|
|
|||
34
SECURITY.md
Normal file
34
SECURITY.md
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# Security Policy
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
If you discover a security vulnerability in Archon, please report it responsibly.
|
||||
|
||||
**Do NOT open a public issue for security vulnerabilities.**
|
||||
|
||||
Instead, email **cole@dynamous.ai** or use [GitHub's private vulnerability reporting](https://github.com/coleam00/Archon/security/advisories/new).
|
||||
|
||||
Include:
|
||||
|
||||
- Description of the vulnerability
|
||||
- Steps to reproduce
|
||||
- Potential impact
|
||||
- Suggested fix (if any)
|
||||
|
||||
We'll acknowledge and respond as soon as possible.
|
||||
|
||||
## Scope
|
||||
|
||||
This policy covers the Archon codebase, including:
|
||||
|
||||
- CLI binary
|
||||
- Server and Web UI
|
||||
- Platform adapters (Slack, Telegram, GitHub, Discord)
|
||||
- Docker images published to GHCR
|
||||
|
||||
## Best Practices for Users
|
||||
|
||||
- Never commit API keys to your repository
|
||||
- Use environment variables or `.env` files (which are gitignored)
|
||||
- When deploying the server publicly, use the Caddy reverse proxy with authentication (see `deploy/docker-compose.yml`)
|
||||
- Keep Archon updated to the latest version
|
||||
|
|
@ -43,7 +43,7 @@ runcmd:
|
|||
- ufw --force enable
|
||||
|
||||
# --- Clone and configure ---
|
||||
- git clone https://github.com/dynamous-community/remote-coding-agent.git /opt/archon
|
||||
- git clone https://github.com/coleam00/Archon.git /opt/archon
|
||||
- cp /opt/archon/.env.example /opt/archon/.env
|
||||
- cp /opt/archon/Caddyfile.example /opt/archon/Caddyfile
|
||||
|
||||
|
|
@ -85,7 +85,7 @@ runcmd:
|
|||
|
||||
Logs: docker compose logs -f
|
||||
Health: curl https://your-domain.com/api/health
|
||||
Docs: https://github.com/dynamous-community/remote-coding-agent/blob/main/docs/docker.md
|
||||
Docs: https://github.com/coleam00/Archon/blob/main/docs/docker.md
|
||||
============================================
|
||||
DONE
|
||||
- echo "[archon] Setup complete. Edit /opt/archon/.env and run docker compose up."
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
# 3. Run: docker compose up -d
|
||||
#
|
||||
# For full documentation, see:
|
||||
# https://github.com/dynamous-community/remote-coding-agent
|
||||
# https://github.com/coleam00/Archon
|
||||
|
||||
services:
|
||||
app:
|
||||
image: ghcr.io/dynamous-community/remote-coding-agent:latest
|
||||
image: ghcr.io/coleam00/archon:latest
|
||||
restart: unless-stopped
|
||||
env_file: .env
|
||||
environment:
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ Run AI-powered workflows from your terminal.
|
|||
|
||||
1. Clone the repository and install dependencies:
|
||||
```bash
|
||||
git clone https://github.com/dynamous-community/remote-coding-agent
|
||||
cd remote-coding-agent
|
||||
git clone https://github.com/coleam00/Archon
|
||||
cd Archon
|
||||
bun install
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ sudo chown deploy:deploy /remote-coding-agent
|
|||
|
||||
# Clone repository into the directory
|
||||
cd /remote-coding-agent
|
||||
git clone https://github.com/dynamous-community/remote-coding-agent .
|
||||
git clone https://github.com/coleam00/Archon .
|
||||
```
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -244,7 +244,7 @@ commands:
|
|||
### Docker with Custom Volume
|
||||
|
||||
```bash
|
||||
docker run -v /my/data:/.archon ghcr.io/dynamous-community/remote-coding-agent
|
||||
docker run -v /my/data:/.archon ghcr.io/coleam00/archon
|
||||
```
|
||||
|
||||
## Streaming Modes
|
||||
|
|
|
|||
|
|
@ -20,8 +20,8 @@ Local development with SQLite is the recommended default. No database setup is n
|
|||
|
||||
```bash
|
||||
# 1. Clone and install
|
||||
git clone https://github.com/dynamous-community/remote-coding-agent
|
||||
cd remote-coding-agent
|
||||
git clone https://github.com/coleam00/Archon
|
||||
cd Archon
|
||||
bun install
|
||||
|
||||
# 2. Configure environment
|
||||
|
|
@ -84,8 +84,8 @@ Use this option when your database is hosted externally (Supabase, Neon, AWS RDS
|
|||
```bash
|
||||
# 1. Get the deployment files
|
||||
mkdir remote-agent && cd remote-agent
|
||||
curl -fsSL https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/deploy/docker-compose.yml -o docker-compose.yml
|
||||
curl -fsSL https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/deploy/.env.example -o .env
|
||||
curl -fsSL https://raw.githubusercontent.com/coleam00/Archon/main/deploy/docker-compose.yml -o docker-compose.yml
|
||||
curl -fsSL https://raw.githubusercontent.com/coleam00/Archon/main/deploy/.env.example -o .env
|
||||
|
||||
# 2. Configure (edit .env with your tokens and DATABASE_URL)
|
||||
nano .env
|
||||
|
|
|
|||
|
|
@ -88,8 +88,8 @@ docker compose version
|
|||
### 2. Clone the repo
|
||||
|
||||
```bash
|
||||
git clone https://github.com/dynamous-community/remote-coding-agent.git
|
||||
cd remote-coding-agent
|
||||
git clone https://github.com/coleam00/Archon.git
|
||||
cd Archon
|
||||
```
|
||||
|
||||
### 3. Configure environment
|
||||
|
|
@ -400,8 +400,8 @@ For users who don't need to build from source:
|
|||
|
||||
```bash
|
||||
mkdir archon && cd archon
|
||||
curl -O https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/deploy/docker-compose.yml
|
||||
curl -O https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/.env.example
|
||||
curl -O https://raw.githubusercontent.com/coleam00/Archon/main/deploy/docker-compose.yml
|
||||
curl -O https://raw.githubusercontent.com/coleam00/Archon/main/.env.example
|
||||
|
||||
cp .env.example .env
|
||||
# Edit .env — set AI credentials, DOMAIN, etc.
|
||||
|
|
@ -409,7 +409,7 @@ cp .env.example .env
|
|||
docker compose up -d
|
||||
```
|
||||
|
||||
Uses `ghcr.io/dynamous-community/remote-coding-agent:latest`. To add PostgreSQL, uncomment the `postgres` service in the compose file and set `DATABASE_URL` in `.env`.
|
||||
Uses `ghcr.io/coleam00/archon:latest`. To add PostgreSQL, uncomment the `postgres` service in the compose file and set `DATABASE_URL` in `.env`.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -76,8 +76,8 @@ Screenshots must be saved to a WSL-native path first, then copied to the Windows
|
|||
```bash
|
||||
# Save to WSL home, then copy to project
|
||||
wsl -d Ubuntu -- bash -c '
|
||||
agent-browser screenshot /home/coleam/screenshot.png 2>&1 &&
|
||||
cp /home/coleam/screenshot.png /mnt/c/Users/colem/dynamous-community/remote-coding-agent/e2e-screenshots/my-test.png
|
||||
agent-browser screenshot /home/user/screenshot.png 2>&1 &&
|
||||
cp /home/user/screenshot.png /path/to/archon/e2e-screenshots/my-test.png
|
||||
'
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -41,16 +41,16 @@ Linux/macOS:
|
|||
|
||||
```bash
|
||||
cd ~ # or your preferred directory
|
||||
git clone https://github.com/dynamous-community/remote-coding-agent
|
||||
cd remote-coding-agent
|
||||
git clone https://github.com/coleam00/Archon
|
||||
cd Archon
|
||||
```
|
||||
|
||||
Windows (PowerShell):
|
||||
|
||||
```powershell
|
||||
cd $HOME # or your preferred directory
|
||||
git clone https://github.com/dynamous-community/remote-coding-agent
|
||||
cd remote-coding-agent
|
||||
git clone https://github.com/coleam00/Archon
|
||||
cd Archon
|
||||
```
|
||||
|
||||
**Option B: /opt** (Linux/macOS server installs — keeps things tidy)
|
||||
|
|
@ -58,7 +58,7 @@ cd remote-coding-agent
|
|||
```bash
|
||||
sudo mkdir -p /opt/archon
|
||||
sudo chown $USER:$USER /opt/archon
|
||||
git clone https://github.com/dynamous-community/remote-coding-agent /opt/archon
|
||||
git clone https://github.com/coleam00/Archon /opt/archon
|
||||
cd /opt/archon
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ If you maintain a Homebrew tap (`homebrew-archon`), copy the updated formula the
|
|||
|
||||
```bash
|
||||
# Test the install script (only works if repo is public)
|
||||
curl -fsSL https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/scripts/install.sh | bash
|
||||
curl -fsSL https://raw.githubusercontent.com/coleam00/Archon/main/scripts/install.sh | bash
|
||||
|
||||
# Verify version
|
||||
archon version
|
||||
|
|
@ -78,7 +78,7 @@ archon version
|
|||
>
|
||||
> ```bash
|
||||
> # Download and install using gh (requires GitHub authentication)
|
||||
> gh release download v0.2.0 --repo dynamous-community/remote-coding-agent \
|
||||
> gh release download v0.2.0 --repo coleam00/Archon \
|
||||
> --pattern "archon-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m | sed 's/x86_64/x64/;s/aarch64/arm64/')" \
|
||||
> --dir /tmp/archon-install
|
||||
>
|
||||
|
|
|
|||
|
|
@ -35,8 +35,8 @@ WSL2 provides a full Linux environment that runs seamlessly on Windows.
|
|||
|
||||
4. **Clone and install Archon**:
|
||||
```bash
|
||||
git clone https://github.com/dynamous-community/remote-coding-agent
|
||||
cd remote-coding-agent
|
||||
git clone https://github.com/coleam00/Archon
|
||||
cd Archon
|
||||
bun install
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ export default tseslint.config(
|
|||
'dist/**',
|
||||
'coverage/**',
|
||||
'.agents/examples/**',
|
||||
'website/**',
|
||||
'workspace/**',
|
||||
'worktrees/**',
|
||||
'.claude/worktrees/**',
|
||||
|
|
|
|||
|
|
@ -1,33 +1,33 @@
|
|||
# Homebrew formula for Archon CLI
|
||||
# To install: brew install dynamous-community/tap/archon
|
||||
# To install: brew install coleam00/archon/archon
|
||||
#
|
||||
# This formula downloads pre-built binaries from GitHub releases.
|
||||
# For development, see: https://github.com/dynamous-community/remote-coding-agent
|
||||
# For development, see: https://github.com/coleam00/Archon
|
||||
|
||||
class Archon < Formula
|
||||
desc "Remote agentic coding platform - control AI assistants from anywhere"
|
||||
homepage "https://github.com/dynamous-community/remote-coding-agent"
|
||||
homepage "https://github.com/coleam00/Archon"
|
||||
version "0.2.0"
|
||||
license "MIT"
|
||||
|
||||
on_macos do
|
||||
on_arm do
|
||||
url "https://github.com/dynamous-community/remote-coding-agent/releases/download/v#{version}/archon-darwin-arm64"
|
||||
url "https://github.com/coleam00/Archon/releases/download/v#{version}/archon-darwin-arm64"
|
||||
sha256 "PLACEHOLDER_SHA256_DARWIN_ARM64"
|
||||
end
|
||||
on_intel do
|
||||
url "https://github.com/dynamous-community/remote-coding-agent/releases/download/v#{version}/archon-darwin-x64"
|
||||
url "https://github.com/coleam00/Archon/releases/download/v#{version}/archon-darwin-x64"
|
||||
sha256 "PLACEHOLDER_SHA256_DARWIN_X64"
|
||||
end
|
||||
end
|
||||
|
||||
on_linux do
|
||||
on_arm do
|
||||
url "https://github.com/dynamous-community/remote-coding-agent/releases/download/v#{version}/archon-linux-arm64"
|
||||
url "https://github.com/coleam00/Archon/releases/download/v#{version}/archon-linux-arm64"
|
||||
sha256 "PLACEHOLDER_SHA256_LINUX_ARM64"
|
||||
end
|
||||
on_intel do
|
||||
url "https://github.com/dynamous-community/remote-coding-agent/releases/download/v#{version}/archon-linux-x64"
|
||||
url "https://github.com/coleam00/Archon/releases/download/v#{version}/archon-linux-x64"
|
||||
sha256 "PLACEHOLDER_SHA256_LINUX_X64"
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ let cachedGlobalConfig: GlobalConfig | null = null;
|
|||
* Default config file content
|
||||
*/
|
||||
const DEFAULT_CONFIG_CONTENT = `# Archon Global Configuration
|
||||
# See: https://github.com/dynamous-community/remote-coding-agent/blob/main/docs/configuration.md
|
||||
# See: https://github.com/coleam00/Archon/blob/main/docs/configuration.md
|
||||
|
||||
# Bot display name (shown in messages)
|
||||
# botName: Archon
|
||||
|
|
|
|||
|
|
@ -1833,7 +1833,7 @@ Talk naturally — the orchestrator routes your requests to the right workflow a
|
|||
|
||||
// Create default config.yaml
|
||||
const defaultConfig = `# Archon repository configuration
|
||||
# See: https://github.com/dynamous-community/remote-coding-agent
|
||||
# See: https://github.com/coleam00/Archon
|
||||
|
||||
# AI assistant preference (optional - overrides global default)
|
||||
# assistant: claude
|
||||
|
|
|
|||
|
|
@ -195,7 +195,7 @@ describe('parseOrchestratorCommands', () => {
|
|||
const planWorkflow = makeTestWorkflow({ name: 'plan' });
|
||||
|
||||
const myProject = makeCodebase('my-project');
|
||||
const orgProject = makeCodebase('dynamous-community/remote-coding-agent');
|
||||
const orgProject = makeCodebase('coleam00/Archon');
|
||||
|
||||
const workflows = [assistWorkflow, implementWorkflow, planWorkflow];
|
||||
const codebases = [myProject, orgProject];
|
||||
|
|
@ -390,19 +390,19 @@ describe('parseOrchestratorCommands', () => {
|
|||
});
|
||||
|
||||
test('matches project by last path segment (partial match)', () => {
|
||||
// "dynamous-community/remote-coding-agent" matched by "remote-coding-agent"
|
||||
const response = '/invoke-workflow assist --project remote-coding-agent';
|
||||
// "coleam00/Archon" matched by "Archon"
|
||||
const response = '/invoke-workflow assist --project Archon';
|
||||
const result = parseOrchestratorCommands(response, codebases, workflows);
|
||||
|
||||
expect(result.workflowInvocation).not.toBeNull();
|
||||
expect(result.workflowInvocation?.projectName).toBe('dynamous-community/remote-coding-agent');
|
||||
expect(result.workflowInvocation?.projectName).toBe('coleam00/Archon');
|
||||
});
|
||||
|
||||
test('partial match is case-insensitive', () => {
|
||||
const response = '/invoke-workflow assist --project REMOTE-CODING-AGENT';
|
||||
const response = '/invoke-workflow assist --project archon';
|
||||
const result = parseOrchestratorCommands(response, codebases, workflows);
|
||||
|
||||
expect(result.workflowInvocation?.projectName).toBe('dynamous-community/remote-coding-agent');
|
||||
expect(result.workflowInvocation?.projectName).toBe('coleam00/Archon');
|
||||
});
|
||||
|
||||
test('returns null workflowInvocation when project does not exist', () => {
|
||||
|
|
@ -420,11 +420,11 @@ describe('parseOrchestratorCommands', () => {
|
|||
});
|
||||
|
||||
test('uses matched codebase name (not the input name) in result', () => {
|
||||
// Input "remote-coding-agent" should resolve to full name "dynamous-community/remote-coding-agent"
|
||||
const response = '/invoke-workflow assist --project remote-coding-agent';
|
||||
// Input "Archon" should resolve to full name "coleam00/Archon"
|
||||
const response = '/invoke-workflow assist --project Archon';
|
||||
const result = parseOrchestratorCommands(response, codebases, workflows);
|
||||
|
||||
expect(result.workflowInvocation?.projectName).toBe('dynamous-community/remote-coding-agent');
|
||||
expect(result.workflowInvocation?.projectName).toBe('coleam00/Archon');
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ export function parseOrchestratorCommands(
|
|||
const workflow = findWorkflow(workflowName, [...workflows]);
|
||||
if (workflow) {
|
||||
// Validate project exists (case-insensitive, supports partial name matching)
|
||||
// e.g., "remote-coding-agent" matches "dynamous-community/remote-coding-agent"
|
||||
// e.g., "Archon" matches "coleam00/Archon"
|
||||
const matchedCodebase = findCodebaseByName(codebases, projectName);
|
||||
if (matchedCodebase) {
|
||||
// Extract message before the command
|
||||
|
|
|
|||
|
|
@ -409,7 +409,7 @@ describe('POST /api/conversations with message (atomic create+send)', () => {
|
|||
// Platform conversation IDs from forge adapters contain slashes and # characters:
|
||||
// e.g. "CyberFitz-LLC/devops-platform#24" — these must be URL-encoded by the client
|
||||
// and correctly decoded by the server route params.
|
||||
// Ref: https://github.com/dynamous-community/remote-coding-agent/issues/476
|
||||
// Ref: https://github.com/coleam00/Archon/issues/476
|
||||
describe('GET /api/conversations/:id — forge platform IDs with encoded slashes', () => {
|
||||
const GITEA_CONV = {
|
||||
id: 'gitea-internal-uuid',
|
||||
|
|
|
|||
|
|
@ -1,37 +1,37 @@
|
|||
import { describe, it, expect, beforeEach, afterEach } from 'bun:test';
|
||||
import { isBinaryBuild, BUNDLED_COMMANDS, BUNDLED_WORKFLOWS } from './bundled-defaults';
|
||||
import { describe, it, expect } from 'bun:test';
|
||||
import {
|
||||
isBinaryBuild,
|
||||
isBunVirtualFs,
|
||||
BUNDLED_COMMANDS,
|
||||
BUNDLED_WORKFLOWS,
|
||||
} from './bundled-defaults';
|
||||
|
||||
describe('bundled-defaults', () => {
|
||||
describe('isBunVirtualFs', () => {
|
||||
it('should detect Linux/macOS virtual filesystem paths', () => {
|
||||
expect(isBunVirtualFs('/$bunfs/root/bundled-defaults')).toBe(true);
|
||||
expect(isBunVirtualFs('/$bunfs/root/')).toBe(true);
|
||||
});
|
||||
|
||||
it('should detect Windows virtual filesystem paths (backslash)', () => {
|
||||
expect(isBunVirtualFs('B:\\~BUN\\root\\bundled-defaults')).toBe(true);
|
||||
expect(isBunVirtualFs('B:\\~BUN\\root')).toBe(true);
|
||||
});
|
||||
|
||||
it('should detect Windows virtual filesystem paths (forward slash)', () => {
|
||||
expect(isBunVirtualFs('B:/~BUN/root/bundled-defaults')).toBe(true);
|
||||
expect(isBunVirtualFs('B:/~BUN/root')).toBe(true);
|
||||
});
|
||||
|
||||
it('should return false for real filesystem paths', () => {
|
||||
expect(isBunVirtualFs('/home/user/project/src')).toBe(false);
|
||||
expect(isBunVirtualFs('C:\\Users\\user\\project\\src')).toBe(false);
|
||||
expect(isBunVirtualFs('/tmp/test')).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('isBinaryBuild', () => {
|
||||
let originalVersions: NodeJS.ProcessVersions;
|
||||
|
||||
beforeEach(() => {
|
||||
originalVersions = process.versions;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
Object.defineProperty(process, 'versions', { value: originalVersions, writable: true });
|
||||
});
|
||||
|
||||
it('should return false when running with Bun', () => {
|
||||
// In test environment, process.versions.bun is set by the Bun runtime
|
||||
expect((process.versions as Record<string, string | undefined>).bun).toBeDefined();
|
||||
expect(isBinaryBuild()).toBe(false);
|
||||
});
|
||||
|
||||
it('should return true when process.versions.bun is absent (compiled binary)', () => {
|
||||
Object.defineProperty(process, 'versions', {
|
||||
value: { node: '18.0.0' },
|
||||
writable: true,
|
||||
});
|
||||
expect(isBinaryBuild()).toBe(true);
|
||||
});
|
||||
|
||||
it('should return false when process.versions.bun is present', () => {
|
||||
Object.defineProperty(process, 'versions', {
|
||||
value: { ...process.versions, bun: '1.1.0' },
|
||||
writable: true,
|
||||
});
|
||||
it('should return false when running in test environment (not compiled)', () => {
|
||||
expect(isBinaryBuild()).toBe(false);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -100,10 +100,23 @@ export const BUNDLED_WORKFLOWS: Record<string, string> = {
|
|||
'archon-adversarial-dev': archonAdversarialDevWf,
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if a given module directory path belongs to a compiled Bun binary.
|
||||
*
|
||||
* Compiled Bun binaries use a virtual filesystem for bundled modules:
|
||||
* - Linux/macOS: `/$bunfs/root/`
|
||||
* - Windows: `B:\~BUN\root\` or `B:/~BUN/root/`
|
||||
*/
|
||||
export function isBunVirtualFs(dir: string): boolean {
|
||||
return dir.startsWith('/$bunfs/') || dir.startsWith('B:\\~BUN\\') || dir.startsWith('B:/~BUN/');
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the current process is running as a compiled binary (not via Bun CLI).
|
||||
* `process.versions.bun` is set by the Bun runtime; absent in standalone binaries.
|
||||
*
|
||||
* Note: `process.versions.bun` is still set in compiled binaries as of Bun 1.3.5,
|
||||
* so we use the virtual filesystem path prefix for detection instead.
|
||||
*/
|
||||
export function isBinaryBuild(): boolean {
|
||||
return (process.versions as Record<string, string | undefined>).bun === undefined;
|
||||
return isBunVirtualFs(import.meta.dir);
|
||||
}
|
||||
|
|
|
|||
307
scripts/install.ps1
Normal file
307
scripts/install.ps1
Normal file
|
|
@ -0,0 +1,307 @@
|
|||
# scripts/install.ps1
|
||||
# Install Archon CLI from GitHub Releases on Windows
|
||||
#
|
||||
# Usage: irm https://archon.diy/install.ps1 | iex
|
||||
#
|
||||
# Options (via environment variables):
|
||||
# $env:VERSION - Specific version to install (default: latest)
|
||||
# $env:INSTALL_DIR - Installation directory (default: $env:USERPROFILE\.archon\bin)
|
||||
# $env:SKIP_CHECKSUM - Set to "true" to skip checksum verification (not recommended)
|
||||
#
|
||||
# Examples:
|
||||
# # Install latest
|
||||
# irm https://archon.diy/install.ps1 | iex
|
||||
#
|
||||
# # Install specific version
|
||||
# $env:VERSION = "v0.2.0"; irm https://archon.diy/install.ps1 | iex
|
||||
#
|
||||
# # Install to custom directory
|
||||
# $env:INSTALL_DIR = "C:\tools\archon"; irm https://archon.diy/install.ps1 | iex
|
||||
|
||||
#Requires -Version 5.1
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Configuration
|
||||
# ---------------------------------------------------------------------------
|
||||
$REPO = "coleam00/Archon"
|
||||
$BINARY_NAME = "archon"
|
||||
$VERSION = if ($env:VERSION) { $env:VERSION } else { "latest" }
|
||||
$INSTALL_DIR = if ($env:INSTALL_DIR) { $env:INSTALL_DIR } else { "$env:USERPROFILE\.archon\bin" }
|
||||
$SKIP_CHECKSUM = ($env:SKIP_CHECKSUM -eq "true")
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Helpers
|
||||
# ---------------------------------------------------------------------------
|
||||
function Write-Info { param([string]$Msg) Write-Host "[INFO] $Msg" -ForegroundColor Cyan }
|
||||
function Write-Warn { param([string]$Msg) Write-Host "[WARN] $Msg" -ForegroundColor Yellow }
|
||||
function Write-Err { param([string]$Msg) Write-Host "[ERROR] $Msg" -ForegroundColor Red }
|
||||
function Write-Ok { param([string]$Msg) Write-Host "[OK] $Msg" -ForegroundColor Green }
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Banner
|
||||
# ---------------------------------------------------------------------------
|
||||
function Show-Banner {
|
||||
Write-Host ""
|
||||
Write-Host " +---------------------------------------+" -ForegroundColor Cyan
|
||||
Write-Host " | Archon CLI Installer |" -ForegroundColor Cyan
|
||||
Write-Host " | Windows (PowerShell) |" -ForegroundColor Cyan
|
||||
Write-Host " +---------------------------------------+" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Architecture detection
|
||||
# ---------------------------------------------------------------------------
|
||||
function Get-Arch {
|
||||
$procArch = $env:PROCESSOR_ARCHITECTURE
|
||||
if (-not $procArch) {
|
||||
# Fallback: query the registry directly
|
||||
try {
|
||||
$procArch = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' -Name PROCESSOR_ARCHITECTURE).PROCESSOR_ARCHITECTURE
|
||||
} catch {
|
||||
$procArch = "AMD64"
|
||||
}
|
||||
}
|
||||
|
||||
switch ($procArch.ToUpper()) {
|
||||
"ARM64" {
|
||||
Write-Warn "ARM64 architecture detected."
|
||||
Write-Warn "Windows ARM64 binaries are not yet available for Archon."
|
||||
Write-Warn "You can try running the x64 binary under emulation, or build from source:"
|
||||
Write-Warn " https://github.com/$REPO"
|
||||
throw "Unsupported architecture: ARM64 (no binary available yet)"
|
||||
}
|
||||
default { return "x64" }
|
||||
}
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# URL helpers
|
||||
# ---------------------------------------------------------------------------
|
||||
function Get-DownloadUrl {
|
||||
param([string]$Arch, [string]$Ver)
|
||||
$filename = "$BINARY_NAME-windows-$Arch.exe"
|
||||
if ($Ver -eq "latest") {
|
||||
return "https://github.com/$REPO/releases/latest/download/$filename"
|
||||
} else {
|
||||
return "https://github.com/$REPO/releases/download/$Ver/$filename"
|
||||
}
|
||||
}
|
||||
|
||||
function Get-ChecksumsUrl {
|
||||
param([string]$Ver)
|
||||
if ($Ver -eq "latest") {
|
||||
return "https://github.com/$REPO/releases/latest/download/checksums.txt"
|
||||
} else {
|
||||
return "https://github.com/$REPO/releases/download/$Ver/checksums.txt"
|
||||
}
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Download helper (supports progress + resume)
|
||||
# ---------------------------------------------------------------------------
|
||||
function Invoke-Download {
|
||||
param([string]$Url, [string]$OutFile)
|
||||
|
||||
# Suppress the progress bar to avoid slow rendering in older PowerShell
|
||||
$prevProgress = $ProgressPreference
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
try {
|
||||
Invoke-WebRequest -Uri $Url -OutFile $OutFile -UseBasicParsing
|
||||
} finally {
|
||||
$ProgressPreference = $prevProgress
|
||||
}
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Checksum verification
|
||||
# ---------------------------------------------------------------------------
|
||||
function Confirm-Checksum {
|
||||
param([string]$BinaryPath, [string]$Arch, [string]$ChecksumsUrl)
|
||||
|
||||
if ($SKIP_CHECKSUM) {
|
||||
Write-Warn "Checksum verification SKIPPED by user request (SKIP_CHECKSUM=true)"
|
||||
Write-Warn "This binary has NOT been verified - use at your own risk"
|
||||
return
|
||||
}
|
||||
|
||||
Write-Info "Verifying checksum..."
|
||||
|
||||
# Download checksums file
|
||||
$tmpChecksums = [System.IO.Path]::GetTempFileName()
|
||||
try {
|
||||
try {
|
||||
Invoke-Download -Url $ChecksumsUrl -OutFile $tmpChecksums
|
||||
} catch {
|
||||
Write-Err "Could not download checksums file from $ChecksumsUrl"
|
||||
Write-Err "Cannot verify binary integrity."
|
||||
Write-Err "To install anyway (not recommended): `$env:SKIP_CHECKSUM = 'true'; irm ... | iex"
|
||||
throw "Checksum download failed"
|
||||
}
|
||||
|
||||
$checksumContent = Get-Content -Raw $tmpChecksums
|
||||
|
||||
# Find the line matching our binary filename
|
||||
$expectedFilename = "$BINARY_NAME-windows-$Arch.exe"
|
||||
$expectedHash = $null
|
||||
foreach ($line in ($checksumContent -split "`n")) {
|
||||
$line = $line.Trim()
|
||||
if ($line -match $expectedFilename) {
|
||||
# checksums.txt is typically "<hash> <filename>" (sha256sum format)
|
||||
$expectedHash = ($line -split '\s+')[0]
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if (-not $expectedHash) {
|
||||
Write-Err "Could not find checksum for $expectedFilename in checksums file"
|
||||
Write-Err "This may indicate a corrupted or incomplete release."
|
||||
Write-Err "To install anyway (not recommended): `$env:SKIP_CHECKSUM = 'true'; irm ... | iex"
|
||||
throw "Checksum entry not found"
|
||||
}
|
||||
|
||||
# Compute actual hash
|
||||
$actualHash = (Get-FileHash -Path $BinaryPath -Algorithm SHA256).Hash.ToLower()
|
||||
$expectedHash = $expectedHash.ToLower()
|
||||
|
||||
if ($actualHash -ne $expectedHash) {
|
||||
Write-Err "Checksum verification FAILED!"
|
||||
Write-Err "Expected : $expectedHash"
|
||||
Write-Err "Actual : $actualHash"
|
||||
Write-Err "The downloaded binary may be corrupted or tampered with."
|
||||
throw "Checksum mismatch"
|
||||
}
|
||||
|
||||
Write-Ok "Checksum verified"
|
||||
} finally {
|
||||
if (Test-Path $tmpChecksums) { Remove-Item $tmpChecksums -Force -ErrorAction SilentlyContinue }
|
||||
}
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# PATH management
|
||||
# ---------------------------------------------------------------------------
|
||||
function Add-ToUserPath {
|
||||
param([string]$Dir)
|
||||
$currentPath = [Environment]::GetEnvironmentVariable('Path', 'User')
|
||||
$pathParts = $currentPath -split ';' | Where-Object { $_ -ne '' }
|
||||
|
||||
if ($Dir -notin $pathParts) {
|
||||
$pathParts += $Dir
|
||||
[Environment]::SetEnvironmentVariable('Path', ($pathParts -join ';'), 'User')
|
||||
Write-Ok "Added $Dir to your user PATH"
|
||||
Write-Info "Restart your terminal (or open a new one) for the PATH change to take effect"
|
||||
} else {
|
||||
Write-Info "$Dir is already in your PATH"
|
||||
}
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Main
|
||||
# ---------------------------------------------------------------------------
|
||||
function Main {
|
||||
Show-Banner
|
||||
|
||||
# --- Architecture ---
|
||||
Write-Info "Detecting architecture..."
|
||||
try {
|
||||
$arch = Get-Arch
|
||||
} catch {
|
||||
Write-Err $_.Exception.Message
|
||||
exit 1
|
||||
}
|
||||
Write-Ok "Architecture: $arch"
|
||||
|
||||
# --- URLs ---
|
||||
$downloadUrl = Get-DownloadUrl -Arch $arch -Ver $VERSION
|
||||
$checksumsUrl = Get-ChecksumsUrl -Ver $VERSION
|
||||
|
||||
Write-Info "Version : $VERSION"
|
||||
Write-Info "Download URL: $downloadUrl"
|
||||
|
||||
# --- Temp file ---
|
||||
$tmpDir = [System.IO.Path]::GetTempPath()
|
||||
$tmpBinary = Join-Path $tmpDir "$BINARY_NAME-windows-$arch.exe"
|
||||
|
||||
try {
|
||||
# --- Download binary ---
|
||||
Write-Info "Downloading binary..."
|
||||
try {
|
||||
Invoke-Download -Url $downloadUrl -OutFile $tmpBinary
|
||||
} catch {
|
||||
Write-Err "Failed to download binary from $downloadUrl"
|
||||
Write-Err $_.Exception.Message
|
||||
exit 1
|
||||
}
|
||||
Write-Ok "Downloaded successfully"
|
||||
|
||||
# --- Checksum ---
|
||||
try {
|
||||
Confirm-Checksum -BinaryPath $tmpBinary -Arch $arch -ChecksumsUrl $checksumsUrl
|
||||
} catch {
|
||||
Write-Err $_.Exception.Message
|
||||
exit 1
|
||||
}
|
||||
|
||||
# --- Create install directory ---
|
||||
if (-not (Test-Path $INSTALL_DIR)) {
|
||||
Write-Info "Creating install directory: $INSTALL_DIR"
|
||||
try {
|
||||
New-Item -ItemType Directory -Path $INSTALL_DIR -Force | Out-Null
|
||||
} catch {
|
||||
Write-Err "Failed to create install directory: $INSTALL_DIR"
|
||||
Write-Err $_.Exception.Message
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# --- Copy binary ---
|
||||
$destBinary = Join-Path $INSTALL_DIR "$BINARY_NAME.exe"
|
||||
Write-Info "Installing to $destBinary..."
|
||||
try {
|
||||
Copy-Item -Path $tmpBinary -Destination $destBinary -Force
|
||||
} catch {
|
||||
Write-Err "Failed to install binary to $destBinary"
|
||||
Write-Err $_.Exception.Message
|
||||
exit 1
|
||||
}
|
||||
Write-Ok "Installed to $destBinary"
|
||||
|
||||
# --- Add to PATH ---
|
||||
try {
|
||||
Add-ToUserPath -Dir $INSTALL_DIR
|
||||
} catch {
|
||||
Write-Warn "Could not update PATH automatically: $($_.Exception.Message)"
|
||||
Write-Warn "Add the following to your PATH manually: $INSTALL_DIR"
|
||||
}
|
||||
|
||||
# --- Verify installation ---
|
||||
Write-Host ""
|
||||
Write-Info "Verifying installation..."
|
||||
try {
|
||||
$versionOutput = & $destBinary version 2>&1
|
||||
Write-Host $versionOutput
|
||||
Write-Ok "Installation complete!"
|
||||
} catch {
|
||||
Write-Warn "Binary installed but version check failed: $($_.Exception.Message)"
|
||||
Write-Warn "The binary may not work correctly in this environment."
|
||||
Write-Warn "Verify manually with: $destBinary version"
|
||||
}
|
||||
|
||||
# --- Getting started ---
|
||||
Write-Host ""
|
||||
Write-Host " Get started:" -ForegroundColor Cyan
|
||||
Write-Host " archon workflow list"
|
||||
Write-Host " archon workflow run assist `"What workflows are available?`""
|
||||
Write-Host ""
|
||||
Write-Host " Note: Open a new terminal window so the updated PATH takes effect." -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
|
||||
} finally {
|
||||
if (Test-Path $tmpBinary) { Remove-Item $tmpBinary -Force -ErrorAction SilentlyContinue }
|
||||
}
|
||||
}
|
||||
|
||||
Main
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
# Install Archon CLI from GitHub releases
|
||||
#
|
||||
# Usage:
|
||||
# curl -fsSL https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/scripts/install.sh | bash
|
||||
# curl -fsSL https://raw.githubusercontent.com/coleam00/Archon/main/scripts/install.sh | bash
|
||||
#
|
||||
# Options (via environment variables):
|
||||
# VERSION - Specific version to install (default: latest)
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
#
|
||||
# Examples:
|
||||
# # Install latest
|
||||
# curl -fsSL https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/scripts/install.sh | bash
|
||||
# curl -fsSL https://raw.githubusercontent.com/coleam00/Archon/main/scripts/install.sh | bash
|
||||
#
|
||||
# # Install specific version
|
||||
# VERSION=v0.2.0 curl -fsSL ... | bash
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
set -euo pipefail
|
||||
|
||||
# Configuration
|
||||
REPO="dynamous-community/remote-coding-agent"
|
||||
REPO="coleam00/Archon"
|
||||
BINARY_NAME="archon"
|
||||
VERSION="${VERSION:-latest}"
|
||||
INSTALL_DIR="${INSTALL_DIR:-/usr/local/bin}"
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ fi
|
|||
# Remove 'v' prefix if present for formula version
|
||||
FORMULA_VERSION="${VERSION#v}"
|
||||
|
||||
REPO="dynamous-community/remote-coding-agent"
|
||||
REPO="coleam00/Archon"
|
||||
FORMULA_FILE="homebrew/archon.rb"
|
||||
|
||||
echo "Updating Homebrew formula for version $VERSION"
|
||||
|
|
|
|||
BIN
website/--path
Normal file
BIN
website/--path
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.6 KiB |
628
website/.astro/collections/docs.schema.json
Normal file
628
website/.astro/collections/docs.schema.json
Normal file
|
|
@ -0,0 +1,628 @@
|
|||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": {
|
||||
"type": "string"
|
||||
},
|
||||
"editUrl": {
|
||||
"default": true,
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"format": "uri"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
},
|
||||
"head": {
|
||||
"default": [],
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"tag": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"title",
|
||||
"base",
|
||||
"link",
|
||||
"style",
|
||||
"meta",
|
||||
"script",
|
||||
"noscript",
|
||||
"template"
|
||||
]
|
||||
},
|
||||
"attrs": {
|
||||
"type": "object",
|
||||
"propertyNames": {
|
||||
"type": "string"
|
||||
},
|
||||
"additionalProperties": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{}
|
||||
]
|
||||
}
|
||||
},
|
||||
"content": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"tag"
|
||||
]
|
||||
}
|
||||
},
|
||||
"tableOfContents": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"minHeadingLevel": {
|
||||
"default": 2,
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"maximum": 6
|
||||
},
|
||||
"maxHeadingLevel": {
|
||||
"default": 3,
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"maximum": 6
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
},
|
||||
"template": {
|
||||
"default": "doc",
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"doc",
|
||||
"splash"
|
||||
]
|
||||
},
|
||||
"hero": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string"
|
||||
},
|
||||
"tagline": {
|
||||
"type": "string"
|
||||
},
|
||||
"image": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"alt": {
|
||||
"default": "",
|
||||
"type": "string"
|
||||
},
|
||||
"file": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"file"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"alt": {
|
||||
"default": "",
|
||||
"type": "string"
|
||||
},
|
||||
"dark": {
|
||||
"type": "string"
|
||||
},
|
||||
"light": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dark",
|
||||
"light"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"html": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"html"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"actions": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"link": {
|
||||
"type": "string"
|
||||
},
|
||||
"variant": {
|
||||
"default": "primary",
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"primary",
|
||||
"secondary",
|
||||
"minimal"
|
||||
]
|
||||
},
|
||||
"icon": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"up-caret",
|
||||
"down-caret",
|
||||
"right-caret",
|
||||
"left-caret",
|
||||
"up-arrow",
|
||||
"down-arrow",
|
||||
"right-arrow",
|
||||
"left-arrow",
|
||||
"bars",
|
||||
"translate",
|
||||
"pencil",
|
||||
"pen",
|
||||
"document",
|
||||
"add-document",
|
||||
"setting",
|
||||
"external",
|
||||
"download",
|
||||
"cloud-download",
|
||||
"moon",
|
||||
"sun",
|
||||
"laptop",
|
||||
"open-book",
|
||||
"information",
|
||||
"magnifier",
|
||||
"forward-slash",
|
||||
"close",
|
||||
"error",
|
||||
"warning",
|
||||
"approve-check-circle",
|
||||
"approve-check",
|
||||
"rocket",
|
||||
"star",
|
||||
"puzzle",
|
||||
"list-format",
|
||||
"random",
|
||||
"comment",
|
||||
"comment-alt",
|
||||
"heart",
|
||||
"github",
|
||||
"gitlab",
|
||||
"bitbucket",
|
||||
"codePen",
|
||||
"farcaster",
|
||||
"discord",
|
||||
"gitter",
|
||||
"twitter",
|
||||
"x.com",
|
||||
"mastodon",
|
||||
"codeberg",
|
||||
"youtube",
|
||||
"threads",
|
||||
"linkedin",
|
||||
"twitch",
|
||||
"azureDevOps",
|
||||
"microsoftTeams",
|
||||
"instagram",
|
||||
"stackOverflow",
|
||||
"telegram",
|
||||
"rss",
|
||||
"facebook",
|
||||
"email",
|
||||
"phone",
|
||||
"reddit",
|
||||
"patreon",
|
||||
"signal",
|
||||
"slack",
|
||||
"matrix",
|
||||
"hackerOne",
|
||||
"openCollective",
|
||||
"blueSky",
|
||||
"discourse",
|
||||
"zulip",
|
||||
"pinterest",
|
||||
"tiktok",
|
||||
"astro",
|
||||
"alpine",
|
||||
"pnpm",
|
||||
"biome",
|
||||
"bun",
|
||||
"mdx",
|
||||
"apple",
|
||||
"linux",
|
||||
"homebrew",
|
||||
"nix",
|
||||
"starlight",
|
||||
"pkl",
|
||||
"node",
|
||||
"cloudflare",
|
||||
"vercel",
|
||||
"netlify",
|
||||
"deno",
|
||||
"jsr",
|
||||
"nostr",
|
||||
"backstage",
|
||||
"confluence",
|
||||
"jira",
|
||||
"storybook",
|
||||
"vscode",
|
||||
"jetbrains",
|
||||
"zed",
|
||||
"vim",
|
||||
"figma",
|
||||
"sketch",
|
||||
"npm",
|
||||
"sourcehut",
|
||||
"substack",
|
||||
"chrome",
|
||||
"edge",
|
||||
"firefox",
|
||||
"safari",
|
||||
"seti:folder",
|
||||
"seti:bsl",
|
||||
"seti:mdo",
|
||||
"seti:salesforce",
|
||||
"seti:asm",
|
||||
"seti:bicep",
|
||||
"seti:bazel",
|
||||
"seti:c",
|
||||
"seti:c-sharp",
|
||||
"seti:html",
|
||||
"seti:cpp",
|
||||
"seti:clojure",
|
||||
"seti:coldfusion",
|
||||
"seti:config",
|
||||
"seti:crystal",
|
||||
"seti:crystal_embedded",
|
||||
"seti:json",
|
||||
"seti:css",
|
||||
"seti:csv",
|
||||
"seti:xls",
|
||||
"seti:cu",
|
||||
"seti:cake",
|
||||
"seti:cake_php",
|
||||
"seti:d",
|
||||
"seti:word",
|
||||
"seti:elixir",
|
||||
"seti:elixir_script",
|
||||
"seti:hex",
|
||||
"seti:elm",
|
||||
"seti:favicon",
|
||||
"seti:f-sharp",
|
||||
"seti:git",
|
||||
"seti:go",
|
||||
"seti:godot",
|
||||
"seti:gradle",
|
||||
"seti:grails",
|
||||
"seti:graphql",
|
||||
"seti:hacklang",
|
||||
"seti:haml",
|
||||
"seti:mustache",
|
||||
"seti:haskell",
|
||||
"seti:haxe",
|
||||
"seti:jade",
|
||||
"seti:java",
|
||||
"seti:javascript",
|
||||
"seti:jinja",
|
||||
"seti:julia",
|
||||
"seti:karma",
|
||||
"seti:kotlin",
|
||||
"seti:dart",
|
||||
"seti:liquid",
|
||||
"seti:livescript",
|
||||
"seti:lua",
|
||||
"seti:markdown",
|
||||
"seti:argdown",
|
||||
"seti:info",
|
||||
"seti:clock",
|
||||
"seti:maven",
|
||||
"seti:nim",
|
||||
"seti:github",
|
||||
"seti:notebook",
|
||||
"seti:nunjucks",
|
||||
"seti:npm",
|
||||
"seti:ocaml",
|
||||
"seti:odata",
|
||||
"seti:perl",
|
||||
"seti:php",
|
||||
"seti:pipeline",
|
||||
"seti:pddl",
|
||||
"seti:plan",
|
||||
"seti:happenings",
|
||||
"seti:powershell",
|
||||
"seti:prisma",
|
||||
"seti:pug",
|
||||
"seti:puppet",
|
||||
"seti:purescript",
|
||||
"seti:python",
|
||||
"seti:react",
|
||||
"seti:rescript",
|
||||
"seti:R",
|
||||
"seti:ruby",
|
||||
"seti:rust",
|
||||
"seti:sass",
|
||||
"seti:spring",
|
||||
"seti:slim",
|
||||
"seti:smarty",
|
||||
"seti:sbt",
|
||||
"seti:scala",
|
||||
"seti:ethereum",
|
||||
"seti:stylus",
|
||||
"seti:svelte",
|
||||
"seti:swift",
|
||||
"seti:db",
|
||||
"seti:terraform",
|
||||
"seti:tex",
|
||||
"seti:default",
|
||||
"seti:twig",
|
||||
"seti:typescript",
|
||||
"seti:tsconfig",
|
||||
"seti:vala",
|
||||
"seti:vite",
|
||||
"seti:vue",
|
||||
"seti:wasm",
|
||||
"seti:wat",
|
||||
"seti:xml",
|
||||
"seti:yml",
|
||||
"seti:prolog",
|
||||
"seti:zig",
|
||||
"seti:zip",
|
||||
"seti:wgt",
|
||||
"seti:illustrator",
|
||||
"seti:photoshop",
|
||||
"seti:pdf",
|
||||
"seti:font",
|
||||
"seti:image",
|
||||
"seti:svg",
|
||||
"seti:sublime",
|
||||
"seti:code-search",
|
||||
"seti:shell",
|
||||
"seti:video",
|
||||
"seti:audio",
|
||||
"seti:windows",
|
||||
"seti:jenkins",
|
||||
"seti:babel",
|
||||
"seti:bower",
|
||||
"seti:docker",
|
||||
"seti:code-climate",
|
||||
"seti:eslint",
|
||||
"seti:firebase",
|
||||
"seti:firefox",
|
||||
"seti:gitlab",
|
||||
"seti:grunt",
|
||||
"seti:gulp",
|
||||
"seti:ionic",
|
||||
"seti:platformio",
|
||||
"seti:rollup",
|
||||
"seti:stylelint",
|
||||
"seti:yarn",
|
||||
"seti:webpack",
|
||||
"seti:lock",
|
||||
"seti:license",
|
||||
"seti:makefile",
|
||||
"seti:heroku",
|
||||
"seti:todo",
|
||||
"seti:ignored"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^<svg.*"
|
||||
}
|
||||
]
|
||||
},
|
||||
"attrs": {
|
||||
"type": "object",
|
||||
"propertyNames": {
|
||||
"type": "string"
|
||||
},
|
||||
"additionalProperties": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"text",
|
||||
"link"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"lastUpdated": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
},
|
||||
"prev": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"link": {
|
||||
"type": "string"
|
||||
},
|
||||
"label": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"next": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"link": {
|
||||
"type": "string"
|
||||
},
|
||||
"label": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"sidebar": {
|
||||
"default": {},
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"order": {
|
||||
"type": "number"
|
||||
},
|
||||
"label": {
|
||||
"type": "string"
|
||||
},
|
||||
"hidden": {
|
||||
"default": false,
|
||||
"type": "boolean"
|
||||
},
|
||||
"badge": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"variant": {
|
||||
"default": "default",
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"note",
|
||||
"danger",
|
||||
"success",
|
||||
"caution",
|
||||
"tip",
|
||||
"default"
|
||||
]
|
||||
},
|
||||
"class": {
|
||||
"type": "string"
|
||||
},
|
||||
"text": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"text"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"attrs": {
|
||||
"default": {},
|
||||
"type": "object",
|
||||
"propertyNames": {
|
||||
"type": "string"
|
||||
},
|
||||
"additionalProperties": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"banner": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"content": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content"
|
||||
]
|
||||
},
|
||||
"pagefind": {
|
||||
"default": true,
|
||||
"type": "boolean"
|
||||
},
|
||||
"draft": {
|
||||
"default": false,
|
||||
"type": "boolean"
|
||||
},
|
||||
"$schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"title"
|
||||
]
|
||||
}
|
||||
1
website/.astro/content-assets.mjs
Normal file
1
website/.astro/content-assets.mjs
Normal file
|
|
@ -0,0 +1 @@
|
|||
export default new Map();
|
||||
1
website/.astro/content-modules.mjs
Normal file
1
website/.astro/content-modules.mjs
Normal file
|
|
@ -0,0 +1 @@
|
|||
export default new Map();
|
||||
173
website/.astro/content.d.ts
vendored
Normal file
173
website/.astro/content.d.ts
vendored
Normal file
|
|
@ -0,0 +1,173 @@
|
|||
declare module 'astro:content' {
|
||||
interface Render {
|
||||
'.mdx': Promise<{
|
||||
Content: import('astro').MDXContent;
|
||||
headings: import('astro').MarkdownHeading[];
|
||||
remarkPluginFrontmatter: Record<string, any>;
|
||||
components: import('astro').MDXInstance<{}>['components'];
|
||||
}>;
|
||||
}
|
||||
}
|
||||
|
||||
declare module 'astro:content' {
|
||||
export interface RenderResult {
|
||||
Content: import('astro/runtime/server/index.js').AstroComponentFactory;
|
||||
headings: import('astro').MarkdownHeading[];
|
||||
remarkPluginFrontmatter: Record<string, any>;
|
||||
}
|
||||
interface Render {
|
||||
'.md': Promise<RenderResult>;
|
||||
}
|
||||
|
||||
export interface RenderedContent {
|
||||
html: string;
|
||||
metadata?: {
|
||||
imagePaths: Array<string>;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
}
|
||||
|
||||
type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
|
||||
|
||||
export type CollectionKey = keyof DataEntryMap;
|
||||
export type CollectionEntry<C extends CollectionKey> = Flatten<DataEntryMap[C]>;
|
||||
|
||||
type AllValuesOf<T> = T extends any ? T[keyof T] : never;
|
||||
|
||||
export type ReferenceDataEntry<
|
||||
C extends CollectionKey,
|
||||
E extends keyof DataEntryMap[C] = string,
|
||||
> = {
|
||||
collection: C;
|
||||
id: E;
|
||||
};
|
||||
|
||||
export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
|
||||
collection: C;
|
||||
id: string;
|
||||
};
|
||||
|
||||
export function getCollection<C extends keyof DataEntryMap, E extends CollectionEntry<C>>(
|
||||
collection: C,
|
||||
filter?: (entry: CollectionEntry<C>) => entry is E,
|
||||
): Promise<E[]>;
|
||||
export function getCollection<C extends keyof DataEntryMap>(
|
||||
collection: C,
|
||||
filter?: (entry: CollectionEntry<C>) => unknown,
|
||||
): Promise<CollectionEntry<C>[]>;
|
||||
|
||||
export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
|
||||
collection: C,
|
||||
filter?: LiveLoaderCollectionFilterType<C>,
|
||||
): Promise<
|
||||
import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
|
||||
>;
|
||||
|
||||
export function getEntry<
|
||||
C extends keyof DataEntryMap,
|
||||
E extends keyof DataEntryMap[C] | (string & {}),
|
||||
>(
|
||||
entry: ReferenceDataEntry<C, E>,
|
||||
): E extends keyof DataEntryMap[C]
|
||||
? Promise<DataEntryMap[C][E]>
|
||||
: Promise<CollectionEntry<C> | undefined>;
|
||||
export function getEntry<
|
||||
C extends keyof DataEntryMap,
|
||||
E extends keyof DataEntryMap[C] | (string & {}),
|
||||
>(
|
||||
collection: C,
|
||||
id: E,
|
||||
): E extends keyof DataEntryMap[C]
|
||||
? string extends keyof DataEntryMap[C]
|
||||
? Promise<DataEntryMap[C][E]> | undefined
|
||||
: Promise<DataEntryMap[C][E]>
|
||||
: Promise<CollectionEntry<C> | undefined>;
|
||||
export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
|
||||
collection: C,
|
||||
filter: string | LiveLoaderEntryFilterType<C>,
|
||||
): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
|
||||
|
||||
/** Resolve an array of entry references from the same collection */
|
||||
export function getEntries<C extends keyof DataEntryMap>(
|
||||
entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
|
||||
): Promise<CollectionEntry<C>[]>;
|
||||
|
||||
export function render<C extends keyof DataEntryMap>(
|
||||
entry: DataEntryMap[C][string],
|
||||
): Promise<RenderResult>;
|
||||
|
||||
export function reference<
|
||||
C extends
|
||||
| keyof DataEntryMap
|
||||
// Allow generic `string` to avoid excessive type errors in the config
|
||||
// if `dev` is not running to update as you edit.
|
||||
// Invalid collection names will be caught at build time.
|
||||
| (string & {}),
|
||||
>(
|
||||
collection: C,
|
||||
): import('astro/zod').ZodPipe<
|
||||
import('astro/zod').ZodString,
|
||||
import('astro/zod').ZodTransform<
|
||||
C extends keyof DataEntryMap
|
||||
? {
|
||||
collection: C;
|
||||
id: string;
|
||||
}
|
||||
: never,
|
||||
string
|
||||
>
|
||||
>;
|
||||
|
||||
type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
|
||||
type InferEntrySchema<C extends keyof DataEntryMap> = import('astro/zod').infer<
|
||||
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
|
||||
>;
|
||||
type ExtractLoaderConfig<T> = T extends { loader: infer L } ? L : never;
|
||||
type InferLoaderSchema<
|
||||
C extends keyof DataEntryMap,
|
||||
L = ExtractLoaderConfig<ContentConfig['collections'][C]>,
|
||||
> = L extends { schema: import('astro/zod').ZodSchema }
|
||||
? import('astro/zod').infer<L['schema']>
|
||||
: any;
|
||||
|
||||
type DataEntryMap = {
|
||||
"docs": Record<string, {
|
||||
id: string;
|
||||
body?: string;
|
||||
collection: "docs";
|
||||
data: InferEntrySchema<"docs">;
|
||||
rendered?: RenderedContent;
|
||||
filePath?: string;
|
||||
}>;
|
||||
|
||||
};
|
||||
|
||||
type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
|
||||
infer TData,
|
||||
infer TEntryFilter,
|
||||
infer TCollectionFilter,
|
||||
infer TError
|
||||
>
|
||||
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
|
||||
: { data: never; entryFilter: never; collectionFilter: never; error: never };
|
||||
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
|
||||
type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
|
||||
type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
|
||||
|
||||
type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
|
||||
LiveContentConfig['collections'][C]['schema'] extends undefined
|
||||
? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
|
||||
: import('astro/zod').infer<
|
||||
Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
|
||||
>;
|
||||
type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
|
||||
ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
|
||||
type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
|
||||
ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
|
||||
type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
|
||||
LiveContentConfig['collections'][C]['loader']
|
||||
>;
|
||||
|
||||
export type ContentConfig = typeof import("./../src/content.config.js");
|
||||
export type LiveContentConfig = never;
|
||||
}
|
||||
1
website/.astro/data-store.json
Normal file
1
website/.astro/data-store.json
Normal file
File diff suppressed because one or more lines are too long
5
website/.astro/settings.json
Normal file
5
website/.astro/settings.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"_variables": {
|
||||
"lastUpdateCheck": 1775314052850
|
||||
}
|
||||
}
|
||||
2
website/.astro/types.d.ts
vendored
Normal file
2
website/.astro/types.d.ts
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
/// <reference types="astro/client" />
|
||||
/// <reference path="content.d.ts" />
|
||||
39
website/astro.config.mjs
Normal file
39
website/astro.config.mjs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
import { defineConfig } from 'astro/config';
|
||||
import starlight from '@astrojs/starlight';
|
||||
|
||||
export default defineConfig({
|
||||
site: 'https://archon.diy',
|
||||
integrations: [
|
||||
starlight({
|
||||
title: 'Archon',
|
||||
description: 'AI workflow engine — package your coding workflows as YAML, run them anywhere.',
|
||||
social: [{ icon: 'github', label: 'GitHub', href: 'https://github.com/coleam00/Archon' }],
|
||||
editLink: {
|
||||
baseUrl: 'https://github.com/coleam00/Archon/edit/main/website/',
|
||||
},
|
||||
sidebar: [
|
||||
{
|
||||
label: 'Getting Started',
|
||||
autogenerate: { directory: 'getting-started' },
|
||||
},
|
||||
{
|
||||
label: 'Guides',
|
||||
autogenerate: { directory: 'guides' },
|
||||
},
|
||||
{
|
||||
label: 'Adapters',
|
||||
autogenerate: { directory: 'adapters' },
|
||||
},
|
||||
{
|
||||
label: 'Deployment',
|
||||
autogenerate: { directory: 'deployment' },
|
||||
},
|
||||
{
|
||||
label: 'Reference',
|
||||
autogenerate: { directory: 'reference' },
|
||||
},
|
||||
],
|
||||
customCss: ['./src/styles/custom.css'],
|
||||
}),
|
||||
],
|
||||
});
|
||||
6678
website/package-lock.json
generated
Normal file
6678
website/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
15
website/package.json
Normal file
15
website/package.json
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"name": "@archon/website",
|
||||
"version": "0.2.12",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"astro": "^6.1.0",
|
||||
"@astrojs/starlight": "^0.38.0",
|
||||
"sharp": "^0.33.0"
|
||||
}
|
||||
}
|
||||
1
website/public/CNAME
Normal file
1
website/public/CNAME
Normal file
|
|
@ -0,0 +1 @@
|
|||
archon.diy
|
||||
7
website/src/content.config.ts
Normal file
7
website/src/content.config.ts
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
import { defineCollection } from 'astro:content';
|
||||
import { docsLoader } from '@astrojs/starlight/loaders';
|
||||
import { docsSchema } from '@astrojs/starlight/schema';
|
||||
|
||||
export const collections = {
|
||||
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
|
||||
};
|
||||
32
website/src/content/docs/getting-started/configuration.md
Normal file
32
website/src/content/docs/getting-started/configuration.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
---
|
||||
title: Configuration
|
||||
description: Configure Archon with API keys, assistants, and project settings.
|
||||
---
|
||||
|
||||
## Environment Variables
|
||||
|
||||
Set these in your shell or `.env` file:
|
||||
|
||||
| Variable | Required | Description |
|
||||
|----------|----------|-------------|
|
||||
| `ANTHROPIC_API_KEY` | Yes (for Claude) | Your Anthropic API key |
|
||||
| `OPENAI_API_KEY` | Yes (for Codex) | Your OpenAI API key |
|
||||
| `DATABASE_URL` | No | PostgreSQL connection string (default: SQLite) |
|
||||
| `LOG_LEVEL` | No | `debug`, `info` (default), `warn`, `error` |
|
||||
|
||||
## Project Configuration
|
||||
|
||||
Create `.archon/config.yaml` in your repository:
|
||||
|
||||
```yaml
|
||||
assistants:
|
||||
claude:
|
||||
model: sonnet # or 'opus', 'haiku', 'inherit'
|
||||
settingSources:
|
||||
- project
|
||||
codex:
|
||||
model: gpt-5.3-codex
|
||||
modelReasoningEffort: medium
|
||||
```
|
||||
|
||||
See the [full configuration reference](https://github.com/coleam00/Archon/blob/main/docs/configuration.md) for all options.
|
||||
55
website/src/content/docs/getting-started/installation.md
Normal file
55
website/src/content/docs/getting-started/installation.md
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
---
|
||||
title: Installation
|
||||
description: Install Archon on macOS, Linux, or Windows.
|
||||
---
|
||||
|
||||
## Quick Install
|
||||
|
||||
### macOS / Linux
|
||||
|
||||
```bash
|
||||
curl -fsSL https://archon.diy/install | bash
|
||||
```
|
||||
|
||||
### Windows (PowerShell)
|
||||
|
||||
```powershell
|
||||
irm https://archon.diy/install.ps1 | iex
|
||||
```
|
||||
|
||||
### Homebrew (macOS / Linux)
|
||||
|
||||
```bash
|
||||
brew install coleam00/archon/archon
|
||||
```
|
||||
|
||||
### Docker
|
||||
|
||||
```bash
|
||||
docker run --rm -v "$PWD:/workspace" ghcr.io/coleam00/archon:latest workflow list
|
||||
```
|
||||
|
||||
## From Source
|
||||
|
||||
```bash
|
||||
git clone https://github.com/coleam00/Archon
|
||||
cd Archon
|
||||
bun install
|
||||
```
|
||||
|
||||
### Prerequisites (Source Install)
|
||||
|
||||
- [Bun](https://bun.sh) >= 1.0.0
|
||||
- [GitHub CLI](https://cli.github.com/) (`gh`)
|
||||
- [Claude Code](https://claude.ai/code) (`claude`)
|
||||
|
||||
## Verify Installation
|
||||
|
||||
```bash
|
||||
archon version
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
- [Quick Start](/getting-started/quick-start/) — Run your first workflow
|
||||
- [Configuration](/getting-started/configuration/) — Set up API keys and preferences
|
||||
46
website/src/content/docs/getting-started/quick-start.md
Normal file
46
website/src/content/docs/getting-started/quick-start.md
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
---
|
||||
title: Quick Start
|
||||
description: Run your first Archon workflow in minutes.
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. [Install Archon](/getting-started/installation/)
|
||||
2. Set your Anthropic API key: `export ANTHROPIC_API_KEY=sk-ant-...`
|
||||
3. Navigate to any git repository
|
||||
|
||||
## Run Your First Workflow
|
||||
|
||||
```bash
|
||||
# List available workflows
|
||||
archon workflow list
|
||||
|
||||
# Ask Archon to assist with your codebase
|
||||
archon workflow run assist "What does this codebase do?"
|
||||
|
||||
# Run a code review
|
||||
archon workflow run smart-review
|
||||
```
|
||||
|
||||
## Key Concepts
|
||||
|
||||
### Workflows
|
||||
|
||||
Workflows are YAML files that define multi-step AI coding tasks. Each workflow has **nodes** that execute in order (or as a DAG with dependencies).
|
||||
|
||||
### Isolation
|
||||
|
||||
By default, workflows run in **git worktrees** — isolated copies of your repo. This means:
|
||||
- Your working branch stays clean
|
||||
- Multiple workflows can run in parallel
|
||||
- Failed workflows don't leave a mess
|
||||
|
||||
### Commands
|
||||
|
||||
Commands are reusable prompt files (`.md` or `.txt`) that workflows reference. They define what the AI should do at each step.
|
||||
|
||||
## What's Next?
|
||||
|
||||
- [Authoring Workflows](/guides/authoring-workflows/) — Create your own workflows
|
||||
- [CLI Guide](/guides/cli/) — Full CLI reference
|
||||
- [Web UI](/guides/web-ui/) — Use the browser interface
|
||||
49
website/src/content/docs/index.md
Normal file
49
website/src/content/docs/index.md
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
---
|
||||
title: Archon
|
||||
description: AI workflow engine — package your coding workflows as YAML, run them anywhere.
|
||||
template: splash
|
||||
hero:
|
||||
title: Archon
|
||||
tagline: Package your AI coding workflows as YAML. Run them anywhere — CLI, Web, Slack, Telegram, GitHub, Discord.
|
||||
actions:
|
||||
- text: Get Started
|
||||
link: /getting-started/installation/
|
||||
icon: right-arrow
|
||||
variant: primary
|
||||
- text: View on GitHub
|
||||
link: https://github.com/coleam00/Archon
|
||||
icon: external
|
||||
variant: minimal
|
||||
---
|
||||
|
||||
## Install in seconds
|
||||
|
||||
:::code-group
|
||||
|
||||
```bash [macOS / Linux]
|
||||
curl -fsSL https://archon.diy/install | bash
|
||||
```
|
||||
|
||||
```powershell [Windows]
|
||||
irm https://archon.diy/install.ps1 | iex
|
||||
```
|
||||
|
||||
```bash [Homebrew]
|
||||
brew install coleam00/archon/archon
|
||||
```
|
||||
|
||||
```bash [Docker]
|
||||
docker run --rm -v "$PWD:/workspace" ghcr.io/coleam00/archon:latest workflow list
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
## What is Archon?
|
||||
|
||||
Archon is a **workflow engine for AI coding agents**. Define multi-step development workflows in YAML — code review, bug fixes, feature implementation, testing — and run them with a single command.
|
||||
|
||||
- **Repeatable**: Package your best AI coding patterns as shareable YAML workflows
|
||||
- **Isolated**: Each workflow runs in its own git worktree — no conflicts, no mess
|
||||
- **Portable**: Run from CLI, Web UI, Slack, Telegram, GitHub, or Discord
|
||||
- **Composable**: Chain workflow nodes into DAGs with dependencies, loops, and conditional logic
|
||||
- **Multi-provider**: Works with Claude Code SDK and Codex SDK
|
||||
7
website/src/styles/custom.css
Normal file
7
website/src/styles/custom.css
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
:root {
|
||||
--sl-color-accent-low: #1a1f36;
|
||||
--sl-color-accent: #3b82f6;
|
||||
--sl-color-accent-high: #93c5fd;
|
||||
--sl-font: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
|
||||
--sl-font-mono: 'JetBrains Mono', ui-monospace, monospace;
|
||||
}
|
||||
3
website/tsconfig.json
Normal file
3
website/tsconfig.json
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"extends": "astro/tsconfigs/strict"
|
||||
}
|
||||
Loading…
Reference in a new issue