@team-agent/installer 0.2.11 → 0.3.0

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 +1077 -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 +1141 -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 +436 -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 +1063 -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 +525 -0
  59. package/crates/team-agent/src/leader/rediscover.rs +1099 -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 +234 -0
  64. package/crates/team-agent/src/leader/tests/identity.rs +206 -0
  65. package/crates/team-agent/src/leader/tests/idle.rs +271 -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 +253 -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 +487 -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 +1833 -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 +933 -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 +685 -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 +159 -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 +388 -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 +542 -0
  110. package/crates/team-agent/src/messaging/helpers.rs +209 -0
  111. package/crates/team-agent/src/messaging/leader_receiver.rs +340 -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 +537 -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 +582 -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 +656 -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 +586 -0
  172. package/crates/team-agent/src/tmux_backend.rs +758 -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 +90 -106
  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
package/npm/install.mjs CHANGED
@@ -1,12 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { spawnSync } from "node:child_process";
3
3
  import fs from "node:fs";
4
+ import { createRequire } from "node:module";
4
5
  import os from "node:os";
5
6
  import path from "node:path";
6
7
  import { fileURLToPath } from "node:url";
7
8
 
8
9
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
10
  const packageRoot = path.resolve(__dirname, "..");
11
+ const require = createRequire(import.meta.url);
10
12
  const packageJson = JSON.parse(fs.readFileSync(path.join(packageRoot, "package.json"), "utf8"));
11
13
 
12
14
  const command = process.argv[2] || "install";
@@ -17,16 +19,21 @@ if (["-h", "--help", "help"].includes(command)) {
17
19
  process.exit(0);
18
20
  }
19
21
 
20
- if (command === "install" || command === "update") {
21
- install(args);
22
- } else if (command === "doctor") {
23
- runDoctor(args);
24
- } else if (command === "uninstall") {
25
- uninstall(args);
26
- } else {
27
- console.error(`unknown command: ${command}`);
28
- printHelp();
29
- process.exit(2);
22
+ try {
23
+ if (command === "install" || command === "update") {
24
+ install(args);
25
+ } else if (command === "doctor") {
26
+ runDoctor(args);
27
+ } else if (command === "uninstall") {
28
+ uninstall(args);
29
+ } else {
30
+ console.error(`unknown command: ${command}`);
31
+ printHelp();
32
+ process.exit(2);
33
+ }
34
+ } catch (error) {
35
+ console.error(error instanceof Error ? error.message : String(error));
36
+ process.exit(1);
30
37
  }
31
38
 
32
39
  function printHelp() {
@@ -40,14 +47,12 @@ Usage:
40
47
  Options:
41
48
  --prefix <dir> wrapper install prefix, default ~/.local
42
49
  --runtime-dir <dir> stable runtime root, default ~/.team-agent/runtime
43
- --python <path> Python executable, otherwise TEAM_AGENT_PYTHON, python3, python
44
50
  --purge-runtime uninstall also removes the runtime root
45
51
  `);
46
52
  }
47
53
 
48
54
  function install(argv) {
49
55
  const opts = parseOptions(argv);
50
- const python = resolvePython(opts.python);
51
56
  const prefix = path.resolve(expandHome(opts.prefix || path.join(os.homedir(), ".local")));
52
57
  const binDir = path.join(prefix, "bin");
53
58
  const runtimeRoot = path.resolve(expandHome(opts.runtimeDir || path.join(os.homedir(), ".team-agent", "runtime")));
@@ -55,35 +60,31 @@ function install(argv) {
55
60
  const dest = path.join(runtimeRoot, version);
56
61
  const tmp = path.join(runtimeRoot, `.${version}.${process.pid}.tmp`);
57
62
  const backup = path.join(runtimeRoot, `.${version}.previous`);
63
+ const platformBinary = resolvePlatformBinary();
58
64
 
59
65
  fs.mkdirSync(runtimeRoot, { recursive: true });
60
66
  fs.rmSync(tmp, { recursive: true, force: true });
61
- copyTree(packageRoot, tmp);
67
+ fs.mkdirSync(path.join(tmp, "bin"), { recursive: true });
68
+ copyExecutable(platformBinary.path, path.join(tmp, "bin", "team-agent"));
69
+
62
70
  fs.rmSync(backup, { recursive: true, force: true });
63
71
  if (fs.existsSync(dest)) {
64
72
  fs.renameSync(dest, backup);
65
73
  }
66
74
  fs.renameSync(tmp, dest);
67
75
 
76
+ const runtimeBinary = path.join(dest, "bin", "team-agent");
68
77
  fs.mkdirSync(binDir, { recursive: true });
69
- writeWrapper(path.join(binDir, "team-agent"), dest, "team_agent", python);
70
- writeWrapper(path.join(binDir, "team_orchestrator"), dest, "team_agent.mcp_server", python);
71
- writeWrapper(path.join(binDir, "team-agent-coordinator"), dest, "team_agent.coordinator", python);
78
+ writeExecWrapper(path.join(binDir, "team-agent"), runtimeBinary, []);
79
+ writeExecWrapper(path.join(binDir, "team_orchestrator"), runtimeBinary, ["mcp-server"]);
80
+ writeExecWrapper(path.join(binDir, "team-agent-coordinator"), runtimeBinary, ["coordinator"]);
81
+ installSkills();
72
82
 
73
83
  const teamAgent = path.join(binDir, "team-agent");
74
- const skill = spawnSync(teamAgent, ["install-skill", "--target", "all"], {
75
- text: true,
76
- encoding: "utf8",
77
- });
78
- if (skill.status !== 0) {
79
- process.stderr.write(skill.stderr || skill.stdout || "team-agent install-skill failed\n");
80
- process.exit(skill.status || 1);
81
- }
82
-
83
84
  console.log(`installed: ${teamAgent}`);
84
85
  console.log(`runtime: ${dest}`);
85
- console.log(`python: ${python}`);
86
- console.log(`skill: installed for Codex and Claude`);
86
+ console.log(`binary: ${platformBinary.packageName}`);
87
+ console.log("skill: installed for Codex and Claude");
87
88
  console.log(`PATH: ensure ${binDir} is on PATH`);
88
89
 
89
90
  const doctor = spawnSync(teamAgent, ["doctor", "--json"], { text: true, encoding: "utf8" });
@@ -103,7 +104,7 @@ function runDoctor(argv) {
103
104
  process.exit(1);
104
105
  }
105
106
  const proc = spawnSync(teamAgent, ["doctor"], { stdio: "inherit" });
106
- process.exit(proc.status || 0);
107
+ process.exit(proc.status ?? 1);
107
108
  }
108
109
 
109
110
  function uninstall(argv) {
@@ -112,10 +113,7 @@ function uninstall(argv) {
112
113
  for (const name of ["team-agent", "team_orchestrator", "team-agent-coordinator"]) {
113
114
  fs.rmSync(path.join(prefix, "bin", name), { force: true });
114
115
  }
115
- for (const skillDir of [
116
- path.join(os.homedir(), ".codex", "skills", "team-agent"),
117
- path.join(os.homedir(), ".claude", "skills", "team-agent"),
118
- ]) {
116
+ for (const skillDir of skillDestinations()) {
119
117
  fs.rmSync(skillDir, { recursive: true, force: true });
120
118
  }
121
119
  console.log(`removed wrappers from ${path.join(prefix, "bin")}`);
@@ -135,16 +133,12 @@ function parseOptions(argv) {
135
133
  const item = argv[i];
136
134
  if (item === "--prefix") {
137
135
  opts.prefix = argv[++i];
138
- } else if (item.startsWith("--prefix=")) {
136
+ } else if (item?.startsWith("--prefix=")) {
139
137
  opts.prefix = item.slice("--prefix=".length);
140
138
  } else if (item === "--runtime-dir") {
141
139
  opts.runtimeDir = argv[++i];
142
- } else if (item.startsWith("--runtime-dir=")) {
140
+ } else if (item?.startsWith("--runtime-dir=")) {
143
141
  opts.runtimeDir = item.slice("--runtime-dir=".length);
144
- } else if (item === "--python") {
145
- opts.python = argv[++i];
146
- } else if (item.startsWith("--python=")) {
147
- opts.python = item.slice("--python=".length);
148
142
  } else if (item === "--purge-runtime") {
149
143
  opts.purgeRuntime = true;
150
144
  } else {
@@ -154,88 +148,78 @@ function parseOptions(argv) {
154
148
  return opts;
155
149
  }
156
150
 
157
- function resolvePython(explicit) {
158
- const candidates = pythonCandidates(explicit);
159
- for (const candidate of candidates) {
160
- const resolved = path.isAbsolute(candidate) ? candidate : which(candidate) || candidate;
161
- if (!resolved) {
162
- continue;
163
- }
164
- const proc = spawnSync(resolved, ["-c", "import sys; raise SystemExit(0 if sys.version_info >= (3, 10) else 1)"], {
165
- text: true,
166
- encoding: "utf8",
167
- });
168
- if (proc.status === 0) {
169
- return resolved;
170
- }
151
+ function resolvePlatformBinary() {
152
+ const packageName = platformPackageName();
153
+ if (!packageName) {
154
+ printUnsupportedPlatform();
155
+ process.exit(1);
156
+ }
157
+ const binarySpec = `${packageName}/bin/team-agent`;
158
+ try {
159
+ return {
160
+ packageName,
161
+ path: require.resolve(binarySpec),
162
+ };
163
+ } catch {
164
+ console.error(`ERROR: Team Agent binary package not installed for ${process.platform}/${process.arch}`);
165
+ console.error("ACTION: rerun without --no-optional, or use a supported macOS/Linux/WSL platform.");
166
+ console.error(`LOG: package=${packageName} node=${process.version} platform=${process.platform} arch=${process.arch}`);
167
+ process.exit(1);
171
168
  }
172
- console.error("No usable Python >= 3.10 found. Set TEAM_AGENT_PYTHON or pass --python.");
173
- process.exit(1);
174
169
  }
175
170
 
176
- function pythonCandidates(explicit) {
177
- const candidates = [explicit, process.env.TEAM_AGENT_PYTHON, "python3", "python"];
178
- const commonPaths = [
179
- "/opt/homebrew/bin/python3",
180
- "/usr/local/bin/python3",
181
- "/usr/bin/python3",
182
- "/opt/homebrew/opt/python@3/bin/python3",
183
- "/usr/local/opt/python@3/bin/python3",
184
- ];
185
- candidates.push(...commonPaths);
186
- for (const root of ["/opt/homebrew/opt", "/usr/local/opt"]) {
187
- try {
188
- for (const entry of fs.readdirSync(root)) {
189
- if (!entry.startsWith("python@")) {
190
- continue;
191
- }
192
- const bin = path.join(root, entry, "bin");
193
- for (const name of fs.readdirSync(bin)) {
194
- if (/^python3(\.\d+)?$/.test(name)) {
195
- candidates.push(path.join(bin, name));
196
- }
197
- }
198
- }
199
- } catch {
200
- continue;
201
- }
202
- }
203
- return [...new Set(candidates.filter(Boolean))];
171
+ function platformPackageName() {
172
+ const key = `${process.platform}-${process.arch}`;
173
+ const packages = {
174
+ "darwin-arm64": "@team-agent/cli-darwin-arm64",
175
+ "darwin-x64": "@team-agent/cli-darwin-x64",
176
+ "linux-x64": "@team-agent/cli-linux-x64",
177
+ };
178
+ return packages[key] || null;
204
179
  }
205
180
 
206
- function which(commandName) {
207
- for (const directory of (process.env.PATH || "").split(path.delimiter)) {
208
- if (!directory) {
209
- continue;
210
- }
211
- const candidate = path.join(directory, commandName);
212
- try {
213
- fs.accessSync(candidate, fs.constants.X_OK);
214
- return candidate;
215
- } catch {
216
- continue;
217
- }
218
- }
219
- return null;
181
+ function printUnsupportedPlatform() {
182
+ console.error(`ERROR: unsupported Team Agent platform ${process.platform}/${process.arch}.`);
183
+ console.error("ACTION: supported platforms are darwin/arm64, darwin/x64, and linux/x64.");
184
+ console.error(`LOG: node=${process.version} platform=${process.platform} arch=${process.arch}`);
220
185
  }
221
186
 
222
- function writeWrapper(file, runtimeDir, moduleName, python) {
187
+ function copyExecutable(src, dest) {
188
+ fs.copyFileSync(src, dest);
189
+ fs.chmodSync(dest, 0o755);
190
+ }
191
+
192
+ function writeExecWrapper(file, binary, fixedArgs) {
193
+ const args = fixedArgs.map(shellQuote).join(" ");
194
+ const argPrefix = args ? `${args} ` : "";
223
195
  const content = `#!/usr/bin/env sh
224
- PYTHON_BIN="\${TEAM_AGENT_PYTHON:-${doubleQuoteValue(python)}}"
225
- PYTHONPATH="${doubleQuoteValue(path.join(runtimeDir, "src"))}" exec "$PYTHON_BIN" -m ${moduleName} "$@"
196
+ exec ${shellQuote(binary)} ${argPrefix}"$@"
226
197
  `;
227
198
  fs.writeFileSync(file, content, { mode: 0o755 });
228
199
  fs.chmodSync(file, 0o755);
229
200
  }
230
201
 
202
+ function installSkills() {
203
+ const source = path.join(packageRoot, "skills", "team-agent");
204
+ if (!fs.existsSync(source)) {
205
+ throw new Error(`skill source not found: ${source}`);
206
+ }
207
+ for (const dest of skillDestinations()) {
208
+ fs.rmSync(dest, { recursive: true, force: true });
209
+ copyTree(source, dest);
210
+ }
211
+ }
212
+
213
+ function skillDestinations() {
214
+ return [
215
+ path.join(os.homedir(), ".codex", "skills", "team-agent"),
216
+ path.join(os.homedir(), ".claude", "skills", "team-agent"),
217
+ ];
218
+ }
219
+
231
220
  function copyTree(src, dest) {
232
- const ignored = new Set([".git", ".team", "node_modules", "__pycache__", ".pytest_cache", ".venv"]);
233
221
  const stat = fs.lstatSync(src);
234
222
  if (stat.isDirectory()) {
235
- const name = path.basename(src);
236
- if (ignored.has(name) || src.endsWith(path.join("team-agent-core", "target"))) {
237
- return;
238
- }
239
223
  fs.mkdirSync(dest, { recursive: true, mode: stat.mode });
240
224
  for (const entry of fs.readdirSync(src)) {
241
225
  if (entry === ".DS_Store") {
@@ -261,6 +245,6 @@ function expandHome(value) {
261
245
  return value;
262
246
  }
263
247
 
264
- function doubleQuoteValue(value) {
265
- return String(value).replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\$/g, "\\$").replace(/`/g, "\\`");
248
+ function shellQuote(value) {
249
+ return `'${String(value).replace(/'/g, "'\\''")}'`;
266
250
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@team-agent/installer",
3
- "version": "0.2.11",
3
+ "version": "0.3.0",
4
4
  "description": "npx installer for Team Agent",
5
5
  "keywords": [
6
6
  "codex",
@@ -19,33 +19,35 @@
19
19
  "bin": {
20
20
  "team-agent-installer": "npm/install.mjs"
21
21
  },
22
+ "optionalDependencies": {
23
+ "@team-agent/cli-darwin-arm64": "0.3.0",
24
+ "@team-agent/cli-darwin-x64": "0.3.0",
25
+ "@team-agent/cli-linux-x64": "0.3.0"
26
+ },
22
27
  "scripts": {
23
28
  "postinstall": "node npm/bincheck.mjs",
24
- "test": "PYTHONPATH=src python3 tests/run_tests.py",
25
- "test:regression": "PYTHONPATH=src python3 scripts/run_regression_tests.py --iterations 3",
26
- "test:rust": "cargo test --manifest-path crates/team-agent-core/Cargo.toml",
29
+ "test": "cargo test --workspace --locked",
30
+ "build:release": "cargo build --release --bin team-agent --locked",
27
31
  "pack:dry-run": "npm pack --dry-run"
28
32
  },
29
33
  "files": [
30
- "npm",
31
- "scripts",
32
- "src",
34
+ "npm/bincheck.mjs",
35
+ "npm/install.mjs",
33
36
  "skills",
34
37
  "templates",
35
38
  "examples",
36
39
  "schemas",
37
- "crates/team-agent-core/Cargo.toml",
38
- "crates/team-agent-core/src",
39
- "pyproject.toml",
40
+ "Cargo.toml",
41
+ "Cargo.lock",
42
+ "crates/team-agent/Cargo.toml",
43
+ "crates/team-agent/src",
40
44
  "README.md",
41
45
  "README.zh.md",
42
46
  "LICENSE",
43
- "!**/__pycache__/**",
44
- "!**/*.pyc",
45
47
  "!**/target/**"
46
48
  ],
47
49
  "engines": {
48
50
  "node": ">=18"
49
51
  },
50
- "license": "AGPL-3.0-or-later"
52
+ "license": "AGPL-3.0"
51
53
  }
@@ -1,12 +0,0 @@
1
- [package]
2
- name = "team-agent-core"
3
- version = "0.1.0"
4
- edition = "2021"
5
-
6
- [lib]
7
- name = "team_agent_core"
8
- path = "src/lib.rs"
9
-
10
- [[bin]]
11
- name = "team-agent-core"
12
- path = "src/main.rs"