Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
fac11fd
Retire the standalone Lua agent path from sessions
vinniefalco Sep 13, 2026
5f23acd
Delete the legacy UserInputTool and its tests
vinniefalco Sep 13, 2026
2d52f18
Delete the promptforge-agent crate and its facade edge
vinniefalco Sep 13, 2026
e239b4a
Rewrite agent guides for .md directory agents
vinniefalco Sep 13, 2026
dfe102b
Rename promptforge-core-support to shared-promptforge-api
vinniefalco Sep 13, 2026
82034af
Sink model vocabulary into shared-promptforge-api
vinniefalco Sep 13, 2026
fd0e076
Dissolve promptforge-tools into shared-promptforge-api
vinniefalco Sep 13, 2026
a9a6c66
Rename promptforge-core to promptforge-api, drop facade
vinniefalco Sep 13, 2026
2f76e01
Simplify the run API and re-export posture
vinniefalco Sep 13, 2026
b3c8be8
Reimplement gateway progress subscription on GatewayClient
vinniefalco Sep 13, 2026
be1152e
Move agent model client construction into workshop-sessions
vinniefalco Sep 13, 2026
0f28a14
Migrate workshop-sessions and workshop-server edges
vinniefalco Sep 13, 2026
703ebcc
Delete the dead product-integration-tests crate
vinniefalco Sep 13, 2026
c149f21
Rename the xtask crate to build-xtask
vinniefalco Sep 13, 2026
747b8d0
Add product-boundary check enforcing the one-door rule
vinniefalco Sep 13, 2026
99303f7
Record completion of final verification sweep
vinniefalco Sep 13, 2026
65a08df
Close plan: one-door promptforge-api
vinniefalco Sep 13, 2026
b583dfc
Remove the dead subscribe_progress transport
vinniefalco Sep 13, 2026
2e344b1
Correct the AgentsConfig.path discovery documentation
vinniefalco Sep 13, 2026
e25c878
Unlink the private MAX_EVENT_BLOCK from public docs
vinniefalco Sep 13, 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
2 changes: 1 addition & 1 deletion .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ rustflags = ["-C", "target-feature=+crt-static"]

[alias]
workshop = "run -p build-workshop --"
xtask = "run -p xtask --"
xtask = "run -p build-xtask --"
2 changes: 1 addition & 1 deletion .cursor/rules/workshop-architecture.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ alwaysApply: false

## File ceiling

- No file exceeds 500 lines. If an edit would push a file past 500, split first, then edit. `cargo test -p xtask` enforces the ceiling, the tier graph, and lint inheritance over the Rust files in the workshop crates carrying the marker; the Tauri shell (the `workshop` crate) is exempt until the headless agent mode plan.
- No file exceeds 500 lines. If an edit would push a file past 500, split first, then edit. `cargo test -p build-xtask` enforces the ceiling, the tier graph, and lint inheritance over the Rust files in the workshop crates carrying the marker; the Tauri shell (the `workshop` crate) is exempt until the headless agent mode plan.
11 changes: 10 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Multi-crate Rust workspace for the PromptForge pipeline runtime, inference gatew
- Workshop crates are named workshop-* and must not depend on gateway crates
- Gateway crates are named gateway-* and must not depend on promptforge or workshop crates
- PromptForge crates are named promptforge-* and must not depend on gateway or workshop crates
- PromptForge is one door: crates outside the promptforge-* family may depend only on promptforge-api, never on the internal promptforge-* substrate crates
- Shared crates are named shared-*, contain the public API surface across products and downstream crates, and must not depend on any product crates
- Crates named build-* are for building specific outputs
- Dependency rules bind all kinds: normal, dev, build, and target-specific dependencies
Expand All @@ -38,11 +39,19 @@ Multi-crate Rust workspace for the PromptForge pipeline runtime, inference gatew
- Unsafe code stays in its explicitly owned boundary. Every unsafe block documents its safety invariants immediately before the block.
- Comments explain a non-obvious constraint, ordering requirement, or workaround. Every platform or external-bug workaround cites its upstream issue URL in the explanatory comment.

## Verification

- Full suite: `cargo nextest run --locked --workspace --exclude workshop --exclude workshop-server --all-features`, then doctests via `cargo test --workspace --exclude workshop --exclude workshop-server --all-features --doc`; workshop crates separately: `cargo nextest run --locked -p workshop -p workshop-server`.
- Linter: `cargo clippy --workspace --exclude workshop --exclude workshop-server --all-targets --all-features -- -D warnings` (workshop: `cargo clippy -p workshop -p workshop-server --all-targets -- -D warnings`).
- Formatter: `cargo fmt --all --check`.
- Docs: `cargo doc --workspace --no-deps --all-features --exclude workshop --exclude workshop-server` with `RUSTDOCFLAGS="-D warnings"`; user guide: `mdbook build guide`. Rustdoc lints are not covered by clippy; never skip the docs gate.
- Boundary and structural harness: `cargo test -p build-xtask`.

## Structural Rules

- Dependencies flow one way: shell -> features -> services -> vocabulary. Never add a dependency from a lower tier to a higher one. If Cargo rejects a cycle, the design is wrong, not the graph. On the SPA side, lazy-loaded panels never import the boot shell; shared code lives in services/ or base/.
- Every workshop-* crate's lib.rs opens with a //! doc carrying a `## Invariants` marker that lists what the crate may depend on and what it may not. Read it before adding an import. Every SPA concern directory (ui/editor/, ui/agent/, etc.) has the same in its index.ts.
- No file exceeds 500 lines. If an edit would push a file past 500, split first, then edit. `cargo test -p xtask` enforces the tier graph, the lint inheritance, and the ceiling over the Rust files in the workshop crates carrying the marker; the Tauri shell (the `workshop` crate) is exempt until the headless agent mode plan.
- No file exceeds 500 lines. If an edit would push a file past 500, split first, then edit. `cargo test -p build-xtask` enforces the tier graph, the lint inheritance, the ceiling over the Rust files in the workshop crates carrying the marker, and the product-boundary matrix above (including the one-door rule) across every workspace manifest; the Tauri shell (the `workshop` crate) is exempt until the headless agent mode plan.

## SPA and CSS Rules

Expand Down
131 changes: 35 additions & 96 deletions Cargo.lock

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

7 changes: 2 additions & 5 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,8 @@ repository = "https://github.com/cppalliance/promptforge"
[workspace.dependencies]
base64 = "0.22"
bytes = "1"
promptforge = { path = "crates/promptforge", version = "0.3.0" }
promptforge-core = { path = "crates/promptforge-core", version = "0.3.0" }
promptforge-core-support = { path = "crates/promptforge-core-support", version = "0.3.0" }
promptforge-api = { path = "crates/promptforge-api", version = "0.3.0" }
shared-promptforge-api = { path = "crates/shared-promptforge-api", version = "0.3.0" }
gateway = { path = "crates/gateway", version = "0.3.0" }
gateway-config = { path = "crates/gateway-config", version = "0.3.0" }
gateway-config-ui = { path = "crates/gateway-config-ui", version = "0.3.0" }
Expand All @@ -41,7 +40,6 @@ promptforge-store = { path = "crates/promptforge-store", version = "0.3.0" }
promptforge-vfs = { path = "crates/promptforge-vfs", version = "0.3.0" }
promptforge-webfetch = { path = "crates/promptforge-webfetch", version = "0.3.0" }
promptforge-tool-picker = { path = "crates/promptforge-tool-picker", version = "0.3.0" }
promptforge-tools = { path = "crates/promptforge-tools", version = "0.3.0" }
gateway-stt-engine = { path = "crates/gateway-stt-engine", version = "0.3.0" }
gateway-stt-backend-whisper = { path = "crates/gateway-stt-backend-whisper", version = "0.3.0" }
promptforge-web-search = { path = "crates/promptforge-web-search", version = "0.3.0" }
Expand All @@ -56,7 +54,6 @@ workshop-registry = { path = "crates/workshop-registry", version = "0.0.0" }
workshop-sessions = { path = "crates/workshop-sessions", version = "0.0.0" }
workshop-workspace = { path = "crates/workshop-workspace", version = "0.0.0" }
gateway-whisper-ffi = { path = "crates/gateway-whisper-ffi", version = "0.3.0" }
promptforge-agent = { path = "crates/promptforge-agent", version = "0.3.0" }
pulldown-cmark = "0.12"
serde = { version = "1", features = ["derive"] }
serde_yaml_ng = "0.10"
Expand Down
2 changes: 1 addition & 1 deletion crates/xtask/Cargo.toml → crates/build-xtask/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[package]
name = "xtask"
name = "build-xtask"
version = "0.0.0"
publish = false
edition.workspace = true
Expand Down
5 changes: 3 additions & 2 deletions crates/xtask/src/main.rs → crates/build-xtask/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
//! `xtask` - workspace automation for the PromptForge repository.
//! `build-xtask` - workspace automation for the PromptForge repository.
//!
//! ## Invariants
//!
//! - Tier: tooling; depends on no workspace crates. The tidy-style
//! architecture checks run as tests (`cargo test -p xtask`);
//! architecture checks run as tests (`cargo test -p build-xtask`);
//! `cargo xtask tidy` prints the same report on demand.
//! - Every file in this crate stays under 500 lines; split first, then edit.

mod new_crate;
mod product;
mod tidy;

use std::path::Path;
Expand Down
File renamed without changes.
Loading
Loading