@team-agent/installer 0.5.66 → 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 (164) hide show
  1. package/Cargo.lock +8 -1
  2. package/Cargo.toml +1 -1
  3. package/crates/team-agent/Cargo.toml +1 -0
  4. package/crates/team-agent/src/cli/adapters.rs +5 -0
  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/missing_subcommands.rs +129 -19
  17. package/crates/team-agent/src/cli/tests/shutdown_kill_plan.rs +387 -6
  18. package/crates/team-agent/src/cli/tests/status_send.rs +79 -10
  19. package/crates/team-agent/src/communication_mode/mod.rs +6 -4
  20. package/crates/team-agent/src/compiler.rs +59 -0
  21. package/crates/team-agent/src/coordinator/backoff.rs +55 -0
  22. package/crates/team-agent/src/coordinator/conpty_shim.rs +82 -0
  23. package/crates/team-agent/src/coordinator/health.rs +173 -0
  24. package/crates/team-agent/src/coordinator/mod.rs +31 -0
  25. package/crates/team-agent/src/coordinator/orphan.rs +31 -0
  26. package/crates/team-agent/src/coordinator/runtime_detectors.rs +30 -0
  27. package/crates/team-agent/src/coordinator/runtime_observation.rs +25 -0
  28. package/crates/team-agent/src/coordinator/steps/abnormal.rs +59 -0
  29. package/crates/team-agent/src/coordinator/steps/delivery.rs +10 -0
  30. package/crates/team-agent/src/coordinator/steps/health_sync.rs +10 -0
  31. package/crates/team-agent/src/coordinator/steps/mod.rs +22 -0
  32. package/crates/team-agent/src/coordinator/steps/persist.rs +10 -0
  33. package/crates/team-agent/src/coordinator/steps/runtime_prompts.rs +10 -0
  34. package/crates/team-agent/src/coordinator/steps/session_gate.rs +10 -0
  35. package/crates/team-agent/src/coordinator/tick.rs +133 -22
  36. package/crates/team-agent/src/coordinator/types.rs +49 -0
  37. package/crates/team-agent/src/db/message_store.rs +39 -5
  38. package/crates/team-agent/src/layout/worker_env.rs +20 -3
  39. package/crates/team-agent/src/layout/worker_window_helpers.rs +2 -0
  40. package/crates/team-agent/src/leader/provider_attribution.rs +53 -0
  41. package/crates/team-agent/src/leader/registry.rs +65 -0
  42. package/crates/team-agent/src/leader/start.rs +920 -63
  43. package/crates/team-agent/src/lifecycle/display.rs +56 -0
  44. package/crates/team-agent/src/lifecycle/helpers.rs +57 -0
  45. package/crates/team-agent/src/lifecycle/launch/add_agent.rs +332 -12
  46. package/crates/team-agent/src/lifecycle/launch/add_agent_state.rs +62 -0
  47. package/crates/team-agent/src/lifecycle/launch/agent_state.rs +59 -0
  48. package/crates/team-agent/src/lifecycle/launch/clone_agent.rs +101 -11
  49. package/crates/team-agent/src/lifecycle/launch/cursor_create_chat.rs +229 -0
  50. package/crates/team-agent/src/lifecycle/launch/cursor_mcp.rs +332 -0
  51. package/crates/team-agent/src/lifecycle/launch/fork_agent.rs +204 -456
  52. package/crates/team-agent/src/lifecycle/launch/fork_entry.rs +24 -0
  53. package/crates/team-agent/src/lifecycle/launch/grok_per_seat.rs +260 -0
  54. package/crates/team-agent/src/lifecycle/launch/identity.rs +146 -0
  55. package/crates/team-agent/src/lifecycle/launch/layout.rs +60 -0
  56. package/crates/team-agent/src/lifecycle/launch/leader_context.rs +112 -0
  57. package/crates/team-agent/src/lifecycle/launch/mcp_config.rs +530 -0
  58. package/crates/team-agent/src/lifecycle/launch/ownership.rs +40 -0
  59. package/crates/team-agent/src/lifecycle/launch/plan.rs +31 -0
  60. package/crates/team-agent/src/lifecycle/launch/quick_start.rs +66 -0
  61. package/crates/team-agent/src/lifecycle/launch/quick_start_transport.rs +78 -0
  62. package/crates/team-agent/src/lifecycle/launch/readiness.rs +85 -38
  63. package/crates/team-agent/src/lifecycle/launch/role_source.rs +44 -44
  64. package/crates/team-agent/src/lifecycle/launch/spawn.rs +62 -2
  65. package/crates/team-agent/src/lifecycle/launch/spec_state.rs +139 -0
  66. package/crates/team-agent/src/lifecycle/launch/state_projection.rs +109 -0
  67. package/crates/team-agent/src/lifecycle/launch/worker_env.rs +214 -1
  68. package/crates/team-agent/src/lifecycle/launch.rs +99 -29
  69. package/crates/team-agent/src/lifecycle/lock.rs +42 -1
  70. package/crates/team-agent/src/lifecycle/mod.rs +11 -0
  71. package/crates/team-agent/src/lifecycle/pane_input_lock.rs +161 -0
  72. package/crates/team-agent/src/lifecycle/profile_launch.rs +98 -0
  73. package/crates/team-agent/src/lifecycle/profile_smoke.rs +51 -1
  74. package/crates/team-agent/src/lifecycle/restart/agent.rs +124 -0
  75. package/crates/team-agent/src/lifecycle/restart/common.rs +369 -11
  76. package/crates/team-agent/src/lifecycle/restart/orchestrator.rs +27 -0
  77. package/crates/team-agent/src/lifecycle/restart/preflight.rs +25 -0
  78. package/crates/team-agent/src/lifecycle/restart/rebuild.rs +106 -0
  79. package/crates/team-agent/src/lifecycle/restart/remove.rs +196 -5
  80. package/crates/team-agent/src/lifecycle/restart/selection.rs +72 -0
  81. package/crates/team-agent/src/lifecycle/restart/team_state.rs +22 -0
  82. package/crates/team-agent/src/lifecycle/restart.rs +29 -0
  83. package/crates/team-agent/src/lifecycle/tests/agent_ops.rs +2 -3
  84. package/crates/team-agent/src/lifecycle/tests/clone_agent_preserves_source_tools.rs +309 -0
  85. package/crates/team-agent/src/lifecycle/tests/clone_fork_copilot_perms_red.rs +150 -157
  86. package/crates/team-agent/src/lifecycle/tests/copilot_provider_red.rs +2 -2
  87. package/crates/team-agent/src/lifecycle/tests/core.rs +4 -0
  88. package/crates/team-agent/src/lifecycle/tests/cursor_mcp_overlay.rs +287 -0
  89. package/crates/team-agent/src/lifecycle/tests/cursor_require_explicit_model_red.rs +229 -0
  90. package/crates/team-agent/src/lifecycle/tests/cursor_restart_resume_red.rs +353 -0
  91. package/crates/team-agent/src/lifecycle/tests/g1_silent_faces.rs +784 -0
  92. package/crates/team-agent/src/lifecycle/tests/gate_fixtures.rs +562 -0
  93. package/crates/team-agent/src/lifecycle/tests/grok_effort_argv_red.rs +239 -0
  94. package/crates/team-agent/src/lifecycle/tests/grok_mcp_overlay_red.rs +498 -0
  95. package/crates/team-agent/src/lifecycle/tests/grok_require_explicit_model_red.rs +250 -0
  96. package/crates/team-agent/src/lifecycle/tests/grok_restart_resume_red.rs +293 -0
  97. package/crates/team-agent/src/lifecycle/tests/lane_ops.rs +63 -38
  98. package/crates/team-agent/src/lifecycle/tests/launch_spawn.rs +3 -2
  99. package/crates/team-agent/src/lifecycle/tests/lifecycle_rollback_red.rs +16 -8
  100. package/crates/team-agent/src/lifecycle/tests/mcp_tool_name_format_red.rs +69 -0
  101. package/crates/team-agent/src/lifecycle/tests/phase_b_contracts.rs +20 -19
  102. package/crates/team-agent/src/lifecycle/tests/phase_golden.rs +97 -61
  103. package/crates/team-agent/src/lifecycle/tests/restart_rebind_hotfix_252_red.rs +2 -0
  104. package/crates/team-agent/src/lifecycle/tests/startup_latency_contract.rs +40 -7
  105. package/crates/team-agent/src/lifecycle/tests/test_isolation_escape_contract.rs +59 -1
  106. package/crates/team-agent/src/lifecycle/tests/worker_spawn_env_red.rs +69 -26
  107. package/crates/team-agent/src/lifecycle/tests.rs +23 -13
  108. package/crates/team-agent/src/lifecycle/types.rs +61 -0
  109. package/crates/team-agent/src/lifecycle/worker_command_context.rs +85 -11
  110. package/crates/team-agent/src/mcp_server/tests/scoped.rs +100 -1
  111. package/crates/team-agent/src/mcp_server/tests.rs +196 -2
  112. package/crates/team-agent/src/messaging/delivery.rs +405 -40
  113. package/crates/team-agent/src/messaging/helpers.rs +2 -0
  114. package/crates/team-agent/src/messaging/leader_receiver.rs +53 -1
  115. package/crates/team-agent/src/messaging/results.rs +4 -0
  116. package/crates/team-agent/src/messaging/send.rs +34 -0
  117. package/crates/team-agent/src/messaging/tests/dup_inject.rs +406 -0
  118. package/crates/team-agent/src/messaging/tests/e23.rs +9 -0
  119. package/crates/team-agent/src/messaging/tests/leader_inject_acceptance.rs +66 -0
  120. package/crates/team-agent/src/messaging/tests/mod.rs +1 -0
  121. package/crates/team-agent/src/messaging/types.rs +4 -1
  122. package/crates/team-agent/src/model/enums.rs +14 -5
  123. package/crates/team-agent/src/model/permissions.rs +3 -0
  124. package/crates/team-agent/src/os_probe.rs +73 -2
  125. package/crates/team-agent/src/provider/adapter.rs +231 -4
  126. package/crates/team-agent/src/provider/adapters/cursor_agent.rs +86 -0
  127. package/crates/team-agent/src/provider/adapters/grok.rs +157 -0
  128. package/crates/team-agent/src/provider/adapters/mod.rs +2 -0
  129. package/crates/team-agent/src/provider/bypass_flags.rs +46 -2
  130. package/crates/team-agent/src/provider/classify.rs +4 -2
  131. package/crates/team-agent/src/provider/faults.rs +2 -1
  132. package/crates/team-agent/src/provider/mod.rs +11 -0
  133. package/crates/team-agent/src/provider/session/capture.rs +158 -20
  134. package/crates/team-agent/src/provider/session/context_fork/claude.rs +38 -1
  135. package/crates/team-agent/src/provider/session/context_fork/codex.rs +72 -1
  136. package/crates/team-agent/src/provider/session/context_fork/outcome.rs +57 -1
  137. package/crates/team-agent/src/provider/session/context_fork.rs +77 -3
  138. package/crates/team-agent/src/provider/session/mod.rs +18 -0
  139. package/crates/team-agent/src/provider/session/resume.rs +57 -0
  140. package/crates/team-agent/src/provider/session_scan/claude.rs +125 -1
  141. package/crates/team-agent/src/provider/session_scan/codex.rs +94 -1
  142. package/crates/team-agent/src/provider/session_scan/common.rs +204 -2
  143. package/crates/team-agent/src/provider/session_scan/copilot.rs +33 -1
  144. package/crates/team-agent/src/provider/session_scan/cursor.rs +538 -0
  145. package/crates/team-agent/src/provider/session_scan/grok.rs +288 -0
  146. package/crates/team-agent/src/provider/session_scan.rs +8 -0
  147. package/crates/team-agent/src/provider/submit_now.rs +94 -0
  148. package/crates/team-agent/src/provider/tests/adapter.rs +304 -0
  149. package/crates/team-agent/src/provider/types.rs +4 -2
  150. package/crates/team-agent/src/provider/wire.rs +23 -1
  151. package/crates/team-agent/src/state/persist.rs +301 -8
  152. package/crates/team-agent/src/state/repository.rs +5 -0
  153. package/crates/team-agent/src/tmux_backend/tests.rs +1737 -42
  154. package/crates/team-agent/src/tmux_backend.rs +1064 -75
  155. package/crates/team-agent/src/transport/tests/wire.rs +28 -2
  156. package/crates/team-agent/src/transport.rs +248 -1
  157. package/npm/install.mjs +129 -73
  158. package/package.json +4 -4
  159. package/skills/team-agent/SKILL.md +33 -238
  160. package/skills/team-agent/command-coverage.json +31 -0
  161. package/crates/team-agent/src/lifecycle/launch/fork_agent/completion.rs +0 -59
  162. package/crates/team-agent/src/lifecycle/launch/fork_finalize.rs +0 -488
  163. package/crates/team-agent/src/lifecycle/launch/fork_pending.rs +0 -109
  164. package/crates/team-agent/src/lifecycle/launch/fork_state.rs +0 -447
@@ -1,3 +1,27 @@
1
+ //! ---
2
+ //! purpose: team 显示面的能力探测、后端解析、开关与 rebind 后重建
3
+ //! contract:
4
+ //! provides:
5
+ //! - name: resolve_display_backend
6
+ //! what: 按 requested 优先于 recorded 优先于 adaptive 选后端,并标出是否偏离默认
7
+ //! - name: probe_display_capabilities
8
+ //! what: 探测当前进程能否开 adaptive 显示,给出被挡原因
9
+ //! - name: open_worker_displays
10
+ //! what: 按后端为各 worker 打开显示,返回 agent 到 WorkerDisplay 的映射
11
+ //! - name: close_team_display_backends
12
+ //! what: 关闭本 team 的显示后端
13
+ //! - name: rebuild_adaptive_display_after_rebind
14
+ //! what: leader rebind 之后重建 adaptive 窗口
15
+ //! depends:
16
+ //! - crate::transport
17
+ //! - crate::state::persist
18
+ //! boundary:
19
+ //! - 不 spawn 也不 kill worker 进程,只管显示面
20
+ //! - 显示失败不阻塞 team readiness
21
+ //! - tmux 操作一律走 workspace 作用域的 TmuxBackend,不用继承 $TMUX 的 ambient 调用
22
+ //! - ambient leader-pane 探测不属于本文件
23
+ //! maturity: wired
24
+ //! ---
1
25
  //!
2
26
  //! lifecycle::display —— 能力门 / 后端解析 / 开关 / rebind 后重建。
3
27
  //!
@@ -20,6 +44,13 @@ use super::*;
20
44
 
21
45
  // ── lifecycle::display —— 能力门 / 后端解析 / 开关 / rebind 后重建 ────────────
22
46
 
47
+ /// ---
48
+ /// purpose: 定出本次使用的显示后端
49
+ /// params:
50
+ /// requested: 本次命令显式请求的后端,None 表示未指定
51
+ /// recorded: state 里记录的上次后端
52
+ /// returns: 选中的后端,附带它是否偏离默认 adaptive
53
+ /// ---
23
54
  ///
24
55
  /// `resolve_display_backend(requested, recorded, source)`(`display/backend.py`)。默认
25
56
  /// adaptive;显式 none 是逃生口。
@@ -34,6 +65,13 @@ pub fn resolve_display_backend(
34
65
  }
35
66
  }
36
67
 
68
+ /// ---
69
+ /// purpose: 探测当前环境是否具备 adaptive 显示能力
70
+ /// params:
71
+ /// _workspace: 未参与判定,仅保留签名
72
+ /// returns: 平台名、leader 所在 tmux session 与 pane、能力位、状态与被挡原因
73
+ /// errors: 当前实现不产生 Err
74
+ /// ---
37
75
  ///
38
76
  /// `probe_display_capabilities(...)`(`display/adaptive.py:31`,C13)。能力探测,分支只看
39
77
  /// 结果不看 `cfg!(target_os)`;Windows/WSL → `NotImplementedThisPlatform`。
@@ -71,6 +109,14 @@ pub fn probe_display_capabilities(_workspace: &Path) -> Result<DisplayProbe, Lif
71
109
  })
72
110
  }
73
111
 
112
+ /// ---
113
+ /// purpose: 按已解析的后端为各 worker 打开显示
114
+ /// params:
115
+ /// backend: 已解析的显示后端;不带 worker 视图的后端得到空映射
116
+ /// probe: 能力探测结果,adaptive 分支据此决定开还是记 blocked
117
+ /// returns: 后端与 agent_id 到 WorkerDisplay 的映射
118
+ /// errors: adaptive 开窗或读取显示目标失败时返回 LifecycleError
119
+ /// ---
74
120
  ///
75
121
  /// `open_worker_displays(workspace, session_name, jobs, backend, capability_probe)`
76
122
  /// (`display/worker_window.py`)。按后端分派 adaptive / ghostty_workspace / ghostty_window;
@@ -95,6 +141,11 @@ pub(crate) fn open_worker_displays(
95
141
  Ok(OpenDisplaysReport { backend, displays })
96
142
  }
97
143
 
144
+ /// ---
145
+ /// purpose: 关闭本 team 的显示,当前实现只处理 adaptive
146
+ /// returns: 关闭报告
147
+ /// errors: 底层 tmux 操作失败时返回 LifecycleError
148
+ /// ---
98
149
  ///
99
150
  /// `close_team_display_backends(state, event_log)`(`display/close.py`,C9)。按 state
100
151
  /// 记录的后端关显示;adaptive 只删带 team tag 的窗口(C2 leader pane 安全)+ orphan 清理。
@@ -105,6 +156,11 @@ pub fn close_team_display_backends(
105
156
  close_adaptive_displays(workspace, session_name)
106
157
  }
107
158
 
159
+ /// ---
160
+ /// purpose: leader rebind 完成之后重建 adaptive worker 窗口
161
+ /// returns: 重新打开的显示映射
162
+ /// errors: 同 open_worker_displays
163
+ /// ---
108
164
  ///
109
165
  /// `rebuild_adaptive_display_after_rebind(...)`(`display/rebuild.py`,C12)。restart 在
110
166
  /// leader rebind **之后**重建 adaptive 窗口(读 `leader_receiver.rebind_applied` 事件)。
@@ -1,3 +1,29 @@
1
+ //! ---
2
+ //! purpose: runtime 快照的诊断性落盘,以及 plan 状态文件的路径与读写
3
+ //! contract:
4
+ //! provides:
5
+ //! - name: save_team_runtime_snapshot
6
+ //! what: 把 runtime state 以带 not_authoritative 标记的诊断副本写到 legacy 每 session 路径
7
+ //! - name: team_snapshot_path
8
+ //! what: 给出某 session 的诊断快照路径
9
+ //! - name: plan_state_path
10
+ //! what: 给出某 plan 的状态文件路径
11
+ //! - name: plan_lock_path
12
+ //! what: 给出某 plan 的锁文件路径
13
+ //! - name: read_plan_state
14
+ //! what: 读取并反序列化 plan 状态
15
+ //! - name: save_plan_state
16
+ //! what: 序列化 plan 状态并经临时文件 rename 落盘
17
+ //! depends:
18
+ //! - crate::state::persist
19
+ //! - crate::model::paths
20
+ //! - std::fs
21
+ //! boundary:
22
+ //! - 快照文件不是权威 runtime state,产品写路径不得调用它
23
+ //! - plan 锁文件只被创建,本模块不对它加锁,也不提供并发互斥
24
+ //! - 不解释 plan 语义,只做路径、序列化与落盘
25
+ //! maturity: wired
26
+ //! ---
1
27
  //!
2
28
  //! lifecycle::helpers —— runtime snapshot 原子写(bug-084)+ plan-state 路径/读取。
3
29
 
@@ -7,6 +33,13 @@ use std::path::{Path, PathBuf};
7
33
 
8
34
  use super::*;
9
35
 
36
+ /// ---
37
+ /// purpose: 把 runtime state 写成带诊断标记的每 session 快照副本
38
+ /// params:
39
+ /// state: 待快照的 runtime state,必须含 session_name 字段
40
+ /// returns: 写出的快照文件路径
41
+ /// errors: 缺 session_name、建目录、写临时文件或 rename 失败时返回 StatePersist
42
+ /// ---
10
43
  ///
11
44
  /// `save_team_runtime_snapshot(workspace, state)` — Foundation-0 F0-2:
12
45
  /// this is now a **diagnostic-only** legacy per-session snapshot writer.
@@ -68,6 +101,12 @@ pub(crate) fn save_team_runtime_snapshot(
68
101
  Ok(path)
69
102
  }
70
103
 
104
+ /// ---
105
+ /// purpose: 给出某 session 的诊断快照文件路径
106
+ /// params:
107
+ /// session_name: 原始 session 名,非字母数字与下划线点横线的字符会被替换
108
+ /// returns: runtime 目录下 teams 子目录中的 state.json 路径
109
+ /// ---
71
110
  pub fn team_snapshot_path(workspace: &Path, session_name: &str) -> PathBuf {
72
111
  crate::model::paths::runtime_dir(workspace)
73
112
  .join("teams")
@@ -98,10 +137,18 @@ fn safe_snapshot_name(raw: &str) -> String {
98
137
  }
99
138
  }
100
139
 
140
+ /// ---
141
+ /// purpose: 给出某 plan 的状态文件路径
142
+ /// returns: runtime 目录下 orchestrator 子目录中的 plan state 文件路径
143
+ /// ---
101
144
  pub(crate) fn plan_state_path(workspace: &Path, plan_id: &PlanId) -> PathBuf {
102
145
  plan_state_dir(workspace).join(format!("plan-{}.state.json", plan_id.as_str()))
103
146
  }
104
147
 
148
+ /// ---
149
+ /// purpose: 给出某 plan 的锁文件路径
150
+ /// returns: runtime 目录下 orchestrator 子目录中的 plan lock 文件路径
151
+ /// ---
105
152
  pub(crate) fn plan_lock_path(workspace: &Path, plan_id: &PlanId) -> PathBuf {
106
153
  plan_state_dir(workspace).join(format!("plan-{}.lock", plan_id.as_str()))
107
154
  }
@@ -110,6 +157,11 @@ fn plan_state_dir(workspace: &Path) -> PathBuf {
110
157
  crate::model::paths::runtime_dir(workspace).join("orchestrator")
111
158
  }
112
159
 
160
+ /// ---
161
+ /// purpose: 从文件读取并反序列化 plan 状态
162
+ /// returns: 解析出的 PlanState
163
+ /// errors: 文件读不到或 JSON 不合法时都返回 InvalidPlan
164
+ /// ---
113
165
  pub(crate) fn read_plan_state(path: &Path) -> Result<PlanState, LifecycleError> {
114
166
  let data = fs::read_to_string(path)
115
167
  .map_err(|e| LifecycleError::InvalidPlan(format!("plan not found: {e}")))?;
@@ -117,6 +169,11 @@ pub(crate) fn read_plan_state(path: &Path) -> Result<PlanState, LifecycleError>
117
169
  .map_err(|e| LifecycleError::InvalidPlan(format!("invalid plan state: {e}")))
118
170
  }
119
171
 
172
+ /// ---
173
+ /// purpose: 序列化 plan 状态,经同目录临时文件 rename 落盘,并确保锁文件存在
174
+ /// returns: 写出的 plan 状态文件路径
175
+ /// errors: 建目录、创建锁文件、写临时文件或 rename 失败时返回 StatePersist
176
+ /// ---
120
177
  pub(crate) fn save_plan_state(
121
178
  workspace: &Path,
122
179
  state: &PlanState,