clipmem 0.4.0

macOS clipboard memory backed by SQLite and searchable from agent runtimes
Documentation
use super::*;

#[derive(Debug, Serialize)]
pub(in crate::cli) struct CaptureOnceStoredOutput {
    pub(in crate::cli) store: CaptureStoreResult,
    pub(in crate::cli) snapshot: ClipboardSnapshot,
}

#[derive(Debug, Serialize)]
pub(in crate::cli) struct CaptureOnceSkippedOutput {
    pub(in crate::cli) status: &'static str,
    pub(in crate::cli) reason: CaptureSkipReason,
    pub(in crate::cli) kind: String,
    pub(in crate::cli) total_bytes: usize,
    pub(in crate::cli) frontmost_app_name: Option<String>,
    pub(in crate::cli) frontmost_app_bundle_id: Option<String>,
}

#[derive(Debug, Serialize)]
#[serde(untagged)]
pub(in crate::cli) enum CaptureOnceOutput {
    Stored(CaptureOnceStoredOutput),
    Skipped(CaptureOnceSkippedOutput),
}

#[derive(Debug, Clone, Serialize)]
pub(in crate::cli) struct RestoreOutput {
    pub(in crate::cli) snapshot_id: i64,
    pub(in crate::cli) item_count: usize,
    pub(in crate::cli) representation_count: usize,
    pub(in crate::cli) total_bytes: usize,
}

#[derive(Debug, Clone, Serialize)]
pub(in crate::cli) struct ExportOutput {
    pub(in crate::cli) snapshot_id: i64,
    pub(in crate::cli) item_index: usize,
    pub(in crate::cli) uti: String,
    pub(in crate::cli) byte_count: usize,
    pub(in crate::cli) raw_sha256: String,
    pub(in crate::cli) out: String,
}

#[derive(Debug, Clone, Serialize)]
pub(in crate::cli) struct SettingsView {
    pub(in crate::cli) paused: bool,
    pub(in crate::cli) api_key_filter_enabled: bool,
    pub(in crate::cli) ocr_enabled: bool,
    pub(in crate::cli) retention_seconds: Option<u64>,
    pub(in crate::cli) retention: String,
    pub(in crate::cli) ignored_bundle_ids: Vec<String>,
}

#[derive(Debug, Clone, Serialize)]
pub(in crate::cli) struct SettingsIgnoreListOutput {
    pub(in crate::cli) ignored_bundle_ids: Vec<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub(in crate::cli) struct SearchCursorToken {
    pub(in crate::cli) command: String,
    pub(in crate::cli) query: String,
    pub(in crate::cli) requested_mode: SearchMode,
    pub(in crate::cli) mode_used: SearchMode,
    pub(in crate::cli) filters: RetrievalFilters,
    pub(in crate::cli) last_seen_at: String,
    pub(in crate::cli) snapshot_id: i64,
    pub(in crate::cli) score: Option<f64>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub(in crate::cli) struct RecentCursorToken {
    pub(in crate::cli) command: String,
    pub(in crate::cli) filters: RetrievalFilters,
    pub(in crate::cli) last_seen_at: String,
    pub(in crate::cli) snapshot_id: i64,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub(in crate::cli) struct TimelineCursorToken {
    pub(in crate::cli) command: String,
    pub(in crate::cli) filters: RetrievalFilters,
    pub(in crate::cli) sort: TimelineSort,
    pub(in crate::cli) observed_at: String,
    pub(in crate::cli) event_id: i64,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(in crate::cli) enum RecallCandidateSource {
    Search,
    Recent,
}

pub(in crate::cli) fn capture_skip_reason_label(reason: CaptureSkipReason) -> &'static str {
    reason.as_str()
}

#[derive(Debug, Clone)]
pub(in crate::cli) struct RecallCandidate {
    pub(in crate::cli) hit: SearchHit,
    pub(in crate::cli) source: RecallCandidateSource,
    pub(in crate::cli) normalized_score: f64,
    pub(in crate::cli) sort_score: f64,
    pub(in crate::cli) app_preferred: bool,
}

#[derive(Debug)]
pub(in crate::cli) struct RecallComputation {
    pub(in crate::cli) best: RecallCandidate,
    pub(in crate::cli) alternatives: Vec<RecallCandidate>,
    pub(in crate::cli) why_selected: String,
    pub(in crate::cli) search_mode_used: Option<SearchMode>,
}

pub(in crate::cli) const OPENCLAW_SKILL_NAME: &str = "clipboard-memory";
pub(in crate::cli) const OPENCLAW_SHARED_ROOT: &str = ".openclaw/skills";
pub(in crate::cli) const OPENCLAW_WORKSPACE_ROOT: &str = ".openclaw/workspace";
pub(in crate::cli) const HERMES_SKILL_NAME: &str = "clipboard-memory";
pub(in crate::cli) const HERMES_SKILL_ROOT: &str = ".hermes/skills/productivity";

pub(in crate::cli) const OPENCLAW_SKILL_MD: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/extras/openclaw/clipboard-memory/SKILL.md"
));
pub(in crate::cli) const OPENCLAW_COMMANDS_REF: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/extras/openclaw/clipboard-memory/references/commands.md"
));
pub(in crate::cli) const OPENCLAW_TROUBLESHOOTING_REF: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/extras/openclaw/clipboard-memory/references/troubleshooting.md"
));
pub(in crate::cli) const OPENCLAW_JSON_SCHEMA_REF: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/extras/openclaw/clipboard-memory/references/json-schema.md"
));
pub(in crate::cli) const OPENCLAW_EXAMPLES_REF: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/extras/openclaw/clipboard-memory/references/examples.md"
));
pub(in crate::cli) const OPENCLAW_SETUP_CHECK_REF: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/extras/openclaw/clipboard-memory/references/setup-check.md"
));
pub(in crate::cli) const OPENCLAW_CHECK_SETUP_SH: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/extras/openclaw/clipboard-memory/scripts/check-setup.sh"
));

#[derive(Debug, Clone, Copy)]
pub(in crate::cli) struct PackagedSkillFile {
    pub(in crate::cli) relative_path: &'static str,
    pub(in crate::cli) contents: &'static str,
}

pub(in crate::cli) const HERMES_SKILL_MD: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/extras/hermes/clipboard-memory/SKILL.md"
));
pub(in crate::cli) const HERMES_COMMANDS_REF: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/extras/hermes/clipboard-memory/references/commands.md"
));
pub(in crate::cli) const HERMES_TROUBLESHOOTING_REF: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/extras/hermes/clipboard-memory/references/troubleshooting.md"
));
pub(in crate::cli) const HERMES_JSON_SCHEMA_REF: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/extras/hermes/clipboard-memory/references/json-schema.md"
));
pub(in crate::cli) const HERMES_EXAMPLES_REF: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/extras/hermes/clipboard-memory/references/examples.md"
));
pub(in crate::cli) const HERMES_SETUP_CHECK_REF: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/extras/hermes/clipboard-memory/references/setup-check.md"
));
pub(in crate::cli) const HERMES_CHECK_SETUP_SH: &str = include_str!(concat!(
    env!("CARGO_MANIFEST_DIR"),
    "/extras/hermes/clipboard-memory/scripts/check-setup.sh"
));

#[derive(Debug, Clone)]
pub(in crate::cli) struct OpenClawDoctorReport {
    pub(in crate::cli) target_dir: PathBuf,
    pub(in crate::cli) checks: Vec<OpenClawDoctorCheck>,
}

#[derive(Debug, Clone)]
pub(in crate::cli) struct OpenClawDoctorCheck {
    pub(in crate::cli) status: OpenClawDoctorStatus,
    pub(in crate::cli) label: String,
    pub(in crate::cli) detail: String,
    pub(in crate::cli) next_steps: Vec<String>,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(in crate::cli) enum OpenClawDoctorStatus {
    Ok,
    Warn,
    Fail,
}

#[derive(Debug, Clone)]
pub(in crate::cli) struct HermesDoctorReport {
    pub(in crate::cli) target_dir: PathBuf,
    pub(in crate::cli) checks: Vec<OpenClawDoctorCheck>,
}