multifleet 5.0.0__tar.gz

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 (451) hide show
  1. multifleet-5.0.0/.claude-plugin/marketplace.json +40 -0
  2. multifleet-5.0.0/.claude-plugin/plugin.json +29 -0
  3. multifleet-5.0.0/.cursor-plugin/plugin.json +67 -0
  4. multifleet-5.0.0/.env.example +20 -0
  5. multifleet-5.0.0/.gitattributes +13 -0
  6. multifleet-5.0.0/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
  7. multifleet-5.0.0/.github/ISSUE_TEMPLATE/feature_request.md +21 -0
  8. multifleet-5.0.0/.github/PULL_REQUEST_TEMPLATE.md +22 -0
  9. multifleet-5.0.0/.github/workflows/benchmark.yml +31 -0
  10. multifleet-5.0.0/.github/workflows/ci.yml +83 -0
  11. multifleet-5.0.0/.gitignore +7 -0
  12. multifleet-5.0.0/.mcp.json +17 -0
  13. multifleet-5.0.0/.vscode/mcp.json.example +8 -0
  14. multifleet-5.0.0/ARCHITECTURE.md +378 -0
  15. multifleet-5.0.0/CHANGELOG.md +214 -0
  16. multifleet-5.0.0/CODE_OF_CONDUCT.md +40 -0
  17. multifleet-5.0.0/COMMS-PROTOCOL.md +313 -0
  18. multifleet-5.0.0/CONTRIBUTING.md +93 -0
  19. multifleet-5.0.0/DEMO.md +48 -0
  20. multifleet-5.0.0/INSTALL.md +193 -0
  21. multifleet-5.0.0/LICENSE +21 -0
  22. multifleet-5.0.0/PKG-INFO +496 -0
  23. multifleet-5.0.0/README.md +464 -0
  24. multifleet-5.0.0/RELEASE-NOTES.md +37 -0
  25. multifleet-5.0.0/SCALING.md +86 -0
  26. multifleet-5.0.0/agents/fleet-coordinator.md +350 -0
  27. multifleet-5.0.0/agents/fleet-liaison.md +178 -0
  28. multifleet-5.0.0/agents/fleet-worker.md +176 -0
  29. multifleet-5.0.0/bin/fleet-nerve-mcp +108 -0
  30. multifleet-5.0.0/bin/fleet_nerve_mcp.py +3309 -0
  31. multifleet-5.0.0/codex-config.toml.example +16 -0
  32. multifleet-5.0.0/commands/fleet-ack.md +6 -0
  33. multifleet-5.0.0/commands/fleet-chain.md +47 -0
  34. multifleet-5.0.0/commands/fleet-check.md +6 -0
  35. multifleet-5.0.0/commands/fleet-config-gate.md +6 -0
  36. multifleet-5.0.0/commands/fleet-dashboard.md +6 -0
  37. multifleet-5.0.0/commands/fleet-dispatch-gate.md +6 -0
  38. multifleet-5.0.0/commands/fleet-dispatch.md +41 -0
  39. multifleet-5.0.0/commands/fleet-doctor.md +6 -0
  40. multifleet-5.0.0/commands/fleet-events.md +14 -0
  41. multifleet-5.0.0/commands/fleet-healer.md +6 -0
  42. multifleet-5.0.0/commands/fleet-idle.md +6 -0
  43. multifleet-5.0.0/commands/fleet-liaison.md +12 -0
  44. multifleet-5.0.0/commands/fleet-onboard.md +6 -0
  45. multifleet-5.0.0/commands/fleet-orchestrate.md +6 -0
  46. multifleet-5.0.0/commands/fleet-post-verification.md +6 -0
  47. multifleet-5.0.0/commands/fleet-productivity.md +6 -0
  48. multifleet-5.0.0/commands/fleet-protocol.md +6 -0
  49. multifleet-5.0.0/commands/fleet-race.md +6 -0
  50. multifleet-5.0.0/commands/fleet-rebuttal.md +6 -0
  51. multifleet-5.0.0/commands/fleet-repair.md +6 -0
  52. multifleet-5.0.0/commands/fleet-security.md +6 -0
  53. multifleet-5.0.0/commands/fleet-send.md +6 -0
  54. multifleet-5.0.0/commands/fleet-status.md +6 -0
  55. multifleet-5.0.0/commands/fleet-task.md +6 -0
  56. multifleet-5.0.0/commands/fleet-tunnel.md +6 -0
  57. multifleet-5.0.0/commands/fleet-verdict.md +6 -0
  58. multifleet-5.0.0/commands/fleet-wake.md +6 -0
  59. multifleet-5.0.0/commands/fleet-watchdog.md +6 -0
  60. multifleet-5.0.0/commands/fleet-worker.md +6 -0
  61. multifleet-5.0.0/commands/productivity-view.md +6 -0
  62. multifleet-5.0.0/commands/using-multi-fleet.md +6 -0
  63. multifleet-5.0.0/config/config.template.json +28 -0
  64. multifleet-5.0.0/config/ide-adapters/claude-code.json +9 -0
  65. multifleet-5.0.0/config/ide-adapters/cursor.json +21 -0
  66. multifleet-5.0.0/config/ide-adapters/vscode.json +21 -0
  67. multifleet-5.0.0/config/presets/2-node-lan.json +48 -0
  68. multifleet-5.0.0/config/presets/2-node-lan.md +29 -0
  69. multifleet-5.0.0/config/presets/3-node-ssh.json +70 -0
  70. multifleet-5.0.0/config/presets/3-node-ssh.md +33 -0
  71. multifleet-5.0.0/config/presets/cloud-relay.json +58 -0
  72. multifleet-5.0.0/config/presets/cloud-relay.md +41 -0
  73. multifleet-5.0.0/config/presets/home-office.json +61 -0
  74. multifleet-5.0.0/config/presets/home-office.md +31 -0
  75. multifleet-5.0.0/docs/api/mcp-tools.md +77 -0
  76. multifleet-5.0.0/docs/api/packets.md +99 -0
  77. multifleet-5.0.0/docs/api/skills.md +51 -0
  78. multifleet-5.0.0/docs/architecture/layers.md +146 -0
  79. multifleet-5.0.0/docs/architecture/overview.md +92 -0
  80. multifleet-5.0.0/docs/architecture/probes.md +65 -0
  81. multifleet-5.0.0/docs/getting-started/config.md +97 -0
  82. multifleet-5.0.0/docs/getting-started/install.md +94 -0
  83. multifleet-5.0.0/docs/getting-started/quickstart.md +103 -0
  84. multifleet-5.0.0/docs/index.md +77 -0
  85. multifleet-5.0.0/docs/pricing.md +81 -0
  86. multifleet-5.0.0/gemini-extension.json +74 -0
  87. multifleet-5.0.0/hooks/hooks.json +57 -0
  88. multifleet-5.0.0/hooks/run-hook.cmd +708 -0
  89. multifleet-5.0.0/icon.svg +28 -0
  90. multifleet-5.0.0/mkdocs.yml +28 -0
  91. multifleet-5.0.0/multifleet/__init__.py +9 -0
  92. multifleet-5.0.0/multifleet/__main__.py +4 -0
  93. multifleet-5.0.0/multifleet/_paths.py +55 -0
  94. multifleet-5.0.0/multifleet/acceptance_gate.py +331 -0
  95. multifleet-5.0.0/multifleet/adapters/__init__.py +13 -0
  96. multifleet-5.0.0/multifleet/adapters/brainstorm_ingest.py +201 -0
  97. multifleet-5.0.0/multifleet/adapters/chief_sync.py +201 -0
  98. multifleet-5.0.0/multifleet/adapters/overlay_stream.py +180 -0
  99. multifleet-5.0.0/multifleet/adapters/packet_delivery.py +114 -0
  100. multifleet-5.0.0/multifleet/adapters/surgeon_escalation.py +158 -0
  101. multifleet-5.0.0/multifleet/adapters/surgeon_events.py +164 -0
  102. multifleet-5.0.0/multifleet/admin_feed.py +286 -0
  103. multifleet-5.0.0/multifleet/arbiter.py +265 -0
  104. multifleet-5.0.0/multifleet/arbiter_view.py +1177 -0
  105. multifleet-5.0.0/multifleet/audit.py +190 -0
  106. multifleet-5.0.0/multifleet/backup.py +188 -0
  107. multifleet-5.0.0/multifleet/benchmark.py +222 -0
  108. multifleet-5.0.0/multifleet/beta_dashboard.py +265 -0
  109. multifleet-5.0.0/multifleet/billing.py +239 -0
  110. multifleet-5.0.0/multifleet/branch_convergence.py +269 -0
  111. multifleet-5.0.0/multifleet/captain.py +219 -0
  112. multifleet-5.0.0/multifleet/channels.py +560 -0
  113. multifleet-5.0.0/multifleet/cli.py +929 -0
  114. multifleet-5.0.0/multifleet/config.py +246 -0
  115. multifleet-5.0.0/multifleet/contextdna_analyzer.py +475 -0
  116. multifleet-5.0.0/multifleet/contextdna_evidence_bridge.py +405 -0
  117. multifleet-5.0.0/multifleet/coordinator.py +261 -0
  118. multifleet-5.0.0/multifleet/cross_rebuttal.py +306 -0
  119. multifleet-5.0.0/multifleet/dashboard.py +170 -0
  120. multifleet-5.0.0/multifleet/dashboard_data.py +250 -0
  121. multifleet-5.0.0/multifleet/dashboard_events.py +159 -0
  122. multifleet-5.0.0/multifleet/dashboard_html.py +348 -0
  123. multifleet-5.0.0/multifleet/data_layer.py +242 -0
  124. multifleet-5.0.0/multifleet/discord_bridge.py +324 -0
  125. multifleet-5.0.0/multifleet/discovery.py +311 -0
  126. multifleet-5.0.0/multifleet/doctor.py +385 -0
  127. multifleet-5.0.0/multifleet/epistemic_packet.py +250 -0
  128. multifleet-5.0.0/multifleet/event_bus_server.py +536 -0
  129. multifleet-5.0.0/multifleet/event_emitter.py +143 -0
  130. multifleet-5.0.0/multifleet/event_registry.py +239 -0
  131. multifleet-5.0.0/multifleet/event_schema.py +221 -0
  132. multifleet-5.0.0/multifleet/event_stream.py +211 -0
  133. multifleet-5.0.0/multifleet/event_types.py +74 -0
  134. multifleet-5.0.0/multifleet/eventbus.py +335 -0
  135. multifleet-5.0.0/multifleet/evidence_ledger.py +287 -0
  136. multifleet-5.0.0/multifleet/evidence_sync.py +209 -0
  137. multifleet-5.0.0/multifleet/fleet_metrics.py +351 -0
  138. multifleet-5.0.0/multifleet/fleet_race.py +925 -0
  139. multifleet-5.0.0/multifleet/gains_gate.py +450 -0
  140. multifleet-5.0.0/multifleet/ghost_anticipate.py +247 -0
  141. multifleet-5.0.0/multifleet/ghost_checkpoint.py +282 -0
  142. multifleet-5.0.0/multifleet/ghost_contradictions.py +233 -0
  143. multifleet-5.0.0/multifleet/ghost_corroborate.py +319 -0
  144. multifleet-5.0.0/multifleet/ghost_cross_node.py +230 -0
  145. multifleet-5.0.0/multifleet/ghost_digest.py +339 -0
  146. multifleet-5.0.0/multifleet/ghost_layer.py +357 -0
  147. multifleet-5.0.0/multifleet/ghost_mirror.py +170 -0
  148. multifleet-5.0.0/multifleet/ghost_objections.py +220 -0
  149. multifleet-5.0.0/multifleet/ghost_pulse.py +358 -0
  150. multifleet-5.0.0/multifleet/health_monitor.py +418 -0
  151. multifleet-5.0.0/multifleet/hierarchy.py +349 -0
  152. multifleet-5.0.0/multifleet/ide_bridge.py +498 -0
  153. multifleet-5.0.0/multifleet/invariance_gates.py +646 -0
  154. multifleet-5.0.0/multifleet/invariance_rules.py +443 -0
  155. multifleet-5.0.0/multifleet/leases.py +614 -0
  156. multifleet-5.0.0/multifleet/liaison.py +359 -0
  157. multifleet-5.0.0/multifleet/mcp.py +45 -0
  158. multifleet-5.0.0/multifleet/mcp_resources.py +122 -0
  159. multifleet-5.0.0/multifleet/memory_bridge.py +329 -0
  160. multifleet-5.0.0/multifleet/memory_influence.py +325 -0
  161. multifleet-5.0.0/multifleet/merge_adjudicator.py +250 -0
  162. multifleet-5.0.0/multifleet/metrics.py +72 -0
  163. multifleet-5.0.0/multifleet/migration.py +168 -0
  164. multifleet-5.0.0/multifleet/nats_client.py +2878 -0
  165. multifleet-5.0.0/multifleet/nats_cluster.py +404 -0
  166. multifleet-5.0.0/multifleet/node_overlay.py +393 -0
  167. multifleet-5.0.0/multifleet/onboarding.py +257 -0
  168. multifleet-5.0.0/multifleet/packet_registry.py +256 -0
  169. multifleet-5.0.0/multifleet/packet_store.py +200 -0
  170. multifleet-5.0.0/multifleet/packets.py +198 -0
  171. multifleet-5.0.0/multifleet/probe_context_factory.py +104 -0
  172. multifleet-5.0.0/multifleet/probe_engine.py +849 -0
  173. multifleet-5.0.0/multifleet/probe_intensity.py +129 -0
  174. multifleet-5.0.0/multifleet/probe_interpreter.py +257 -0
  175. multifleet-5.0.0/multifleet/probe_review.py +131 -0
  176. multifleet-5.0.0/multifleet/probes/__init__.py +176 -0
  177. multifleet-5.0.0/multifleet/probes/agent_readiness.py +150 -0
  178. multifleet-5.0.0/multifleet/probes/architectural_hotspots.py +121 -0
  179. multifleet-5.0.0/multifleet/probes/blast_radius.py +216 -0
  180. multifleet-5.0.0/multifleet/probes/branch_intent.py +116 -0
  181. multifleet-5.0.0/multifleet/probes/dependency_drift.py +104 -0
  182. multifleet-5.0.0/multifleet/probes/distributed.py +166 -0
  183. multifleet-5.0.0/multifleet/probes/fleet_health.py +66 -0
  184. multifleet-5.0.0/multifleet/probes/hidden_dependency.py +328 -0
  185. multifleet-5.0.0/multifleet/probes/injection_prioritizer.py +368 -0
  186. multifleet-5.0.0/multifleet/probes/invariant_coverage.py +157 -0
  187. multifleet-5.0.0/multifleet/probes/mirror_drift.py +334 -0
  188. multifleet-5.0.0/multifleet/probes/partition_lease_drift.py +139 -0
  189. multifleet-5.0.0/multifleet/probes/repeated_failure.py +166 -0
  190. multifleet-5.0.0/multifleet/probes/repeated_failure_cluster.py +189 -0
  191. multifleet-5.0.0/multifleet/probes/security_surface.py +256 -0
  192. multifleet-5.0.0/multifleet/probes/stale_context.py +358 -0
  193. multifleet-5.0.0/multifleet/probes/task_diff_mismatch.py +135 -0
  194. multifleet-5.0.0/multifleet/probes/worktree_contamination.py +124 -0
  195. multifleet-5.0.0/multifleet/probes/worktree_divergence.py +136 -0
  196. multifleet-5.0.0/multifleet/product_bridge.py +534 -0
  197. multifleet-5.0.0/multifleet/productive_wait.py +99 -0
  198. multifleet-5.0.0/multifleet/professor_bridge.py +237 -0
  199. multifleet-5.0.0/multifleet/prometheus_export.py +258 -0
  200. multifleet-5.0.0/multifleet/protocol.py +53 -0
  201. multifleet-5.0.0/multifleet/race_orchestrator.py +299 -0
  202. multifleet-5.0.0/multifleet/rate_limit.py +57 -0
  203. multifleet-5.0.0/multifleet/rebuttal.py +286 -0
  204. multifleet-5.0.0/multifleet/regression_dashboard.py +256 -0
  205. multifleet-5.0.0/multifleet/replay.py +114 -0
  206. multifleet-5.0.0/multifleet/review_flow.py +398 -0
  207. multifleet-5.0.0/multifleet/sanitize.py +250 -0
  208. multifleet-5.0.0/multifleet/security.py +320 -0
  209. multifleet-5.0.0/multifleet/self_heal.py +872 -0
  210. multifleet-5.0.0/multifleet/sessions.py +491 -0
  211. multifleet-5.0.0/multifleet/snapshot_record.py +302 -0
  212. multifleet-5.0.0/multifleet/status_aggregator.py +215 -0
  213. multifleet-5.0.0/multifleet/store.py +651 -0
  214. multifleet-5.0.0/multifleet/superpowers_adapter.py +156 -0
  215. multifleet-5.0.0/multifleet/superpowers_bridge.py +305 -0
  216. multifleet-5.0.0/multifleet/superset_bridge.py +373 -0
  217. multifleet-5.0.0/multifleet/supervisor.py +330 -0
  218. multifleet-5.0.0/multifleet/supervisor_store.py +312 -0
  219. multifleet-5.0.0/multifleet/supervisor_watchdog.py +161 -0
  220. multifleet-5.0.0/multifleet/surgeon_adapter.py +510 -0
  221. multifleet-5.0.0/multifleet/synthesis.py +429 -0
  222. multifleet-5.0.0/multifleet/task_orchestrator.py +371 -0
  223. multifleet-5.0.0/multifleet/task_state.py +275 -0
  224. multifleet-5.0.0/multifleet/theater_dashboard.py +525 -0
  225. multifleet-5.0.0/multifleet/theatrical.py +609 -0
  226. multifleet-5.0.0/multifleet/truth_ladder.py +304 -0
  227. multifleet-5.0.0/multifleet/vision_packets.py +427 -0
  228. multifleet-5.0.0/multifleet/visual.py +211 -0
  229. multifleet-5.0.0/multifleet/web_dashboard.py +1059 -0
  230. multifleet-5.0.0/multifleet/web_server.py +492 -0
  231. multifleet-5.0.0/multifleet/worker.py +262 -0
  232. multifleet-5.0.0/package.json +33 -0
  233. multifleet-5.0.0/packet-types/_builtin/ack.json +19 -0
  234. multifleet-5.0.0/packet-types/_builtin/brainstorm.json +36 -0
  235. multifleet-5.0.0/packet-types/_builtin/branch_status.json +22 -0
  236. multifleet-5.0.0/packet-types/_builtin/chief_decision.json +48 -0
  237. multifleet-5.0.0/packet-types/_builtin/chief_decision_v2.json +26 -0
  238. multifleet-5.0.0/packet-types/_builtin/chief_escalation.json +31 -0
  239. multifleet-5.0.0/packet-types/_builtin/critique.json +24 -0
  240. multifleet-5.0.0/packet-types/_builtin/execution_ledger.json +42 -0
  241. multifleet-5.0.0/packet-types/_builtin/heartbeat.json +20 -0
  242. multifleet-5.0.0/packet-types/_builtin/lease_grant.json +20 -0
  243. multifleet-5.0.0/packet-types/_builtin/lease_release.json +17 -0
  244. multifleet-5.0.0/packet-types/_builtin/lease_request.json +18 -0
  245. multifleet-5.0.0/packet-types/_builtin/local_verdict.json +35 -0
  246. multifleet-5.0.0/packet-types/_builtin/merge_candidate.json +29 -0
  247. multifleet-5.0.0/packet-types/_builtin/proposal.json +19 -0
  248. multifleet-5.0.0/packet-types/_builtin/race_start.json +42 -0
  249. multifleet-5.0.0/packet-types/_builtin/rebuttal.json +18 -0
  250. multifleet-5.0.0/packet-types/_builtin/repair.json +25 -0
  251. multifleet-5.0.0/packet-types/_builtin/resolution.json +22 -0
  252. multifleet-5.0.0/packet-types/_builtin/supervisor_phase.json +33 -0
  253. multifleet-5.0.0/packet-types/_builtin/surgeon_decision.json +37 -0
  254. multifleet-5.0.0/packet-types/_builtin/sync_hold.json +20 -0
  255. multifleet-5.0.0/packet-types/_builtin/task_brief.json +21 -0
  256. multifleet-5.0.0/packet-types/_builtin/truth_promotion.json +25 -0
  257. multifleet-5.0.0/packet-types/_builtin/vision_contract.json +29 -0
  258. multifleet-5.0.0/packet-types/coordination/branch_status.json +21 -0
  259. multifleet-5.0.0/packet-types/coordination/critique.json +20 -0
  260. multifleet-5.0.0/packet-types/coordination/merge_candidate.json +20 -0
  261. multifleet-5.0.0/packet-types/coordination/review_request.json +20 -0
  262. multifleet-5.0.0/packet-types/coordination/task_result.json +20 -0
  263. multifleet-5.0.0/pyproject.toml +79 -0
  264. multifleet-5.0.0/ruff.toml +39 -0
  265. multifleet-5.0.0/scripts/build_manifests.py +499 -0
  266. multifleet-5.0.0/scripts/check-drift.sh +71 -0
  267. multifleet-5.0.0/scripts/demo-fleet-race.sh +396 -0
  268. multifleet-5.0.0/scripts/demo-multifleet.sh +216 -0
  269. multifleet-5.0.0/scripts/demo-race.sh +42 -0
  270. multifleet-5.0.0/scripts/demo-setup.sh +251 -0
  271. multifleet-5.0.0/scripts/fleet +209 -0
  272. multifleet-5.0.0/scripts/fleet-liaison.sh +165 -0
  273. multifleet-5.0.0/scripts/fleet-status-xbar.py +103 -0
  274. multifleet-5.0.0/scripts/fleet-stress-test.sh +42 -0
  275. multifleet-5.0.0/scripts/install.sh +363 -0
  276. multifleet-5.0.0/scripts/nats-cluster-setup.sh +120 -0
  277. multifleet-5.0.0/scripts/platform-detect.sh +75 -0
  278. multifleet-5.0.0/scripts/pre-demo-check.sh +98 -0
  279. multifleet-5.0.0/scripts/run-e2e.sh +31 -0
  280. multifleet-5.0.0/scripts/seed-demo-evidence.py +111 -0
  281. multifleet-5.0.0/scripts/validate-install.sh +276 -0
  282. multifleet-5.0.0/skills/fleet-ack/SKILL.md +98 -0
  283. multifleet-5.0.0/skills/fleet-chain/SKILL.md +87 -0
  284. multifleet-5.0.0/skills/fleet-check/SKILL.md +149 -0
  285. multifleet-5.0.0/skills/fleet-config-gate/SKILL.md +157 -0
  286. multifleet-5.0.0/skills/fleet-dispatch/SKILL.md +83 -0
  287. multifleet-5.0.0/skills/fleet-dispatch-gate/SKILL.md +135 -0
  288. multifleet-5.0.0/skills/fleet-events/SKILL.md +30 -0
  289. multifleet-5.0.0/skills/fleet-healer/SKILL.md +188 -0
  290. multifleet-5.0.0/skills/fleet-idle/SKILL.md +98 -0
  291. multifleet-5.0.0/skills/fleet-liaison/SKILL.md +175 -0
  292. multifleet-5.0.0/skills/fleet-onboard/SKILL.md +58 -0
  293. multifleet-5.0.0/skills/fleet-orchestrate/SKILL.md +354 -0
  294. multifleet-5.0.0/skills/fleet-post-verification/SKILL.md +168 -0
  295. multifleet-5.0.0/skills/fleet-protocol/SKILL.md +529 -0
  296. multifleet-5.0.0/skills/fleet-race/SKILL.md +125 -0
  297. multifleet-5.0.0/skills/fleet-rebuttal/SKILL.md +318 -0
  298. multifleet-5.0.0/skills/fleet-repair/SKILL.md +156 -0
  299. multifleet-5.0.0/skills/fleet-security/SKILL.md +78 -0
  300. multifleet-5.0.0/skills/fleet-send/SKILL.md +227 -0
  301. multifleet-5.0.0/skills/fleet-status/SKILL.md +235 -0
  302. multifleet-5.0.0/skills/fleet-task/SKILL.md +246 -0
  303. multifleet-5.0.0/skills/fleet-tunnel/SKILL.md +136 -0
  304. multifleet-5.0.0/skills/fleet-verdict/SKILL.md +267 -0
  305. multifleet-5.0.0/skills/fleet-wake/SKILL.md +211 -0
  306. multifleet-5.0.0/skills/fleet-watchdog/SKILL.md +281 -0
  307. multifleet-5.0.0/skills/fleet-worker/SKILL.md +187 -0
  308. multifleet-5.0.0/skills/productivity-view/SKILL.md +116 -0
  309. multifleet-5.0.0/skills/using-multi-fleet/SKILL.md +409 -0
  310. multifleet-5.0.0/tests/conftest.py +146 -0
  311. multifleet-5.0.0/tests/pytest.ini +6 -0
  312. multifleet-5.0.0/tests/test_3surgeon_fixes.py +231 -0
  313. multifleet-5.0.0/tests/test_acceptance_gate.py +129 -0
  314. multifleet-5.0.0/tests/test_adapters.py +352 -0
  315. multifleet-5.0.0/tests/test_admin_feed.py +256 -0
  316. multifleet-5.0.0/tests/test_arbiter.py +178 -0
  317. multifleet-5.0.0/tests/test_arbiter_view.py +210 -0
  318. multifleet-5.0.0/tests/test_architecture.py +111 -0
  319. multifleet-5.0.0/tests/test_audit.py +230 -0
  320. multifleet-5.0.0/tests/test_backup.py +243 -0
  321. multifleet-5.0.0/tests/test_benchmark.py +161 -0
  322. multifleet-5.0.0/tests/test_beta_dashboard.py +152 -0
  323. multifleet-5.0.0/tests/test_bidirectional_sync.py +231 -0
  324. multifleet-5.0.0/tests/test_billing.py +246 -0
  325. multifleet-5.0.0/tests/test_branch_convergence.py +226 -0
  326. multifleet-5.0.0/tests/test_captain.py +222 -0
  327. multifleet-5.0.0/tests/test_channel_cascade.py +247 -0
  328. multifleet-5.0.0/tests/test_channel_invariance.py +252 -0
  329. multifleet-5.0.0/tests/test_chaos.py +301 -0
  330. multifleet-5.0.0/tests/test_chaos_expanded.py +592 -0
  331. multifleet-5.0.0/tests/test_cli.py +94 -0
  332. multifleet-5.0.0/tests/test_code_review_wiring.py +231 -0
  333. multifleet-5.0.0/tests/test_code_scanner.py +398 -0
  334. multifleet-5.0.0/tests/test_config_loading.py +250 -0
  335. multifleet-5.0.0/tests/test_contextdna_analyzer.py +427 -0
  336. multifleet-5.0.0/tests/test_contextdna_evidence_bridge.py +291 -0
  337. multifleet-5.0.0/tests/test_contextdna_integration.py +342 -0
  338. multifleet-5.0.0/tests/test_contextdna_real.py +346 -0
  339. multifleet-5.0.0/tests/test_coordinator.py +243 -0
  340. multifleet-5.0.0/tests/test_cross_machine_e2e.py +396 -0
  341. multifleet-5.0.0/tests/test_cross_rebuttal.py +310 -0
  342. multifleet-5.0.0/tests/test_dashboard.py +169 -0
  343. multifleet-5.0.0/tests/test_dashboard_data.py +280 -0
  344. multifleet-5.0.0/tests/test_dashboard_html.py +98 -0
  345. multifleet-5.0.0/tests/test_data_layer.py +249 -0
  346. multifleet-5.0.0/tests/test_dedup_integration.py +386 -0
  347. multifleet-5.0.0/tests/test_demo_multifleet.py +57 -0
  348. multifleet-5.0.0/tests/test_discord_bridge.py +345 -0
  349. multifleet-5.0.0/tests/test_e2e_pipeline.py +570 -0
  350. multifleet-5.0.0/tests/test_epistemic_packet.py +127 -0
  351. multifleet-5.0.0/tests/test_event_bus_server.py +256 -0
  352. multifleet-5.0.0/tests/test_event_schema.py +131 -0
  353. multifleet-5.0.0/tests/test_event_stream.py +173 -0
  354. multifleet-5.0.0/tests/test_eventbus.py +253 -0
  355. multifleet-5.0.0/tests/test_eventbus_full_wiring.py +365 -0
  356. multifleet-5.0.0/tests/test_evidence_ledger.py +252 -0
  357. multifleet-5.0.0/tests/test_fleet_config.py +136 -0
  358. multifleet-5.0.0/tests/test_fleet_doctor.py +396 -0
  359. multifleet-5.0.0/tests/test_fleet_mcp.py +207 -0
  360. multifleet-5.0.0/tests/test_fleet_merge_and_export.py +324 -0
  361. multifleet-5.0.0/tests/test_fleet_metrics.py +117 -0
  362. multifleet-5.0.0/tests/test_fleet_race.py +240 -0
  363. multifleet-5.0.0/tests/test_fleet_repair.py +151 -0
  364. multifleet-5.0.0/tests/test_fleet_send.py +151 -0
  365. multifleet-5.0.0/tests/test_fleet_watchdog.py +133 -0
  366. multifleet-5.0.0/tests/test_fleet_worker.py +152 -0
  367. multifleet-5.0.0/tests/test_full_organism.py +251 -0
  368. multifleet-5.0.0/tests/test_full_stack.py +362 -0
  369. multifleet-5.0.0/tests/test_gains_gate.py +298 -0
  370. multifleet-5.0.0/tests/test_ghost.py +182 -0
  371. multifleet-5.0.0/tests/test_ghost_layer.py +576 -0
  372. multifleet-5.0.0/tests/test_health_monitor.py +118 -0
  373. multifleet-5.0.0/tests/test_hierarchy.py +406 -0
  374. multifleet-5.0.0/tests/test_hmac_security.py +323 -0
  375. multifleet-5.0.0/tests/test_hook_output.py +235 -0
  376. multifleet-5.0.0/tests/test_ide_bridge.py +310 -0
  377. multifleet-5.0.0/tests/test_integration_pipeline.py +150 -0
  378. multifleet-5.0.0/tests/test_integration_workflows.py +630 -0
  379. multifleet-5.0.0/tests/test_invariance_gates.py +430 -0
  380. multifleet-5.0.0/tests/test_invariance_rules.py +273 -0
  381. multifleet-5.0.0/tests/test_lease_cross_node.py +251 -0
  382. multifleet-5.0.0/tests/test_leases.py +711 -0
  383. multifleet-5.0.0/tests/test_liaison.py +354 -0
  384. multifleet-5.0.0/tests/test_liaison_launcher.py +281 -0
  385. multifleet-5.0.0/tests/test_mcp_resources.py +104 -0
  386. multifleet-5.0.0/tests/test_memory_bridge.py +199 -0
  387. multifleet-5.0.0/tests/test_memory_influence.py +193 -0
  388. multifleet-5.0.0/tests/test_memory_wiring.py +208 -0
  389. multifleet-5.0.0/tests/test_merge_adjudicator.py +363 -0
  390. multifleet-5.0.0/tests/test_metrics.py +75 -0
  391. multifleet-5.0.0/tests/test_mkdocs_site.py +131 -0
  392. multifleet-5.0.0/tests/test_module_dedup_integration.py +285 -0
  393. multifleet-5.0.0/tests/test_module_imports.py +81 -0
  394. multifleet-5.0.0/tests/test_module_smoke.py +223 -0
  395. multifleet-5.0.0/tests/test_nats_cluster.py +207 -0
  396. multifleet-5.0.0/tests/test_new_probes.py +223 -0
  397. multifleet-5.0.0/tests/test_no_hardcoded_paths.py +111 -0
  398. multifleet-5.0.0/tests/test_node_overlay.py +237 -0
  399. multifleet-5.0.0/tests/test_onboarding.py +214 -0
  400. multifleet-5.0.0/tests/test_organism_dashboard.py +317 -0
  401. multifleet-5.0.0/tests/test_packet_registry.py +245 -0
  402. multifleet-5.0.0/tests/test_packet_validation_integration.py +317 -0
  403. multifleet-5.0.0/tests/test_packets.py +368 -0
  404. multifleet-5.0.0/tests/test_probe_engine.py +423 -0
  405. multifleet-5.0.0/tests/test_probe_events.py +155 -0
  406. multifleet-5.0.0/tests/test_probe_evidence_pipeline.py +456 -0
  407. multifleet-5.0.0/tests/test_probe_interpreter.py +169 -0
  408. multifleet-5.0.0/tests/test_probe_review.py +37 -0
  409. multifleet-5.0.0/tests/test_probes_extended.py +323 -0
  410. multifleet-5.0.0/tests/test_probes_intelligence.py +342 -0
  411. multifleet-5.0.0/tests/test_probes_round2.py +308 -0
  412. multifleet-5.0.0/tests/test_product_bridge.py +291 -0
  413. multifleet-5.0.0/tests/test_production_hardening.py +372 -0
  414. multifleet-5.0.0/tests/test_productive_wait.py +147 -0
  415. multifleet-5.0.0/tests/test_professor_bridge.py +329 -0
  416. multifleet-5.0.0/tests/test_prometheus_export.py +181 -0
  417. multifleet-5.0.0/tests/test_protocol.py +70 -0
  418. multifleet-5.0.0/tests/test_protocol_hardening.py +253 -0
  419. multifleet-5.0.0/tests/test_protocol_version.py +129 -0
  420. multifleet-5.0.0/tests/test_race_orchestrator.py +333 -0
  421. multifleet-5.0.0/tests/test_rate_limit.py +77 -0
  422. multifleet-5.0.0/tests/test_rebuttal.py +223 -0
  423. multifleet-5.0.0/tests/test_rebuttal_e2e.py +634 -0
  424. multifleet-5.0.0/tests/test_rebuttal_integration.py +412 -0
  425. multifleet-5.0.0/tests/test_regression_dashboard.py +143 -0
  426. multifleet-5.0.0/tests/test_replay.py +92 -0
  427. multifleet-5.0.0/tests/test_review_flow.py +311 -0
  428. multifleet-5.0.0/tests/test_sanitize.py +301 -0
  429. multifleet-5.0.0/tests/test_security_audit.py +245 -0
  430. multifleet-5.0.0/tests/test_seed_validation.py +239 -0
  431. multifleet-5.0.0/tests/test_session_ids.py +162 -0
  432. multifleet-5.0.0/tests/test_signal_scoring.py +289 -0
  433. multifleet-5.0.0/tests/test_skills_commands.py +217 -0
  434. multifleet-5.0.0/tests/test_status_aggregator.py +261 -0
  435. multifleet-5.0.0/tests/test_store.py +303 -0
  436. multifleet-5.0.0/tests/test_stress_30day.py +588 -0
  437. multifleet-5.0.0/tests/test_superpowers_adapter.py +161 -0
  438. multifleet-5.0.0/tests/test_superpowers_bridge.py +252 -0
  439. multifleet-5.0.0/tests/test_superset_bridge.py +270 -0
  440. multifleet-5.0.0/tests/test_supervisor.py +157 -0
  441. multifleet-5.0.0/tests/test_supervisor_store.py +217 -0
  442. multifleet-5.0.0/tests/test_surgeon_adapter.py +522 -0
  443. multifleet-5.0.0/tests/test_synthesis.py +356 -0
  444. multifleet-5.0.0/tests/test_task_orchestrator.py +176 -0
  445. multifleet-5.0.0/tests/test_task_state.py +216 -0
  446. multifleet-5.0.0/tests/test_theater_dashboard.py +150 -0
  447. multifleet-5.0.0/tests/test_theatrical.py +142 -0
  448. multifleet-5.0.0/tests/test_truth_ladder.py +148 -0
  449. multifleet-5.0.0/tests/test_version.py +52 -0
  450. multifleet-5.0.0/tests/test_vision_packets.py +319 -0
  451. multifleet-5.0.0/tests/test_web_server.py +197 -0
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "multi-fleet-marketplace",
3
+ "description": "Marketplace for the Multi-Fleet cross-machine AI collaboration plugin",
4
+ "owner": {
5
+ "name": "Aaron Tjomsland",
6
+ "email": "support@ersimulator.com"
7
+ },
8
+ "plugins": [
9
+ {
10
+ "name": "multi-fleet",
11
+ "description": "Cross-machine AI collaboration — real-time messaging, task agents, productivity visibility",
12
+ "version": "3.0.0",
13
+ "source": "./",
14
+ "author": { "name": "Multi-Fleet Contributors", "email": "support@ersimulator.com" },
15
+ "skills": [
16
+ "./skills/using-multi-fleet",
17
+ "./skills/fleet-send",
18
+ "./skills/fleet-status",
19
+ "./skills/fleet-task",
20
+ "./skills/fleet-wake",
21
+ "./skills/fleet-repair",
22
+ "./skills/fleet-tunnel",
23
+ "./skills/fleet-watchdog",
24
+ "./skills/fleet-check",
25
+ "./skills/fleet-worker",
26
+ "./skills/fleet-config-gate",
27
+ "./skills/fleet-dispatch-gate",
28
+ "./skills/fleet-healer",
29
+ "./skills/fleet-post-verification",
30
+ "./skills/fleet-protocol",
31
+ "./skills/productivity-view",
32
+ "./skills/fleet-chain",
33
+ "./skills/fleet-dispatch",
34
+ "./skills/fleet-ack",
35
+ "./skills/fleet-idle",
36
+ "./skills/fleet-security"
37
+ ]
38
+ }
39
+ ]
40
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "multi-fleet",
3
+ "displayName": "Multi-Fleet",
4
+ "description": "Cross-machine AI collaboration — real-time peer-to-peer messaging, chain orchestration, dispatch gates, session-aware task agents, and fleet-wide productivity visibility across multiple Claude Code instances",
5
+ "version": "3.0.0",
6
+ "author": {
7
+ "name": "Aaron Tjomsland",
8
+ "email": "support@ersimulator.com"
9
+ },
10
+ "homepage": "https://github.com/supportersimulator/er-simulator-superrepo",
11
+ "repository": "https://github.com/supportersimulator/er-simulator-superrepo",
12
+ "license": "MIT",
13
+ "keywords": [
14
+ "multi-fleet",
15
+ "fleet",
16
+ "collaboration",
17
+ "multi-machine",
18
+ "peer-to-peer",
19
+ "real-time",
20
+ "productivity",
21
+ "chain-orchestration",
22
+ "dispatch"
23
+ ],
24
+ "skills": "./skills/",
25
+ "agents": "./agents/",
26
+ "commands": "./commands/",
27
+ "hooks": "./hooks/hooks.json",
28
+ "mcp": "./.mcp.json"
29
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "multi-fleet",
3
+ "displayName": "Multi-Fleet",
4
+ "description": "Cross-machine AI collaboration \u2014 real-time peer-to-peer messaging, session-aware task agents, and fleet-wide productivity visibility across multiple Claude Code instances",
5
+ "version": "2.0.0",
6
+ "ide": "cursor",
7
+ "mcpServers": {
8
+ "fleet-nerve": {
9
+ "command": "python3",
10
+ "args": [
11
+ "${workspaceFolder}/multi-fleet/tools/fleet_nerve_mcp.py"
12
+ ],
13
+ "env": {
14
+ "MULTIFLEET_NODE_ID": "",
15
+ "FLEET_NERVE_PORT": "8855"
16
+ }
17
+ }
18
+ },
19
+ "tools": [
20
+ "using_multi_fleet",
21
+ "fleet_send",
22
+ "fleet_status",
23
+ "fleet_task",
24
+ "fleet_wake",
25
+ "fleet_repair",
26
+ "fleet_tunnel",
27
+ "fleet_watchdog",
28
+ "fleet_check",
29
+ "fleet_worker",
30
+ "productivity_view",
31
+ "cmd_fleet_check",
32
+ "cmd_fleet_dashboard",
33
+ "cmd_fleet_repair",
34
+ "cmd_fleet_send",
35
+ "cmd_fleet_status",
36
+ "cmd_fleet_task",
37
+ "cmd_fleet_tunnel",
38
+ "cmd_fleet_wake",
39
+ "cmd_fleet_watchdog",
40
+ "cmd_fleet_worker"
41
+ ],
42
+ "skills": [
43
+ "using-multi-fleet",
44
+ "fleet-send",
45
+ "fleet-status",
46
+ "fleet-task",
47
+ "fleet-wake",
48
+ "fleet-repair",
49
+ "fleet-tunnel",
50
+ "fleet-watchdog",
51
+ "fleet-check",
52
+ "fleet-worker",
53
+ "productivity-view"
54
+ ],
55
+ "commands": [
56
+ "fleet-check",
57
+ "fleet-dashboard",
58
+ "fleet-repair",
59
+ "fleet-send",
60
+ "fleet-status",
61
+ "fleet-task",
62
+ "fleet-tunnel",
63
+ "fleet-wake",
64
+ "fleet-watchdog",
65
+ "fleet-worker"
66
+ ]
67
+ }
@@ -0,0 +1,20 @@
1
+ # Multi-Fleet Plugin Configuration
2
+ # Copy to .env and fill in values
3
+
4
+ # Unique name for this machine (e.g. mac1, mac2, mac3)
5
+ MULTIFLEET_NODE_ID=mac1
6
+
7
+ # Fleet nerve daemon HTTP port (default: 8855)
8
+ FLEET_NERVE_PORT=8855
9
+
10
+ # NATS server URL for P1 pub/sub communication
11
+ NATS_URL=nats://127.0.0.1:4222
12
+
13
+ # NATS authentication token (if server requires auth)
14
+ NATS_TOKEN=
15
+
16
+ # Superset API key for fleet dashboard metrics
17
+ SUPERSET_API_KEY=
18
+
19
+ # OpenAI API key — used by cardiologist surgeon (GPT-4.1-mini)
20
+ OPENAI_API_KEY=
@@ -0,0 +1,13 @@
1
+ # Enforce consistent line endings across platforms
2
+ *.sh text eol=lf
3
+ *.cmd text eol=lf
4
+ *.py text eol=lf
5
+ *.json text eol=lf
6
+ *.md text eol=lf
7
+ *.toml text eol=lf
8
+
9
+ # Binary files
10
+ *.db binary
11
+ *.png binary
12
+ *.jpg binary
13
+ *.svg binary
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: Bug Report
3
+ about: Report a bug in Multi-Fleet
4
+ labels: bug
5
+ ---
6
+
7
+ ## Description
8
+
9
+ What happened?
10
+
11
+ ## Expected Behavior
12
+
13
+ What should have happened?
14
+
15
+ ## Steps to Reproduce
16
+
17
+ 1. ...
18
+ 2. ...
19
+
20
+ ## Environment
21
+
22
+ - **OS:** (e.g., macOS 15.3, Ubuntu 24.04)
23
+ - **Python:** (e.g., 3.12)
24
+ - **IDE:** (e.g., Claude Code, Cursor, VS Code)
25
+ - **Multi-Fleet version:** (from `package.json`)
26
+ - **Node count:** (e.g., 2)
27
+
28
+ ## Logs
29
+
30
+ ```
31
+ Paste relevant daemon logs or error output here.
32
+ ```
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: Feature Request
3
+ about: Suggest a new feature or improvement
4
+ labels: enhancement
5
+ ---
6
+
7
+ ## Problem
8
+
9
+ What problem does this solve?
10
+
11
+ ## Proposed Solution
12
+
13
+ How should it work?
14
+
15
+ ## Alternatives Considered
16
+
17
+ What other approaches did you consider?
18
+
19
+ ## Additional Context
20
+
21
+ Any relevant links, screenshots, or examples.
@@ -0,0 +1,22 @@
1
+ ## What
2
+
3
+ Brief description of the change.
4
+
5
+ ## Why
6
+
7
+ What problem does this solve or what feature does it add?
8
+
9
+ ## How
10
+
11
+ Key implementation decisions (if non-obvious).
12
+
13
+ ## Testing
14
+
15
+ - [ ] `python -m pytest tests/ -v` passes
16
+ - [ ] `ruff check . && ruff format --check .` passes
17
+ - [ ] New functionality has tests
18
+ - [ ] Tested with at least 2 nodes (if changing communication)
19
+
20
+ ## Related Issues
21
+
22
+ Closes #
@@ -0,0 +1,31 @@
1
+ name: Performance Benchmark
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths: ['multi-fleet/multifleet/**']
7
+ pull_request:
8
+ branches: [main]
9
+
10
+ jobs:
11
+ benchmark:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ - uses: actions/setup-python@v5
16
+ with:
17
+ python-version: '3.12'
18
+ - run: pip install nats-py jsonschema
19
+ - run: |
20
+ cd multi-fleet
21
+ PYTHONPATH=. python -c "
22
+ from multifleet.benchmark import FleetBenchmark
23
+ b = FleetBenchmark()
24
+ results = b.run_all()
25
+ print(b.render_report())
26
+ # Fail if any benchmark exceeds threshold
27
+ for r in results:
28
+ if r.p95_ms > 100:
29
+ print(f'REGRESSION: {r.name} p95={r.p95_ms}ms > 100ms threshold')
30
+ exit(1)
31
+ "
@@ -0,0 +1,83 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - 'multi-fleet/**'
8
+ - 'tools/fleet_nerve_*.py'
9
+ pull_request:
10
+ branches: [main]
11
+ paths:
12
+ - 'multi-fleet/**'
13
+ - 'tools/fleet_nerve_*.py'
14
+
15
+ defaults:
16
+ run:
17
+ working-directory: .
18
+
19
+ jobs:
20
+ test:
21
+ runs-on: ubuntu-latest
22
+ strategy:
23
+ matrix:
24
+ python-version: ['3.10', '3.12']
25
+
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+
29
+ - name: Set up Python ${{ matrix.python-version }}
30
+ uses: actions/setup-python@v5
31
+ with:
32
+ python-version: ${{ matrix.python-version }}
33
+
34
+ - name: Install dependencies
35
+ run: |
36
+ python -m pip install --upgrade pip
37
+ pip install pytest pytest-asyncio
38
+ pip install nats-py
39
+ # Install from pyproject.toml if it exists
40
+ if [ -f multi-fleet/pyproject.toml ]; then
41
+ pip install -e multi-fleet/
42
+ fi
43
+
44
+ - name: Run unit tests
45
+ run: |
46
+ cd multi-fleet
47
+ python -m pytest tests/ -m "not integration" -v --tb=short
48
+ env:
49
+ MULTIFLEET_NODE_ID: ci-runner
50
+ FLEET_NERVE_HMAC_KEY: ci-test-key-not-real
51
+
52
+ - name: Run security tests
53
+ run: |
54
+ cd multi-fleet
55
+ python -m pytest tests/ -m "security" -v --tb=short
56
+ env:
57
+ MULTIFLEET_NODE_ID: ci-runner
58
+ FLEET_NERVE_HMAC_KEY: ci-test-key-not-real
59
+
60
+ lint:
61
+ runs-on: ubuntu-latest
62
+ steps:
63
+ - uses: actions/checkout@v4
64
+
65
+ - name: Set up Python
66
+ uses: actions/setup-python@v5
67
+ with:
68
+ python-version: '3.12'
69
+
70
+ - name: Install ruff
71
+ run: pip install ruff
72
+
73
+ - name: Ruff check
74
+ continue-on-error: true
75
+ run: |
76
+ cd multi-fleet
77
+ ruff check . --config ruff.toml
78
+
79
+ - name: Ruff format check
80
+ continue-on-error: true
81
+ run: |
82
+ cd multi-fleet
83
+ ruff format --check . --config ruff.toml
@@ -0,0 +1,7 @@
1
+ config/config.json
2
+ __pycache__/
3
+ *.pyc
4
+ .pytest_cache/
5
+ .DS_Store
6
+ node_modules/
7
+ dist/
@@ -0,0 +1,17 @@
1
+ {
2
+ "mcpServers": {
3
+ "fleet-nerve": {
4
+ "command": "python3",
5
+ "args": ["${CLAUDE_PLUGIN_ROOT}/bin/fleet_nerve_mcp.py"],
6
+ "env": {
7
+ "MULTIFLEET_NODE_ID": "",
8
+ "FLEET_NERVE_PORT": "8855"
9
+ }
10
+ },
11
+ "superset": {
12
+ "type": "http",
13
+ "url": "https://api.superset.sh/api/agent/mcp",
14
+ "_description": "Superset local execution runtime — workspace, task, and agent session management"
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "servers": {
3
+ "fleet-nerve": {
4
+ "command": "${workspaceFolder}/bin/fleet-nerve-mcp",
5
+ "args": []
6
+ }
7
+ }
8
+ }