Skip to main content

elizaos_plugin_prose/
lib.rs

1//! elizaos-plugin-prose: OpenProse VM integration for elizaOS
2//!
3//! OpenProse is a programming language for AI sessions that allows
4//! orchestrating multi-agent workflows.
5
6#![allow(missing_docs)]
7
8use async_trait::async_trait;
9use serde_json::Value;
10
11mod error;
12mod types;
13
14pub mod actions;
15pub mod generated;
16pub mod providers;
17pub mod services;
18
19pub use error::{ProseError, Result};
20pub use services::{get_skill_content, set_skill_content, ProseService};
21pub use types::{
22    ProseCompileOptions, ProseCompileResult, ProseConfig, ProseConfigBuilder, ProseRunOptions,
23    ProseRunResult, ProseSkillFile, ProseStateMode,
24};
25
26pub use actions::{get_prose_actions, ProseCompileAction, ProseHelpAction, ProseRunAction};
27pub use providers::{get_prose_providers, ProseProvider};
28
29pub const PLUGIN_NAME: &str = "prose";
30pub const PLUGIN_DESCRIPTION: &str =
31    "OpenProse VM integration - a programming language for AI sessions";
32pub const PLUGIN_VERSION: &str = env!("CARGO_PKG_VERSION");
33
34#[derive(Debug, Clone)]
35pub struct ActionExample {
36    pub user_message: String,
37    pub agent_response: String,
38}
39
40#[derive(Debug, Clone)]
41pub struct ActionResult {
42    pub success: bool,
43    pub text: String,
44    pub data: Option<Value>,
45    pub error: Option<String>,
46}
47
48#[derive(Debug, Clone)]
49pub struct ProviderResult {
50    pub values: Value,
51    pub text: String,
52    pub data: Value,
53}
54
55#[async_trait]
56pub trait Action: Send + Sync {
57    fn name(&self) -> &str;
58    fn similes(&self) -> Vec<&str>;
59    fn description(&self) -> &str;
60    async fn validate(&self, message: &Value, state: &Value) -> bool;
61    async fn handler(
62        &self,
63        message: &Value,
64        state: &Value,
65        service: Option<&mut ProseService>,
66    ) -> ActionResult;
67    fn examples(&self) -> Vec<ActionExample>;
68}
69
70#[async_trait]
71pub trait Provider: Send + Sync {
72    fn name(&self) -> &str;
73    fn description(&self) -> &str;
74    fn position(&self) -> i32;
75    async fn get(
76        &self,
77        message: &Value,
78        state: &Value,
79        service: Option<&ProseService>,
80    ) -> ProviderResult;
81}
82
83pub mod prelude {
84    pub use crate::actions::{ProseCompileAction, ProseHelpAction, ProseRunAction};
85    pub use crate::error::{ProseError, Result};
86    pub use crate::providers::ProseProvider;
87    pub use crate::services::ProseService;
88    pub use crate::types::{
89        ProseCompileResult, ProseConfig, ProseRunResult, ProseSkillFile, ProseStateMode,
90    };
91    pub use crate::{Action, ActionExample, ActionResult, Provider, ProviderResult};
92}