Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
01ddadd
feat: separate GitHub and LLM provider setup into distinct steps
May 3, 2026
942a4ae
fix: set input field height to 3 for proper border rendering
May 3, 2026
3fcd9f8
fix: add scrolling for GitHub PAT fields when they overflow screen
May 3, 2026
e5366b0
style: redesign TUI with cyberpunk terminal aesthetic
May 3, 2026
c6c72a4
style: redesign OpenFlows welcome page with clean boxed logo
May 3, 2026
7be51cc
style: simplify welcome page to clean minimal design
May 3, 2026
edb0dd2
feat: packaging and distribution setup
May 3, 2026
6e1648c
fix: add OpenSSL dev headers to Linux build, fix binary names in inst…
May 4, 2026
6907e77
fix: use rustls instead of native-tls in anthropic-mock
May 4, 2026
c44d182
fix: update Rust to 1.85 for edition2024 support, fix package name
May 4, 2026
7f64639
fix: update Rust to 1.88 for instability crate requirement
May 4, 2026
b07cd7e
fix: replace unstable floor_char_boundary with stable char_indices
May 4, 2026
039606a
fix: add musl fallback for x86_64 Linux binary download
May 4, 2026
dc96ce6
fix: point JS wrappers to agentflow binaries
May 4, 2026
167edca
fix: resolve orchestration files relative to binary location
May 4, 2026
48d6599
fix: resolve orchestration files relative to binary in agentflow.rs
May 4, 2026
1acf7e7
chore: update cargo lock and npm version
May 4, 2026
ed1fb3a
fix: generate registry.json in setup wizard, fix next steps commands
May 4, 2026
3c03365
fix: prefix unused config param with underscore
May 4, 2026
8697c43
feat(tui): add agent configuration step for instances, model backend,…
May 4, 2026
1d6ab53
fix(tui): make current_state mutable in agent step
May 4, 2026
025e4ad
fix(ci): sanitize branch names with slashes for Docker tags
May 5, 2026
9a8d93c
feat(tui): redesign agent config screen with inline editing
May 5, 2026
020786e
fix(tui): lock Nexus instances, fix GitHub token propagation, anchor …
May 5, 2026
3021b19
docs(readme): expand npm installation and usage instructions
May 5, 2026
7fb0b3c
Delete .kilo/plans/1777761256449-silent-squid.md
Christiantyemele May 5, 2026
6482ac5
fix(tui): improve setup flow order and add edit option
May 7, 2026
425f9ae
fix(setup): remove github_token_env for inactive default agent
May 7, 2026
6b5ba26
docs: add license and asset distribution flow documentation
May 7, 2026
760d257
fix(npm): improve install script robustness
May 7, 2026
bec7586
docs(npm): add comprehensive npm package README
May 7, 2026
1e6994c
feat(npm): zero-config installation with auto-proxy management
May 8, 2026
8ec5563
fix(setup): add openflows-doctor to setup completion next steps
May 8, 2026
a376b08
fix(npm): install mcp-proxy correctly via Python package manager
May 8, 2026
473ba4e
chore(npm): bump version to 0.1.5 for mcp-proxy fix
May 8, 2026
cc3e0e0
chore(npm): bump version to 0.1.6 with fixed mcp-proxy binary
May 8, 2026
21b27fc
feat: add Fireworks Anthropic API compatibility and reduce logging ve…
May 8, 2026
7fc7c5b
chore: add crates.io metadata (description, repository, keywords) to …
May 8, 2026
571cfd4
chore(npm): bump version to 0.1.7 with Fireworks Anthropic compatibility
May 8, 2026
0150e48
fix: detect API errors and stop infinite FORGE respawn loop
May 8, 2026
7f3993f
fix: Fireworks requires proxy for Claude CLI agents
May 8, 2026
fb455cc
fix: npm wrapper proxy startup and install script
May 8, 2026
1fe214d
fix: enhance proxy environment injection with logging
May 8, 2026
7003aff
feat: setup fully provisions environment for Fireworks
May 9, 2026
f442b62
docs: add PROXY_TARGET_MODEL setup flow and update installation guides
May 9, 2026
97e661d
Merge remote-tracking branch 'origin/main' into feature/setup-separat…
May 12, 2026
40fc127
fix: pass proxy_url and model from registry to FORGE/SENTINEL processes
May 12, 2026
0f02546
fix(proxy): add /v1/models endpoint for Claude Code model validation
May 12, 2026
fccf877
feat(process): add model field and with_model constructor to ProcessM…
May 12, 2026
77008bc
fix(process): allow dead_code for inject_fireworks_anthropic_env
May 12, 2026
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
21 changes: 21 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Cargo configuration for cross-compilation and build optimization

[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"

[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"

[target.x86_64-apple-darwin]
rustflags = ["-C", "link-arg=-mmacosx-version-min=10.15"]

[target.aarch64-apple-darwin]
rustflags = ["-C", "link-arg=-mmacosx-version-min=11.0"]

[build]
# Use release optimizations for all builds in CI
incremental = true

[net]
# Retry failed downloads
retry = 3
56 changes: 56 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Build artifacts
target/
**/*.rs.bk

# IDE
.idea/
.vscode/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db

# Git
.git/
.gitignore

# Test artifacts
coverage/
*.profraw
*.profdata

# Node
node_modules/

# Python
__pycache__/
*.pyc
.venv/

# Env files
.env
.env.local
.env.*.local

# Credentials (never include in image)
.claude/
*.pem
*.key

# Docs and packaging (not needed in runtime image)
docs/
packaging/
image.png

# CI
.github/

# Scripts (not needed in runtime)
scripts/
tests/

# Makefile and build config
Makefile
.cargo/
7 changes: 7 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,13 @@ PROXY_API_KEY=your-proxy-key-or-routing-key
# Example: claude-haiku-4-5-20251001=kimi-k2.5
MODEL_MAP=claude-haiku-4-5-20251001=kimi-k2.5

# Proxy target model (simpler alternative to MODEL_MAP)
# When set, ALL Claude model names (claude-*, opus, sonnet, haiku) map to this single target.
# The proxy also strips ANSI escape codes from model names before mapping.
# Recommended for Fireworks AI users — set once and forget.
# Example: PROXY_TARGET_MODEL=accounts/fireworks/models/glm-5
PROXY_TARGET_MODEL=

# ═══════════════════════════════════════════════════════════════════════════
# DIRECT MODE (Individual API Keys)
# ═══════════════════════════════════════════════════════════════════════════
Expand Down
31 changes: 31 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,34 @@ jobs:
- uses: actions/checkout@v4
- name: Check for typos
uses: crate-ci/typos@master

release-binaries:
name: Release Binaries
if: startsWith(github.ref, 'refs/tags/')
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-musl
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
- os: macos-latest
target: x86_64-apple-darwin
- os: macos-latest
target: aarch64-apple-darwin
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
target: ${{ matrix.target }}
- name: Build binaries
run: cargo build --release --target ${{ matrix.target }} --bin agentflow --bin agentflow-setup --bin agentflow-dashboard --bin agentflow-doctor
- name: Upload binaries
uses: softprops/action-gh-release@v1
with:
files: |
target/${{ matrix.target }}/release/agentflow
target/${{ matrix.target }}/release/agentflow-setup
target/${{ matrix.target }}/release/agentflow-dashboard
target/${{ matrix.target }}/release/agentflow-doctor
223 changes: 223 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
name: Release

on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g., v0.1.0)'
required: true
type: string

env:
CARGO_TERM_COLOR: always

jobs:
# ── Build binaries for all platforms ─────────────────────────────
build:
name: Build (${{ matrix.target }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-musl
archive_ext: tar.gz
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
archive_ext: tar.gz
- os: macos-latest
target: x86_64-apple-darwin
archive_ext: tar.gz
- os: macos-latest
target: aarch64-apple-darwin
archive_ext: tar.gz
steps:
- uses: actions/checkout@v4

- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
target: ${{ matrix.target }}

# Install musl tools for Linux static builds
- name: Install musl tools (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y musl-tools libssl-dev pkg-config
if [[ "${{ matrix.target }}" == "aarch64"* ]]; then
sudo apt-get install -y gcc-aarch64-linux-gnu
fi

- name: Build binaries
run: >
cargo build --release
--target ${{ matrix.target }}
--bin agentflow
--bin agentflow-setup
--bin agentflow-dashboard
--bin agentflow-doctor
--bin anthropic-proxy

- name: Create tarball
run: |
VERSION="${{ github.event.inputs.version || github.ref_name }}"
PLATFORM="${{ matrix.target }}"
ARCHIVE="openflows-${VERSION}-${PLATFORM}"
mkdir -p "dist/${ARCHIVE}"

for bin in agentflow agentflow-setup agentflow-dashboard agentflow-doctor anthropic-proxy; do
cp "target/${{ matrix.target }}/release/${bin}" "dist/${ARCHIVE}/"
done

# Include orchestration config
cp -r orchestration "dist/${ARCHIVE}/"
cp README.md LICENSE "dist/${ARCHIVE}/" 2>/dev/null || true

tar -czf "dist/${ARCHIVE}.tar.gz" -C dist "${ARCHIVE}"
echo "ARCHIVE_NAME=${ARCHIVE}.tar.gz" >> $GITHUB_ENV

- name: Generate checksum
run: |
cd dist
sha256sum "${{ env.ARCHIVE_NAME }}" > "${{ env.ARCHIVE_NAME }}.sha256"

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: binaries-${{ matrix.target }}
path: dist/*
retention-days: 5

# ── Docker image ─────────────────────────────────────────────────
docker:
name: Build Docker Image
runs-on: ubuntu-latest
needs: build
permissions:
packages: write
contents: read
steps:
- uses: actions/checkout@v4

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

- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract version
id: version
run: |
VERSION="${GITHUB_REF_NAME#v}"
# Sanitize version for Docker tags (replace / with -)
VERSION=$(echo "$VERSION" | sed 's|/|-|g')
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT

- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
ghcr.io/the-agenticflow/openflows:latest
ghcr.io/the-agenticflow/openflows:${{ steps.version.outputs.VERSION }}
cache-from: type=gha
cache-to: type=gha,mode=max

# ── Create GitHub Release ────────────────────────────────────────
release:
name: Create Release
runs-on: ubuntu-latest
needs: [build, docker]
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: dist/
pattern: binaries-*
merge-multiple: true

- name: Generate changelog
id: changelog
run: |
VERSION="${{ github.event.inputs.version || github.ref_name }}"
PREV_TAG=$(git describe --tags --abbrev=0 "${VERSION}^" 2>/dev/null || echo "")

echo "## What's Changed" >> CHANGELOG.md
echo "" >> CHANGELOG.md

if [ -n "$PREV_TAG" ]; then
echo "### Changes since $PREV_TAG" >> CHANGELOG.md
echo "" >> CHANGELOG.md
git log --pretty=format:"- %s (%h)" "${PREV_TAG}..${VERSION}" >> CHANGELOG.md
else
echo "### Initial Release" >> CHANGELOG.md
echo "" >> CHANGELOG.md
git log --pretty=format:"- %s (%h)" >> CHANGELOG.md
fi

echo "" >> CHANGELOG.md
echo "## Installation" >> CHANGELOG.md
echo "" >> CHANGELOG.md
echo '```bash' >> CHANGELOG.md
echo 'curl -fsSL https://raw.githubusercontent.com/The-AgenticFlow/AgentFlow/main/scripts/install.sh | bash' >> CHANGELOG.md
echo '```' >> CHANGELOG.md

cat CHANGELOG.md

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.inputs.version || github.ref_name }}
name: "OpenFlows ${{ github.event.inputs.version || github.ref_name }}"
body_path: CHANGELOG.md
files: |
dist/*.tar.gz
dist/*.sha256
draft: false
prerelease: ${{ contains(github.event.inputs.version || github.ref_name, 'rc') || contains(github.event.inputs.version || github.ref_name, 'beta') || contains(github.event.inputs.version || github.ref_name, 'alpha') }}
generate_release_notes: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

# ── Publish to crates.io ─────────────────────────────────────────
publish-crates:
name: Publish to crates.io
runs-on: ubuntu-latest
needs: build
if: ${{ !contains(github.event.inputs.version || github.ref_name, 'rc') && !contains(github.event.inputs.version || github.ref_name, 'beta') }}
steps:
- uses: actions/checkout@v4

- uses: actions-rust-lang/setup-rust-toolchain@v1

- name: Publish crates
run: |
cargo publish -p pocketflow-core --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
cargo publish -p config --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
cargo publish -p agent-client --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
cargo publish -p github --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
cargo publish -p agent-nexus --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
cargo publish -p agent-forge --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
cargo publish -p agent-sentinel --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
cargo publish -p agent-vessel --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
cargo publish -p agent-lore --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
cargo publish -p pair-harness --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
cargo publish -p agentflow-tui --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
cargo publish -p openflows --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
12 changes: 6 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,17 +129,17 @@ This uses local mock servers for the LLM and MCP, and a mock Claude script for F
```

2. **Run Demo**:
```bash
cargo run -p agent-team --bin demo
```
```bash
cargo run -p openflows --bin demo
```

### Option B: Real-World Orchestration
This connects to live GitHub and live LLM providers.

**If your gateway supports Anthropic protocol** (LiteLLM, native Anthropic API):
```bash
# Just run — no proxy needed
cargo run -p agent-team --bin agentflow
cargo run -p openflows --bin agentflow
```

**If your gateway only supports OpenAI protocol** (common for third-party gateways):
Expand All @@ -148,7 +148,7 @@ cargo run -p agent-team --bin agentflow
./scripts/start_proxy.sh

# Terminal 2: Run the orchestration
cargo run -p agent-team --bin agentflow
cargo run -p openflows --bin agentflow
```

The proxy reads `GATEWAY_URL` and `GATEWAY_API_KEY` from `.env` automatically, translates Claude CLI's Anthropic-format requests into OpenAI format, and forwards them to your gateway. See [Local Anthropic Proxy](#local-anthropic-proxy-openai-only-gateways) below for details.
Expand Down Expand Up @@ -278,7 +278,7 @@ If you want to contribute, please follow these steps:
2. **Verify the Environment**: Run all tests (unit and E2E) to ensure the current flow is running fine on your side:
```bash
cargo test --workspace
cargo run -p agent-team --bin demo
cargo run -p openflows --bin demo
```
3. **Get Assigned**: Create a new issue or comment on an existing one to express your interest. I will then add you to the repository as a contributor.
4. **Implement**: Follow the standard agentic coding workflow (Plan -> Implement -> Verify -> Walkthrough).
Expand Down
Loading
Loading