Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,11 @@ jobs:
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout plit (for e2e scripts)
uses: actions/checkout@v4
with:
sparse-checkout: e2e

- name: Checkout Pipelit (for mock LLM server)
uses: actions/checkout@v4
with:
Expand Down Expand Up @@ -164,13 +169,10 @@ jobs:
sys.exit(1)
"

- name: Test plit auth login/status/logout
- name: API client E2E tests
run: |
./plit auth login --url http://localhost:8000 --username admin --password testpass123
./plit auth status
./plit auth logout
./plit auth status 2>&1 | grep -q "Not logged in"
echo "Auth commands passed"
chmod +x e2e/api-client.sh
PIPELIT_URL=http://localhost:8000 PIPELIT_USER=admin PIPELIT_PASS=testpass123 ./e2e/api-client.sh ./plit

- name: Auth and send chat message
run: |
Expand Down
101 changes: 101 additions & 0 deletions .github/workflows/regenerate-client.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: Regenerate API Client

on:
# Triggered by Pipelit stable release (repository_dispatch from Pipelit repo)
repository_dispatch:
types: [pipelit-release]
# Or manually
workflow_dispatch:
inputs:
pipelit_version:
description: 'Pipelit version tag (e.g. v0.3.9)'
required: true

jobs:
regenerate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Determine version
id: version
run: |
if [ "${{ github.event_name }}" = "repository_dispatch" ]; then
VERSION="${{ github.event.client_payload.version }}"
else
VERSION="${{ github.event.inputs.pipelit_version }}"
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "Pipelit version: $VERSION"

- name: Download OpenAPI spec from release
run: |
gh release download "${{ steps.version.outputs.version }}" \
--repo theuselessai/Pipelit \
--pattern "openapi.json" \
--dir /tmp \
|| { echo "No openapi.json in release, fetching from Docker image..."; \
docker run --rm -d --name pipelit-spec \
-p 18000:8000 \
-e ADMIN_USERNAME=admin \
-e ADMIN_PASSWORD=specgen \
ghcr.io/theuselessai/plit:latest; \
sleep 10; \
curl -sf http://localhost:18000/openapi.json > /tmp/openapi.json; \
docker stop pipelit-spec; }
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy

- name: Generate client
run: |
docker run --rm \
--user "$(id -u):$(id -g)" \
-v /tmp/openapi.json:/spec/openapi.json:ro \
-v ${{ github.workspace }}/pipelit-client:/out \
openapitools/openapi-generator-cli:latest generate \
-i /spec/openapi.json \
-g rust \
-o /out \
--library reqwest \
--additional-properties=packageName=pipelit-client,supportAsync=true

- name: Restore Cargo.toml
run: git checkout pipelit-client/Cargo.toml

- name: Post-generation fixups
run: |
# Replace broken AnyOf types with serde_json::Value
find pipelit-client/src -name '*.rs' -exec \
sed -i 's/Option<Option<Box<models::AnyOfLessThanGreaterThan>>>/Option<serde_json::Value>/g' {} +
# Remove double_option serde attrs on fixed fields
find pipelit-client/src -name '*.rs' -exec \
sed -i 's/, default, with = "::serde_with::rust::double_option"//g' {} +
# Clean generator artifacts
rm -rf pipelit-client/.openapi-generator pipelit-client/.travis.yml \
pipelit-client/git_push.sh pipelit-client/.openapi-generator-ignore

- name: Format and verify
run: |
cargo fmt --manifest-path pipelit-client/Cargo.toml
cargo build --manifest-path pipelit-client/Cargo.toml
cargo clippy --manifest-path pipelit-client/Cargo.toml -- -D warnings || true

- name: Create PR
run: |
BRANCH="chore/regenerate-client-${{ steps.version.outputs.version }}"
git checkout -b "$BRANCH"
git add pipelit-client/
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git commit -m "chore: regenerate pipelit-client from Pipelit ${{ steps.version.outputs.version }}" || exit 0
git push origin "$BRANCH"
gh pr create \
--title "chore: regenerate API client for Pipelit ${{ steps.version.outputs.version }}" \
--body "Auto-generated from Pipelit OpenAPI spec ${{ steps.version.outputs.version }}. Triggered by: ${{ github.event_name }}" \
--base main
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
/target
pipelit-client/target
.sisyphus/
8 changes: 8 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@ This file provides guidance to Claude Code (claude.ai/code) when working with th

**plit** is the CLI and Docker image for the Pipelit ecosystem. It installs two binaries: `plit` (CLI) and `plit-gw` (gateway server). The Docker image bundles everything: plit, plit-gw, Pipelit backend, DragonflyDB, and a React frontend.

## Roadmap & Versioning

**See `ROADMAP.md`** for the full project milestone plan.

Milestones use PROJECT version (from `VERSION` file), not component versions. The GitHub project board at https://github.com/orgs/theuselessai/projects/1 tracks project-level milestones. Each component repo (plit, plit-gw, Pipelit) has matching milestones named `vX.Y.0`.

Current: `PROJECT=0.4.3` | Next: **v0.5.0** (Workflow Creation & API Client)

## Tools
- `gh` CLI is configured and working for GitHub operations (PRs, checks, merges, etc.)

Expand Down
24 changes: 24 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ reqwest = { version = "0.12", default-features = false, features = ["json", "rus
tokio-tungstenite = { version = "0.26", features = ["rustls-tls-webpki-roots"] }
futures-util = "0.3"

# Pipelit API client (auto-generated)
pipelit-client = { path = "pipelit-client" }

# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"
Expand Down
104 changes: 104 additions & 0 deletions ROADMAP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# Roadmap

Milestones use **PROJECT** version from `VERSION` file. Each component (plit, plit-gw, plit-tui, Pipelit) has its own semver — the PROJECT version is the combined release.

Current: `PROJECT=0.4.3` | Next: `v0.5.0`

---

## v0.5.0 — Workflow Creation & API Client

Conversation-first workflow builder. Non-technical users describe what they want, agents build the workflow.

### Pipelit (backend)

| Issue | Title | Priority |
|-------|-------|----------|
| [#167](https://github.com/theuselessai/Pipelit/issues/167) | OpenAPI spec versioning + stability contract | P0 |
| [#163](https://github.com/theuselessai/Pipelit/issues/163) | Workflow DSL format spec + server-side parser | P0 |
| [#127](https://github.com/theuselessai/Pipelit/issues/127) | Skill to Workflow — distill skills into deterministic workflows | P1 |
| [#164](https://github.com/theuselessai/Pipelit/issues/164) | Scribe agent — requirements gathering via conversation | P1 |
| [#165](https://github.com/theuselessai/Pipelit/issues/165) | Architect + Gherkin agents — parallel topology and scenario generation | P1 |
| [#166](https://github.com/theuselessai/Pipelit/issues/166) | Builder agent — create workflows via API from verified topology | P1 |

### plit (CLI)

| Issue | Title | Priority |
|-------|-------|----------|
| [#17](https://github.com/theuselessai/plit/issues/17) | Auto-generate Rust API client crate from OpenAPI spec | P0 |
| [#18](https://github.com/theuselessai/plit/issues/18) | `plit api` subcommands — CLI wrapper over generated client | P0 |
| [#20](https://github.com/theuselessai/plit/issues/20) | DSL parser in Tela (JSX) for graph-boxes renderer | P1 |
| [#19](https://github.com/theuselessai/plit/issues/19) | Workflow graph visualization in plit-tui | P1 |

### plit-gw (gateway)

No work this milestone.

### Critical path

```
Pipelit #167 (OpenAPI versioning)
→ plit #17 (generate Rust client)
→ plit #18 (plit api subcommands)

Pipelit #163 (DSL spec)
→ plit #20 (JSX DSL parser)
→ plit #19 (graph TUI)
→ Pipelit #164 (Scribe)
→ Pipelit #165 (Architect + Gherkin)
→ Pipelit #166 (Builder) ← also needs plit #18
```

### Target VERSION on ship

```
PROJECT=0.5.0
PLIT=0.5.0
PLIT_GW=0.3.2 (unchanged)
PLIT_TUI=0.2.0
PIPELIT=0.4.0
```

---

## v0.6.0 — Protocol Adapters, Memory & Safety

### Pipelit

| Issue | Title |
|-------|-------|
| [#128](https://github.com/theuselessai/Pipelit/issues/128) | Human Confirmation — interrupt_before for manual approval |
| [#129](https://github.com/theuselessai/Pipelit/issues/129) | Meta Agent — observer and manager for agent behavior |
| [#131](https://github.com/theuselessai/Pipelit/issues/131) | Memory Tables — foundation for self-evolving agent |
| [#132](https://github.com/theuselessai/Pipelit/issues/132) | Memory Nodes — read/write agent knowledge |
| [#133](https://github.com/theuselessai/Pipelit/issues/133) | TOTP Verification Node |

### plit-gw

| Issue | Title |
|-------|-------|
| [#9](https://github.com/theuselessai/plit-gw/issues/9) | Discord Adapter |
| [#10](https://github.com/theuselessai/plit-gw/issues/10) | Slack Adapter |
| [#11](https://github.com/theuselessai/plit-gw/issues/11) | Email Adapter |
| [#60](https://github.com/theuselessai/plit-gw/issues/60) | Create theuselessai/registry |
| [#61](https://github.com/theuselessai/plit-gw/issues/61) | Create theuselessai/adapters |
| [#64](https://github.com/theuselessai/plit-gw/issues/64) | plit skills/workflows install |
| [#65](https://github.com/theuselessai/plit-gw/issues/65) | plit adapters install |
| [#66](https://github.com/theuselessai/plit-gw/issues/66) | Skills repo cleanup |
| [#34](https://github.com/theuselessai/plit-gw/issues/34) | Full OpenCode server mode integration |
| [#62](https://github.com/theuselessai/plit-gw/issues/62) | Create theuselessai/workflows — workflow template repository |

---

## Shipped

### v0.4.x (current)

Alpha + Beta: core security, sandboxed execution, multi-model gateway, Docker deployment, user management, RBAC, E2E CI.

### Version history

| PROJECT | PLIT | PLIT_GW | PLIT_TUI | PIPELIT | Date |
|---------|------|---------|----------|---------|------|
| 0.4.3 | 0.4.3 | 0.3.2 | 0.1.2 | 0.3.9 | 2026-03-16 |
| 0.4.0 | 0.4.0 | 0.3.0 | 0.1.0 | 0.3.9 | 2026-03-14 |
Loading
Loading