Skip to content

os-tack/fcp-core-rust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fcp-core-rust

Shared Rust framework for building FCP (File Context Protocol) servers.

What It Provides

fcp-core-rust extracts the common infrastructure that every FCP server needs — tokenizer, operation parser, verb registry, event log, session lifecycle, and response formatter — into a standalone library crate. FCP servers like fcp-rust and fcp-regex depend on it.

This is the Rust equivalent of the fcp-core TypeScript/Python package.

Modules

Module Purpose
tokenizer Quote-aware tokenizer — splits FCP operation strings on whitespace, handles quoted strings and escape sequences
parsed_op Operation parser — classifies tokens into verb, positionals, key:value params, and @selectors
verb_registry Verb specification registry with reference card generation grouped by category
event_log Cursor-based event log with undo/redo and named checkpoints
session Session lifecycle dispatcher (new/open/save/checkpoint/undo/redo) with domain hooks trait
formatter Response prefix formatting (+ created, * modified, - removed, = result, ! error) and Levenshtein-based suggestions

Usage

Add to your Cargo.toml:

[dependencies]
fcp-core = { git = "https://github.com/os-tack/fcp-core-rust" }

Parsing Operations

use fcp_core::parsed_op::parse_op;

let op = parse_op("define digits any:digit+").unwrap();
assert_eq!(op.verb, "define");
assert_eq!(op.positionals, vec!["digits"]);
assert_eq!(op.params["any"], "digit+");

Event Log (Undo/Redo)

use fcp_core::event_log::EventLog;

let mut log = EventLog::new();
log.append("created widget");
log.append("renamed widget");
log.checkpoint("v1");
log.append("deleted widget");

let undone = log.undo(1);           // undoes "deleted widget"
let undone = log.undo_to("v1");     // undoes back to checkpoint

Verb Registry

use fcp_core::verb_registry::{VerbRegistry, VerbSpec};

let mut reg = VerbRegistry::new();
reg.register(VerbSpec {
    name: "define".into(),
    syntax: "define NAME ELEMENT [ELEMENT...]".into(),
    category: "fragments".into(),
});
let card = reg.generate_reference_card(None);

Development

cargo test          # Run all tests (92)
cargo clippy        # Run lints

No external dependencies — pure Rust standard library only.

License

MIT

About

Shared Rust framework for building FCP servers

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages