@team-agent/installer 0.2.11 → 0.3.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.
Files changed (326) hide show
  1. package/Cargo.lock +744 -0
  2. package/Cargo.toml +34 -0
  3. package/crates/team-agent/Cargo.toml +33 -0
  4. package/crates/team-agent/src/cli/adapters.rs +1343 -0
  5. package/crates/team-agent/src/cli/diagnose.rs +554 -0
  6. package/crates/team-agent/src/cli/emit.rs +1204 -0
  7. package/crates/team-agent/src/cli/helpers.rs +88 -0
  8. package/crates/team-agent/src/cli/leader.rs +216 -0
  9. package/crates/team-agent/src/cli/mod.rs +1207 -0
  10. package/crates/team-agent/src/cli/profile.rs +306 -0
  11. package/crates/team-agent/src/cli/send.rs +215 -0
  12. package/crates/team-agent/src/cli/status.rs +179 -0
  13. package/crates/team-agent/src/cli/status_port.rs +502 -0
  14. package/crates/team-agent/src/cli/tests/base.rs +616 -0
  15. package/crates/team-agent/src/cli/tests/compile.rs +96 -0
  16. package/crates/team-agent/src/cli/tests/divergence.rs +509 -0
  17. package/crates/team-agent/src/cli/tests/lane_c.rs +333 -0
  18. package/crates/team-agent/src/cli/tests/leader_watch.rs +395 -0
  19. package/crates/team-agent/src/cli/tests/main_preserved.rs +675 -0
  20. package/crates/team-agent/src/cli/tests/missing_subcommands.rs +390 -0
  21. package/crates/team-agent/src/cli/tests/mod.rs +97 -0
  22. package/crates/team-agent/src/cli/tests/peer_allow.rs +137 -0
  23. package/crates/team-agent/src/cli/tests/repair_state_byte_lock.rs +302 -0
  24. package/crates/team-agent/src/cli/tests/run_delegation.rs +305 -0
  25. package/crates/team-agent/src/cli/tests/status_send.rs +385 -0
  26. package/crates/team-agent/src/cli/tests/verb_profile.rs +182 -0
  27. package/crates/team-agent/src/cli/tests/verb_settle.rs +236 -0
  28. package/crates/team-agent/src/cli/tests/verb_validate.rs +184 -0
  29. package/crates/team-agent/src/cli/types.rs +605 -0
  30. package/crates/team-agent/src/compiler/tests.rs +701 -0
  31. package/crates/team-agent/src/compiler.rs +489 -0
  32. package/crates/team-agent/src/coordinator/backoff.rs +153 -0
  33. package/crates/team-agent/src/coordinator/health.rs +557 -0
  34. package/crates/team-agent/src/coordinator/mod.rs +80 -0
  35. package/crates/team-agent/src/coordinator/orphan.rs +179 -0
  36. package/crates/team-agent/src/coordinator/tests/abnormal.rs +255 -0
  37. package/crates/team-agent/src/coordinator/tests/basics.rs +262 -0
  38. package/crates/team-agent/src/coordinator/tests/daemon.rs +323 -0
  39. package/crates/team-agent/src/coordinator/tests/health_sync.rs +263 -0
  40. package/crates/team-agent/src/coordinator/tests/main_preserved.rs +136 -0
  41. package/crates/team-agent/src/coordinator/tests/mod.rs +310 -0
  42. package/crates/team-agent/src/coordinator/tests/spine.rs +261 -0
  43. package/crates/team-agent/src/coordinator/tests/takeover.rs +227 -0
  44. package/crates/team-agent/src/coordinator/tests/tick_core.rs +256 -0
  45. package/crates/team-agent/src/coordinator/tests/watch.rs +167 -0
  46. package/crates/team-agent/src/coordinator/tick.rs +2032 -0
  47. package/crates/team-agent/src/coordinator/types.rs +584 -0
  48. package/crates/team-agent/src/db/migration.rs +716 -0
  49. package/crates/team-agent/src/db/mod.rs +23 -0
  50. package/crates/team-agent/src/db/schema.rs +378 -0
  51. package/crates/team-agent/src/event_log.rs +375 -0
  52. package/crates/team-agent/src/fake_worker.rs +253 -0
  53. package/crates/team-agent/src/leader/helpers.rs +190 -0
  54. package/crates/team-agent/src/leader/inject.rs +33 -0
  55. package/crates/team-agent/src/leader/lease.rs +1084 -0
  56. package/crates/team-agent/src/leader/mod.rs +99 -0
  57. package/crates/team-agent/src/leader/owner_bind.rs +292 -0
  58. package/crates/team-agent/src/leader/rediscover/tests.rs +526 -0
  59. package/crates/team-agent/src/leader/rediscover.rs +1101 -0
  60. package/crates/team-agent/src/leader/start.rs +273 -0
  61. package/crates/team-agent/src/leader/takeover.rs +235 -0
  62. package/crates/team-agent/src/leader/tests/basics.rs +183 -0
  63. package/crates/team-agent/src/leader/tests/byte_findings.rs +237 -0
  64. package/crates/team-agent/src/leader/tests/identity.rs +206 -0
  65. package/crates/team-agent/src/leader/tests/idle.rs +272 -0
  66. package/crates/team-agent/src/leader/tests/lease_api.rs +225 -0
  67. package/crates/team-agent/src/leader/tests/lease_claim.rs +410 -0
  68. package/crates/team-agent/src/leader/tests/mod.rs +125 -0
  69. package/crates/team-agent/src/leader/tests/rediscover.rs +351 -0
  70. package/crates/team-agent/src/leader/tests/wake_start_owner.rs +204 -0
  71. package/crates/team-agent/src/leader/types.rs +489 -0
  72. package/crates/team-agent/src/lib.rs +85 -0
  73. package/crates/team-agent/src/lifecycle/display.rs +228 -0
  74. package/crates/team-agent/src/lifecycle/helpers.rs +112 -0
  75. package/crates/team-agent/src/lifecycle/launch/plan.rs +227 -0
  76. package/crates/team-agent/src/lifecycle/launch.rs +2109 -0
  77. package/crates/team-agent/src/lifecycle/mod.rs +62 -0
  78. package/crates/team-agent/src/lifecycle/restart/agent.rs +533 -0
  79. package/crates/team-agent/src/lifecycle/restart/common.rs +517 -0
  80. package/crates/team-agent/src/lifecycle/restart/orchestrator.rs +41 -0
  81. package/crates/team-agent/src/lifecycle/restart/rebuild.rs +268 -0
  82. package/crates/team-agent/src/lifecycle/restart/remove.rs +780 -0
  83. package/crates/team-agent/src/lifecycle/restart/selection.rs +208 -0
  84. package/crates/team-agent/src/lifecycle/restart/team_state.rs +242 -0
  85. package/crates/team-agent/src/lifecycle/restart.rs +76 -0
  86. package/crates/team-agent/src/lifecycle/tests/agent_ops.rs +455 -0
  87. package/crates/team-agent/src/lifecycle/tests/core.rs +989 -0
  88. package/crates/team-agent/src/lifecycle/tests/lane_ops.rs +583 -0
  89. package/crates/team-agent/src/lifecycle/tests/launch_spawn.rs +985 -0
  90. package/crates/team-agent/src/lifecycle/tests/main_preserved.rs +265 -0
  91. package/crates/team-agent/src/lifecycle/tests.rs +27 -0
  92. package/crates/team-agent/src/lifecycle/types.rs +710 -0
  93. package/crates/team-agent/src/main.rs +41 -0
  94. package/crates/team-agent/src/mcp_server/helpers.rs +228 -0
  95. package/crates/team-agent/src/mcp_server/mod.rs +183 -0
  96. package/crates/team-agent/src/mcp_server/normalize.rs +312 -0
  97. package/crates/team-agent/src/mcp_server/tests/golden.rs +283 -0
  98. package/crates/team-agent/src/mcp_server/tests/normalize.rs +244 -0
  99. package/crates/team-agent/src/mcp_server/tests/scoped.rs +189 -0
  100. package/crates/team-agent/src/mcp_server/tests/send.rs +222 -0
  101. package/crates/team-agent/src/mcp_server/tests/tools.rs +158 -0
  102. package/crates/team-agent/src/mcp_server/tests/wire.rs +187 -0
  103. package/crates/team-agent/src/mcp_server/tests.rs +38 -0
  104. package/crates/team-agent/src/mcp_server/tools.rs +603 -0
  105. package/crates/team-agent/src/mcp_server/types.rs +421 -0
  106. package/crates/team-agent/src/mcp_server/wire.rs +468 -0
  107. package/crates/team-agent/src/message_store.rs +767 -0
  108. package/crates/team-agent/src/messaging/activity.rs +433 -0
  109. package/crates/team-agent/src/messaging/delivery.rs +743 -0
  110. package/crates/team-agent/src/messaging/helpers.rs +209 -0
  111. package/crates/team-agent/src/messaging/leader_receiver.rs +329 -0
  112. package/crates/team-agent/src/messaging/mod.rs +147 -0
  113. package/crates/team-agent/src/messaging/peers.rs +32 -0
  114. package/crates/team-agent/src/messaging/results.rs +553 -0
  115. package/crates/team-agent/src/messaging/scheduler.rs +344 -0
  116. package/crates/team-agent/src/messaging/selftest.rs +100 -0
  117. package/crates/team-agent/src/messaging/send.rs +578 -0
  118. package/crates/team-agent/src/messaging/tests/basic.rs +357 -0
  119. package/crates/team-agent/src/messaging/tests/main_preserved.rs +122 -0
  120. package/crates/team-agent/src/messaging/tests/mod.rs +293 -0
  121. package/crates/team-agent/src/messaging/tests/runtime.rs +1422 -0
  122. package/crates/team-agent/src/messaging/tests/spine.rs +437 -0
  123. package/crates/team-agent/src/messaging/trust.rs +192 -0
  124. package/crates/team-agent/src/messaging/types.rs +355 -0
  125. package/crates/team-agent/src/messaging/watchers.rs +591 -0
  126. package/crates/team-agent/src/model/enums.rs +311 -0
  127. package/crates/team-agent/src/model/errors.rs +17 -0
  128. package/crates/team-agent/src/model/ids.rs +155 -0
  129. package/crates/team-agent/src/model/mod.rs +22 -0
  130. package/crates/team-agent/src/model/paths.rs +228 -0
  131. package/crates/team-agent/src/model/permissions.rs +567 -0
  132. package/crates/team-agent/src/model/routing.rs +340 -0
  133. package/crates/team-agent/src/model/spec.rs +680 -0
  134. package/crates/team-agent/src/model/task_graph.rs +380 -0
  135. package/crates/team-agent/src/model/testdata/fuzz.golden.yaml +43 -0
  136. package/crates/team-agent/src/model/testdata/fuzz.yaml +43 -0
  137. package/crates/team-agent/src/model/testdata/spec_invalid_a.yaml +207 -0
  138. package/crates/team-agent/src/model/testdata/team.spec.golden.yaml +206 -0
  139. package/crates/team-agent/src/model/testdata/team.spec.yaml +206 -0
  140. package/crates/team-agent/src/model/yaml/tests.rs +288 -0
  141. package/crates/team-agent/src/model/yaml.rs +800 -0
  142. package/crates/team-agent/src/packaging/install.rs +305 -0
  143. package/crates/team-agent/src/packaging/migrate.rs +30 -0
  144. package/crates/team-agent/src/packaging/mod.rs +82 -0
  145. package/crates/team-agent/src/packaging/repair.rs +24 -0
  146. package/crates/team-agent/src/packaging/tests.rs +829 -0
  147. package/crates/team-agent/src/packaging/types.rs +369 -0
  148. package/crates/team-agent/src/provider/adapter.rs +801 -0
  149. package/crates/team-agent/src/provider/approvals/mod.rs +2 -0
  150. package/crates/team-agent/src/provider/approvals/parsing.rs +452 -0
  151. package/crates/team-agent/src/provider/approvals/runtime_prompts.rs +163 -0
  152. package/crates/team-agent/src/provider/classify.rs +456 -0
  153. package/crates/team-agent/src/provider/faults.rs +136 -0
  154. package/crates/team-agent/src/provider/helpers.rs +41 -0
  155. package/crates/team-agent/src/provider/mod.rs +53 -0
  156. package/crates/team-agent/src/provider/startup_prompt.rs +423 -0
  157. package/crates/team-agent/src/provider/tests/adapter.rs +239 -0
  158. package/crates/team-agent/src/provider/tests/classify.rs +240 -0
  159. package/crates/team-agent/src/provider/tests/faults.rs +120 -0
  160. package/crates/team-agent/src/provider/tests/idle.rs +208 -0
  161. package/crates/team-agent/src/provider/tests/wire.rs +213 -0
  162. package/crates/team-agent/src/provider/tests.rs +31 -0
  163. package/crates/team-agent/src/provider/types.rs +424 -0
  164. package/crates/team-agent/src/state/identity.rs +659 -0
  165. package/crates/team-agent/src/state/mod.rs +58 -0
  166. package/crates/team-agent/src/state/owner_gate.rs +423 -0
  167. package/crates/team-agent/src/state/persist.rs +712 -0
  168. package/crates/team-agent/src/state/projection.rs +657 -0
  169. package/crates/team-agent/src/state/selector.rs +105 -0
  170. package/crates/team-agent/src/state/testdata/state-rich.canonical.json +133 -0
  171. package/crates/team-agent/src/tmux_backend/tests.rs +765 -0
  172. package/crates/team-agent/src/tmux_backend.rs +810 -0
  173. package/crates/team-agent/src/transport/test_support.rs +252 -0
  174. package/crates/team-agent/src/transport/tests/behavior.rs +327 -0
  175. package/crates/team-agent/src/transport/tests/mod.rs +199 -0
  176. package/crates/team-agent/src/transport/tests/wire.rs +527 -0
  177. package/crates/team-agent/src/transport.rs +774 -0
  178. package/npm/install.mjs +118 -112
  179. package/package.json +15 -13
  180. package/crates/team-agent-core/Cargo.toml +0 -12
  181. package/crates/team-agent-core/src/lib.rs +0 -332
  182. package/crates/team-agent-core/src/main.rs +0 -152
  183. package/pyproject.toml +0 -18
  184. package/scripts/install.py +0 -88
  185. package/scripts/run_regression_tests.py +0 -83
  186. package/src/team_agent/__init__.py +0 -3
  187. package/src/team_agent/__main__.py +0 -5
  188. package/src/team_agent/_legacy_pane_discovery.py +0 -186
  189. package/src/team_agent/abnormal_track.py +0 -253
  190. package/src/team_agent/approvals/__init__.py +0 -65
  191. package/src/team_agent/approvals/constants.py +0 -6
  192. package/src/team_agent/approvals/parsing.py +0 -176
  193. package/src/team_agent/approvals/runtime_prompts.py +0 -171
  194. package/src/team_agent/approvals/status.py +0 -176
  195. package/src/team_agent/cli/__init__.py +0 -137
  196. package/src/team_agent/cli/commands.py +0 -481
  197. package/src/team_agent/cli/e2e.py +0 -202
  198. package/src/team_agent/cli/helpers.py +0 -226
  199. package/src/team_agent/cli/parser.py +0 -540
  200. package/src/team_agent/compiler.py +0 -334
  201. package/src/team_agent/coordinator/__init__.py +0 -53
  202. package/src/team_agent/coordinator/__main__.py +0 -119
  203. package/src/team_agent/coordinator/lifecycle.py +0 -411
  204. package/src/team_agent/coordinator/metadata.py +0 -61
  205. package/src/team_agent/coordinator/paths.py +0 -17
  206. package/src/team_agent/diagnose/__init__.py +0 -48
  207. package/src/team_agent/diagnose/checks.py +0 -101
  208. package/src/team_agent/diagnose/comms.py +0 -213
  209. package/src/team_agent/diagnose/health.py +0 -241
  210. package/src/team_agent/diagnose/orphan_cleanup.py +0 -364
  211. package/src/team_agent/diagnose/preflight.py +0 -194
  212. package/src/team_agent/diagnose/quick_start.py +0 -324
  213. package/src/team_agent/display/__init__.py +0 -92
  214. package/src/team_agent/display/adaptive.py +0 -511
  215. package/src/team_agent/display/backend.py +0 -46
  216. package/src/team_agent/display/close.py +0 -154
  217. package/src/team_agent/display/ghostty.py +0 -77
  218. package/src/team_agent/display/rebuild.py +0 -102
  219. package/src/team_agent/display/tiling.py +0 -156
  220. package/src/team_agent/display/worker_window.py +0 -114
  221. package/src/team_agent/display/workspace.py +0 -382
  222. package/src/team_agent/errors.py +0 -10
  223. package/src/team_agent/events.py +0 -84
  224. package/src/team_agent/fake_worker.py +0 -80
  225. package/src/team_agent/idle_predicate.py +0 -218
  226. package/src/team_agent/idle_takeover.py +0 -59
  227. package/src/team_agent/idle_takeover_wiring.py +0 -114
  228. package/src/team_agent/launch/__init__.py +0 -41
  229. package/src/team_agent/launch/bootstrap.py +0 -85
  230. package/src/team_agent/launch/config.py +0 -106
  231. package/src/team_agent/launch/core.py +0 -301
  232. package/src/team_agent/launch/requirements.py +0 -57
  233. package/src/team_agent/leader/__init__.py +0 -926
  234. package/src/team_agent/leader_binding.py +0 -183
  235. package/src/team_agent/lifecycle/__init__.py +0 -5
  236. package/src/team_agent/lifecycle/agents.py +0 -278
  237. package/src/team_agent/lifecycle/operations.py +0 -411
  238. package/src/team_agent/lifecycle/paste_buffer_hygiene.py +0 -39
  239. package/src/team_agent/lifecycle/start.py +0 -363
  240. package/src/team_agent/mcp_server/__init__.py +0 -42
  241. package/src/team_agent/mcp_server/__main__.py +0 -7
  242. package/src/team_agent/mcp_server/contracts.py +0 -148
  243. package/src/team_agent/mcp_server/normalize.py +0 -257
  244. package/src/team_agent/mcp_server/server.py +0 -150
  245. package/src/team_agent/mcp_server/tools.py +0 -352
  246. package/src/team_agent/message_store/__init__.py +0 -23
  247. package/src/team_agent/message_store/agent_health.py +0 -113
  248. package/src/team_agent/message_store/core.py +0 -497
  249. package/src/team_agent/message_store/leader_notification_log.py +0 -198
  250. package/src/team_agent/message_store/result_watchers.py +0 -251
  251. package/src/team_agent/message_store/schema.py +0 -308
  252. package/src/team_agent/message_store/schema_migration.py +0 -448
  253. package/src/team_agent/messaging/__init__.py +0 -1
  254. package/src/team_agent/messaging/activity_detector.py +0 -262
  255. package/src/team_agent/messaging/delivery.py +0 -504
  256. package/src/team_agent/messaging/deps.py +0 -247
  257. package/src/team_agent/messaging/idle_alerts.py +0 -423
  258. package/src/team_agent/messaging/internal_delivery.py +0 -46
  259. package/src/team_agent/messaging/leader.py +0 -497
  260. package/src/team_agent/messaging/leader_api_errors.py +0 -216
  261. package/src/team_agent/messaging/leader_panes.py +0 -673
  262. package/src/team_agent/messaging/owner_bypass.py +0 -29
  263. package/src/team_agent/messaging/result_delivery.py +0 -539
  264. package/src/team_agent/messaging/results.py +0 -447
  265. package/src/team_agent/messaging/scheduler.py +0 -450
  266. package/src/team_agent/messaging/send.py +0 -532
  267. package/src/team_agent/messaging/session_drift.py +0 -94
  268. package/src/team_agent/messaging/tmux_io.py +0 -506
  269. package/src/team_agent/messaging/tmux_prompt.py +0 -338
  270. package/src/team_agent/messaging/trust_auto_answer.py +0 -52
  271. package/src/team_agent/orchestrator/__init__.py +0 -376
  272. package/src/team_agent/orchestrator/plan.py +0 -122
  273. package/src/team_agent/orchestrator/state.py +0 -128
  274. package/src/team_agent/paths.py +0 -45
  275. package/src/team_agent/permissions.py +0 -123
  276. package/src/team_agent/profiles/__init__.py +0 -82
  277. package/src/team_agent/profiles/constants.py +0 -19
  278. package/src/team_agent/profiles/core.py +0 -407
  279. package/src/team_agent/profiles/helpers.py +0 -69
  280. package/src/team_agent/profiles/provider_env.py +0 -188
  281. package/src/team_agent/profiles/smoke.py +0 -201
  282. package/src/team_agent/provider_cli/__init__.py +0 -43
  283. package/src/team_agent/provider_cli/adapter.py +0 -172
  284. package/src/team_agent/provider_cli/base.py +0 -48
  285. package/src/team_agent/provider_cli/claude.py +0 -503
  286. package/src/team_agent/provider_cli/codex.py +0 -336
  287. package/src/team_agent/provider_cli/copilot.py +0 -8
  288. package/src/team_agent/provider_cli/fake.py +0 -39
  289. package/src/team_agent/provider_cli/gemini.py +0 -95
  290. package/src/team_agent/provider_cli/opencode.py +0 -8
  291. package/src/team_agent/provider_cli/prompt.py +0 -62
  292. package/src/team_agent/provider_cli/registry.py +0 -18
  293. package/src/team_agent/provider_cli/unsupported.py +0 -32
  294. package/src/team_agent/provider_state/README.md +0 -78
  295. package/src/team_agent/provider_state/__init__.py +0 -91
  296. package/src/team_agent/provider_state/claude.py +0 -86
  297. package/src/team_agent/provider_state/codex.py +0 -84
  298. package/src/team_agent/provider_state/common.py +0 -207
  299. package/src/team_agent/provider_state/registry.py +0 -118
  300. package/src/team_agent/providers.py +0 -163
  301. package/src/team_agent/quality_gates.py +0 -104
  302. package/src/team_agent/restart/__init__.py +0 -34
  303. package/src/team_agent/restart/orchestration.py +0 -554
  304. package/src/team_agent/restart/selection.py +0 -89
  305. package/src/team_agent/restart/snapshot.py +0 -70
  306. package/src/team_agent/routing.py +0 -84
  307. package/src/team_agent/runtime.py +0 -1243
  308. package/src/team_agent/rust_core.py +0 -327
  309. package/src/team_agent/sessions/__init__.py +0 -25
  310. package/src/team_agent/sessions/capture.py +0 -144
  311. package/src/team_agent/sessions/inventory.py +0 -44
  312. package/src/team_agent/sessions/resume.py +0 -135
  313. package/src/team_agent/simple_yaml.py +0 -236
  314. package/src/team_agent/spec.py +0 -370
  315. package/src/team_agent/state.py +0 -693
  316. package/src/team_agent/status/__init__.py +0 -63
  317. package/src/team_agent/status/approvals.py +0 -52
  318. package/src/team_agent/status/compact.py +0 -158
  319. package/src/team_agent/status/constants.py +0 -18
  320. package/src/team_agent/status/inbox.py +0 -58
  321. package/src/team_agent/status/peek.py +0 -117
  322. package/src/team_agent/status/queries.py +0 -199
  323. package/src/team_agent/task_graph.py +0 -80
  324. package/src/team_agent/terminal.py +0 -57
  325. package/src/team_agent/wake.py +0 -58
  326. package/src/team_agent/watch/__init__.py +0 -145
@@ -1,540 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import argparse
4
- import sys
5
- from pathlib import Path
6
-
7
- from team_agent import profiles
8
- from team_agent import runtime
9
- from team_agent.errors import TeamAgentError
10
-
11
- from team_agent.cli.commands import (
12
- cmd_quick_start,
13
- cmd_codex,
14
- cmd_claude,
15
- cmd_init,
16
- cmd_validate,
17
- cmd_compile,
18
- cmd_profile_init,
19
- cmd_profile_doctor,
20
- cmd_profile_show,
21
- cmd_launch,
22
- cmd_preflight,
23
- cmd_start,
24
- cmd_wait_ready,
25
- cmd_settle,
26
- cmd_status,
27
- cmd_watch,
28
- cmd_approvals,
29
- cmd_peek,
30
- cmd_inbox,
31
- cmd_sessions,
32
- cmd_attach_leader,
33
- cmd_takeover,
34
- cmd_claim_leader,
35
- cmd_identity,
36
- cmd_send,
37
- cmd_collect,
38
- cmd_diagnose,
39
- cmd_repair_state,
40
- cmd_validate_result,
41
- cmd_doctor,
42
- cmd_shutdown,
43
- cmd_restart,
44
- cmd_start_agent,
45
- cmd_stop_agent,
46
- cmd_reset_agent,
47
- cmd_add_agent,
48
- cmd_fork_agent,
49
- cmd_remove_agent,
50
- cmd_stuck_list,
51
- cmd_stuck_cancel,
52
- cmd_acknowledge_idle,
53
- cmd_allow_peer_talk,
54
- cmd_advanced,
55
- cmd_install_skill,
56
- cmd_run_overnight,
57
- )
58
- from team_agent.cli.e2e import cmd_e2e
59
- from team_agent.cli.helpers import (
60
- _cli_error_payload,
61
- _emit_cli_error,
62
- _leader_launcher_args,
63
- _provider_args,
64
- _workspace_from_args,
65
- consume_leader_inbox_summary,
66
- emit,
67
- )
68
-
69
- SEND_ORDER_HINT = (
70
- "options must appear before target/message. Use: "
71
- "team-agent send --task <task_id> --json \"<message>\" or "
72
- "team-agent send --no-ack --json <agent_id> \"<message>\""
73
- )
74
-
75
-
76
- class TeamAgentArgumentParser(argparse.ArgumentParser):
77
- def error(self, message: str) -> None:
78
- send_command = "send" in sys.argv[1:]
79
- if (getattr(self, "send_order_hint", False) or send_command) and "unrecognized arguments" in message:
80
- message = f"{message}\nHint: {SEND_ORDER_HINT}"
81
- super().error(message)
82
-
83
-
84
- def main(argv: list[str] | None = None) -> None:
85
- raw_argv = list(sys.argv[1:] if argv is None else argv)
86
- if raw_argv and raw_argv[0] in {"codex", "claude"}:
87
- _run_leader_passthrough(raw_argv[0], raw_argv[1:])
88
- return
89
-
90
- parser = TeamAgentArgumentParser(
91
- prog="team-agent",
92
- description="TeamSpec Agent Mode CLI",
93
- epilog="See `team-agent advanced --help` for low-level commands (debugging only).",
94
- )
95
- sub = parser.add_subparsers(dest="command", required=True, parser_class=TeamAgentArgumentParser)
96
-
97
- p = sub.add_parser("codex", help="Start a tmux-managed Codex leader in the current directory")
98
- p.add_argument("provider_args", nargs=argparse.REMAINDER, help="Arguments passed through to codex")
99
- p.set_defaults(func=cmd_codex)
100
-
101
- p = sub.add_parser("claude", help="Start a tmux-managed Claude leader in the current directory")
102
- p.add_argument("provider_args", nargs=argparse.REMAINDER, help="Arguments passed through to claude")
103
- p.set_defaults(func=cmd_claude)
104
-
105
- p = sub.add_parser("quick-start", help="Start a team from a role-doc directory")
106
- p.add_argument("agents_dir")
107
- p.add_argument("--name")
108
- p.add_argument("--team-id", help="Store loose role docs under .team/<team-id> instead of .team/current")
109
- p.add_argument("--yes", action="store_true")
110
- p.add_argument("--fresh", action="store_true", help="Start fresh worker sessions even when prior runtime state exists")
111
- add_json(p)
112
- p.set_defaults(func=cmd_quick_start)
113
-
114
- p = sub.add_parser("init", help=argparse.SUPPRESS)
115
- p.add_argument("--workspace", default=".")
116
- p.add_argument("--force", action="store_true")
117
- add_json(p)
118
- p.set_defaults(func=cmd_init)
119
-
120
- p = sub.add_parser("validate", help=argparse.SUPPRESS)
121
- p.add_argument("spec", nargs="?", default="team.spec.yaml")
122
- add_json(p)
123
- p.set_defaults(func=cmd_validate)
124
-
125
- p = sub.add_parser("compile", help=argparse.SUPPRESS)
126
- p.add_argument("--team", required=True, help="Team doc directory, for example .team/current")
127
- p.add_argument("--out", default="team.spec.yaml")
128
- add_json(p)
129
- p.set_defaults(func=cmd_compile)
130
-
131
- p = sub.add_parser("profile", help=argparse.SUPPRESS)
132
- profile_sub = p.add_subparsers(dest="profile_command", required=True)
133
- p_init = profile_sub.add_parser("init", help="Create an example profile template without real secrets")
134
- p_init.add_argument("name")
135
- p_init.add_argument("--workspace", default=".")
136
- p_init.add_argument("--team", help="Team directory whose profiles/ directory should be used")
137
- p_init.add_argument("--auth-mode", required=True, choices=sorted(profiles.AUTH_MODES))
138
- add_json(p_init)
139
- p_init.set_defaults(func=cmd_profile_init)
140
- p_doctor = profile_sub.add_parser("doctor", help="Check whether a profile exists without printing secrets")
141
- p_doctor.add_argument("name")
142
- p_doctor.add_argument("--workspace", default=".")
143
- p_doctor.add_argument("--team", help="Team directory whose profiles/ directory should be used")
144
- add_json(p_doctor)
145
- p_doctor.set_defaults(func=cmd_profile_doctor)
146
- p_show = profile_sub.add_parser("show", help="Show redacted profile status without printing secrets")
147
- p_show.add_argument("name")
148
- p_show.add_argument("--workspace", default=".")
149
- p_show.add_argument("--team", help="Team directory whose profiles/ directory should be used")
150
- add_json(p_show)
151
- p_show.set_defaults(func=cmd_profile_show)
152
-
153
- p = sub.add_parser("launch", help=argparse.SUPPRESS)
154
- p.add_argument("spec", nargs="?", default="team.spec.yaml")
155
- p.add_argument("--yes", action="store_true", help="Confirm launch after permission summary review")
156
- p.add_argument("--dry-run", action="store_true")
157
- add_json(p)
158
- p.set_defaults(func=cmd_launch)
159
-
160
- p = sub.add_parser("preflight", help=argparse.SUPPRESS)
161
- p.add_argument("--team", required=True)
162
- add_json(p)
163
- p.set_defaults(func=cmd_preflight)
164
-
165
- p = sub.add_parser("start", help=argparse.SUPPRESS)
166
- p.add_argument("--team", required=True)
167
- p.add_argument("--yes", action="store_true")
168
- add_json(p)
169
- p.set_defaults(func=cmd_start)
170
-
171
- p = sub.add_parser("wait-ready", help=argparse.SUPPRESS)
172
- p.add_argument("--workspace", default=".")
173
- p.add_argument("--timeout", type=int, default=120)
174
- add_json(p)
175
- p.set_defaults(func=cmd_wait_ready)
176
-
177
- p = sub.add_parser("settle", help=argparse.SUPPRESS)
178
- p.add_argument("--workspace", default=".")
179
- add_json(p)
180
- p.set_defaults(func=cmd_settle)
181
-
182
- p = sub.add_parser("status", help="Show team runtime status")
183
- p.add_argument("agent", nargs="?")
184
- p.add_argument("--workspace", default=".")
185
- p.add_argument("--detail", action="store_true", help="Include full raw runtime state in --json output")
186
- p.add_argument("--summary", action="store_true", help="Emit five-line human-readable triage summary")
187
- add_json(p)
188
- p.set_defaults(func=cmd_status)
189
-
190
- p = sub.add_parser("watch", help="Watch leader-visible team events")
191
- p.add_argument("--workspace", default=".")
192
- p.add_argument("--team", help="Explicit team/session selector when a workspace has multiple teams")
193
- p.set_defaults(func=cmd_watch)
194
-
195
- p = sub.add_parser("approvals", help="Show structured pending worker approval prompts")
196
- p.add_argument("agent", nargs="?")
197
- p.add_argument("--workspace", default=".")
198
- add_json(p)
199
- p.set_defaults(func=cmd_approvals)
200
-
201
- p = sub.add_parser("peek", help=argparse.SUPPRESS, description="Explicit raw-screen diagnostic only")
202
- p.add_argument("agent")
203
- p.add_argument("--workspace", default=".")
204
- p.add_argument(
205
- "--allow-raw-screen",
206
- action="store_true",
207
- help="Required after explicit user authorization to capture worker terminal output",
208
- )
209
- mode = p.add_mutually_exclusive_group(required=True)
210
- mode.add_argument("--head", type=int, help="Show the first N lines from the bounded recent capture")
211
- mode.add_argument("--tail", type=int, help="Show the last N lines")
212
- mode.add_argument("--search", help="Search the bounded recent capture and show matching context only")
213
- p.add_argument("--context", type=int, default=3, help="Context lines around --search matches, max 10")
214
- add_json(p)
215
- p.set_defaults(func=cmd_peek)
216
-
217
- p = sub.add_parser("inbox", help="Show message history for one agent")
218
- p.add_argument("agent")
219
- p.add_argument("--workspace", default=".")
220
- p.add_argument("--limit", type=int, default=20)
221
- p.add_argument(
222
- "--since",
223
- help="ISO 8601 timestamp; only show messages created at-or-after this time. "
224
- "Use the timestamp from claim-leader's inbox_hint to retrieve messages "
225
- "missed during a prior ambiguous-leader state.",
226
- )
227
- add_json(p)
228
- p.set_defaults(func=cmd_inbox)
229
-
230
- p = sub.add_parser("sessions", help=argparse.SUPPRESS)
231
- p.add_argument("--workspace", default=".")
232
- add_json(p)
233
- p.set_defaults(func=cmd_sessions)
234
-
235
- p = sub.add_parser("attach-leader", help=argparse.SUPPRESS)
236
- p.add_argument("--workspace", default=".")
237
- p.add_argument("--pane", help="Explicit tmux pane id or target, for example %%173")
238
- p.add_argument("--provider", default="codex")
239
- add_json(p)
240
- p.set_defaults(func=cmd_attach_leader)
241
-
242
- p = sub.add_parser("takeover", help="Claim ownership of an existing team (multi-leader same workspace)")
243
- p.add_argument("--workspace", default=".")
244
- p.add_argument("--team", help="Explicit team/session selector when a workspace has multiple teams")
245
- p.add_argument("--confirm", action="store_true", help="Required: confirm you intend to overwrite the recorded team_owner")
246
- add_json(p)
247
- p.set_defaults(func=cmd_takeover)
248
-
249
- p = sub.add_parser("claim-leader", help="Claim this pane as leader after ambiguous leader recovery")
250
- p.add_argument("--workspace", default=".")
251
- p.add_argument("--team", help="Explicit team/session selector when a workspace has multiple teams")
252
- p.add_argument("--confirm", action="store_true", help="Apply the claim; without this, show a dry-run summary")
253
- add_json(p)
254
- p.set_defaults(func=cmd_claim_leader)
255
-
256
- p = sub.add_parser("identity", help="Show leader identity diagnostics")
257
- p.add_argument("--workspace", default=".")
258
- p.add_argument("--team", help="Explicit team/session selector when a workspace has multiple teams")
259
- add_json(p)
260
- p.set_defaults(func=cmd_identity)
261
-
262
- p = sub.add_parser(
263
- "send",
264
- help="Send a message to an agent, task assignee, or attached leader",
265
- epilog=(
266
- "Canonical examples:\n"
267
- " team-agent send --task <task_id> --json \"<message>\"\n"
268
- " team-agent send --no-ack --json <agent_id> \"<message>\""
269
- ),
270
- formatter_class=argparse.RawDescriptionHelpFormatter,
271
- )
272
- p.send_order_hint = True
273
- p.add_argument("target", nargs="?")
274
- p.add_argument("message", nargs="+")
275
- p.add_argument("--to", dest="targets", help="Comma-separated fan-out recipients, for example agent_a,agent_b")
276
- p.add_argument("--workspace", default=".")
277
- p.add_argument("--team", help="Explicit team/session target when a workspace has multiple teams")
278
- p.add_argument("--task")
279
- p.add_argument("--from", dest="sender", default="leader")
280
- p.add_argument("--no-ack", action="store_true")
281
- p.add_argument("--no-wait", action="store_true", help="Return after injection without visible verification")
282
- p.add_argument(
283
- "--watch-result",
284
- action="store_true",
285
- help="Return after delivery and let the coordinator collect/report the task result asynchronously",
286
- )
287
- p.add_argument("--timeout", type=float, default=30.0)
288
- p.add_argument("--confirm-human", action="store_true", help="Confirm dispatch for a task marked human_confirmation: true")
289
- add_json(p)
290
- p.set_defaults(func=cmd_send)
291
-
292
- p = sub.add_parser("collect", help=argparse.SUPPRESS)
293
- p.add_argument("--workspace", default=".")
294
- p.add_argument("--result-file")
295
- add_json(p)
296
- p.set_defaults(func=cmd_collect)
297
-
298
- p = sub.add_parser("diagnose", help=argparse.SUPPRESS)
299
- p.add_argument("--workspace", default=".")
300
- add_json(p)
301
- p.set_defaults(func=cmd_diagnose)
302
-
303
- p = sub.add_parser("repair-state", help=argparse.SUPPRESS)
304
- p.add_argument("--workspace", default=".")
305
- p.add_argument("--task", required=True)
306
- p.add_argument("--assignee")
307
- p.add_argument("--status")
308
- p.add_argument("--summary")
309
- add_json(p)
310
- p.set_defaults(func=cmd_repair_state)
311
-
312
- p = sub.add_parser("validate-result", help=argparse.SUPPRESS)
313
- p.add_argument("result", nargs="?", help="JSON string. If omitted, read stdin.")
314
- p.add_argument("--file", help="Read JSON envelope from a file")
315
- add_json(p)
316
- p.set_defaults(func=cmd_validate_result)
317
-
318
- p = sub.add_parser(
319
- "doctor",
320
- help="Check local dependencies, providers, auth hints, tmux, and MCP",
321
- usage=(
322
- "team-agent doctor validates live pane binding consistency. Does NOT perform live runtime message "
323
- "round-trip. comms contract suite deferred to 0.2.9 (test files not shipped). "
324
- "(zero token, zero pollution) [options]"
325
- ),
326
- )
327
- p.add_argument("spec", nargs="?")
328
- p.add_argument("--workspace", default=".", help="Workspace whose team.db schema should be diagnosed")
329
- p.add_argument("--gate", choices=["orphans", "comms"], help="Run a CI-friendly doctor gate")
330
- p.add_argument(
331
- "--comms",
332
- action="store_true",
333
- help=(
334
- "Validate live pane binding consistency. Does NOT perform live runtime message round-trip. "
335
- "comms contract suite deferred to 0.2.9 (test files not shipped). (zero token, zero pollution)"
336
- ),
337
- )
338
- p.add_argument("--team", help="Explicit team/session target for --comms")
339
- p.add_argument("--fix", action="store_true", help="With --gate orphans: apply the gate fix")
340
- p.add_argument("--fix-schema", action="store_true", help="Rebuild drifted team.db table layouts after writing a backup")
341
- p.add_argument(
342
- "--cleanup-orphans",
343
- action="store_true",
344
- help="Scan for orphan team_agent.coordinator processes pointing at non-existent or "
345
- "ephemeral-tempdir workspaces (dry-run unless --confirm is also passed).",
346
- )
347
- p.add_argument(
348
- "--confirm",
349
- action="store_true",
350
- help="With --cleanup-orphans: send SIGTERM to each orphan (default is dry-run).",
351
- )
352
- add_json(p)
353
- p.set_defaults(func=cmd_doctor)
354
-
355
- p = sub.add_parser("shutdown", help="Shutdown team tmux session and keep logs")
356
- p.add_argument("--workspace", default=".")
357
- p.add_argument("--team", help="Explicit team/session target when a workspace has multiple teams")
358
- p.add_argument("--keep-logs", action="store_true", default=True)
359
- add_json(p)
360
- p.set_defaults(func=cmd_shutdown)
361
-
362
- p = sub.add_parser("restart", help="Restart a stopped team from stored worker sessions")
363
- p.add_argument("workspace", nargs="?", default=".")
364
- p.add_argument("--team", help="Restart a specific stored team/session when the workspace has multiple teams")
365
- p.add_argument("--allow-fresh", action="store_true", help="Allow fresh worker sessions if stored sessions cannot resume")
366
- add_json(p)
367
- p.set_defaults(func=cmd_restart)
368
-
369
- p = sub.add_parser("start-agent", help="Start or repair one worker in the current team")
370
- p.add_argument("agent")
371
- p.add_argument("--workspace", default=".")
372
- p.add_argument("--team", help="Explicit team/session target when a workspace has multiple teams")
373
- p.add_argument("--force", action="store_true", help="Replace an existing tmux window for this worker")
374
- p.add_argument("--allow-fresh", action="store_true", help="Allow a fresh session if the stored session cannot resume")
375
- p.add_argument("--no-display", action="store_true", help="Do not open a Ghostty display window")
376
- add_json(p)
377
- p.set_defaults(func=cmd_start_agent)
378
-
379
- p = sub.add_parser("stop-agent", help="Hard-stop one running worker while preserving its session for start-agent")
380
- p.add_argument("agent")
381
- p.add_argument("--workspace", default=".")
382
- p.add_argument("--team", help="Explicit team/session target when a workspace has multiple teams")
383
- add_json(p)
384
- p.set_defaults(func=cmd_stop_agent)
385
-
386
- p = sub.add_parser("reset-agent", help="Reset one worker to a fresh session after explicit confirmation")
387
- p.add_argument("agent")
388
- p.add_argument("--workspace", default=".")
389
- p.add_argument("--team", help="Explicit team/session target when a workspace has multiple teams")
390
- p.add_argument("--discard-session", action="store_true", help="Required: discard this worker's prior provider session")
391
- p.add_argument("--no-display", action="store_true", help="Do not update a Ghostty display window")
392
- add_json(p)
393
- p.set_defaults(func=cmd_reset_agent)
394
-
395
- p = sub.add_parser("add-agent", help="Add a first-class worker from an explicit workspace-relative role file")
396
- p.add_argument("agent")
397
- p.add_argument("--workspace", default=".")
398
- p.add_argument("--team", help="Explicit team/session target when a workspace has multiple teams")
399
- p.add_argument("--role-file", required=True, help="Workspace-relative YAML/Markdown agent entry")
400
- p.add_argument("--no-display", action="store_true", help="Do not open a Ghostty display window")
401
- add_json(p)
402
- p.set_defaults(func=cmd_add_agent)
403
-
404
- p = sub.add_parser("fork-agent", help="Fork a running worker using the provider's native branch/fork support")
405
- p.add_argument("source_agent")
406
- p.add_argument("--workspace", default=".")
407
- p.add_argument("--team", help="Explicit team/session target when a workspace has multiple teams")
408
- p.add_argument("--as", dest="as_agent", required=True, help="New worker agent id")
409
- p.add_argument("--label", help="Optional audit label")
410
- p.add_argument("--no-display", action="store_true", help="Do not open a Ghostty display window")
411
- add_json(p)
412
- p.set_defaults(func=cmd_fork_agent)
413
-
414
- p = sub.add_parser("remove-agent", help="Remove one worker from runtime state and team spec")
415
- p.add_argument("agent")
416
- p.add_argument("--workspace", default=".")
417
- p.add_argument("--team", help="Explicit team/session target when a workspace has multiple teams")
418
- p.add_argument("--from-spec", action="store_true", help="Allow removing a spec-native worker")
419
- p.add_argument("--confirm", action="store_true", help="Required with --from-spec")
420
- p.add_argument("--force", action="store_true", help="Stop a running worker before removing it")
421
- add_json(p)
422
- p.set_defaults(func=cmd_remove_agent)
423
-
424
- p = sub.add_parser("stuck-list", help="List manually suppressed idle-triggered alerts")
425
- p.add_argument("--workspace", default=".")
426
- add_json(p)
427
- p.set_defaults(func=cmd_stuck_list)
428
-
429
- p = sub.add_parser("stuck-cancel", help="Suppress repeated stuck/idle alerts for one agent")
430
- p.add_argument("agent")
431
- p.add_argument("--workspace", default=".")
432
- p.add_argument("--alert-type", choices=["stuck", "idle_fallback", "all"], default="stuck")
433
- add_json(p)
434
- p.set_defaults(func=cmd_stuck_cancel)
435
-
436
- p = sub.add_parser("acknowledge-idle", help="Suppress idle-fallback reminders for this team for a bounded window (default 30 minutes)")
437
- p.add_argument("team", nargs="?", help="Explicit team/session target when a workspace has multiple teams")
438
- p.add_argument("--workspace", default=".")
439
- add_json(p)
440
- p.set_defaults(func=cmd_acknowledge_idle)
441
-
442
- p = sub.add_parser("install-skill", help=argparse.SUPPRESS)
443
- p.add_argument("--target", choices=["codex", "claude", "all"], default="codex")
444
- p.add_argument("--dest", help="Explicit destination directory; overrides --target")
445
- p.add_argument("--dry-run", action="store_true")
446
- add_json(p)
447
- p.set_defaults(func=cmd_install_skill)
448
-
449
- p = sub.add_parser("e2e", help=argparse.SUPPRESS)
450
- p.add_argument("--providers", default="fake")
451
- p.add_argument("--workspace")
452
- p.add_argument("--real", action="store_true", help="Launch real provider CLIs; may use authenticated accounts")
453
- add_json(p)
454
- p.set_defaults(func=cmd_e2e)
455
-
456
- p = sub.add_parser("allow-peer-talk", help=argparse.SUPPRESS)
457
- p.add_argument("agent_a")
458
- p.add_argument("agent_b")
459
- p.add_argument("--workspace", default=".")
460
- add_json(p)
461
- p.set_defaults(func=cmd_allow_peer_talk)
462
-
463
- p = sub.add_parser(
464
- "run-overnight",
465
- help="Run an orchestrator plan that advances on report_result and halts on failure",
466
- )
467
- p.add_argument("--workspace", default=".")
468
- p.add_argument("--plan", help="Path to plan YAML (required unless --status without --plan-id)")
469
- p.add_argument("--no-start", action="store_true", help="Persist plan state without dispatching stage 1 (default: dispatch)")
470
- p.add_argument("--status", action="store_true", help="Show plan status instead of starting")
471
- p.add_argument("--halt", action="store_true", help="Halt the plan named by --plan-id")
472
- p.add_argument("--plan-id", help="Plan id for --status or --halt")
473
- p.add_argument("--reason", default="user_requested", help="Halt reason for --halt")
474
- add_json(p)
475
- p.set_defaults(func=cmd_run_overnight)
476
-
477
- p = sub.add_parser(
478
- "advanced",
479
- help=argparse.SUPPRESS,
480
- description="Low-level Team Agent commands",
481
- epilog=(
482
- "Commands: init validate compile profile launch preflight start wait-ready settle "
483
- "sessions attach-leader collect diagnose repair-state validate-result install-skill e2e"
484
- ),
485
- formatter_class=argparse.RawDescriptionHelpFormatter,
486
- )
487
- p.set_defaults(func=cmd_advanced)
488
-
489
- sub._choices_actions = [ # type: ignore[attr-defined]
490
- action for action in sub._choices_actions if action.help != argparse.SUPPRESS # type: ignore[attr-defined]
491
- ]
492
- sub.metavar = "{codex,claude,quick-start,send,status,watch,approvals,inbox,takeover,claim-leader,identity,shutdown,restart,start-agent,stop-agent,reset-agent,add-agent,fork-agent,remove-agent,stuck-list,stuck-cancel,acknowledge-idle,doctor}"
493
-
494
- args = parser.parse_args(raw_argv)
495
- try:
496
- result = args.func(args)
497
- except TeamAgentError as exc:
498
- _emit_cli_error(exc, args)
499
- raise SystemExit(1)
500
- except Exception as exc:
501
- _emit_cli_error(exc, args)
502
- raise SystemExit(1)
503
- summary = consume_leader_inbox_summary(_workspace_from_args(args))
504
- if summary:
505
- print(summary, file=sys.stderr if getattr(args, "json", False) else sys.stdout)
506
- emit(result, getattr(args, "json", False))
507
- if isinstance(result, dict) and result.get("ok") is False:
508
- raise SystemExit(1)
509
-
510
-
511
- def add_json(parser: argparse.ArgumentParser) -> None:
512
- parser.add_argument("--json", action="store_true", help="Emit stable machine-readable JSON")
513
-
514
-
515
- def _run_leader_passthrough(command: str, provider_args: list[str]) -> None:
516
- if provider_args in (["-h"], ["--help"]):
517
- print(f"usage: team-agent {command} [--attach --confirm | --attach-session SESSION --confirm] [args passed to {command}]")
518
- print()
519
- print(f"Start a tmux-managed {command} leader in the current directory.")
520
- print("Default starts a new independent leader session; explicit attach requires --confirm.")
521
- print(f"Use `team-agent {command} -- --help` to pass --help to the provider CLI.")
522
- return
523
- args = argparse.Namespace(command=command, workspace=".")
524
- try:
525
- provider = "codex" if command == "codex" else "claude_code"
526
- launcher_args = _leader_launcher_args(provider_args)
527
- runtime.start_leader(
528
- provider,
529
- _provider_args(launcher_args["provider_args"]),
530
- Path.cwd().resolve(),
531
- attach_existing=launcher_args["attach_existing"],
532
- confirm_attach=launcher_args["confirm_attach"],
533
- attach_session=launcher_args["attach_session"],
534
- )
535
- except TeamAgentError as exc:
536
- _emit_cli_error(exc, args)
537
- raise SystemExit(1)
538
- except Exception as exc:
539
- _emit_cli_error(exc, args)
540
- raise SystemExit(1)