@team-agent/installer 0.5.65 → 0.5.68

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.
Files changed (208) hide show
  1. package/Cargo.lock +8 -1
  2. package/Cargo.toml +1 -1
  3. package/crates/team-agent/Cargo.toml +6 -0
  4. package/crates/team-agent/src/cli/adapters.rs +6 -1
  5. package/crates/team-agent/src/cli/diagnose.rs +82 -0
  6. package/crates/team-agent/src/cli/emit.rs +3 -3
  7. package/crates/team-agent/src/cli/grok_slot.rs +299 -0
  8. package/crates/team-agent/src/cli/leader.rs +21 -7
  9. package/crates/team-agent/src/cli/leaders.rs +125 -1
  10. package/crates/team-agent/src/cli/mod.rs +20 -0
  11. package/crates/team-agent/src/cli/send/presentation.rs +7 -1
  12. package/crates/team-agent/src/cli/spec.rs +2 -0
  13. package/crates/team-agent/src/cli/status_port/compact.rs +28 -0
  14. package/crates/team-agent/src/cli/status_port/snapshot.rs +25 -1
  15. package/crates/team-agent/src/cli/tests/base.rs +26 -3
  16. package/crates/team-agent/src/cli/tests/compile.rs +1 -1
  17. package/crates/team-agent/src/cli/tests/missing_subcommands.rs +129 -19
  18. package/crates/team-agent/src/cli/tests/mod.rs +2 -2
  19. package/crates/team-agent/src/cli/tests/run_delegation.rs +1 -1
  20. package/crates/team-agent/src/cli/tests/shutdown_kill_plan.rs +387 -6
  21. package/crates/team-agent/src/cli/tests/status_send.rs +79 -10
  22. package/crates/team-agent/src/cli/tests/verb_validate.rs +1 -1
  23. package/crates/team-agent/src/communication_mode/mod.rs +6 -4
  24. package/crates/team-agent/src/compiler/tests.rs +23 -20
  25. package/crates/team-agent/src/compiler.rs +84 -5
  26. package/crates/team-agent/src/conpty/backend.rs +16 -0
  27. package/crates/team-agent/src/coordinator/backoff.rs +55 -0
  28. package/crates/team-agent/src/coordinator/conpty_shim.rs +82 -0
  29. package/crates/team-agent/src/coordinator/health.rs +173 -0
  30. package/crates/team-agent/src/coordinator/mod.rs +31 -0
  31. package/crates/team-agent/src/coordinator/orphan.rs +31 -0
  32. package/crates/team-agent/src/coordinator/runtime_detectors.rs +30 -0
  33. package/crates/team-agent/src/coordinator/runtime_observation.rs +25 -0
  34. package/crates/team-agent/src/coordinator/steps/abnormal.rs +59 -0
  35. package/crates/team-agent/src/coordinator/steps/delivery.rs +10 -0
  36. package/crates/team-agent/src/coordinator/steps/health_sync.rs +10 -0
  37. package/crates/team-agent/src/coordinator/steps/mod.rs +22 -0
  38. package/crates/team-agent/src/coordinator/steps/persist.rs +10 -0
  39. package/crates/team-agent/src/coordinator/steps/runtime_prompts.rs +10 -0
  40. package/crates/team-agent/src/coordinator/steps/session_gate.rs +10 -0
  41. package/crates/team-agent/src/coordinator/tick.rs +133 -22
  42. package/crates/team-agent/src/coordinator/types.rs +49 -0
  43. package/crates/team-agent/src/db/message_store.rs +39 -5
  44. package/crates/team-agent/src/layout/worker_env.rs +20 -3
  45. package/crates/team-agent/src/layout/worker_window_helpers.rs +2 -0
  46. package/crates/team-agent/src/leader/provider_attribution.rs +53 -0
  47. package/crates/team-agent/src/leader/registry.rs +65 -0
  48. package/crates/team-agent/src/leader/start.rs +1080 -58
  49. package/crates/team-agent/src/leader/tests/team_in_team_state_scope_red.rs +1 -1
  50. package/crates/team-agent/src/lifecycle/display.rs +56 -0
  51. package/crates/team-agent/src/lifecycle/helpers.rs +57 -0
  52. package/crates/team-agent/src/lifecycle/launch/add_agent.rs +332 -14
  53. package/crates/team-agent/src/lifecycle/launch/add_agent_state.rs +69 -2
  54. package/crates/team-agent/src/lifecycle/launch/agent_state.rs +196 -2
  55. package/crates/team-agent/src/lifecycle/launch/clone_agent.rs +101 -11
  56. package/crates/team-agent/src/lifecycle/launch/cursor_create_chat.rs +229 -0
  57. package/crates/team-agent/src/lifecycle/launch/cursor_mcp.rs +332 -0
  58. package/crates/team-agent/src/lifecycle/launch/fork_agent.rs +204 -457
  59. package/crates/team-agent/src/lifecycle/launch/fork_entry.rs +24 -0
  60. package/crates/team-agent/src/lifecycle/launch/grok_per_seat.rs +260 -0
  61. package/crates/team-agent/src/lifecycle/launch/identity.rs +146 -0
  62. package/crates/team-agent/src/lifecycle/launch/layout.rs +60 -0
  63. package/crates/team-agent/src/lifecycle/launch/leader_context.rs +112 -0
  64. package/crates/team-agent/src/lifecycle/launch/mcp_config.rs +530 -0
  65. package/crates/team-agent/src/lifecycle/launch/ownership.rs +40 -0
  66. package/crates/team-agent/src/lifecycle/launch/plan.rs +31 -0
  67. package/crates/team-agent/src/lifecycle/launch/quick_start.rs +66 -0
  68. package/crates/team-agent/src/lifecycle/launch/quick_start_transport.rs +78 -0
  69. package/crates/team-agent/src/lifecycle/launch/readiness.rs +85 -38
  70. package/crates/team-agent/src/lifecycle/launch/role_source.rs +44 -44
  71. package/crates/team-agent/src/lifecycle/launch/spawn.rs +101 -4
  72. package/crates/team-agent/src/lifecycle/launch/spec_state.rs +244 -48
  73. package/crates/team-agent/src/lifecycle/launch/state_projection.rs +109 -2
  74. package/crates/team-agent/src/lifecycle/launch/worker_env.rs +214 -1
  75. package/crates/team-agent/src/lifecycle/launch.rs +209 -43
  76. package/crates/team-agent/src/lifecycle/lock.rs +42 -1
  77. package/crates/team-agent/src/lifecycle/mod.rs +11 -0
  78. package/crates/team-agent/src/lifecycle/pane_input_lock.rs +161 -0
  79. package/crates/team-agent/src/lifecycle/profile_launch.rs +98 -0
  80. package/crates/team-agent/src/lifecycle/profile_smoke.rs +51 -1
  81. package/crates/team-agent/src/lifecycle/restart/agent.rs +213 -3
  82. package/crates/team-agent/src/lifecycle/restart/common.rs +373 -18
  83. package/crates/team-agent/src/lifecycle/restart/orchestrator.rs +27 -0
  84. package/crates/team-agent/src/lifecycle/restart/preflight.rs +25 -0
  85. package/crates/team-agent/src/lifecycle/restart/rebuild.rs +165 -15
  86. package/crates/team-agent/src/lifecycle/restart/remove.rs +196 -5
  87. package/crates/team-agent/src/lifecycle/restart/selection.rs +72 -0
  88. package/crates/team-agent/src/lifecycle/restart/team_state.rs +22 -0
  89. package/crates/team-agent/src/lifecycle/restart.rs +29 -0
  90. package/crates/team-agent/src/lifecycle/tests/acceptance_b_batch_red.rs +1 -1
  91. package/crates/team-agent/src/lifecycle/tests/agent_ops.rs +3 -4
  92. package/crates/team-agent/src/lifecycle/tests/behavioral_diff_264_red.rs +1 -1
  93. package/crates/team-agent/src/lifecycle/tests/claude_compatible_config_red.rs +2 -2
  94. package/crates/team-agent/src/lifecycle/tests/claude_profile_launch_red.rs +4 -4
  95. package/crates/team-agent/src/lifecycle/tests/clone_agent_preserves_source_tools.rs +309 -0
  96. package/crates/team-agent/src/lifecycle/tests/clone_fork_copilot_perms_red.rs +159 -174
  97. package/crates/team-agent/src/lifecycle/tests/communication_mode_runtime_contract_red.rs +2 -2
  98. package/crates/team-agent/src/lifecycle/tests/copilot_provider_red.rs +15 -13
  99. package/crates/team-agent/src/lifecycle/tests/core.rs +4 -18
  100. package/crates/team-agent/src/lifecycle/tests/core_034_real_red.rs +1 -1
  101. package/crates/team-agent/src/lifecycle/tests/cursor_mcp_overlay.rs +287 -0
  102. package/crates/team-agent/src/lifecycle/tests/cursor_require_explicit_model_red.rs +229 -0
  103. package/crates/team-agent/src/lifecycle/tests/cursor_restart_resume_red.rs +353 -0
  104. package/crates/team-agent/src/lifecycle/tests/display_adaptive_red.rs +1 -1
  105. package/crates/team-agent/src/lifecycle/tests/f032_startup_prompt_best_effort_red.rs +1 -1
  106. package/crates/team-agent/src/lifecycle/tests/g1_silent_faces.rs +784 -0
  107. package/crates/team-agent/src/lifecycle/tests/gate_fixtures.rs +562 -0
  108. package/crates/team-agent/src/lifecycle/tests/grok_effort_argv_red.rs +239 -0
  109. package/crates/team-agent/src/lifecycle/tests/grok_mcp_overlay_red.rs +498 -0
  110. package/crates/team-agent/src/lifecycle/tests/grok_require_explicit_model_red.rs +250 -0
  111. package/crates/team-agent/src/lifecycle/tests/grok_restart_resume_red.rs +293 -0
  112. package/crates/team-agent/src/lifecycle/tests/harvest2_a_batch_red.rs +3 -0
  113. package/crates/team-agent/src/lifecycle/tests/host_cotenant_death_p0_contract.rs +3 -3
  114. package/crates/team-agent/src/lifecycle/tests/lane_ops.rs +65 -40
  115. package/crates/team-agent/src/lifecycle/tests/launch_spawn.rs +20 -32
  116. package/crates/team-agent/src/lifecycle/tests/lifecycle_rollback_red.rs +17 -9
  117. package/crates/team-agent/src/lifecycle/tests/mcp_tool_name_format_red.rs +69 -0
  118. package/crates/team-agent/src/lifecycle/tests/phase_b_contracts.rs +24 -23
  119. package/crates/team-agent/src/lifecycle/tests/phase_golden.rs +98 -62
  120. package/crates/team-agent/src/lifecycle/tests/quick_start_worker_readiness_red.rs +2 -2
  121. package/crates/team-agent/src/lifecycle/tests/restart_build_before_destroy_0540_contract.rs +1 -1
  122. package/crates/team-agent/src/lifecycle/tests/restart_liveness_red.rs +1 -1
  123. package/crates/team-agent/src/lifecycle/tests/restart_rebind_hotfix_252_red.rs +3 -1
  124. package/crates/team-agent/src/lifecycle/tests/restart_session_capture_red.rs +2 -2
  125. package/crates/team-agent/src/lifecycle/tests/resume_recover_red.rs +1 -1
  126. package/crates/team-agent/src/lifecycle/tests/stale_team_saveconflict_contract.rs +1 -1
  127. package/crates/team-agent/src/lifecycle/tests/startup_latency_contract.rs +41 -8
  128. package/crates/team-agent/src/lifecycle/tests/status_credential_redaction_contract.rs +3 -3
  129. package/crates/team-agent/src/lifecycle/tests/subprep_codex_trust_roundtrip_red.rs +1 -1
  130. package/crates/team-agent/src/lifecycle/tests/swallow_batch4_semantics_red.rs +1 -1
  131. package/crates/team-agent/src/lifecycle/tests/team_in_team_identity_scope_red.rs +1 -1
  132. package/crates/team-agent/src/lifecycle/tests/team_in_team_sibling_quick_start_red.rs +1 -1
  133. package/crates/team-agent/src/lifecycle/tests/team_in_team_state_scope_red.rs +1 -1
  134. package/crates/team-agent/src/lifecycle/tests/team_key_retirement_txn_red.rs +1 -1
  135. package/crates/team-agent/src/lifecycle/tests/test_isolation_escape_contract.rs +60 -2
  136. package/crates/team-agent/src/lifecycle/tests/upgrade_compat_0211_red.rs +1 -1
  137. package/crates/team-agent/src/lifecycle/tests/verify_rs031_window_consistency_red.rs +2 -2
  138. package/crates/team-agent/src/lifecycle/tests/worker_spawn_env_red.rs +69 -26
  139. package/crates/team-agent/src/lifecycle/tests.rs +23 -15
  140. package/crates/team-agent/src/lifecycle/types.rs +61 -2
  141. package/crates/team-agent/src/lifecycle/worker_command_context.rs +200 -33
  142. package/crates/team-agent/src/mcp_server/tests/scoped.rs +100 -1
  143. package/crates/team-agent/src/mcp_server/tests.rs +196 -2
  144. package/crates/team-agent/src/messaging/delivery.rs +405 -40
  145. package/crates/team-agent/src/messaging/helpers.rs +2 -0
  146. package/crates/team-agent/src/messaging/leader_receiver.rs +53 -1
  147. package/crates/team-agent/src/messaging/results.rs +4 -0
  148. package/crates/team-agent/src/messaging/send.rs +34 -0
  149. package/crates/team-agent/src/messaging/tests/dup_inject.rs +406 -0
  150. package/crates/team-agent/src/messaging/tests/e23.rs +9 -0
  151. package/crates/team-agent/src/messaging/tests/leader_inject_acceptance.rs +66 -0
  152. package/crates/team-agent/src/messaging/tests/main_preserved.rs +1 -1
  153. package/crates/team-agent/src/messaging/tests/mod.rs +1 -0
  154. package/crates/team-agent/src/messaging/types.rs +4 -1
  155. package/crates/team-agent/src/model/enums.rs +14 -5
  156. package/crates/team-agent/src/model/permissions.rs +3 -0
  157. package/crates/team-agent/src/model/spec.rs +129 -6
  158. package/crates/team-agent/src/model/testdata/spec_invalid_a.yaml +3 -1
  159. package/crates/team-agent/src/model/testdata/team.spec.golden.yaml +3 -1
  160. package/crates/team-agent/src/model/testdata/team.spec.yaml +3 -1
  161. package/crates/team-agent/src/os_probe.rs +73 -2
  162. package/crates/team-agent/src/provider/adapter.rs +231 -4
  163. package/crates/team-agent/src/provider/adapters/claude.rs +5 -2
  164. package/crates/team-agent/src/provider/adapters/codex.rs +5 -2
  165. package/crates/team-agent/src/provider/adapters/copilot.rs +5 -2
  166. package/crates/team-agent/src/provider/adapters/cursor_agent.rs +86 -0
  167. package/crates/team-agent/src/provider/adapters/grok.rs +157 -0
  168. package/crates/team-agent/src/provider/adapters/mod.rs +2 -0
  169. package/crates/team-agent/src/provider/bypass_flags.rs +124 -0
  170. package/crates/team-agent/src/provider/classify.rs +4 -2
  171. package/crates/team-agent/src/provider/faults.rs +2 -1
  172. package/crates/team-agent/src/provider/mod.rs +13 -0
  173. package/crates/team-agent/src/provider/session/capture.rs +158 -20
  174. package/crates/team-agent/src/provider/session/context_fork/claude.rs +38 -1
  175. package/crates/team-agent/src/provider/session/context_fork/codex.rs +72 -1
  176. package/crates/team-agent/src/provider/session/context_fork/outcome.rs +57 -1
  177. package/crates/team-agent/src/provider/session/context_fork.rs +77 -3
  178. package/crates/team-agent/src/provider/session/mod.rs +18 -0
  179. package/crates/team-agent/src/provider/session/resume.rs +57 -0
  180. package/crates/team-agent/src/provider/session_scan/claude.rs +125 -1
  181. package/crates/team-agent/src/provider/session_scan/codex.rs +94 -1
  182. package/crates/team-agent/src/provider/session_scan/common.rs +204 -2
  183. package/crates/team-agent/src/provider/session_scan/copilot.rs +33 -1
  184. package/crates/team-agent/src/provider/session_scan/cursor.rs +538 -0
  185. package/crates/team-agent/src/provider/session_scan/grok.rs +288 -0
  186. package/crates/team-agent/src/provider/session_scan.rs +8 -0
  187. package/crates/team-agent/src/provider/submit_now.rs +94 -0
  188. package/crates/team-agent/src/provider/tests/adapter.rs +304 -0
  189. package/crates/team-agent/src/provider/types.rs +4 -2
  190. package/crates/team-agent/src/provider/wire.rs +23 -1
  191. package/crates/team-agent/src/state/persist.rs +301 -8
  192. package/crates/team-agent/src/state/repository.rs +5 -0
  193. package/crates/team-agent/src/tmux_backend/tests.rs +1737 -42
  194. package/crates/team-agent/src/tmux_backend.rs +1083 -75
  195. package/crates/team-agent/src/transport/test_support.rs +20 -0
  196. package/crates/team-agent/src/transport/tests/wire.rs +28 -2
  197. package/crates/team-agent/src/transport.rs +265 -1
  198. package/npm/install.mjs +129 -73
  199. package/package.json +4 -4
  200. package/skills/team-agent/SKILL.md +33 -238
  201. package/skills/team-agent/command-coverage.json +31 -0
  202. package/crates/team-agent/src/lifecycle/launch/approval.rs +0 -134
  203. package/crates/team-agent/src/lifecycle/launch/fork_agent/completion.rs +0 -59
  204. package/crates/team-agent/src/lifecycle/launch/fork_finalize.rs +0 -483
  205. package/crates/team-agent/src/lifecycle/launch/fork_pending.rs +0 -109
  206. package/crates/team-agent/src/lifecycle/launch/fork_state.rs +0 -447
  207. package/crates/team-agent/src/lifecycle/tests/codex_mcp_approval_inheritance_red.rs +0 -1187
  208. package/crates/team-agent/src/lifecycle/tests/worker_dangerous_bypass_argv_red.rs +0 -327
@@ -1,5 +1,22 @@
1
1
  {
2
2
  "schema_version": "team-agent-skill-command-coverage-v3",
3
+ "authority": {
4
+ "kind": "normative_handbook_plus_live_help",
5
+ "handbook": {
6
+ "path": "docs/reference/team-agent-operator.md",
7
+ "start_marker": "<!-- command-coverage:normative-start -->",
8
+ "end_marker": "<!-- command-coverage:normative-end -->"
9
+ },
10
+ "live_help": {
11
+ "argv": ["team-agent", "--help"],
12
+ "source": "exact_test_binary",
13
+ "root_command_policy": "canonical_handbook_commands_may_use_compatibility_forms"
14
+ },
15
+ "compact_skill_smoke": {
16
+ "path": "skills/team-agent/SKILL.md",
17
+ "policy": "quick_start_and_send_are_subset_only"
18
+ }
19
+ },
3
20
  "commands": [
4
21
  {
5
22
  "command": "team-agent add-agent <agent> --role-file <file>",
@@ -312,6 +329,20 @@
312
329
  "owner": "runtime-owner:messaging",
313
330
  "plan": "Execute the exact argv in an isolated coder fixture and bind assertions to blocked-before-watch or the same-message result closure."
314
331
  },
332
+ {
333
+ "command": "team-agent send TO MESSAGE",
334
+ "bucket": "declared_gap",
335
+ "covered": false,
336
+ "owner": "runtime-owner:messaging",
337
+ "plan": "Execute the compact-skill positional send smoke with representative target and message tokens, then bind delivery truth."
338
+ },
339
+ {
340
+ "command": "team-agent send reviewer \"...\"",
341
+ "bucket": "declared_gap",
342
+ "covered": false,
343
+ "owner": "runtime-owner:messaging",
344
+ "plan": "Execute the compact-skill reviewer send smoke and bind recipient and delivery fields."
345
+ },
315
346
  {
316
347
  "command": "team-agent send reviewer \"Review this change\"",
317
348
  "bucket": "declared_gap",
@@ -1,134 +0,0 @@
1
- use std::path::Path;
2
-
3
- use crate::lifecycle::{DangerousApproval, DangerousApprovalSource, LifecycleError};
4
-
5
- /// `detect_inherited_dangerous_permissions`(`launch/config.py`):扫进程祖先链找
6
- /// `--dangerously-*` flag,产出危险审批继承态。launch 在 inherited=false 且无 --yes 时拒。
7
- pub fn detect_dangerous_approval() -> Result<DangerousApproval, LifecycleError> {
8
- if let Ok(raw) = std::env::var("TEAM_AGENT_TEST_PROCESS_ANCESTRY_ARGV_JSON") {
9
- let argv_tokens = serde_json::from_str::<Vec<String>>(&raw).map_err(|e| {
10
- LifecycleError::StatePersist(format!("invalid test ancestry argv: {e}"))
11
- })?;
12
- return Ok(detect_dangerous_approval_in_argv(&argv_tokens)
13
- .unwrap_or_else(disabled_dangerous_approval));
14
- }
15
- for argv_tokens in process_ancestry_argv(std::process::id()) {
16
- if let Some(detected) = detect_dangerous_approval_in_argv(&argv_tokens) {
17
- return Ok(detected);
18
- }
19
- }
20
- Ok(disabled_dangerous_approval())
21
- }
22
-
23
- pub(super) fn disabled_dangerous_approval() -> DangerousApproval {
24
- DangerousApproval {
25
- enabled: false,
26
- source: DangerousApprovalSource::Disabled,
27
- inherited: false,
28
- provider: None,
29
- flag: None,
30
- worker_capability_above_leader: false,
31
- ancestry_binary_name: None,
32
- unexpected_binary: false,
33
- }
34
- }
35
-
36
- pub(super) fn detect_dangerous_approval_in_argv(
37
- argv_tokens: &[String],
38
- ) -> Option<DangerousApproval> {
39
- let argv0 = argv_tokens.first().map(String::as_str).unwrap_or("");
40
- let ancestry_binary_name = binary_name(argv0);
41
- for token in argv_tokens {
42
- for (provider, flag) in dangerous_leader_flags() {
43
- if token == flag {
44
- let unexpected_binary =
45
- !binary_matches_provider(provider, ancestry_binary_name.as_deref());
46
- return Some(DangerousApproval {
47
- enabled: true,
48
- source: DangerousApprovalSource::LeaderProcess,
49
- inherited: true,
50
- provider: Some((*provider).to_string()),
51
- flag: Some((*flag).to_string()),
52
- worker_capability_above_leader: false,
53
- ancestry_binary_name,
54
- unexpected_binary,
55
- });
56
- }
57
- }
58
- }
59
- None
60
- }
61
-
62
- pub(super) fn dangerous_leader_flags() -> &'static [(&'static str, &'static str)] {
63
- // Process argv command grammar, not persisted provider identity parsing.
64
- &[
65
- ("claude", "--dangerously-skip-permissions"),
66
- ("claude", "--dangerously-skip-permission"),
67
- ("codex", "--dangerously-bypass-approvals-and-sandbox"),
68
- // 0.3.27 P1 (E54 symptom 2): copilot's full-permission flags. Without
69
- // these entries, a copilot leader running with --allow-all / --yolo would
70
- // NOT propagate bypass to claude/codex workers because
71
- // detect_dangerous_approval scans the coordinator's ancestor argv and
72
- // only matches entries in THIS table.
73
- ("copilot", "--allow-all"),
74
- ("copilot", "--yolo"),
75
- ]
76
- }
77
-
78
- pub(super) fn binary_matches_provider(provider: &str, binary: Option<&str>) -> bool {
79
- // Binary-name command grammar, not provider identity parsing.
80
- match (provider, binary) {
81
- ("codex", Some("codex")) => true,
82
- ("claude", Some("claude" | "claude-code" | "claude_code")) => true,
83
- // 0.3.27 P1 (E54): copilot binary detection for dangerous-approval scan.
84
- ("copilot", Some("copilot" | "github-copilot" | "gh-copilot")) => true,
85
- _ => false,
86
- }
87
- }
88
-
89
- pub(super) fn binary_name(argv0: &str) -> Option<String> {
90
- Path::new(argv0)
91
- .file_name()
92
- .and_then(|v| v.to_str())
93
- .filter(|s| !s.is_empty())
94
- .map(str::to_string)
95
- }
96
-
97
- pub(super) fn process_ancestry_argv(pid: u32) -> Vec<Vec<String>> {
98
- let mut out = Vec::new();
99
- let mut current = pid;
100
- let mut seen = std::collections::BTreeSet::new();
101
- for _ in 0..12 {
102
- if current == 0 || !seen.insert(current) {
103
- break;
104
- }
105
- if let Some(argv_tokens) = process_argv_tokens(current) {
106
- out.push(argv_tokens);
107
- }
108
- let Some(parent) = process_parent_pid(current) else {
109
- break;
110
- };
111
- if parent <= 1 || parent == current {
112
- break;
113
- }
114
- current = parent;
115
- }
116
- out
117
- }
118
-
119
- // 0.5.x Windows portability Batch 4: `process_argv_tokens` and
120
- // `process_parent_pid` route through `crate::platform::argv`. Unix
121
- // impls are byte-preserving (Linux `/proc/<pid>/cmdline`, macOS
122
- // `sysctl(KERN_PROCARGS2)`, other Unix `ps -p ... -o command=`).
123
- // Windows returns `None` per design §Batch 4 conservative anchor:
124
- // unknown argv must never infer elevated approval; callers already
125
- // treat `None` as "no elevation inherited" via
126
- // `disabled_dangerous_approval()`.
127
-
128
- pub(super) fn process_argv_tokens(pid: u32) -> Option<Vec<String>> {
129
- crate::platform::argv::argv_tokens(pid)
130
- }
131
-
132
- pub(super) fn process_parent_pid(pid: u32) -> Option<u32> {
133
- crate::platform::argv::parent_pid(pid)
134
- }
@@ -1,59 +0,0 @@
1
- //!
2
- use super::super::*;
3
-
4
- pub(super) struct CompleteForkInput<'a> {
5
- pub workspace: &'a Path,
6
- pub team_key: &'a str,
7
- pub agent_id: &'a AgentId,
8
- pub spawn: &'a crate::transport::SpawnResult,
9
- pub window: &'a WindowName,
10
- pub transport: &'a dyn Transport,
11
- pub session_name: &'a SessionName,
12
- pub mcp_config_path: &'a Path,
13
- pub profile_launch: &'a crate::provider::ProviderProfileLaunch,
14
- pub materialized_role: &'a mut MaterializedRole,
15
- pub claude_fork:
16
- &'a mut Option<crate::provider::adapters::claude_fork::ClaudeForkMaterialization>,
17
- pub copilot_fork:
18
- &'a mut Option<crate::provider::adapters::copilot_fork::CopilotForkMaterialization>,
19
- }
20
-
21
- pub(super) fn complete_fork(input: CompleteForkInput<'_>) -> Result<bool, LifecycleError> {
22
- if let Err(error) = verify_fork_registration(
23
- input.workspace,
24
- input.team_key,
25
- input.agent_id,
26
- input.spawn,
27
- input.window,
28
- ) {
29
- rollback_fork_after_spawn(
30
- input.workspace,
31
- input.transport,
32
- input.session_name,
33
- input.window,
34
- input.mcp_config_path,
35
- input.agent_id,
36
- input.profile_launch,
37
- input.team_key,
38
- );
39
- return Err(error);
40
- }
41
- let coordinator_started = start_fork_coordinator(ForkCoordinatorInput {
42
- workspace: input.workspace,
43
- team_key: input.team_key,
44
- agent_id: input.agent_id,
45
- transport: input.transport,
46
- session_name: input.session_name,
47
- window: input.window,
48
- mcp_config_path: input.mcp_config_path,
49
- profile_launch: input.profile_launch,
50
- })?;
51
- input.materialized_role.keep();
52
- if let Some(materialized) = input.claude_fork.as_mut() {
53
- materialized.keep();
54
- }
55
- if let Some(materialized) = input.copilot_fork.as_mut() {
56
- materialized.keep();
57
- }
58
- Ok(coordinator_started)
59
- }