Skip to content

Commit 3433b84

Browse files
Terraphim CIclaude
andcommitted
feat(symphony): add Symphony orchestration crate for automated issue-to-agent dispatch
Implements the full Symphony daemon that polls issue trackers (Gitea REST, Linear GraphQL), creates isolated per-issue workspaces with lifecycle hooks, and dispatches coding agent sessions via the Codex app-server JSON-RPC protocol. Includes exponential retry backoff, stall detection, reconciliation, WORKFLOW.md hot-reload, and an optional HTTP dashboard. The crate is excluded from the workspace and builds independently (cd crates/terraphim_symphony && cargo build). Also fixes clippy manual_contains warnings in terraphim_agent commands.rs and removes timeout calls from pre-commit hook (timeout is unreliable on macOS). Co-Authored-By: Terraphim AI <noreply@anthropic.com>
1 parent d623c66 commit 3433b84

31 files changed

Lines changed: 9778 additions & 18 deletions

Cargo.lock

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ exclude = [
2121
"crates/haystack_discourse",
2222
# Superseded by terraphim_agent
2323
"crates/terraphim_repl",
24+
# Symphony orchestrator (build separately: cd crates/terraphim_symphony && cargo build)
25+
"crates/terraphim_symphony",
2426
]
2527
default-members = ["terraphim_server"]
2628

crates/terraphim_agent/src/repl/commands.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1329,7 +1329,7 @@ impl FromStr for ReplCommand {
13291329
return Err(anyhow!("Sessions files requires a session ID"));
13301330
}
13311331
let session_id = parts[2].to_string();
1332-
let json = parts.iter().any(|&p| p == "--json");
1332+
let json = parts.contains(&"--json");
13331333
Ok(ReplCommand::Sessions {
13341334
subcommand: SessionsSubcommand::Files { session_id, json },
13351335
})
@@ -1339,7 +1339,7 @@ impl FromStr for ReplCommand {
13391339
return Err(anyhow!("Sessions by-file requires a file path"));
13401340
}
13411341
let file_path = parts[2].to_string();
1342-
let json = parts.iter().any(|&p| p == "--json");
1342+
let json = parts.contains(&"--json");
13431343
Ok(ReplCommand::Sessions {
13441344
subcommand: SessionsSubcommand::ByFile { file_path, json },
13451345
})

0 commit comments

Comments
 (0)