code-coordinator 0.5.46__py3-none-any.whl

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 (295) hide show
  1. code_coordinator-0.5.46.dist-info/METADATA +625 -0
  2. code_coordinator-0.5.46.dist-info/RECORD +295 -0
  3. code_coordinator-0.5.46.dist-info/WHEEL +5 -0
  4. code_coordinator-0.5.46.dist-info/entry_points.txt +2 -0
  5. code_coordinator-0.5.46.dist-info/licenses/LICENSE +110 -0
  6. code_coordinator-0.5.46.dist-info/top_level.txt +1 -0
  7. coord/__init__.py +176 -0
  8. coord/_board_mapping.py +229 -0
  9. coord/acceptance.py +468 -0
  10. coord/acceptance_drivers.py +632 -0
  11. coord/agent.py +7517 -0
  12. coord/agent_app.py +1555 -0
  13. coord/agent_update.py +417 -0
  14. coord/agents/opencode/.gitignore +13 -0
  15. coord/agents/opencode/agents/work.md +129 -0
  16. coord/agents/opencode/routing.jsonc +49 -0
  17. coord/audit.py +301 -0
  18. coord/auto_loop.py +1440 -0
  19. coord/board_bool_guard.py +72 -0
  20. coord/board_service.py +141 -0
  21. coord/board_wire.py +309 -0
  22. coord/brain.py +581 -0
  23. coord/branch_model.py +214 -0
  24. coord/cargo_cache.py +258 -0
  25. coord/ci_github.py +386 -0
  26. coord/ci_store.py +560 -0
  27. coord/claim.py +353 -0
  28. coord/cli.py +454 -0
  29. coord/client.py +610 -0
  30. coord/commands/__init__.py +1 -0
  31. coord/commands/_common.py +329 -0
  32. coord/commands/acceptance.py +916 -0
  33. coord/commands/agent_ops.py +1339 -0
  34. coord/commands/audit.py +131 -0
  35. coord/commands/chat.py +320 -0
  36. coord/commands/dispatch.py +1780 -0
  37. coord/commands/dispatch_workers.py +4894 -0
  38. coord/commands/drive.py +616 -0
  39. coord/commands/drive_queue.py +1203 -0
  40. coord/commands/gate_a.py +217 -0
  41. coord/commands/gates.py +89 -0
  42. coord/commands/issues.py +681 -0
  43. coord/commands/lifecycle.py +513 -0
  44. coord/commands/merge.py +1900 -0
  45. coord/commands/milestone.py +2081 -0
  46. coord/commands/plan_followup.py +1243 -0
  47. coord/commands/plans.py +156 -0
  48. coord/commands/release.py +2232 -0
  49. coord/commands/report.py +341 -0
  50. coord/commands/review.py +1523 -0
  51. coord/commands/scorecard.py +252 -0
  52. coord/commands/sessions.py +1930 -0
  53. coord/commands/setup.py +576 -0
  54. coord/commands/status.py +2089 -0
  55. coord/commands/terminal.py +385 -0
  56. coord/commands/test_gate.py +775 -0
  57. coord/commands/tui.py +288 -0
  58. coord/comments.py +718 -0
  59. coord/config.py +3032 -0
  60. coord/conflict_fix.py +633 -0
  61. coord/dao.py +483 -0
  62. coord/dashboard/__init__.py +0 -0
  63. coord/dashboard/fixture.py +376 -0
  64. coord/dashboard/index.html +658 -0
  65. coord/dashboard/server.py +1894 -0
  66. coord/dashboard/terminal.py +382 -0
  67. coord/dashboard/webapp/.gitignore +9 -0
  68. coord/dashboard/webapp/components.json +17 -0
  69. coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +71 -0
  70. coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +32 -0
  71. coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +63 -0
  72. coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +184 -0
  73. coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +1 -0
  74. coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +2 -0
  75. coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
  76. coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
  77. coord/dashboard/webapp/dist/icons/icon.svg +5 -0
  78. coord/dashboard/webapp/dist/index.html +38 -0
  79. coord/dashboard/webapp/dist/manifest.webmanifest +1 -0
  80. coord/dashboard/webapp/dist/sw.js +1 -0
  81. coord/dashboard/webapp/dist/workbox-e4022e15.js +1 -0
  82. coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +75 -0
  83. coord/dashboard/webapp/e2e/deep-link.spec.ts +172 -0
  84. coord/dashboard/webapp/e2e/fixtureServer.ts +155 -0
  85. coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +113 -0
  86. coord/dashboard/webapp/e2e/realtime.spec.ts +238 -0
  87. coord/dashboard/webapp/e2e/shell.spec.ts +309 -0
  88. coord/dashboard/webapp/e2e/smoke.spec.ts +191 -0
  89. coord/dashboard/webapp/e2e/terminal.spec.ts +420 -0
  90. coord/dashboard/webapp/e2e/theme.spec.ts +138 -0
  91. coord/dashboard/webapp/eslint.config.js +20 -0
  92. coord/dashboard/webapp/index.html +37 -0
  93. coord/dashboard/webapp/node_modules/flatted/python/flatted.py +144 -0
  94. coord/dashboard/webapp/package-lock.json +10584 -0
  95. coord/dashboard/webapp/package.json +63 -0
  96. coord/dashboard/webapp/playwright.acceptance.config.ts +166 -0
  97. coord/dashboard/webapp/playwright.config.ts +93 -0
  98. coord/dashboard/webapp/postcss.config.js +6 -0
  99. coord/dashboard/webapp/public/icons/icon-192.png +0 -0
  100. coord/dashboard/webapp/public/icons/icon-512.png +0 -0
  101. coord/dashboard/webapp/public/icons/icon.svg +5 -0
  102. coord/dashboard/webapp/src/App.tsx +140 -0
  103. coord/dashboard/webapp/src/api/client.ts +199 -0
  104. coord/dashboard/webapp/src/api/generated.ts +176 -0
  105. coord/dashboard/webapp/src/components/ConnectionBadge.tsx +52 -0
  106. coord/dashboard/webapp/src/components/Detail.tsx +800 -0
  107. coord/dashboard/webapp/src/components/Gallery.tsx +341 -0
  108. coord/dashboard/webapp/src/components/Home.tsx +435 -0
  109. coord/dashboard/webapp/src/components/MobileKeyBar.tsx +280 -0
  110. coord/dashboard/webapp/src/components/PanelHeader.tsx +59 -0
  111. coord/dashboard/webapp/src/components/PipelineCard.tsx +168 -0
  112. coord/dashboard/webapp/src/components/SessionCard.tsx +99 -0
  113. coord/dashboard/webapp/src/components/SessionDetail.tsx +140 -0
  114. coord/dashboard/webapp/src/components/SessionsList.tsx +81 -0
  115. coord/dashboard/webapp/src/components/Terminal.tsx +376 -0
  116. coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +81 -0
  117. coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +680 -0
  118. coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +83 -0
  119. coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +271 -0
  120. coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +197 -0
  121. coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +143 -0
  122. coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +106 -0
  123. coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +504 -0
  124. coord/dashboard/webapp/src/components/ui/badge.tsx +41 -0
  125. coord/dashboard/webapp/src/components/ui/button.tsx +54 -0
  126. coord/dashboard/webapp/src/components/ui/card.tsx +55 -0
  127. coord/dashboard/webapp/src/components/ui/dialog.tsx +99 -0
  128. coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +189 -0
  129. coord/dashboard/webapp/src/components/ui/empty-state.tsx +35 -0
  130. coord/dashboard/webapp/src/components/ui/sheet.tsx +123 -0
  131. coord/dashboard/webapp/src/components/ui/skeleton.tsx +9 -0
  132. coord/dashboard/webapp/src/components/ui/tabs.tsx +55 -0
  133. coord/dashboard/webapp/src/components/ui/theme-provider.tsx +78 -0
  134. coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +20 -0
  135. coord/dashboard/webapp/src/components/ui/toast.tsx +123 -0
  136. coord/dashboard/webapp/src/components/ui/toaster.tsx +30 -0
  137. coord/dashboard/webapp/src/components/ui/tooltip.tsx +26 -0
  138. coord/dashboard/webapp/src/components/ui/use-toast.ts +134 -0
  139. coord/dashboard/webapp/src/index.css +210 -0
  140. coord/dashboard/webapp/src/lib/pipeline.ts +29 -0
  141. coord/dashboard/webapp/src/lib/utils.ts +6 -0
  142. coord/dashboard/webapp/src/main.tsx +46 -0
  143. coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +112 -0
  144. coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +189 -0
  145. coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +255 -0
  146. coord/dashboard/webapp/src/realtime/connection.ts +227 -0
  147. coord/dashboard/webapp/src/realtime/events.ts +100 -0
  148. coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +92 -0
  149. coord/dashboard/webapp/src/routes/paths.ts +92 -0
  150. coord/dashboard/webapp/src/shell/ActivityRail.tsx +335 -0
  151. coord/dashboard/webapp/src/shell/AppShell.tsx +276 -0
  152. coord/dashboard/webapp/src/shell/ComingSoon.tsx +33 -0
  153. coord/dashboard/webapp/src/shell/EmptyDetail.tsx +26 -0
  154. coord/dashboard/webapp/src/shell/RouteNotFound.tsx +33 -0
  155. coord/dashboard/webapp/src/shell/ShellLayout.tsx +147 -0
  156. coord/dashboard/webapp/src/shell/StatusBar.tsx +46 -0
  157. coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +520 -0
  158. coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +95 -0
  159. coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +40 -0
  160. coord/dashboard/webapp/src/shell/breakpoints.ts +87 -0
  161. coord/dashboard/webapp/src/shell/railItems.ts +105 -0
  162. coord/dashboard/webapp/src/shell/shellState.ts +174 -0
  163. coord/dashboard/webapp/src/shell/useRegionFocus.ts +95 -0
  164. coord/dashboard/webapp/src/test-setup.ts +41 -0
  165. coord/dashboard/webapp/src/vite-env.d.ts +2 -0
  166. coord/dashboard/webapp/tailwind.config.js +140 -0
  167. coord/dashboard/webapp/tsconfig.json +25 -0
  168. coord/dashboard/webapp/tsconfig.node.json +11 -0
  169. coord/dashboard/webapp/vite.config.ts +71 -0
  170. coord/db.py +1076 -0
  171. coord/dead_end.py +332 -0
  172. coord/deploy/README.md +33 -0
  173. coord/deploy/coord-agent.service +89 -0
  174. coord/deploy/coord-db-backup.service +60 -0
  175. coord/deploy/coord-db-backup.sh +74 -0
  176. coord/deploy/coord-db-backup.timer +18 -0
  177. coord/deploy/coord-drive-queue.service +117 -0
  178. coord/deploy/coord-drive-queue.timer +39 -0
  179. coord/deploy/coord-notify.service +48 -0
  180. coord/deploy/coord-notify.timer +24 -0
  181. coord/deploy/coord-release-propagate.service +83 -0
  182. coord/deploy/coord-release-propagate.timer +38 -0
  183. coord/deploy/coord-release-window.service +119 -0
  184. coord/deploy/coord-release-window.timer +36 -0
  185. coord/deploy/coord-serve.service +82 -0
  186. coord/deploy/coord-web-dist-build.service +43 -0
  187. coord/deploy/coord-web-dist-build.timer +36 -0
  188. coord/deploy/coord-web.service +125 -0
  189. coord/deploy_manifest.py +80 -0
  190. coord/deploy_units.py +384 -0
  191. coord/deps.py +115 -0
  192. coord/diagnose.py +1623 -0
  193. coord/dispatch.py +1009 -0
  194. coord/dist_name.py +123 -0
  195. coord/drive.py +3101 -0
  196. coord/drive_queue.py +2298 -0
  197. coord/drive_state.py +870 -0
  198. coord/events.py +381 -0
  199. coord/failure_class.py +914 -0
  200. coord/filelock.py +168 -0
  201. coord/fleet_config_health.py +300 -0
  202. coord/freshness.py +206 -0
  203. coord/gate_a.py +469 -0
  204. coord/gate_b.py +411 -0
  205. coord/gate_snapshot.py +385 -0
  206. coord/gates.py +582 -0
  207. coord/github_ops.py +1954 -0
  208. coord/goal.py +125 -0
  209. coord/graph_health.py +348 -0
  210. coord/health/__init__.py +69 -0
  211. coord/health/aggregate.py +129 -0
  212. coord/health/checks/__init__.py +13 -0
  213. coord/health/checks/agent_install.py +280 -0
  214. coord/health/checks/cargo_targets.py +171 -0
  215. coord/health/checks/claude_binary.py +65 -0
  216. coord/health/checks/deploy_lane_facts.py +458 -0
  217. coord/health/checks/disk.py +99 -0
  218. coord/health/checks/fleet_board.py +89 -0
  219. coord/health/checks/fleet_deploy_lanes.py +469 -0
  220. coord/health/checks/fleet_phantom.py +69 -0
  221. coord/health/checks/fleet_unit_drift.py +151 -0
  222. coord/health/checks/graph.py +192 -0
  223. coord/health/checks/plan_usage.py +88 -0
  224. coord/health/checks/repo_state.py +161 -0
  225. coord/health/checks/spawned_coord.py +465 -0
  226. coord/health/checks/timer_active.py +254 -0
  227. coord/health/checks/toolchain.py +547 -0
  228. coord/health/checks/unit_drift.py +648 -0
  229. coord/health/checks/unit_enablement.py +171 -0
  230. coord/health/checks/worktrees.py +96 -0
  231. coord/health/cli.py +121 -0
  232. coord/health/context.py +106 -0
  233. coord/health/fleet_snapshot.py +477 -0
  234. coord/health/models.py +250 -0
  235. coord/health/pypi.py +231 -0
  236. coord/health/registry.py +240 -0
  237. coord/health/render.py +82 -0
  238. coord/health/units.py +60 -0
  239. coord/hooks.py +106 -0
  240. coord/housekeeping.py +204 -0
  241. coord/interactive.py +4286 -0
  242. coord/issue_store.py +1496 -0
  243. coord/liveness_auditor.py +293 -0
  244. coord/machine_pause.py +755 -0
  245. coord/merge_queue.py +4681 -0
  246. coord/milestone_chat.py +600 -0
  247. coord/milestone_dispatch.py +943 -0
  248. coord/milestone_gate.py +709 -0
  249. coord/milestone_order.py +840 -0
  250. coord/mock_author.py +334 -0
  251. coord/models.py +891 -0
  252. coord/network.py +269 -0
  253. coord/new_issue_chat.py +229 -0
  254. coord/notify.py +3226 -0
  255. coord/openapi.py +404 -0
  256. coord/overlap_fence.py +133 -0
  257. coord/parentage.py +200 -0
  258. coord/parentage_github.py +58 -0
  259. coord/pipeline.py +481 -0
  260. coord/plan_parser.py +266 -0
  261. coord/plans.py +543 -0
  262. coord/platform_paths.py +43 -0
  263. coord/pr_body_lint.py +67 -0
  264. coord/prereqs.py +533 -0
  265. coord/progress.py +425 -0
  266. coord/providers/__init__.py +683 -0
  267. coord/providers/base.py +218 -0
  268. coord/providers/claude.py +284 -0
  269. coord/providers/claude_pty.py +610 -0
  270. coord/providers/opencode.py +896 -0
  271. coord/reconcile.py +2233 -0
  272. coord/refine_chat.py +485 -0
  273. coord/release_cordon.py +525 -0
  274. coord/release_propagate.py +1176 -0
  275. coord/release_verify.py +777 -0
  276. coord/release_window.py +322 -0
  277. coord/reports.py +1643 -0
  278. coord/revalidate.py +1101 -0
  279. coord/review.py +3317 -0
  280. coord/scorecard.py +484 -0
  281. coord/serve_app.py +7192 -0
  282. coord/skills/update-issue/SKILL.md +93 -0
  283. coord/smoke.py +1030 -0
  284. coord/split_work.py +210 -0
  285. coord/stage_projection.py +650 -0
  286. coord/state.py +5720 -0
  287. coord/test_author.py +1064 -0
  288. coord/test_chat.py +352 -0
  289. coord/test_orchestrator.py +494 -0
  290. coord/test_report.py +178 -0
  291. coord/tui_release.py +271 -0
  292. coord/usage.py +753 -0
  293. coord/usage_limits.py +358 -0
  294. coord/usage_rollup.py +709 -0
  295. coord/worker_events.py +954 -0
@@ -0,0 +1,295 @@
1
+ code_coordinator-0.5.46.dist-info/licenses/LICENSE,sha256=851BVZZwf_pEv2ydSlMmcZrwnwSS5YJ98wdLze7lyL8,4212
2
+ coord/__init__.py,sha256=cseffdTZHDI6x3QyqLx3jAIir-rVUJ_k42l_FUHlegw,8629
3
+ coord/_board_mapping.py,sha256=jvY_A97JSbUA_HnuqoZIOZQNd__xeZb1Y4KLEMy-c3U,10191
4
+ coord/acceptance.py,sha256=lbRNFkmb__LLMsStUqM2CqSuRPtOTTCTffKGV_UBwMk,19697
5
+ coord/acceptance_drivers.py,sha256=X04RYnpGO9XOaf4cQYb2QGcI7-hdnbkeQadMeT7nDYg,28171
6
+ coord/agent.py,sha256=77e0Rl5p5oBWptBQxTFtdSvG4G2L3oqbcGRHE6mknM0,365090
7
+ coord/agent_app.py,sha256=7fuZw9eUL1Ysf18SyLFt2RSuyU1mUn5v634ntW-lNcw,68791
8
+ coord/agent_update.py,sha256=wTyVO8hd4LsTZN7pBgqcCmlO1aorOvF74DDSELvMakc,18023
9
+ coord/audit.py,sha256=Ib9T_mnmbzwFSOqtKvOjBKTsZMa7_posZtbHbl3ev04,10911
10
+ coord/auto_loop.py,sha256=GmxMnEJQ2nd_871JTgtIEgXSw9FZ3NG299_Cw9KsdfY,61709
11
+ coord/board_bool_guard.py,sha256=Jna1W2KLCLLfRA9tw93bcaDuqFq_zqFSfZS6Gp7DVq8,3230
12
+ coord/board_service.py,sha256=k15xqpsSylTy7avEy7z92RSkjjO_4HpVsG03AhAzpbg,5722
13
+ coord/board_wire.py,sha256=p3TeW9OvS4ge0V-ZpNM7CSAJO9J8wKhpzZOpzrBA4aw,13858
14
+ coord/brain.py,sha256=JHlduepWhBOZEF0rYZehlSe015lVbjXhl3Q8vl-IZWo,23797
15
+ coord/branch_model.py,sha256=ecjmzgpdbpUdGgSNABeXFUpuB9G78pDC4OBrwRqQPgA,10522
16
+ coord/cargo_cache.py,sha256=tAJtwH7bO9Eqgge2p2bpKl6mMIiC8iUOLL9gfdO_Rjs,9267
17
+ coord/ci_github.py,sha256=tWIwqVGiTOhPbV6XlcTpMktz8v2u_AOSfNM0fhp2wJQ,18158
18
+ coord/ci_store.py,sha256=CLHsGrFHaXUFUDlocGrrM4YNlJi9Lht53AUBhP-_RS0,25255
19
+ coord/claim.py,sha256=vglXiQQ79busZe943lh19j0qgEHuTsbhVE-wpZj9xgo,14084
20
+ coord/cli.py,sha256=sEpdl4Zbj64kZm1xnGmGvTQGwKiPN3U937Xx05i-tCE,17275
21
+ coord/client.py,sha256=BGHRYT9YFmEmj1xj8vInXf5Vt60PMjziaTv5Pd0fR1Q,22942
22
+ coord/comments.py,sha256=WhukM5hQDrwrCcUhH7p4GgU0EAjsSls433YEGgaNzXg,24573
23
+ coord/config.py,sha256=XWJWvRutrWA2ebQkbGptzDXJj6feC6xzumZozHfD9Mw,137384
24
+ coord/conflict_fix.py,sha256=jkiL9SDkmOEixNQoiyzVp7w67bVzwQNhEG_17eRQkYc,26685
25
+ coord/dao.py,sha256=Hi4W0uzlnEBcPZg6LjLctGsVipi07YgAqABCYICrVNo,21631
26
+ coord/db.py,sha256=IX4pw_u3RmLjb9YCFuIz-r2zEs-xUR64g-hyZXgDMz0,55556
27
+ coord/dead_end.py,sha256=tKKo6iComhf1QUiOdX6aHevyCTM47oVzB_6OxQGs_2Q,17895
28
+ coord/deploy_manifest.py,sha256=CeoiwAisTq959Ex4jBJISWngxhIIAHkcSrUbYVktibs,3315
29
+ coord/deploy_units.py,sha256=2KHy5dI8fqM5qKqQrMlE8RdWUoTxo5P9QbQGuvn-Wd8,14883
30
+ coord/deps.py,sha256=WnV5u_zYw_f3oMr88Qy7EUVeb3vBj5cTq8Ts1oGAR2s,3770
31
+ coord/diagnose.py,sha256=z6q1IMCFsy7Z1MVD9hKXrdKUJ3khmNhj9i9ehm-Y4m8,72583
32
+ coord/dispatch.py,sha256=n8OyALn32RGbW5jS35y1snHmiV9oADcNUZgX3dwBHsg,47413
33
+ coord/dist_name.py,sha256=Zlpwg4Um36TsgVo7KiW7LxMf5_qfiJthPED-1lT5jho,5889
34
+ coord/drive.py,sha256=n-wfmcYBODfTaD9wq_JHYPbPW_kxB_I22cgFcu8tPjU,150216
35
+ coord/drive_queue.py,sha256=trnqpySd8b2LoOV6wn_YERmAUq65o0lTuwZAfiNI65s,106623
36
+ coord/drive_state.py,sha256=d42XqmFEx70Ttop5YMy_RT2_vkS6MMXzfaCmHskIOPw,39091
37
+ coord/events.py,sha256=EJroWy2kahye59nRyIhAgyciO-Qe2eU0ktkqqDPkWx0,13565
38
+ coord/failure_class.py,sha256=PQM53NvNBs-kFPsIOgpgx6m5qdBh_9qzfTYn_oBJniw,36697
39
+ coord/filelock.py,sha256=UQ1l4JJsfcGRYRsNev3SD7YBxAsnJKOGjnNWnmwmMOI,7124
40
+ coord/fleet_config_health.py,sha256=QJvZr1HdwimwyCXDnSn9iNyZsuvZmHjFKvPetdg5cYY,12537
41
+ coord/freshness.py,sha256=Hc7h8rCGyQ7KxbME6BrBM8HanjpMiKzYIt2UtW6atbw,6972
42
+ coord/gate_a.py,sha256=CYG3UbEgJgu371Xi9ojhvBwb8F4EXBTdCTKM3xxn2SQ,18434
43
+ coord/gate_b.py,sha256=mYwzFJrXw19uK2usNLBnZOq1yP_gfXaG5Kg3kloXy-Y,16566
44
+ coord/gate_snapshot.py,sha256=HpK9EVAtm_9RmRrGoF8aOEjK3qnBAwahfLfqNO203VQ,20735
45
+ coord/gates.py,sha256=nKaWTI-2y3GYfpwZzmZkQneYEWkp8UPoAg21TFtcKOs,27416
46
+ coord/github_ops.py,sha256=yJKBRF6IRxrCm3GTT3CzsgU3VyUkXQIm1l-54rfUy6I,83607
47
+ coord/goal.py,sha256=URYTwPHFU2zpCjrDYoKoItZiNCb8EMaOzMTOfY51dSs,5198
48
+ coord/graph_health.py,sha256=MSr8JQIlEO6gO7TY8MaZYNq0BHY9wdBPrMSv_TbIi4w,14455
49
+ coord/hooks.py,sha256=fdEwUf1zGF7xFm9TqlTda94EmtH2Tl8NNVeD-JfpkvA,3968
50
+ coord/housekeeping.py,sha256=vnO0rIOvxIuIePLFk-QxUZZLb76TzHKYRWK3pjjAXS4,7313
51
+ coord/interactive.py,sha256=98CbV41LWA2do1WFKkTgcfipVEEwquJs14x463yYeSs,191234
52
+ coord/issue_store.py,sha256=32noO5xbglLa_fu9bRDpi6RHcYHx83ZDZ_bh_d5pQi8,67638
53
+ coord/liveness_auditor.py,sha256=sf_xBklt37DUnrIEeD4fVp4_gWPDaXbydZgfuWAPFRE,12478
54
+ coord/machine_pause.py,sha256=qkQI2EoRI8sf93AJPKOCeIdjoA273ZI8HR9OG_QTOqY,30781
55
+ coord/merge_queue.py,sha256=koPkh91bopfICDeNTlfBp552wXfEqUTe1K7_wEzhYp8,231721
56
+ coord/milestone_chat.py,sha256=LQ53gBOk1p3an-LNHgVd99ixsetbe9YqzBK3NT5CYT4,24686
57
+ coord/milestone_dispatch.py,sha256=W6yPomW3CC4q4h32jFNBrkmcv2Eya7Tm9IjC26KrRR4,38615
58
+ coord/milestone_gate.py,sha256=TYS1d1nmqJfTE8oso-Tkhaj9Tp5EhBkxtwt6nkcgBZ4,29831
59
+ coord/milestone_order.py,sha256=vncfm77RbumUIDY6opOiSGva2nWBg_-L-kwrq7dCPCw,35973
60
+ coord/mock_author.py,sha256=KHB1AK21jSL5wvkcid3hXd7xttWZRbTaczTEYbFpA6I,14695
61
+ coord/models.py,sha256=qwYwsu-6yPbOaDokUj0ODafy8ttKAyUnn91AB4dI7YU,47179
62
+ coord/network.py,sha256=7H4OTbGZhnY4heIxuE9IlCniXl7F0cDaQDddEZWA-Ko,9460
63
+ coord/new_issue_chat.py,sha256=uQnS7YelSYI_VTHEDGutmM0pNiKydnG7uoEuH7qjP8c,7674
64
+ coord/notify.py,sha256=FWFTKtRDv_9ecTCRrs2ZYw-UXcuF4WGEnjr3te6vEQs,145830
65
+ coord/openapi.py,sha256=oatQUn-5I1EwlwJrCIFsTNTyfTYG463L7MSrFvP0iWA,16225
66
+ coord/overlap_fence.py,sha256=eAhyYMQu-AQrJymjQCE7Uw2AWX4mLJcXHgb3f-JcC88,5761
67
+ coord/parentage.py,sha256=VhP4q0w9p97SfjXQT8uXihwkiyzNO0Lz1ifBrMrs9To,8155
68
+ coord/parentage_github.py,sha256=7BbPQ-XSRWcd7pvDFczDTRECaVRKzy6chHWG0x5uwTU,2204
69
+ coord/pipeline.py,sha256=XkW0WlViMi4nJtTsixErm1X5ypeBymJkPNvStqa7U_Y,23107
70
+ coord/plan_parser.py,sha256=zCLG7M4AmVe2KssKvGANDwxVvPbl5Ni0ETKB3Kqlnpo,9990
71
+ coord/plans.py,sha256=5ZBtqBZ3YooJuOIMKZiBqAhKtZPdQwa5sRqIiWP6Blk,21499
72
+ coord/platform_paths.py,sha256=pbMFlKFDzDGP9LfWbws2qlMsx1A9KXegMkDRrprSEyU,1997
73
+ coord/pr_body_lint.py,sha256=hD1tB2Z9xPCnNsHd6tdrPtBVDJ0Ixuyyxtl6xJeMUVo,2828
74
+ coord/prereqs.py,sha256=TU9NB6f0JLIlh7i2VK6SX8Ry_SUAOu4Am2IKNLmwdlU,23178
75
+ coord/progress.py,sha256=GnbFFpNPJAdHaf15YoU2KUYMK00fLIecEzjCI3IYhvM,15555
76
+ coord/reconcile.py,sha256=ECSJ2K3JedNa5tiQswwshYZYFB1wI6ZaKcHBiibjf_E,105147
77
+ coord/refine_chat.py,sha256=tg1SYrYirfzATz-NB_Kc61xMRY1eDtRy80K0aGtnksQ,17234
78
+ coord/release_cordon.py,sha256=jR3RBRTdHk-JYbT-vh9ync5xSpYfCKMCJR4aIZy7_o4,21578
79
+ coord/release_propagate.py,sha256=W5jxZhe3wN7eLN54L8fj1SrqjZfkPXNXgIhzDYTxqVw,52383
80
+ coord/release_verify.py,sha256=yi91NSvBUoUFlewNGcGwK1qjmKxsdSRGob2IyuZ8jHY,32975
81
+ coord/release_window.py,sha256=CTMvh58sebGGOy0ZOlGktPHE1mYdwdI3jyuVLeuRo1I,13803
82
+ coord/reports.py,sha256=LeSSCqJoLd1bpxVBZoPxRis-tZB-AwDojAsEef0BD9c,64682
83
+ coord/revalidate.py,sha256=hJjkJPqTrePUkCEuOPaotBxedASgu-MlFu1zHOubhgs,48408
84
+ coord/review.py,sha256=B8IF55KXlWgr-35pHz3QP0axyP0-wRAd3DB-FX6HsXk,154039
85
+ coord/scorecard.py,sha256=axe_doBJBBFWtN21JZDRSijwDI0xaZrt2oVYbwJPW7U,20211
86
+ coord/serve_app.py,sha256=RAQmiquEk8w9TdeznyYMBBPAFRncCuh6C9kQdYfUP4E,348513
87
+ coord/smoke.py,sha256=34Qoqfg_FIRsphXQ_d7bPo8Tz4VJcg2mVSBGJLj0_kk,45170
88
+ coord/split_work.py,sha256=OVwAEkNmflnApfgzZci_5Y9ju56ugQ_xuf-XCKPg1fE,7750
89
+ coord/stage_projection.py,sha256=mVH0caI-1GS0Jfoy8F8oNaBVF0xfx0bGgsISYYgcyRY,27829
90
+ coord/state.py,sha256=erJH80wvfdDhu5zJgr0_nGAss6eqO6dVAtZ1vycgoRM,231934
91
+ coord/test_author.py,sha256=zHzAQKSG6F7Zol_N4-bPE29HB2auxonPIWMTi8-aZZc,48774
92
+ coord/test_chat.py,sha256=EY7DEII3xFQaielNspndGbksVsuISX_0BcFqTvYpTHg,12540
93
+ coord/test_orchestrator.py,sha256=VcIuCqd-L3wmeHpMZdlm-HonDQLDHcn739yv7zNabfE,20168
94
+ coord/test_report.py,sha256=Wxt85t5zd5EBIaCcGsQELCwpUhMxeZ3tle6YCXe_9i0,8547
95
+ coord/tui_release.py,sha256=9QC5KIoreCza5FgEwuufbelJyCHBij5qNUHxMEillWI,11969
96
+ coord/usage.py,sha256=3-DFKj4npOCKRjjdXstdPKUozghwXDAaqtCBBa1JGHQ,30875
97
+ coord/usage_limits.py,sha256=gxr-ABTVEiVN0oqV2m8KSHxfMRGcTnyCxanVp3RHUcU,14157
98
+ coord/usage_rollup.py,sha256=3xgQMOp2VJdG2EIR4ea23OwnvK_3d4s0qDwIolX01R4,27788
99
+ coord/worker_events.py,sha256=_UhNKJwz8Gfgn7wgsfgElcGsIFYG4d80A7rFYApOIVI,38728
100
+ coord/agents/opencode/.gitignore,sha256=ILxVS75q0F95TKz1WTf-kIzd9uN3M5zoJHzQkUuwbIc,687
101
+ coord/agents/opencode/routing.jsonc,sha256=853ltOkE3T0wBKBNXIPiHg-hVoyeQ21QnA8S8L_yU4Q,2596
102
+ coord/agents/opencode/agents/work.md,sha256=oLYGu82NYDO2iNukgeAm-PXakaaSYe2I0YQdaevSpwM,6376
103
+ coord/commands/__init__.py,sha256=VqpqriVqQZMtBdFMIcsKR5Z-oDyNUONcghycTJFRSjw,53
104
+ coord/commands/_common.py,sha256=Wad-2TD3WtsNHCUvZ6BoS78Pa8W-K8My13DGy8jQVnU,14301
105
+ coord/commands/acceptance.py,sha256=IxQHZnY_WfD5A5AG4LfwQvMvNUdgabKdOv67DfMyAAY,37137
106
+ coord/commands/agent_ops.py,sha256=_Sh1l1UonkeTjxucKT8muvxGILBlzRk1LaRfri4Ff-o,51674
107
+ coord/commands/audit.py,sha256=r8MzMM4XZX_upQOIOHkksjIo6bv0jT7CuTlm96ACVS0,5283
108
+ coord/commands/chat.py,sha256=rHgkGW3ciuH-qFcuhS3sBTH3jih4l9obulY9uKZIMMY,11024
109
+ coord/commands/dispatch.py,sha256=xGCxoyjIQgRXSkN-5t74pmeaX6ZFxp_uXEx8s1qLEU0,77554
110
+ coord/commands/dispatch_workers.py,sha256=LaI8CiAV6-w2e8Cj8gp_yJ1Uh8Iqjksg00nb70UtDrY,209948
111
+ coord/commands/drive.py,sha256=jbgsB9XHdBehCIPExjEaKgfisDRjvPfUtDbIeKTIgVo,21779
112
+ coord/commands/drive_queue.py,sha256=qvW4T3Khti-lMae-J4RAbc4KoikP8jiBTd2TK8JsDZM,51408
113
+ coord/commands/gate_a.py,sha256=Pqyo6C9n9QrBOMvW5liHJq3am4_XHZJsVYHAeKKMBQ0,7325
114
+ coord/commands/gates.py,sha256=928rRgFN6GME3gCbvgufHB6z6RSHz2d_IorRYigUTus,3515
115
+ coord/commands/issues.py,sha256=qBYHnAlLHJTgBvK_r98rVWeKmKVdryVxFspdg3fNeX4,25465
116
+ coord/commands/lifecycle.py,sha256=5kHIs4Ho6GKmpXdVB1aPdWbqHaUR-gT7Zs9bgCut6Nc,20479
117
+ coord/commands/merge.py,sha256=SwLBpfF6xjVxedpH21dLEQes0pmy7_g7CVkXkV5aFcA,86950
118
+ coord/commands/milestone.py,sha256=bZnlyj1DJZnNd_v9ZM2fnTHp0hapNljm50RbVFhraJ8,78704
119
+ coord/commands/plan_followup.py,sha256=sYj8J9Pa5_AaQKjBE6QvNq-OK4IP_Pq9voSiNVaJZTM,51093
120
+ coord/commands/plans.py,sha256=OxcMyDWIhFFiA13lbxOGOscLXckgZqEy6FfzRSRrm00,5408
121
+ coord/commands/release.py,sha256=1Ur6jDxbU5-GYG5J-JeOkmgozR3SLGEwUqBPf-FOyXg,101528
122
+ coord/commands/report.py,sha256=AHUxJf7kRBoS2XZlRbd93QTu7yXBcTm0E73ZCNNHhds,13508
123
+ coord/commands/review.py,sha256=F4iuitXstg-Dx6u1ANXb5GQkJ-Wj3q-IWCXZUwlaXck,68305
124
+ coord/commands/scorecard.py,sha256=3IUKuUApkHfS6Yszr8ynuOZuBMSXFVEAUIjHeXoEJ7U,10860
125
+ coord/commands/sessions.py,sha256=UvacIsO_qXqTk5dK7odeBLydTu8YVJFttZOxsafVACM,79873
126
+ coord/commands/setup.py,sha256=sGaLdDSTP2cGjHpOlcih_EM7-jTF-oHa-9cTZFZAUf4,20884
127
+ coord/commands/status.py,sha256=4W6GzIiKLseBNyQSMEb3pA6SUHVhoC_R78WFIDzJLyk,90215
128
+ coord/commands/terminal.py,sha256=62dgo7Te3lwQe8oVzPVpjkWdgGS0oOhpCpXINRcboHA,13712
129
+ coord/commands/test_gate.py,sha256=aezDY8CwqcSuwbLus02sL7a0jmx94HK1GQ6GNpVKlnA,32650
130
+ coord/commands/tui.py,sha256=izKlJ3_KMpU__VMyvhvDW3Of-2aeej3fDcm-X9bgKW8,10333
131
+ coord/dashboard/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
+ coord/dashboard/fixture.py,sha256=rmEKIsY_lA4e9QaQlfx_21xsY0qonnNVbYFBVinrPlE,14629
133
+ coord/dashboard/index.html,sha256=bN5-JFQKQWeFpFAZTUBZ1wg4LRDmIr0InPttSE2MTgY,31376
134
+ coord/dashboard/server.py,sha256=grqjfXCmhuRC6yBHxhRxHDdwDhwCZDQNsJ2k5WdIb0A,86005
135
+ coord/dashboard/terminal.py,sha256=wR5rfWQCZ0yO5bXCkqa0t-a1g5YAQ-20LC6icZdGWHM,14647
136
+ coord/dashboard/webapp/.gitignore,sha256=y4GlaAGegzsffrF-_7Jy7RSF_hROBHgV0SB3FsgNT3I,137
137
+ coord/dashboard/webapp/components.json,sha256=Y1zlLPCOVTUv6N0CDu_U3-L7ssvsOLmacQgh5eTV7c0,341
138
+ coord/dashboard/webapp/eslint.config.js,sha256=0GX2ZOtOMzHcZJDntyIyGY8DnZSrgYPobd989KLfZqI,578
139
+ coord/dashboard/webapp/index.html,sha256=lX5yrvawdPSdnWUJv_6D8uX6bl6DxPa6TkRlgqIomUw,1513
140
+ coord/dashboard/webapp/package-lock.json,sha256=l8orDp-8qkgfrishC3cmTTolNTi1EqpmgZOD9EFBVTQ,379991
141
+ coord/dashboard/webapp/package.json,sha256=mrSzS0eDs0Lv_G_EtEOyAX8T85Od8pNvAsuhiINHdRM,2088
142
+ coord/dashboard/webapp/playwright.acceptance.config.ts,sha256=yt7myNyZiKvR0uH9XNXnCueOuwKyhiypAZtPU_UiRnI,7824
143
+ coord/dashboard/webapp/playwright.config.ts,sha256=7TcJ8Qklq3SItWaa6ad9JbXgFyMseH_2rsSBzkE9y3w,3306
144
+ coord/dashboard/webapp/postcss.config.js,sha256=GQyHfbRmmVvxSC9KFqvQbgSont4xGTQeKob_luFzeyc,80
145
+ coord/dashboard/webapp/tailwind.config.js,sha256=KJjxXjUZSUaYA5HFgyJkApgvm-l6yuEEc3BC00rDCE8,4618
146
+ coord/dashboard/webapp/tsconfig.json,sha256=4Zt4RkqPpy6ZUNEHX1Oa87QJzVJAlt05iCbZAIxdNNk,629
147
+ coord/dashboard/webapp/tsconfig.node.json,sha256=u5_YWSqeNkZBRBIZ8Q2E2q6bospcyF23mO-taRO7glc,233
148
+ coord/dashboard/webapp/vite.config.ts,sha256=htU2DzbygBX3-hld7eTRvlG-TlYSPLEBUSWYzelY28k,2076
149
+ coord/dashboard/webapp/dist/index.html,sha256=AQzUDDUb36BmKDYKO0rgVbkn3XVPJMW1qAWmF9H6mOQ,1661
150
+ coord/dashboard/webapp/dist/manifest.webmanifest,sha256=wc7jEi46RCS1wCZzD9KkJXg7ckiDCtHqu5uCC4EXinw,447
151
+ coord/dashboard/webapp/dist/sw.js,sha256=88pPmuR6hkdExTRz-PtVnCR9tmR75rEKCAscGUCHWls,1816
152
+ coord/dashboard/webapp/dist/workbox-e4022e15.js,sha256=2M0GSFBJoElNIuusXDVAlCneze0uKZw8SdhbJj0Tfng,22128
153
+ coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js,sha256=-BOH6D98EHMqy1Ds_gPpfsEuhiDi_osvGZnRihRYxVo,100358
154
+ coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css,sha256=q_1zlNrlDLWJyHCLTTSvcq06rGUYIrciJei9H3SRMAk,5752
155
+ coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js,sha256=EgZDgEEIMoc0dDmoBaji2B6_Z2ZL0IFJabx324XBieg,343025
156
+ coord/dashboard/webapp/dist/assets/index-DltfZR5f.js,sha256=73yWcjml_SmmhXggvrL-AeydHu4u7f4KcGIhwNBiXz8,328167
157
+ coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css,sha256=dE5MwXNw4PckH3ycNdZKdD1pJq9ngwzFz9qKF0I69cM,31128
158
+ coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js,sha256=pedTSYra6vWqKutqozzItHf22uhiHxlgq44S1M6_nHA,5706
159
+ coord/dashboard/webapp/dist/icons/icon-192.png,sha256=ejmOA-_bOO1DrfpvH0TU8pcB32dO3BXDjb2OQIgFBqk,413
160
+ coord/dashboard/webapp/dist/icons/icon-512.png,sha256=PwZnjR6CQIB1trAiFeEYZ4fDOdeb1ibDgO4mknmo92g,1496
161
+ coord/dashboard/webapp/dist/icons/icon.svg,sha256=518KDsyoeMM-kE86SIe7I_81CW1yY3ob929W8zDZqyM,300
162
+ coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts,sha256=IPFJhtNPlGCz0FxSXm1DYP1BgaHnNL-r3o-O_SpneWc,3626
163
+ coord/dashboard/webapp/e2e/deep-link.spec.ts,sha256=IPJhd280nGHc2Q1mc5o7YIhSQSFv1_7r1wRihZQGG5o,6561
164
+ coord/dashboard/webapp/e2e/fixtureServer.ts,sha256=YO-wYbrxd9FsCNuquQ4QjdGZv4-xVm3Tzb-f9WSHI6U,6040
165
+ coord/dashboard/webapp/e2e/live-update-fixture.spec.ts,sha256=_Hnibk5JTrZhNyLxOIteLhiGrFAuD0J-aK3JRoZGJb8,5313
166
+ coord/dashboard/webapp/e2e/realtime.spec.ts,sha256=YbdNswKYolpdQ_0HC9vl1sU7BxW1KTZb_La_tFsEe3Y,8922
167
+ coord/dashboard/webapp/e2e/shell.spec.ts,sha256=7Z1Cz1fcgfgJ3aO5A55Cc2WbH4mImMMCbQ76arfoR_I,11890
168
+ coord/dashboard/webapp/e2e/smoke.spec.ts,sha256=otRUujdcnTUE-3CA1hLJH082IqoxW7a76emj8K0ggxc,7350
169
+ coord/dashboard/webapp/e2e/terminal.spec.ts,sha256=TFUeXQsvjT-4dBKUj_Y0IMTL4Bl8th9kDA2kk6b30yg,17792
170
+ coord/dashboard/webapp/e2e/theme.spec.ts,sha256=iyva2Amc0JDD2IhW5fwvRfXU5dJ6pthhJFDefA6lAXc,5658
171
+ coord/dashboard/webapp/node_modules/flatted/python/flatted.py,sha256=94TCVN52olQ166phxylCByczrktCYZuUO_N7CfpF5kQ,3773
172
+ coord/dashboard/webapp/public/icons/icon-192.png,sha256=ejmOA-_bOO1DrfpvH0TU8pcB32dO3BXDjb2OQIgFBqk,413
173
+ coord/dashboard/webapp/public/icons/icon-512.png,sha256=PwZnjR6CQIB1trAiFeEYZ4fDOdeb1ibDgO4mknmo92g,1496
174
+ coord/dashboard/webapp/public/icons/icon.svg,sha256=518KDsyoeMM-kE86SIe7I_81CW1yY3ob929W8zDZqyM,300
175
+ coord/dashboard/webapp/src/App.tsx,sha256=-seu2DzhPSwabw9ETa8G4Ug8pAbpghDjI_TVcWkJnKc,7149
176
+ coord/dashboard/webapp/src/index.css,sha256=8jhNgto7wZ7V8vnkhF3-GCJuRU8o1deckXsSko9vMTU,7988
177
+ coord/dashboard/webapp/src/main.tsx,sha256=ZGgCUs157TPZuL1HuIfurT29OEQP2vrE6_Uo6HdP--g,1917
178
+ coord/dashboard/webapp/src/test-setup.ts,sha256=lwi-JGyV_e5qGugJUqCePtTtjxpNX3NA2LJnbk0eDQw,1803
179
+ coord/dashboard/webapp/src/vite-env.d.ts,sha256=Y0AutFkx7ZJc7E8qm8i9pxR1PT-5rvSLsJ6gVJP-j6g,87
180
+ coord/dashboard/webapp/src/api/client.ts,sha256=J8R1EBau70Ikw9iG7p_MpG6H4HxVYc-O0ste8s4z4u4,7661
181
+ coord/dashboard/webapp/src/api/generated.ts,sha256=0Q6hDgxMP8uDNIBwveW8Rpa2zVBTAHZb73R2z28GcO8,5586
182
+ coord/dashboard/webapp/src/components/ConnectionBadge.tsx,sha256=gccsRUG61SxnVEYVhoxeYzUDUVYROoCsphjxYH4qwlU,1636
183
+ coord/dashboard/webapp/src/components/Detail.tsx,sha256=OVPQENOKTDxdTuv1j7ok-lHt-JwFxdeXA1CkY89Rcjc,32219
184
+ coord/dashboard/webapp/src/components/Gallery.tsx,sha256=-O_URKWB3LipKYjwsqHn1R4rlv8c3GBo617NP9MbRo0,12514
185
+ coord/dashboard/webapp/src/components/Home.tsx,sha256=vl7NWfABa2VvQAHSftMwa9TJ61mhIFA8JBePEJnIKZM,16759
186
+ coord/dashboard/webapp/src/components/MobileKeyBar.tsx,sha256=N5U274J9Z3ykgKK-4Th4p_QWOUmy0lbBjoBlHAH75As,10218
187
+ coord/dashboard/webapp/src/components/PanelHeader.tsx,sha256=giw6u5kGmJsf-GAVFMc4KJsvs72lzM1cvmPHC5RCmN8,2589
188
+ coord/dashboard/webapp/src/components/PipelineCard.tsx,sha256=nCrrKV74TUk7d85wUg6rAJmTFarVXyhWKn1W98omSeg,6039
189
+ coord/dashboard/webapp/src/components/SessionCard.tsx,sha256=Znl0aqyaasYvs_ig9oWsBAuXL_y8UNbvRHrz-u50AUQ,3597
190
+ coord/dashboard/webapp/src/components/SessionDetail.tsx,sha256=4BcCbg93W5AJhzHA6D3Ux8iPWCfn_LUqqO1uLNG7Qcs,4984
191
+ coord/dashboard/webapp/src/components/SessionsList.tsx,sha256=7J9gAI2ySkOlFcKPFhlrwhS9QYSHF1YkukHka3usfBA,3024
192
+ coord/dashboard/webapp/src/components/Terminal.tsx,sha256=0IG3oiOCHwz9CdRZgzJGivBrgy8AasSwIimBz-SVDyc,17436
193
+ coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx,sha256=P53qI9IGQ9CJ37nvJpwk9WgsmrLkQffC5mKW7U1LJF8,2947
194
+ coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx,sha256=cro8oDLLyfbdwNJ2Fb6FwUmLlvKiqWjs3EM7ziU-t9w,24338
195
+ coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx,sha256=YmUL-sXBWxjQR4mJJdr9rDIW-vL_5d_lHqQdcCZDE3U,3628
196
+ coord/dashboard/webapp/src/components/__tests__/Home.test.tsx,sha256=oe1ccUeMtdKRbaCpuJe1y-ndM_3OHpQzEcClGIXbLOw,9711
197
+ coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx,sha256=jv5snRoqBYsObt29btmYAs1ph8j9Cmtxi4aKGKN9w9o,7236
198
+ coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx,sha256=D7sFY-waYJRizDz3268ZR3z81YQF5L0pWYe_Kbe4ktc,5736
199
+ coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx,sha256=y86UU6Hk-jWyLzHynqthAHR_NPIWlAMGsH9gd9riuCI,4328
200
+ coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx,sha256=TBfHBAVvuY3BsWv9zzrm3sROEP73ie1RvypNUGMgXOk,20221
201
+ coord/dashboard/webapp/src/components/ui/badge.tsx,sha256=rSJwED3rVaOZOwD0se0aB9MyyFDcyV789rK3kPzo_Lg,1922
202
+ coord/dashboard/webapp/src/components/ui/button.tsx,sha256=miD4RTIZRc62pNM--F7rdWQqo6Sy-a51gd05rA79hLM,2373
203
+ coord/dashboard/webapp/src/components/ui/card.tsx,sha256=pF37wudefVQFlfQ8d5JusUwsoI-JWyPapDTwW9pkvAo,1818
204
+ coord/dashboard/webapp/src/components/ui/dialog.tsx,sha256=Z1PQR0Tz5s6egdn9-ddTxPiL28yBq6VTS6U6LZysRwM,3553
205
+ coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx,sha256=nSHx9qIKk5IhSozXl6baoH4nD1IUIvPNQ_cabsrx2sM,7884
206
+ coord/dashboard/webapp/src/components/ui/empty-state.tsx,sha256=Tz9Q3IMYAomzJuVUOXHUwDQJCVAoXKla0BOanwmU7uo,1140
207
+ coord/dashboard/webapp/src/components/ui/sheet.tsx,sha256=GKpBFUA3XJ-mCoa5RqpFiJx6RDYFmNUKeLdn7h6Gosk,4556
208
+ coord/dashboard/webapp/src/components/ui/skeleton.tsx,sha256=59dmoWMj2v1guHEflikDP3SIc0J--U_kbmwF3V9bnAk,362
209
+ coord/dashboard/webapp/src/components/ui/tabs.tsx,sha256=zfwRsCi7khkiEmCGKDDWhCx0VgnsJJByIpQUqIys-no,2004
210
+ coord/dashboard/webapp/src/components/ui/theme-provider.tsx,sha256=OlrVSb1uSHaMG2gH0oWxCIw017Kt6tDfvCrqFMxphf0,2847
211
+ coord/dashboard/webapp/src/components/ui/theme-toggle.tsx,sha256=y5m_QFasCjACUb5wcEDI55aaWHM0yBbl5HtP3iljGGA,596
212
+ coord/dashboard/webapp/src/components/ui/toast.tsx,sha256=Gx7EnyFyXiv_nr7AwA1loo_TNOH3xgi0EBvInU_KiyM,4518
213
+ coord/dashboard/webapp/src/components/ui/toaster.tsx,sha256=imBtwRZIhjNdYfi6k4jJh3FVZ2wtUbg1QdgCaGeRGm8,798
214
+ coord/dashboard/webapp/src/components/ui/tooltip.tsx,sha256=kn5za1pZipfhDEMTFXSZm6PEbp_cD78jH2OtzV3qLAY,1102
215
+ coord/dashboard/webapp/src/components/ui/use-toast.ts,sha256=PfkHsuo2365KOf4ZWZxRRirNB-3XScXkMxZ0UyoeEZc,3454
216
+ coord/dashboard/webapp/src/lib/pipeline.ts,sha256=HJzfXjePVcMRUdr1x2mRyZTXhm3QzeOqb_J8_xs2BeU,1097
217
+ coord/dashboard/webapp/src/lib/utils.ts,sha256=dG5Nm-saW28OBH7BnV8cVCyfgRf06nyA17m9D-ISjpE,166
218
+ coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx,sha256=KhjtYzFCYLRA7zfIztH7VeilUZMsJA6DfGMHXcj5LpY,4464
219
+ coord/dashboard/webapp/src/realtime/connection.ts,sha256=f3anYXeUHQ8ETmduF-b_E1bGviY_22ACgcpwPPdEqy4,8506
220
+ coord/dashboard/webapp/src/realtime/events.ts,sha256=priUv_0Uh8c6OP2wh4faIOmxOEuvzXn7yu-FIMn7T8M,4755
221
+ coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx,sha256=t9ZVEEGoZ_EP3K0v1EIpJAu1j25VShdlT5EBGIOzeUE,6757
222
+ coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts,sha256=j-BpNBPA3dd-8usmWyx7LWSxUR5DQCbemYUPfi3RJIM,8702
223
+ coord/dashboard/webapp/src/routes/paths.ts,sha256=EozFoxp9Fuilv1SF-etbwqUIgwNgLGo5tJwbVYejgXw,4367
224
+ coord/dashboard/webapp/src/routes/__tests__/paths.test.ts,sha256=2VLSEnz9CgfS748nDyWyBi85ZDt_v_eXoktBp9GGLOE,3720
225
+ coord/dashboard/webapp/src/shell/ActivityRail.tsx,sha256=5aNsuR9jnuLZndxdlzjjx35odJWJaU9ZzHWrJ7_jWaU,12535
226
+ coord/dashboard/webapp/src/shell/AppShell.tsx,sha256=7E8rY8ObOKugtBrxy-mTQRxvhDgu1TrHTTh0mDNX3aU,10181
227
+ coord/dashboard/webapp/src/shell/ComingSoon.tsx,sha256=G6ZL2jarpd2GApXQz30XdWDOid-mANFz6gWD3wtI9SY,1377
228
+ coord/dashboard/webapp/src/shell/EmptyDetail.tsx,sha256=oCdVqB8mnj6DUPhx2BjmjJ_pOnxwwgqtP_sbxCU2brw,1113
229
+ coord/dashboard/webapp/src/shell/RouteNotFound.tsx,sha256=sc3A2fbmmZaa1k-hI_B4EIi7P2QNQ_mfP0X3NuAu7H0,1421
230
+ coord/dashboard/webapp/src/shell/ShellLayout.tsx,sha256=rB1cW0ItexyAxaZjWEiUZRHSrbqZtvydeUZv1G_qTQ0,6433
231
+ coord/dashboard/webapp/src/shell/StatusBar.tsx,sha256=8oPRTb9VkeKt61lSmnLCysPKUXc0kHZorANHPnERgYY,1789
232
+ coord/dashboard/webapp/src/shell/breakpoints.ts,sha256=3zc7T887MY_5MqvSdm0OpEpEa5-65Vm5fvYqjHlrx0M,3541
233
+ coord/dashboard/webapp/src/shell/railItems.ts,sha256=Qreja8vgshLH3hTsQxMriE9PJqSOp3TZ83ceF7ioKi8,3109
234
+ coord/dashboard/webapp/src/shell/shellState.ts,sha256=6nBDVSDqfnwW1om-9hPIXHyytTmSRfmt2MrFmPKRkZs,5600
235
+ coord/dashboard/webapp/src/shell/useRegionFocus.ts,sha256=P1EzyyJ4ZchCTUQZigwyV6pVZMMDZULkbETrxgHfKsc,3963
236
+ coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx,sha256=llHbMShSs414YUz8i9BUAeAjTohf7YJRGX0OKZCbC5k,21661
237
+ coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts,sha256=Z_nAcyO1uRrt7kSo67za9G8L_Yiyoiq1sCQyppMLrts,3069
238
+ coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts,sha256=4mDqTRcf2-XUBcHpLs3CT1j3ghhrwOKHbQNWXndgdM4,1432
239
+ coord/deploy/README.md,sha256=DG_q36KeW0LQ32ElU11wjfjULO7xGUoiPIFEGPW41k0,1391
240
+ coord/deploy/coord-agent.service,sha256=WZPbOh5xMPACaOTMCTQO97-tnKlXTRP5ySeOER_OC4w,4717
241
+ coord/deploy/coord-db-backup.service,sha256=qVEFksiA6Q30CdkB2d8PywzGDOjQtk-Fh3S8WM2VVDo,3182
242
+ coord/deploy/coord-db-backup.sh,sha256=aU2KTnESonkvMdm9OpG_ei3S2GqXch_q8P1AZyBQxPY,3281
243
+ coord/deploy/coord-db-backup.timer,sha256=uIOVQgC_EfoUgEsjISgTdpX9KFWmZYSF4JPpFYF6WVM,515
244
+ coord/deploy/coord-drive-queue.service,sha256=i5xh20cTdpK1hpXdvVGoN1_uZRwAIGSzSN8yOfX-v3c,6426
245
+ coord/deploy/coord-drive-queue.timer,sha256=Gep9t7NmE95HaJWcDwEv0EwMRrWBCBARlDEB6jEQL_s,1711
246
+ coord/deploy/coord-notify.service,sha256=dk1MXb129ny9qNrBctptEHNvwumKn9sBTur7YciH30U,2389
247
+ coord/deploy/coord-notify.timer,sha256=8KLuAm5aFPfXi5sfAiHji1RcuyBh3it_wsT7GfKs5fs,911
248
+ coord/deploy/coord-release-propagate.service,sha256=arTHkjRLeBgelQMc_owaUQ9udJI3UCQVzEby5NVFugM,4265
249
+ coord/deploy/coord-release-propagate.timer,sha256=paoAnPkR8h5yRxjYgtQ1E7eJ5nJvjIVXzlO9GqiwBD8,1735
250
+ coord/deploy/coord-release-window.service,sha256=moTAm-QQZPRksIAfYvvbnnzySJxzyS91lKH_YUrm4yE,6825
251
+ coord/deploy/coord-release-window.timer,sha256=vreTqwC8gzKyXTbb4WUSaIP8WaJLz9R6b4ur_FQMKVU,1592
252
+ coord/deploy/coord-serve.service,sha256=NFa4YdCZpISWKVG-m8ObEfZDjMLGMF5xEORPyODDCfo,4512
253
+ coord/deploy/coord-web-dist-build.service,sha256=7ELZ6K7omsXtJHcawaiQ7hHWS2fK7xK_jLbCxjGjU7A,2133
254
+ coord/deploy/coord-web-dist-build.timer,sha256=HD_-v36UvguAQ2IinbBNpC33ytyCZqhbHEvbRM5aA38,1498
255
+ coord/deploy/coord-web.service,sha256=WQo1m85TCPtvRq6-tBI0eLDS-I_GIkUCmJT1KDYFiJo,7210
256
+ coord/health/__init__.py,sha256=fvda5KAAaycBk7kXcNm_7wkLm28BTU3_TjyF6Nr3DnA,1990
257
+ coord/health/aggregate.py,sha256=MFPEe5JiS5gRsD0uc4zXAg86YhqnKFvEeSa1e9RAUnY,5694
258
+ coord/health/cli.py,sha256=opsrcsPIkCvXoVg-dnRMSvoKJfw7XB1FiyOwQMEOydM,4276
259
+ coord/health/context.py,sha256=pbc5qq-1DMbgjsFKTR52hg-igHtK7HazGLq-LTgzwuU,4060
260
+ coord/health/fleet_snapshot.py,sha256=peAAd93KvQZJgB7djHnaiAfO_X9joLyH1OhB3VkfPxY,21741
261
+ coord/health/models.py,sha256=niQx4UFjrzcP8fjSWsyKmEA1p1ENKVqAuvFNc52vz0g,9538
262
+ coord/health/pypi.py,sha256=u4OUnMPV9xiwjKHSQ8jKp586JJbmCVz_mNCBQqJWPE0,9270
263
+ coord/health/registry.py,sha256=s2XxiGeHh2ANY6pCVkIs94fB82HcSyq7QJztpj05Lp0,7959
264
+ coord/health/render.py,sha256=xMY8Vji6gIja4hKduGwByj1oUwK4wsBz2ap--w0aecg,3482
265
+ coord/health/units.py,sha256=GltG7GzebwjQeF-rztmkP7HnE87u5609fEIVrwpnYj4,1988
266
+ coord/health/checks/__init__.py,sha256=HzV55ESKSzj5WsSVDYF6zmQYBrp1EqvUqUhDygORssY,683
267
+ coord/health/checks/agent_install.py,sha256=ZyUDG29MDPVx1hFWLxxL0LK09xZ3K5kcO0CjN5GeCd8,10030
268
+ coord/health/checks/cargo_targets.py,sha256=rTPahn93w1xP8YitldPZyrDybrzYa8Tlp9sXm4mytEo,6143
269
+ coord/health/checks/claude_binary.py,sha256=8IUmbPH9lvlDrn2k9CmN4ll9fAWcnLJHcnQIsW_cviA,2220
270
+ coord/health/checks/deploy_lane_facts.py,sha256=tATDy8f66gFDI820MCNVHuw3m2bA3tTHx0SnR4mYJsc,17607
271
+ coord/health/checks/disk.py,sha256=666u9ZIwT8X7Z77GtUhGBf-4za1J338xQ7TD7ssupNc,3453
272
+ coord/health/checks/fleet_board.py,sha256=drIiwzbp7HaReh3raxOy697_R0LpO9QEtzaA3gJlCDI,3339
273
+ coord/health/checks/fleet_deploy_lanes.py,sha256=WpKBXQY3s1WrtARITtjgHtDJLi_F9PhrIlmMJ1nZtTM,20061
274
+ coord/health/checks/fleet_phantom.py,sha256=pPab8SkYzzKOelxAFxJXqZDAyl_GbFx5ZyKvKhJ9JII,2483
275
+ coord/health/checks/fleet_unit_drift.py,sha256=yOpvle9yjKqw16V5R3dYkHuoxytc-6bI9JmTKyZzt1c,5943
276
+ coord/health/checks/graph.py,sha256=pKMBDOQlbok6uLHFJ8PKKiZnFkDqlUhrCJoHh_jfx7o,8225
277
+ coord/health/checks/plan_usage.py,sha256=s48588N_Tc-G-MFfcPYqUNkHpiwsdXs0PzpGfH6mMfk,3150
278
+ coord/health/checks/repo_state.py,sha256=nrbApJ_6lSWNGZUFitua9PY-0KKszeEoOGu--v20z-8,5992
279
+ coord/health/checks/spawned_coord.py,sha256=b7vgyeh1oVABKH1bNT8W7UDkc7r6h7SHZIsiG5kRmYA,19348
280
+ coord/health/checks/timer_active.py,sha256=AMNA4QXxy-rfu1prqYovo_XonkAOesOMXtTyBRYZvNQ,9973
281
+ coord/health/checks/toolchain.py,sha256=Uayxnb0agbPEcVemLl_Gj3xpWWaoFUqSrzxCNVrCiUs,22200
282
+ coord/health/checks/unit_drift.py,sha256=5-_yFucG-8oUq8uaP6YJQ2aQ4dYbrCJpGsPgkxStGLE,28134
283
+ coord/health/checks/unit_enablement.py,sha256=hSNNRp86kU48-s9bnTPbywMsOltHIO4sinKMZZRXv_M,7233
284
+ coord/health/checks/worktrees.py,sha256=dL7nwH2Ne5dB8r-c3OjTSuMQFd8L4TXlobhM1hR87Vg,3427
285
+ coord/providers/__init__.py,sha256=aUUqHYa4-rPVIYSYa2i-ZWHUJxQ-tFLMj6Q4UVot2aM,31545
286
+ coord/providers/base.py,sha256=oehMg9v84hJ0kWMmMLsSkcqlvolZu4n-m5sZSXr21Eg,9017
287
+ coord/providers/claude.py,sha256=q-2HbxRIVMtZiUgNinNXXdIMt6VCJE-J8SBRRZelOYY,13143
288
+ coord/providers/claude_pty.py,sha256=5fCSAFyxHhm6thdRVQ0_AjQpGlYhD7KQ2GBICDaMYtg,29304
289
+ coord/providers/opencode.py,sha256=jl8O0ydb1CzKVXNzJKari4UNKIaD7mBs-x1EXgNfZ_0,46435
290
+ coord/skills/update-issue/SKILL.md,sha256=5cwR8XBJqkJnNMWNr6RXnCm09tIAhiGGzpZzTAuks7w,3373
291
+ code_coordinator-0.5.46.dist-info/METADATA,sha256=2jHwqoprV06E3VVwCcMl-AYdajPA38kzGXJdobeReDA,40690
292
+ code_coordinator-0.5.46.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
293
+ code_coordinator-0.5.46.dist-info/entry_points.txt,sha256=o-Hq8pvG7ReGePvN_4iOKjLNqiq-MJ43HbPurqjNPZo,41
294
+ code_coordinator-0.5.46.dist-info/top_level.txt,sha256=w5sTrXesTCebhXyYv2qufOZGo0PoD1Lxgn0Q3MAXjh4,6
295
+ code_coordinator-0.5.46.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ coord = coord.cli:main
@@ -0,0 +1,110 @@
1
+ # Functional Source License, Version 1.1, MIT Future License
2
+
3
+ ## Abbreviation
4
+
5
+ FSL-1.1-MIT
6
+
7
+ ## Notice
8
+
9
+ Copyright 2026 John Donaghy
10
+
11
+ ## Terms and Conditions
12
+
13
+ ### Licensor ("We")
14
+
15
+ The party offering the Software under these Terms and Conditions.
16
+
17
+ ### The Software
18
+
19
+ The "Software" is each version of the software that we make available under
20
+ these Terms and Conditions, as indicated by our inclusion of these Terms and
21
+ Conditions with the Software.
22
+
23
+ ### License Grant
24
+
25
+ Subject to your compliance with this License Grant and the Patents,
26
+ Redistribution and Trademark clauses below, we hereby grant you the right to
27
+ use, copy, modify, create derivative works, publicly perform, publicly display
28
+ and redistribute the Software for any Permitted Purpose identified below.
29
+
30
+ ### Permitted Purpose
31
+
32
+ A Permitted Purpose is any purpose other than a Competing Use. A Competing Use
33
+ means making the Software available to others in a commercial product or
34
+ service that:
35
+
36
+ 1. substitutes for the Software;
37
+
38
+ 2. substitutes for any other product or service we offer using the Software
39
+ that exists as of the date we make the Software available; or
40
+
41
+ 3. offers the same or substantially similar functionality as the Software.
42
+
43
+ Permitted Purposes specifically include using the Software:
44
+
45
+ 1. for your internal use and access;
46
+
47
+ 2. for non-commercial education;
48
+
49
+ 3. for non-commercial research; and
50
+
51
+ 4. in connection with professional services that you provide to a licensee
52
+ using the Software in accordance with these Terms and Conditions.
53
+
54
+ ### Patents
55
+
56
+ To the extent your use for a Permitted Purpose would necessarily infringe our
57
+ patents, the license grant above includes a license under our patents. If you
58
+ make a claim against any party that the Software infringes or contributes to
59
+ the infringement of any patent, then your patent license to the Software ends
60
+ immediately.
61
+
62
+ ### Redistribution
63
+
64
+ The Terms and Conditions apply to all copies, modifications and derivatives of
65
+ the Software.
66
+
67
+ If you redistribute any copies, modifications or derivatives of the Software,
68
+ you must include a copy of or a link to these Terms and Conditions and not
69
+ remove any copyright notices provided in or with the Software.
70
+
71
+ ### Disclaimer
72
+
73
+ THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR
74
+ IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF FITNESS FOR A PARTICULAR
75
+ PURPOSE, MERCHANTABILITY, TITLE OR NON-INFRINGEMENT.
76
+
77
+ IN NO EVENT WILL WE HAVE ANY LIABILITY TO YOU ARISING OUT OF OR RELATED TO THE
78
+ SOFTWARE, INCLUDING INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
79
+ EVEN IF WE HAVE BEEN INFORMED OF THEIR POSSIBILITY IN ADVANCE.
80
+
81
+ ### Trademarks
82
+
83
+ Except for displaying the License Details and identifying us as the origin of
84
+ the Software, you have no right under these Terms and Conditions to use our
85
+ trademarks, trade names, service marks or product names.
86
+
87
+ ## Grant of Future License
88
+
89
+ We hereby irrevocably grant you an additional license to use the Software under
90
+ the MIT license that is effective on the second anniversary of the date we make
91
+ the Software available. On or after that date, you may use the Software under
92
+ the MIT license, in which case the following will apply:
93
+
94
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
95
+ this software and associated documentation files (the "Software"), to deal in
96
+ the Software without restriction, including without limitation the rights to
97
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
98
+ of the Software, and to permit persons to whom the Software is furnished to do
99
+ so, subject to the following conditions:
100
+
101
+ The above copyright notice and this permission notice shall be included in all
102
+ copies or substantial portions of the Software.
103
+
104
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
105
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
106
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
107
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
108
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
109
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
110
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ coord
coord/__init__.py ADDED
@@ -0,0 +1,176 @@
1
+ """code-coordinator: multi-agent coordinator for Claude Code workers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from importlib.metadata import Distribution
6
+ from typing import TYPE_CHECKING
7
+
8
+ from coord.dist_name import CANDIDATE_NAMES, DistributionNotFoundError, resolve_installed
9
+
10
+ if TYPE_CHECKING:
11
+ from pathlib import Path
12
+
13
+ # NOTE on the `# noqa: PLC0415` (import-outside-toplevel) markers below:
14
+ # `json`/`pathlib.Path`/`urllib.parse`/`subprocess`/`setuptools_scm` are all
15
+ # deferred into the function bodies that use them rather than imported at
16
+ # module scope, so the common (non-editable-install) path through
17
+ # `_resolve_version` — every `coord` invocation except a developer/operator
18
+ # checkout — pays zero import cost for machinery it never touches. Each
19
+ # import is module-level-safe on its own; this is purely to keep the hot
20
+ # path cheap, not a cycle-avoidance workaround. The `TYPE_CHECKING`-only
21
+ # import above gives `_editable_source_root`'s return annotation a real
22
+ # name for type checkers without paying that cost at runtime either (`from
23
+ # __future__ import annotations` already defers evaluating the annotation
24
+ # itself).
25
+
26
+
27
+ def _editable_source_root(dist_name: str) -> Path | None:
28
+ """Return the source checkout root when *dist_name* is installed
29
+ editable (PEP 660, ``pip install -e .``), else ``None``.
30
+
31
+ #2010: an editable install's ``.dist-info`` is written once at install
32
+ time and never refreshed — reading ``__version__`` straight off it goes
33
+ stale the moment ``git pull`` moves the checkout's HEAD past whatever
34
+ tag was current at install time, misreporting the *operator's own* CLI
35
+ as drifted rather than the fleet it's inspecting.
36
+
37
+ pip records editable installs via a ``direct_url.json`` with
38
+ ``dir_info.editable: true`` and a ``file://`` URL pointing at the live
39
+ source tree — that's the reliable signal, not a ``site-packages``
40
+ substring match on ``__file__`` (a non-editable install into a venv
41
+ satisfies that too, and its metadata IS trustworthy since it's a
42
+ frozen snapshot rather than a claim about live source).
43
+ """
44
+ import json # noqa: PLC0415
45
+ from pathlib import Path # noqa: PLC0415
46
+ from urllib.parse import unquote, urlparse # noqa: PLC0415
47
+
48
+ try:
49
+ raw = Distribution.from_name(dist_name).read_text("direct_url.json")
50
+ info = json.loads(raw) if raw else None
51
+ except Exception: # noqa: BLE001 — best-effort, never break __version__
52
+ return None
53
+ if not isinstance(info, dict) or not info.get("dir_info", {}).get("editable"):
54
+ return None
55
+ parsed = urlparse(info.get("url", ""))
56
+ if parsed.scheme != "file" or not parsed.path:
57
+ return None
58
+ root = Path(unquote(parsed.path))
59
+ return root if root.is_dir() else None
60
+
61
+
62
+ def _live_scm_version(root: Path) -> str | None:
63
+ """Best-effort live version for an editable checkout at *root*, so
64
+ ``__version__`` doesn't trust a ``.dist-info`` stamp frozen at ``pip
65
+ install -e .`` time (#2010). Two tiers, most-accurate first:
66
+
67
+ 1. ``setuptools_scm.get_version()`` — the exact scheme a wheel build
68
+ would stamp from the same commit. Only importable when the
69
+ environment kept the build-system requirement around (e.g. ``pip
70
+ install -e ".[dev]"``); a plain ``pip install -e .`` discards it
71
+ once PEP 517 build isolation tears down its throwaway venv.
72
+ 2. ``git describe --tags --dirty --always`` — always available
73
+ wherever git is, and identical to the wheel's version string on a
74
+ clean tagged commit (the common case); slightly less precise
75
+ (raw git-describe form, not PEP 440) when HEAD has moved past the
76
+ last tag, but still honest and never a stale number.
77
+
78
+ KNOWN TRADE-OFF: this tier's output (e.g. ``3.4.5-dirty``, hyphen
79
+ separated) is not the same string ``setuptools_scm`` or a wheel
80
+ build would produce for that same commit (PEP 440,
81
+ ``3.4.5.dev0+g<sha>``-style). If ``coord status``'s drift check
82
+ ever does plain string equality between an operator's and an
83
+ agent's version, an operator that falls all the way to this tier
84
+ can show spurious drift against an otherwise-matching agent — a
85
+ strict improvement over pre-#2010 (never a *stale* number) but not
86
+ a guarantee of an *exact-format* match. Every real agent/daemon
87
+ install is a wheel, never editable (see the INVARIANT in
88
+ CLAUDE.md's release section), so this only affects
89
+ operator-vs-operator comparisons, and only when tier 1
90
+ (``setuptools_scm``) is unavailable.
91
+
92
+ Returns ``None`` — never raises — when neither works; callers fall
93
+ back to the (possibly stale) package metadata.
94
+ """
95
+ try:
96
+ from setuptools_scm import get_version # noqa: PLC0415
97
+
98
+ return get_version(root=str(root), fallback_version="0.0.0.dev0")
99
+ except Exception: # noqa: BLE001 — setuptools-scm may not be importable
100
+ pass
101
+
102
+ import subprocess # noqa: PLC0415
103
+
104
+ try:
105
+ result = subprocess.run(
106
+ ["git", "-C", str(root), "describe", "--tags", "--dirty", "--always"],
107
+ capture_output=True, text=True, timeout=5,
108
+ )
109
+ if result.returncode != 0:
110
+ return None
111
+ described = result.stdout.strip()
112
+ if not described:
113
+ return None
114
+ return described[1:] if described.startswith("v") else described
115
+ except Exception: # noqa: BLE001 — best-effort, never break __version__
116
+ return None
117
+
118
+
119
+ def _resolve_version(names: tuple[str, ...] = CANDIDATE_NAMES) -> str:
120
+ """#1238: single-sourced from the installed package's metadata, which
121
+ setuptools-scm stamps from the git tag at build time (see
122
+ ``[tool.setuptools_scm]`` in pyproject.toml) — this is the ONLY place
123
+ ``__version__`` is computed. No other source file may hardcode a
124
+ version literal; a release is just ``git tag vX.Y.Z && git push origin
125
+ vX.Y.Z``.
126
+
127
+ #2103: resolves through :func:`coord.dist_name.resolve_installed` rather
128
+ than a single hardcoded distribution name — ``__version__`` is what
129
+ ``/health``'s ``"version"`` field reports, which is the *only* field
130
+ ``coord agent update``'s polling loop keys off of to decide a machine
131
+ "came back". A bare ``claude-coordinator``-only lookup would degrade to
132
+ ``"0+unknown"`` forever on any machine that has ``code-coordinator``
133
+ installed instead, faking a fleet-wide "did not come back".
134
+
135
+ #2010: for a wheel install that metadata is always correct — it's a
136
+ frozen snapshot of a build that just happened. For an *editable*
137
+ install it is a snapshot written once at ``pip install -e .`` time and
138
+ never refreshed; ``git pull`` can move the checkout well past it with
139
+ nothing updating ``.dist-info``, so the operator's own CLI ends up
140
+ reporting itself as ancient. When the install is editable, prefer a
141
+ live git-derived version over the frozen metadata so ``coord
142
+ --version`` (and the ``coord status`` drift check that compares agent
143
+ versions against it) reflects the code actually running, rather than
144
+ accusing every agent of drift from a number that was wrong about the
145
+ operator, not them.
146
+
147
+ COST: this runs once at module-import time — i.e. for every ``coord``
148
+ invocation, not just ``--version``/``status``. On a non-editable
149
+ install (every agent/daemon; see the wheel-only INVARIANT in
150
+ CLAUDE.md's release section) it's just the one ``importlib.metadata``
151
+ lookup already required by #1238. On an editable install without
152
+ ``setuptools_scm`` importable, it additionally spawns one ``git
153
+ describe`` subprocess (bounded by a 5s timeout — see
154
+ ``_live_scm_version``) per invocation. That's an operator/developer
155
+ checkout only, and negligible next to a `claude -p` subprocess launch
156
+ or a board read; revisit only if something starts shelling out to
157
+ ``coord`` in a tight loop from such a checkout.
158
+ """
159
+ try:
160
+ resolved = resolve_installed(names)
161
+ except DistributionNotFoundError:
162
+ # Neither candidate name is an installed package at all (e.g.
163
+ # `python -c "import coord"` run directly against a source
164
+ # checkout that was never `pip install`'d) — degrade to an
165
+ # obviously-not-a-release string rather than raising.
166
+ return "0+unknown"
167
+
168
+ root = _editable_source_root(resolved.name)
169
+ if root is not None:
170
+ scm_version = _live_scm_version(root)
171
+ if scm_version is not None:
172
+ return scm_version
173
+ return resolved.version
174
+
175
+
176
+ __version__ = _resolve_version()