@team-agent/installer 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.lock +1 -1
- package/Cargo.toml +1 -1
- package/crates/team-agent/src/cli/emit.rs +37 -2
- package/crates/team-agent/src/cli/mod.rs +2 -0
- package/crates/team-agent/src/cli/named_address.rs +864 -0
- package/crates/team-agent/src/cli/send.rs +104 -0
- package/crates/team-agent/src/cli/tests/leader_watch.rs +1 -0
- package/crates/team-agent/src/cli/tests/mod.rs +1 -0
- package/crates/team-agent/src/cli/tests/named_address.rs +455 -0
- package/crates/team-agent/src/cli/tests/status_send.rs +1 -0
- package/crates/team-agent/src/cli/types.rs +4 -0
- package/crates/team-agent/src/lifecycle/tests/phase_golden.rs +27 -0
- package/package.json +4 -4
package/Cargo.lock
CHANGED
package/Cargo.toml
CHANGED
|
@@ -225,7 +225,7 @@ fn command_help(command: Option<&str>) -> String {
|
|
|
225
225
|
Some("quick-start") => "usage: team-agent quick-start [TEAMDIR] [--workspace WORKSPACE] [--name NAME] [--team-id TEAM|--team TEAM] [--yes] [--no-display] [--json]\n\ndefaults: display_backend=adaptive; set display_backend: none in TEAM.md or pass --no-display to use one worker window per agent.".to_string(),
|
|
226
226
|
Some("start") => "usage: team-agent start [TEAMDIR] [--yes] [--fresh] [--json]".to_string(),
|
|
227
227
|
Some("compile") => "usage: team-agent compile --team TEAM [--out FILE] [--json]".to_string(),
|
|
228
|
-
Some("send") => "usage: team-agent send TARGET MESSAGE... [--workspace WORKSPACE] [--team TEAM] [--targets AGENTS] [--task TASK] [--sender SENDER] [--watch-result] [--requires-ack|--no-ack] [--no-wait] [--timeout SECONDS] [--confirm-human] [--message-id ID] [--json]".to_string(),
|
|
228
|
+
Some("send") => "usage: team-agent send TARGET MESSAGE... [--workspace WORKSPACE] [--team TEAM] [--targets AGENTS] [--to-name NAME] [--pane PANE] [--task TASK] [--sender SENDER] [--watch-result] [--requires-ack|--no-ack] [--no-wait] [--timeout SECONDS] [--confirm-human] [--message-id ID] [--json]\n\nMVP: name-based cross-workspace addressing assumes trusted local caller; no auth gate.".to_string(),
|
|
229
229
|
Some("fallback-send-leader") => "usage: team-agent fallback-send-leader --workspace WORKSPACE --team TEAM --sender AGENT --message-id ID --content TEXT --primary-error ERROR [--task TASK] [--json]\n\nEmergency one-shot fallback only after a leader-bound MCP send transport failure; restart-agent after use.".to_string(),
|
|
230
230
|
Some("fallback-report-result") => "usage: team-agent fallback-report-result --workspace WORKSPACE --team TEAM --agent-id AGENT --task-id TASK --result-json JSON --primary-error ERROR [--json]\n\nEmergency one-shot fallback only after a report_result MCP transport failure; persists the result DB row, then restart-agent after use.".to_string(),
|
|
231
231
|
Some("allow-peer-talk") => "usage: team-agent allow-peer-talk A B [--workspace WORKSPACE] [--json]".to_string(),
|
|
@@ -668,6 +668,7 @@ struct ParsedArgs {
|
|
|
668
668
|
out: Option<PathBuf>,
|
|
669
669
|
auth_mode: Option<String>,
|
|
670
670
|
pane: Option<String>,
|
|
671
|
+
to_name: Option<String>,
|
|
671
672
|
provider: Option<String>,
|
|
672
673
|
message_id: Option<String>,
|
|
673
674
|
content: Option<String>,
|
|
@@ -750,6 +751,7 @@ fn parse_args(args: &[String]) -> ParsedArgs {
|
|
|
750
751
|
"--out" => parsed.out = next_arg(args, &mut i).map(PathBuf::from),
|
|
751
752
|
"--auth-mode" => parsed.auth_mode = next_arg(args, &mut i),
|
|
752
753
|
"--pane" => parsed.pane = next_arg(args, &mut i),
|
|
754
|
+
"--to-name" => parsed.to_name = next_arg(args, &mut i),
|
|
753
755
|
"--provider" => parsed.provider = next_arg(args, &mut i),
|
|
754
756
|
"--message-id" => parsed.message_id = next_arg(args, &mut i),
|
|
755
757
|
"--content" => parsed.content = next_arg(args, &mut i),
|
|
@@ -762,6 +764,9 @@ fn parse_args(args: &[String]) -> ParsedArgs {
|
|
|
762
764
|
other if other.starts_with("--pane=") => {
|
|
763
765
|
parsed.pane = Some(other.trim_start_matches("--pane=").to_string());
|
|
764
766
|
}
|
|
767
|
+
other if other.starts_with("--to-name=") => {
|
|
768
|
+
parsed.to_name = Some(other.trim_start_matches("--to-name=").to_string());
|
|
769
|
+
}
|
|
765
770
|
other if other.starts_with("--provider=") => {
|
|
766
771
|
parsed.provider = Some(other.trim_start_matches("--provider=").to_string());
|
|
767
772
|
}
|
|
@@ -875,7 +880,7 @@ fn resolve_cli_path(cwd: &Path, path: &Path) -> PathBuf {
|
|
|
875
880
|
|
|
876
881
|
fn send_args(args: &[String], cwd: &Path) -> Result<SendArgs, CliError> {
|
|
877
882
|
let parsed = parse_args(args);
|
|
878
|
-
let target = if parsed.targets.is_some() || parsed.pane.is_some() {
|
|
883
|
+
let target = if parsed.targets.is_some() || parsed.pane.is_some() || parsed.to_name.is_some() {
|
|
879
884
|
None
|
|
880
885
|
} else {
|
|
881
886
|
parsed.positionals.first().cloned()
|
|
@@ -903,6 +908,7 @@ fn send_args(args: &[String], cwd: &Path) -> Result<SendArgs, CliError> {
|
|
|
903
908
|
json: parsed.json,
|
|
904
909
|
message_id: parsed.message_id,
|
|
905
910
|
pane: parsed.pane.clone(),
|
|
911
|
+
to_name: parsed.to_name.clone(),
|
|
906
912
|
})
|
|
907
913
|
}
|
|
908
914
|
|
|
@@ -1602,6 +1608,8 @@ mod tests {
|
|
|
1602
1608
|
"--workspace",
|
|
1603
1609
|
"--team",
|
|
1604
1610
|
"--targets",
|
|
1611
|
+
"--to-name",
|
|
1612
|
+
"--pane",
|
|
1605
1613
|
"--watch-result",
|
|
1606
1614
|
"--timeout",
|
|
1607
1615
|
"--json",
|
|
@@ -1781,6 +1789,33 @@ mod tests {
|
|
|
1781
1789
|
let _ = std::fs::remove_dir_all(&cwd);
|
|
1782
1790
|
}
|
|
1783
1791
|
|
|
1792
|
+
#[test]
|
|
1793
|
+
fn send_to_name_positionals_are_message_not_target() {
|
|
1794
|
+
let cwd = tmp_workspace();
|
|
1795
|
+
let args = send_args(&cli_argv(&["--to-name", "team-a/qa", "hello"]), &cwd).unwrap();
|
|
1796
|
+
assert_eq!(args.to_name.as_deref(), Some("team-a/qa"));
|
|
1797
|
+
assert_eq!(args.target, None);
|
|
1798
|
+
assert_eq!(args.targets, None);
|
|
1799
|
+
assert_eq!(args.message, vec!["hello".to_string()]);
|
|
1800
|
+
|
|
1801
|
+
let args = send_args(
|
|
1802
|
+
&cli_argv(&["--to-name=team-a/qa", "multi", "word", "message"]),
|
|
1803
|
+
&cwd,
|
|
1804
|
+
)
|
|
1805
|
+
.unwrap();
|
|
1806
|
+
assert_eq!(args.target, None);
|
|
1807
|
+
assert_eq!(
|
|
1808
|
+
args.message,
|
|
1809
|
+
vec![
|
|
1810
|
+
"multi".to_string(),
|
|
1811
|
+
"word".to_string(),
|
|
1812
|
+
"message".to_string()
|
|
1813
|
+
]
|
|
1814
|
+
);
|
|
1815
|
+
|
|
1816
|
+
let _ = std::fs::remove_dir_all(&cwd);
|
|
1817
|
+
}
|
|
1818
|
+
|
|
1784
1819
|
#[test]
|
|
1785
1820
|
fn send_pane_still_rejects_to_and_empty_message() {
|
|
1786
1821
|
let cwd = tmp_workspace();
|
|
@@ -57,6 +57,7 @@ pub mod diagnose;
|
|
|
57
57
|
pub mod emit;
|
|
58
58
|
pub mod helpers;
|
|
59
59
|
pub mod leader;
|
|
60
|
+
pub mod named_address;
|
|
60
61
|
pub mod profile;
|
|
61
62
|
pub mod send;
|
|
62
63
|
pub mod status;
|
|
@@ -66,6 +67,7 @@ pub use adapters::*;
|
|
|
66
67
|
pub use diagnose::*;
|
|
67
68
|
pub use emit::*;
|
|
68
69
|
pub use leader::*;
|
|
70
|
+
pub use named_address::*;
|
|
69
71
|
pub use profile::*;
|
|
70
72
|
pub use send::*;
|
|
71
73
|
pub use status::*;
|