@team-agent/installer 0.2.10 → 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 -83
  203. package/src/team_agent/coordinator/lifecycle.py +0 -363
  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 -200
  226. package/src/team_agent/idle_takeover.py +0 -59
  227. package/src/team_agent/idle_takeover_wiring.py +0 -111
  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 -254
  255. package/src/team_agent/messaging/delivery.py +0 -473
  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 -457
  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 -86
  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 -1239
  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 -143
  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 -602
  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,163 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import os
4
- import shlex
5
- from pathlib import Path
6
- from typing import Any
7
-
8
- from team_agent.paths import repo_root
9
- from team_agent.profiles import ensure_compatible_claude_mcp_config, prepare_agent_profile_launch
10
- from team_agent.provider_cli.adapter import (
11
- ProviderAdapter,
12
- ResumeUnavailable,
13
- agent_model,
14
- parse_time,
15
- read_json_object,
16
- )
17
- from team_agent.provider_cli.claude import ClaudeCodeAdapter
18
- from team_agent.provider_cli.codex import CodexAdapter
19
- from team_agent.provider_cli.fake import FakeAdapter
20
- from team_agent.provider_cli.gemini import GeminiCliAdapter
21
- from team_agent.provider_cli.prompt import TEAMMATE_SYSTEM_PROMPT, compile_system_prompt
22
-
23
- # Import-time assertions: every re-exported symbol must resolve at import,
24
- # so a refactor that drops one of these provider_cli APIs fails loudly here
25
- # instead of silently breaking callers that still import from providers.
26
- assert issubclass(ClaudeCodeAdapter, ProviderAdapter)
27
- assert issubclass(CodexAdapter, ProviderAdapter)
28
- assert issubclass(GeminiCliAdapter, ProviderAdapter)
29
- assert issubclass(FakeAdapter, ProviderAdapter)
30
- assert callable(compile_system_prompt)
31
- assert isinstance(TEAMMATE_SYSTEM_PROMPT, str)
32
- assert callable(agent_model)
33
- assert callable(parse_time)
34
- assert callable(read_json_object)
35
- assert issubclass(ResumeUnavailable, RuntimeError)
36
-
37
-
38
- ADAPTERS: dict[str, ProviderAdapter] = {
39
- "claude": ClaudeCodeAdapter(),
40
- "claude_code": ClaudeCodeAdapter(),
41
- "codex": CodexAdapter(),
42
- "gemini_cli": GeminiCliAdapter(),
43
- "fake": FakeAdapter(),
44
- }
45
-
46
-
47
- def get_adapter(provider: str) -> ProviderAdapter:
48
- try:
49
- return ADAPTERS[provider]
50
- except KeyError as exc:
51
- raise KeyError(f"Unsupported provider: {provider}") from exc
52
-
53
-
54
- def shell_command_for_agent(agent: dict[str, Any], workspace: Path, mcp_config: dict[str, Any]) -> str:
55
- adapter = get_adapter(agent["provider"])
56
- command_agent = dict(agent)
57
- profile_launch = command_agent.get("_provider_profile") or prepare_agent_profile_launch(workspace, command_agent)
58
- if profile_launch:
59
- command_agent["_provider_profile"] = profile_launch
60
- agent["_provider_profile"] = profile_launch
61
- if (
62
- agent.get("provider") in {"claude", "claude_code"}
63
- and profile_launch
64
- and profile_launch.get("auth_mode") == "compatible_api"
65
- and profile_launch.get("claude_projects_root")
66
- ):
67
- ensure_compatible_claude_mcp_config(workspace, agent["id"], mcp_config)
68
- cmd = adapter.build_command(command_agent, workspace, mcp_config)
69
- if command_agent.get("_session_id"):
70
- agent["_session_id"] = command_agent["_session_id"]
71
- return shell_command(cmd, agent["id"], workspace, profile_launch)
72
-
73
-
74
- def shell_resume_command_for_agent(
75
- agent: dict[str, Any],
76
- agent_state: dict[str, Any],
77
- workspace: Path,
78
- mcp_config: dict[str, Any],
79
- ) -> str:
80
- adapter = get_adapter(agent["provider"])
81
- command_agent = dict(agent)
82
- profile_launch = command_agent.get("_provider_profile") or prepare_agent_profile_launch(workspace, command_agent)
83
- if profile_launch:
84
- command_agent["_provider_profile"] = profile_launch
85
- agent["_provider_profile"] = profile_launch
86
- if (
87
- agent.get("provider") in {"claude", "claude_code"}
88
- and profile_launch
89
- and profile_launch.get("auth_mode") == "compatible_api"
90
- and profile_launch.get("claude_projects_root")
91
- ):
92
- ensure_compatible_claude_mcp_config(workspace, agent["id"], mcp_config)
93
- resume_state = dict(agent_state)
94
- resume_state["_agent_spec"] = command_agent
95
- cmd = adapter.build_resume_command(resume_state, workspace, mcp_config)
96
- return shell_command(cmd, agent["id"], workspace, profile_launch)
97
-
98
-
99
- def shell_fork_command_for_agent(
100
- agent: dict[str, Any],
101
- source_session_id: str,
102
- workspace: Path,
103
- mcp_config: dict[str, Any],
104
- ) -> str:
105
- adapter = get_adapter(agent["provider"])
106
- command_agent = dict(agent)
107
- profile_launch = command_agent.get("_provider_profile") or prepare_agent_profile_launch(workspace, command_agent)
108
- if profile_launch:
109
- command_agent["_provider_profile"] = profile_launch
110
- agent["_provider_profile"] = profile_launch
111
- if (
112
- agent.get("provider") in {"claude", "claude_code"}
113
- and profile_launch
114
- and profile_launch.get("auth_mode") == "compatible_api"
115
- and profile_launch.get("claude_projects_root")
116
- ):
117
- ensure_compatible_claude_mcp_config(workspace, agent["id"], mcp_config)
118
- cmd = adapter.build_fork_command(command_agent, source_session_id, workspace, mcp_config)
119
- if command_agent.get("_session_id"):
120
- agent["_session_id"] = command_agent["_session_id"]
121
- return shell_command(cmd, agent["id"], workspace, profile_launch)
122
-
123
-
124
- def shell_command(
125
- cmd: list[str],
126
- agent_id: str,
127
- workspace: Path,
128
- profile_launch: dict[str, Any] | None = None,
129
- ) -> str:
130
- env = {
131
- "TEAM_AGENT_ID": agent_id,
132
- "TEAM_AGENT_WORKSPACE": str(workspace),
133
- "PYTHONPATH": str(repo_root() / "src"),
134
- }
135
- if os.environ.get("PATH"):
136
- # tmux commands inherit the tmux server's old environment, not the
137
- # current Codex shell. Preserve PATH so local wrappers such as
138
- # ~/.local/bin/codex remain effective without logging proxy secrets.
139
- env["PATH"] = os.environ["PATH"]
140
- exports = " ".join(f"{key}={shlex.quote(value)}" for key, value in env.items())
141
- source_profile = ""
142
- env_file = profile_launch.get("env_file") if profile_launch else None
143
- if env_file:
144
- source_profile = f". {shlex.quote(str(env_file))} && "
145
- return f"cd {shlex.quote(str(workspace))} && export {exports} && {source_profile}exec {shlex.join(cmd)}"
146
-
147
-
148
- __all__ = [
149
- "ADAPTERS",
150
- "ClaudeCodeAdapter",
151
- "CodexAdapter",
152
- "FakeAdapter",
153
- "GeminiCliAdapter",
154
- "ProviderAdapter",
155
- "ResumeUnavailable",
156
- "TEAMMATE_SYSTEM_PROMPT",
157
- "compile_system_prompt",
158
- "get_adapter",
159
- "shell_command",
160
- "shell_command_for_agent",
161
- "shell_fork_command_for_agent",
162
- "shell_resume_command_for_agent",
163
- ]
@@ -1,104 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import json
4
- from dataclasses import dataclass
5
- from pathlib import Path
6
- from typing import Any, Iterable
7
-
8
-
9
- @dataclass(frozen=True)
10
- class LineCountResult:
11
- path: str
12
- lines: int
13
- allowed: bool
14
- reason: str | None = None
15
-
16
-
17
- ALLOWLIST_KEYS = {"approved_exceptions", "temporary_debt"}
18
-
19
-
20
- def parse_line_count_allowlist_payload(payload: object, *, source: str = "line-count allowlist") -> dict[str, dict[str, Any]]:
21
- if not isinstance(payload, dict):
22
- raise ValueError(f"{source}: line-count allowlist must be a JSON object")
23
- unexpected = sorted(set(payload) - ALLOWLIST_KEYS)
24
- if unexpected:
25
- keys = ", ".join(unexpected)
26
- expected = ", ".join(sorted(ALLOWLIST_KEYS))
27
- raise ValueError(f"{source}: unexpected top-level key(s): {keys}; expected new schema keys: {expected}")
28
- approved = payload.get("approved_exceptions", {})
29
- temporary = payload.get("temporary_debt", {})
30
- if not isinstance(approved, dict):
31
- raise ValueError(f"{source}: approved_exceptions must be an object")
32
- if not isinstance(temporary, dict):
33
- raise ValueError(f"{source}: temporary_debt must be an object")
34
- for file_path, entry in approved.items():
35
- if not isinstance(entry, dict):
36
- raise ValueError(f"{source}: approved exception for {file_path} must be an object")
37
- max_lines = entry.get("max_lines")
38
- if not isinstance(max_lines, int) or max_lines < 1:
39
- raise ValueError(f"{source}: approved exception for {file_path} must declare positive integer max_lines")
40
- return {"approved_exceptions": approved, "temporary_debt": temporary}
41
-
42
-
43
- def load_line_count_allowlist(path: Path) -> dict[str, dict[str, Any]]:
44
- text = path.read_text(encoding="utf-8").strip()
45
- if not text:
46
- return {"approved_exceptions": {}, "temporary_debt": {}}
47
- try:
48
- data = json.loads(text)
49
- except json.JSONDecodeError as exc:
50
- raise ValueError(f"{path}: invalid JSON in line-count allowlist: {exc}") from exc
51
- return parse_line_count_allowlist_payload(data, source=str(path))
52
-
53
-
54
- def check_python_file_line_counts(
55
- root: Path,
56
- *,
57
- allowlist_path: Path,
58
- include_roots: Iterable[str] = ("src/team_agent", "tests"),
59
- max_lines: int = 500,
60
- ) -> list[LineCountResult]:
61
- allowlist = load_line_count_allowlist(allowlist_path)
62
- approved = allowlist["approved_exceptions"]
63
- results: list[LineCountResult] = []
64
- for relative_path in _iter_python_files(root, include_roots):
65
- full_path = root / relative_path
66
- line_count = _line_count(full_path)
67
- entry = approved.get(relative_path)
68
- if line_count <= max_lines:
69
- results.append(LineCountResult(relative_path, line_count, allowed=True))
70
- continue
71
- if entry:
72
- allowed_max = int(entry["max_lines"])
73
- results.append(
74
- LineCountResult(
75
- relative_path,
76
- line_count,
77
- allowed=line_count <= allowed_max,
78
- reason=str(entry.get("reason") or ""),
79
- )
80
- )
81
- continue
82
- results.append(LineCountResult(relative_path, line_count, allowed=False))
83
- return results
84
-
85
-
86
- def line_count_failures(results: Iterable[LineCountResult]) -> list[LineCountResult]:
87
- return [result for result in results if not result.allowed]
88
-
89
-
90
- def _iter_python_files(root: Path, include_roots: Iterable[str]) -> list[str]:
91
- paths: list[str] = []
92
- for include_root in include_roots:
93
- base = root / include_root
94
- if not base.exists():
95
- continue
96
- for path in base.rglob("*.py"):
97
- if "__pycache__" in path.parts:
98
- continue
99
- paths.append(path.relative_to(root).as_posix())
100
- return sorted(paths)
101
-
102
-
103
- def _line_count(path: Path) -> int:
104
- return len(path.read_text(encoding="utf-8").splitlines())
@@ -1,34 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from team_agent.restart.orchestration import restart, rollback_restart_session
4
- from team_agent.restart.selection import (
5
- format_restart_candidates,
6
- quick_start_existing_context,
7
- restart_candidate_from_state,
8
- restart_candidates,
9
- select_restart_state,
10
- state_has_restart_context,
11
- )
12
- from team_agent.restart.snapshot import (
13
- load_snapshot_state,
14
- safe_snapshot_name,
15
- save_team_runtime_snapshot,
16
- state_team_name,
17
- team_runtime_snapshot_dir,
18
- )
19
-
20
- __all__ = [
21
- "format_restart_candidates",
22
- "load_snapshot_state",
23
- "quick_start_existing_context",
24
- "restart",
25
- "restart_candidate_from_state",
26
- "restart_candidates",
27
- "rollback_restart_session",
28
- "safe_snapshot_name",
29
- "save_team_runtime_snapshot",
30
- "select_restart_state",
31
- "state_has_restart_context",
32
- "state_team_name",
33
- "team_runtime_snapshot_dir",
34
- ]