Skip to content
Draft
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
4 changes: 4 additions & 0 deletions .osv-scanner.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
[[IgnoredVulns]]
id = "RUSTSEC-2025-0057"
reason = "fxhash is a transitive dep of bm25; no maintained fork exists that preserves the required hash32/hash64 API"

[[IgnoredVulns]]
id = "RUSTSEC-2024-0384"
reason = "instant is a transitive dep of notify-types → notify (dirge's watch dep); unmaintained, no drop-in fork yet — notify maintainers are tracking web-time migration"
97 changes: 92 additions & 5 deletions Cargo.lock

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

3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ no-plugin = [
# The release workflow builds the Windows target with this set.
windows-default = ['no-plugin']
loop = []
vigil = []
vigil = ["dep:notify"]
# Run dirge itself as an MCP server (`dirge mcp`) so another agent (e.g.
# Claude Code) can delegate implementation tasks to dirge and review them.
# Pulls rmcp's server side + stdio transport + the tool macros.
Expand Down Expand Up @@ -343,6 +343,7 @@ lsp-types = { version = "0.97", optional = true }
tree-sitter-elixir = { version = "0.3.5", optional = true }
tree-sitter-sequel = { version = "0.3", optional = true }
tree-sitter-dafny = { version = "0.1", optional = true }
notify = { version = "7", optional = true, default-features = false, features = ["macos_kqueue"] }
rusqlite = { version = "0.40", features = ["bundled"] }
# DAP (Debug Adapter Protocol) — optional feature for driving
# debuggers (lldb-dap, dlv, debugpy, node) to fix crashes instead
Expand Down
25 changes: 25 additions & 0 deletions src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,31 @@ pub struct Cli {
)]
pub loop_run: Option<String>,

#[cfg(feature = "vigil")]
#[arg(
long = "vigil",
help = "Run in vigil heartbeat/wakeup mode (requires vigils in config)"
)]
pub vigil_mode: bool,

#[cfg(feature = "vigil")]
#[arg(long = "vigil-config", help = "Path to a vigil JSON config file")]
pub vigil_config: Option<std::path::PathBuf>,

#[cfg(feature = "vigil")]
#[arg(
long = "vigil-once",
help = "Run vigil headlessly: wait for one observance, run one agent turn, then exit"
)]
pub vigil_once: bool,

#[cfg(feature = "vigil")]
#[arg(
long = "vigil-once-command",
help = "Invoke this registered plugin command (e.g. poll-jenkins) after the vigil bridge is live, before waiting for an observance"
)]
pub vigil_once_command: Option<String>,

#[arg(
long = "auto-confirm",
value_enum,
Expand Down
7 changes: 7 additions & 0 deletions src/extras/dirge_paths.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,13 @@ impl ProjectPaths {
self.dirge_dir().join("skills")
}

/// `.dirge/vigils/` — vigil definition files (one JSON file per vigil).
#[cfg(feature = "vigil")]
#[allow(dead_code)]
pub fn vigils_dir(&self) -> PathBuf {
self.dirge_dir().join("vigils")
}

/// `.dirge/sessions/` — SQLite session database and transcripts.
pub fn sessions_dir(&self) -> PathBuf {
self.dirge_dir().join("sessions")
Expand Down
3 changes: 3 additions & 0 deletions src/extras/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,6 @@ pub mod skill_db;
pub mod skills;
pub mod spec_db;
pub mod vigil_db;

#[cfg(feature = "vigil")]
pub mod vigil;
Loading
Loading