Skip to content
Closed
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
34 changes: 34 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,40 @@ jobs:
- name: Check for unprovenanced readiness claims
run: python3 scripts/check-certification-integrity.py docs

# The Cloud Function is a proxy since ADR-0001. Its suite asserts that every agent request
# reaches the engine and that every failure mode fails closed -- the properties that stop it
# regressing to answering requests by itself. Nothing ran it before.
cloud-function:
name: Cloud Function
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: '20'

# No lockfile is committed and the suite stubs fetch rather than reaching the network,
# so the tests need no install step.
- name: Run Cloud Function tests
run: npm test

# The proxy must never regress to computing answers locally. These greps fail if the
# handlers that echoed tasks.length, or the local state-machine transition table, return.
- name: Assert the function performs no orchestration
run: |
set -e
if grep -nE 'tasks_count: Array\.isArray' functions/index.js; then
echo "::error::functions/index.js is computing a result locally again. See ADR-0001."
exit 1
fi
if grep -nE 'contract\.state_machine\[' functions/index.js; then
echo "::error::The local state-machine transition table is back. See ADR-0001."
exit 1
fi
echo "functions/index.js delegates to the engine."

lint:
name: Lint
runs-on: ubuntu-latest
Expand Down
10 changes: 10 additions & 0 deletions crates/llm-orchestrator-cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

//! LLM Orchestrator CLI.

mod orchestrator_routes;

use anyhow::{Context, Result};
use clap::{Parser, Subcommand};
use colored::Colorize;
Expand Down Expand Up @@ -4667,6 +4669,7 @@ async fn serve_http(host: &str, port: u16) -> Result<()> {
.route("/ready", get(ready_handler))
.route("/execute", axum::routing::post(feu_execute_handler))
.route("/api/v1/events", axum::routing::post(events_handler))
.merge(orchestrator_routes::routes())
.with_state(phase3_state);

// Parse address
Expand All @@ -4688,6 +4691,13 @@ async fn serve_http(host: &str, port: u16) -> Result<()> {
println!(" GET /ready - Readiness check (Ruvector validated)");
println!(" POST /execute - FEU execution endpoint (Core invocation)");
println!(" POST /api/v1/events - Event ingestion (automation-core)");
println!(" POST /v1/orchestrator/workflow - Execute a workflow");
println!(" POST /v1/orchestrator/scheduler - Schedule tasks");
println!(" POST /v1/orchestrator/dependencies - Resolve a dependency graph");
println!(" POST /v1/orchestrator/retry - Evaluate a failure for recovery");
println!(" POST /v1/orchestrator/parallel - Compute parallel execution phases");
println!(" POST /v1/orchestrator/state-machine - Validate and apply a state transition");
println!(" POST /v1/orchestrator/swarm - Coordinate a swarm of workers");

// Start server
let listener = tokio::net::TcpListener::bind(addr).await?;
Expand Down
Loading
Loading