multi-agent-platform 0.3.0__tar.gz → 0.3.1__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 (321) hide show
  1. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/PKG-INFO +46 -64
  2. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/README.md +43 -62
  3. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/agent_client.py +15 -4
  4. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/experiment.py +28 -3
  5. multi_agent_platform-0.3.1/cli/commands/host.py +150 -0
  6. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/runtime.py +1 -1
  7. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/skill.py +53 -3
  8. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/topic.py +48 -3
  9. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/e2e_collab.py +2 -2
  10. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/main.py +110 -5
  11. multi_agent_platform-0.3.1/cli/orchestrator.py +240 -0
  12. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/runtime_chat.py +1 -1
  13. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/simple_waker.py +1 -2
  14. multi_agent_platform-0.3.1/cli/skills/experiment-host/SKILL.md +213 -0
  15. multi_agent_platform-0.3.1/cli/skills/experiment-host/references/lifecycle-transitions.md +102 -0
  16. multi_agent_platform-0.3.1/cli/skills/experiment-reviewer/SKILL.md +121 -0
  17. multi_agent_platform-0.3.1/cli/skills/experiment-reviewer/references/review-format-guide.md +59 -0
  18. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/skills/map-project-collab/SKILL.md +100 -46
  19. multi_agent_platform-0.3.1/cli/skills/map-project-collab/references/bootstrap-troubleshooting.md +90 -0
  20. multi_agent_platform-0.3.0/cli/skills/map-runtime-waker/SKILL.md → multi_agent_platform-0.3.1/cli/skills/map-project-collab/references/waker-mode.md +17 -41
  21. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/skills/topic-host/SKILL.md +109 -95
  22. multi_agent_platform-0.3.1/cli/skills/topic-host/references/experiment-gate-rubric.md +130 -0
  23. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/skills/topic-participant/SKILL.md +49 -6
  24. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/PKG-INFO +46 -64
  25. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/SOURCES.txt +10 -2
  26. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/pyproject.toml +5 -4
  27. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/client.py +39 -4
  28. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/server.py +14 -3
  29. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_sdk/__init__.py +1 -1
  30. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_types/enums.py +37 -0
  31. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_types/schemas.py +36 -5
  32. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/__version__.py +1 -1
  33. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/experiments.py +14 -2
  34. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/topics.py +42 -3
  35. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/domain/models.py +25 -4
  36. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/agent_work_service.py +1 -1
  37. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/mention_service.py +1 -1
  38. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/notification_service.py +1 -0
  39. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/phase_service.py +132 -25
  40. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_ack_service.py +4 -1
  41. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_comment_service.py +9 -1
  42. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_lifecycle_service.py +147 -13
  43. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_service.py +2 -0
  44. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_typing_extensions_clean.py +26 -22
  45. multi_agent_platform-0.3.1/tests/test_experiment_executor.py +484 -0
  46. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_local_cache.py +1 -2
  47. multi_agent_platform-0.3.1/tests/test_orchestrator.py +408 -0
  48. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_project_export.py +1 -2
  49. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_sdk.py +3 -3
  50. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_skill_install.py +72 -3
  51. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_topics.py +254 -8
  52. multi_agent_platform-0.3.0/cli/skills/experiment-host/SKILL.md +0 -223
  53. multi_agent_platform-0.3.0/cli/skills/experiment-reviewer/SKILL.md +0 -108
  54. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/LICENSE +0 -0
  55. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/__init__.py +0 -0
  56. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/action_item_escalation.py +0 -0
  57. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/bridge_state.py +0 -0
  58. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/__init__.py +0 -0
  59. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/action.py +0 -0
  60. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/agent.py +0 -0
  61. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/audit.py +0 -0
  62. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/docs.py +0 -0
  63. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/feedback.py +0 -0
  64. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/notification.py +0 -0
  65. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/persona.py +0 -0
  66. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/project.py +0 -0
  67. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/sync.py +0 -0
  68. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/git_checkpoint.py +0 -0
  69. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/host_worker_types.py +0 -0
  70. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/local_cache.py +0 -0
  71. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/map_command_client.py +0 -0
  72. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/participant_worker.py +0 -0
  73. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/project_export.py +0 -0
  74. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/reviewer_worker.py +0 -0
  75. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/runtime/__init__.py +0 -0
  76. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/runtime/run_lock.py +0 -0
  77. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/session_wake_log.py +0 -0
  78. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/skills/__init__.py +0 -0
  79. {multi_agent_platform-0.3.0/cli/skills/map-runtime-waker → multi_agent_platform-0.3.1/cli/skills/map-project-collab}/agents/openai.yaml +0 -0
  80. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/skills/map-project-collab/scripts/map-bootstrap.sh +0 -0
  81. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/table_render.py +0 -0
  82. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/wake_backend.py +0 -0
  83. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/worker_cycle_log.py +0 -0
  84. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/dependency_links.txt +0 -0
  85. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/entry_points.txt +0 -0
  86. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/requires.txt +0 -0
  87. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/top_level.txt +0 -0
  88. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/__init__.py +0 -0
  89. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/bootstrap.py +0 -0
  90. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/config.py +0 -0
  91. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/errors.py +0 -0
  92. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/exceptions.py +0 -0
  93. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/plan_evidence.py +0 -0
  94. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/project_config.py +0 -0
  95. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/result_template.py +0 -0
  96. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/testing.py +0 -0
  97. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/__init__.py +0 -0
  98. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/_utils.py +0 -0
  99. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/auth.py +0 -0
  100. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/config.py +0 -0
  101. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/context.py +0 -0
  102. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/main.py +0 -0
  103. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/session.py +0 -0
  104. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_sdk/evidence.py +0 -0
  105. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_types/__init__.py +0 -0
  106. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/__init__.py +0 -0
  107. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/__init__.py +0 -0
  108. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/action_items.py +0 -0
  109. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/agents.py +0 -0
  110. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/audit.py +0 -0
  111. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/background_tasks.py +0 -0
  112. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/common.py +0 -0
  113. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/deps.py +0 -0
  114. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/feedback.py +0 -0
  115. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/notifications.py +0 -0
  116. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/projects.py +0 -0
  117. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/router.py +0 -0
  118. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/status.py +0 -0
  119. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/webhooks.py +0 -0
  120. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/auth/__init__.py +0 -0
  121. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/auth/experiment_access.py +0 -0
  122. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/config.py +0 -0
  123. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/db/__init__.py +0 -0
  124. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/db/base.py +0 -0
  125. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/db/deadlock_retry.py +0 -0
  126. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/db/session.py +0 -0
  127. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/domain/__init__.py +0 -0
  128. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/domain/encrypted_types.py +0 -0
  129. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/domain/schemas.py +0 -0
  130. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/domain/state_machine.py +0 -0
  131. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/domain/topic_ack_constants.py +0 -0
  132. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/main.py +0 -0
  133. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/scripts/__init__.py +0 -0
  134. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/scripts/migrate_notification_unique.py +0 -0
  135. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/scripts/purge_audit_pollution.py +0 -0
  136. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/__init__.py +0 -0
  137. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/_lookups.py +0 -0
  138. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/acceptance_service.py +0 -0
  139. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/action_item_migration_service.py +0 -0
  140. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/action_item_service.py +0 -0
  141. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/archive_lint_service.py +0 -0
  142. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/audit_service.py +0 -0
  143. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/auth.py +0 -0
  144. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/comment_service.py +0 -0
  145. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/errors.py +0 -0
  146. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/escalation_resolver.py +0 -0
  147. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/evidence_service.py +0 -0
  148. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/experiment_capabilities_service.py +0 -0
  149. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/inbound_event_service.py +0 -0
  150. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/lock_service.py +0 -0
  151. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/log_service.py +0 -0
  152. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/notification_stream.py +0 -0
  153. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/permissions.py +0 -0
  154. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/persona_activity_service.py +0 -0
  155. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/phase_owner_resolver.py +0 -0
  156. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/plan_marker_service.py +0 -0
  157. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/plan_service.py +0 -0
  158. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/platform_feedback_service.py +0 -0
  159. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/project_service.py +0 -0
  160. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/project_status_service.py +0 -0
  161. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/review_service.py +0 -0
  162. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/secret_encryption.py +0 -0
  163. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/similarity_service.py +0 -0
  164. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/sse_event_schemas.py +0 -0
  165. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/status_service.py +0 -0
  166. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/template_service.py +0 -0
  167. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/text_utils.py +0 -0
  168. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/thread_activity.py +0 -0
  169. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/todo_persona_filter.py +0 -0
  170. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/todo_service.py +0 -0
  171. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_action_item_ops.py +0 -0
  172. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_comment_kind.py +0 -0
  173. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_helpers.py +0 -0
  174. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_progress_service.py +0 -0
  175. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_resolve_service.py +0 -0
  176. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_work_item_service.py +0 -0
  177. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/webhook_service.py +0 -0
  178. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/setup.cfg +0 -0
  179. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_18a64691_linkage.py +0 -0
  180. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_a2_action_item_cascade.py +0 -0
  181. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_accept_result_verdict.py +0 -0
  182. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_action_items.py +0 -0
  183. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_agent_client.py +0 -0
  184. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_agent_work.py +0 -0
  185. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_agents_list.py +0 -0
  186. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_arch_map_sdk_evidence.py +0 -0
  187. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_archive_lint_service.py +0 -0
  188. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_audit_admin_cli.py +0 -0
  189. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_audit_admin_filter.py +0 -0
  190. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_auth.py +0 -0
  191. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_auth_experiment_access.py +0 -0
  192. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_authz_cross_persona_capability.py +0 -0
  193. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_authz_pr3_creator_gating_extended.py +0 -0
  194. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_b_acceptance.py +0 -0
  195. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_stale.py +0 -0
  196. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_wake_endpoints.py +0 -0
  197. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_wake_stale.py +0 -0
  198. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_wake_stale_notifications.py +0 -0
  199. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_b_waker_should_wake_action_item.py +0 -0
  200. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_bridge_state.py +0 -0
  201. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cleanup_audit_log_no_commit.py +0 -0
  202. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cleanup_exp_b_paging_seven_endpoints.py +0 -0
  203. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cleanup_exp_b_paging_unified_limit.py +0 -0
  204. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_clear_action_template.py +0 -0
  205. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli.py +0 -0
  206. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_error_envelope.py +0 -0
  207. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_evidence_contract.py +0 -0
  208. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_format_priority.py +0 -0
  209. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_n2_hard_cutover.py +0 -0
  210. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_schema_discovery.py +0 -0
  211. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_status.py +0 -0
  212. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_template_contract.py +0 -0
  213. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_work_deprecation.py +0 -0
  214. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cross_persona_call_audit.py +0 -0
  215. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_deadlock_retry.py +0 -0
  216. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_docs_inventory.py +0 -0
  217. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_fast_gate_whitelist_complete.py +0 -0
  218. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_agent_work_service.py +0 -0
  219. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_agents.py +0 -0
  220. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_experiment_capabilities_service.py +0 -0
  221. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_experiments_projects.py +0 -0
  222. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_mention_service.py +0 -0
  223. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_notification_service.py +0 -0
  224. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_phase_service.py +0 -0
  225. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_project_service.py +0 -0
  226. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_todo_service.py +0 -0
  227. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topic_comment_service.py +0 -0
  228. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topic_service.py +0 -0
  229. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topic_work_item_service.py +0 -0
  230. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topics.py +0 -0
  231. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_uv_lock.py +0 -0
  232. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_version_single_source.py +0 -0
  233. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_error_codes_cli.py +0 -0
  234. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_error_envelope_and_file_options.py +0 -0
  235. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_escalation_resolver.py +0 -0
  236. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_escalation_target_endpoint.py +0 -0
  237. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_evidence_service.py +0 -0
  238. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_experiment_capabilities.py +0 -0
  239. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_experiment_capabilities_whitelist.py +0 -0
  240. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_experiment_lock_fuzz.py +0 -0
  241. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_experiment_lock_notifications.py +0 -0
  242. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_experiment_lock_unit.py +0 -0
  243. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_experiments.py +0 -0
  244. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_feedback.py +0 -0
  245. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_feedback_admin_cli.py +0 -0
  246. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_field_rename_alias.py +0 -0
  247. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_git_checkpoint.py +0 -0
  248. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_inbound_event_rejection.py +0 -0
  249. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_log_create_response.py +0 -0
  250. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_m2_flow.py +0 -0
  251. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_m3_flow.py +0 -0
  252. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_map_sdk_skeleton.py +0 -0
  253. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_mcp.py +0 -0
  254. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_mcp_http.py +0 -0
  255. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_mention_code_skip_unit.py +0 -0
  256. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_mentions.py +0 -0
  257. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_notification_bulk_filter.py +0 -0
  258. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_notification_service_v09.py +0 -0
  259. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_notification_stream.py +0 -0
  260. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_notification_upsert_pr2.py +0 -0
  261. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_notifications.py +0 -0
  262. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_participant_worker_claude_agent.py +0 -0
  263. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_perf_count_sql_fixture.py +0 -0
  264. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_perf_experiment_bundle_verdict_n_plus_one.py +0 -0
  265. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_perf_experiment_summary_bulk.py +0 -0
  266. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_perf_topic_comments_bulk.py +0 -0
  267. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_perf_work_hotpath_bulk.py +0 -0
  268. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_persona_activity.py +0 -0
  269. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_persona_compare_partition.py +0 -0
  270. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_phase_owner_orm_validation.py +0 -0
  271. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_phase_owner_resolver.py +0 -0
  272. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_plan_evidence_parser.py +0 -0
  273. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_plan_marker_service.py +0 -0
  274. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_plan_revise_auto_archive.py +0 -0
  275. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_plan_validate_cli.py +0 -0
  276. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_project_config.py +0 -0
  277. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_project_status.py +0 -0
  278. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_projects.py +0 -0
  279. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_rebutted_plan_continues_e2e.py +0 -0
  280. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_register_agent_body_model.py +0 -0
  281. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_reject_result_misuse.py +0 -0
  282. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_resolve_item_sdk_contract.py +0 -0
  283. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_resolve_item_status.py +0 -0
  284. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_result_template_parser.py +0 -0
  285. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_already_archived.py +0 -0
  286. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_archived_metadata.py +0 -0
  287. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_eligibility.py +0 -0
  288. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_item_mutation_audit.py +0 -0
  289. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_item_state_closed_migration.py +0 -0
  290. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_list_archived_filter.py +0 -0
  291. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_substitute_and_withdraw.py +0 -0
  292. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_verdict_alias.py +0 -0
  293. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_reviewer_worker_claude_agent.py +0 -0
  294. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_runtime_chat.py +0 -0
  295. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_same_second_host_reply.py +0 -0
  296. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_same_second_trio.py +0 -0
  297. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_sdk_exceptions.py +0 -0
  298. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_server_lock_service.py +0 -0
  299. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_session_wake_log.py +0 -0
  300. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_similarity_api_contract.py +0 -0
  301. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_similarity_service.py +0 -0
  302. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_simple_waker.py +0 -0
  303. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_simple_waker_pr3_dedup.py +0 -0
  304. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_simple_waker_reviewer_filter.py +0 -0
  305. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_sse_acceptance.py +0 -0
  306. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_sse_isolation.py +0 -0
  307. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_sse_schema_overlap.py +0 -0
  308. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_state_machine.py +0 -0
  309. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_state_machine_recovery_hint.py +0 -0
  310. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_systemd_install.py +0 -0
  311. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_template_api_contract.py +0 -0
  312. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_template_service.py +0 -0
  313. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_todos.py +0 -0
  314. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_topic_notifications.py +0 -0
  315. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_topic_progress.py +0 -0
  316. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_topic_read_cursor.py +0 -0
  317. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_topic_work_items.py +0 -0
  318. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_waker_phase1_acceptance.py +0 -0
  319. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_webhook_secret_encryption.py +0 -0
  320. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_webhooks_audit.py +0 -0
  321. {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_work_summary.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multi-agent-platform
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Multi-Agent experiment collaboration platform
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/quantaeye/multi-agent-platform
@@ -9,11 +9,12 @@ Project-URL: Repository, https://github.com/quantaeye/multi-agent-platform
9
9
  Project-URL: Issues, https://github.com/quantaeye/multi-agent-platform/issues
10
10
  Classifier: Development Status :: 4 - Beta
11
11
  Classifier: Intended Audience :: Developers
12
+ Classifier: Programming Language :: Python :: 3.10
12
13
  Classifier: Programming Language :: Python :: 3.11
13
14
  Classifier: Programming Language :: Python :: 3.12
14
15
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
15
16
  Classifier: Operating System :: OS Independent
16
- Requires-Python: >=3.11
17
+ Requires-Python: >=3.10
17
18
  Description-Content-Type: text/markdown
18
19
  License-File: LICENSE
19
20
  Requires-Dist: fastapi<0.116,>=0.115.0
@@ -69,10 +70,10 @@ pip install multi-agent-platform
69
70
 
70
71
  ```bash
71
72
  pip install multi-agent-platform
72
- map skill install # 将 6 个 Skill 文件安装到 .cursor/skills/
73
+ map skill install # 将 5 个 Skill 文件安装到 .cursor/skills/
73
74
  ```
74
75
 
75
- 安装后 Cursor 会自动发现 Skill,AI Agent 读取后即可遵循完整的 MAP 协作流程(含两轮讨论门禁、实验生命周期等)。
76
+ 安装后 Cursor 会自动发现 Skill,AI Agent 读取后即可遵循完整的 MAP 协作流程(含讨论门禁(默认两轮,可伸缩)、实验生命周期等)。
76
77
 
77
78
  **方式二:使用简化 Prompt(快速上手)**
78
79
 
@@ -80,71 +81,41 @@ map skill install # 将 6 个 Skill 文件安装到 .cursor/skills/
80
81
 
81
82
  ## 文档
82
83
 
84
+ - [文档总入口](docs/INDEX.md)
83
85
  - [MAP Agent Prompt(给 AI Agent 的协作指南)](MAP_AGENT_PROMPT.md)
84
86
  - [Quick Start 指南(新用户必读)](docs/QUICKSTART.md)
85
- - [产品需求文档(PRD)](docs/prd/archive/v0.1.md)
86
- - [产品需求文档 v0.2(角色与项目边界)](docs/prd/archive/v0.2.md)
87
- - [产品需求文档 v0.3(话题独立、UI 写闭环、待办与通知)](docs/prd/archive/v0.3.md)
88
- - [产品需求文档 v0.4(站内收件箱、@提及、计划 diff、话题置顶)](docs/prd/archive/v0.4.md)
89
- - [产品需求文档 v0.5(主持待办 pending_topic_replies、topic-host Skill)](docs/prd/archive/v0.5.md)
90
- - [产品需求文档 v0.6(列表归档、独立列表页、通知 SSE)](docs/prd/archive/v0.6.md)
91
- - [产品需求文档 v0.9 草案(waker Phase 2 通知降噪)](docs/prd/v0.9.md)
92
- - [Webhook 话题主持接线指南](docs/WEBHOOK-TOPIC-HOST.md)
93
- - [Agent Runtime 集成(simple-waker,默认)](docs/MAP-SIMPLE-WAKER.md)
87
+ - [CLI 指南](docs/CLI.md)
94
88
  - [架构设计](docs/ARCHITECTURE.md)
95
89
  - [Python SDK 指南](docs/SDK.md)
96
90
  - [MCP Server 指南(stdio)](docs/MCP.md)
91
+ - [Webhook 话题主持接线指南](docs/WEBHOOK-TOPIC-HOST.md)
92
+ - [Agent Runtime 集成(simple-waker,默认)](docs/MAP-SIMPLE-WAKER.md)
93
+ - [Persona 行为差异](docs/MAP-PERSONA-COMPARE.md)
94
+ - [Web 端 Agent UI 视图](docs/UI-AGENTS.md)
95
+ - [证据元数据契约](docs/MAP-EVIDENCE-METADATA.md)
96
+ - [错误码清单](docs/MAP-ERROR-CODES.md)
97
97
 
98
- ## 状态
99
-
100
- **M1 已完成**:数据模型、Alembic 迁移、Projects/Experiments CRUD REST API。
101
- **M2 已完成**:Plans 修订、Reviews、Comments、实验阶段与不合理项状态机。
102
- **M3 已完成**:实验日志、Start/Complete、全局 Status API、CLI(`map` 命令)。
103
- **M4 已完成**:React + Vite Web UI(看板、项目、实验话题页)。
104
- **M5 已完成**:Python SDK(`map_client`)、SDK 文档、CLI 基于 SDK 重构、Docker 部署。
105
- **M6 已完成**:MCP stdio + HTTP 服务(`map-mcp`),供 IDE Agent 调用。
106
- **M7 已完成**:项目角色边界(`project_key`、Agent 项目绑定、权限门控、Status MD v1)。
107
- **M8 已完成**:项目 Current Status MD 版本化(修订 API、历史查询、CLI/MCP)。
108
-
109
- **v0.3 已完成(M11–M14)**:
110
-
111
- - **M11**:话题(Topic)独立实体 + 评论树 + 实验↔话题可选关联 + Alembic 迁移 + CLI/SDK/MCP 适配。
112
- - **M12**:Web UI 写操作闭环——发布话题/实验、修订计划、提交评审、追加日志、撤回/取消/编辑、通用讨论;新增话题详情页。
113
- - **M13**:Agent 待办视图(`GET /agents/me/todos`)+ 实验列表筛选/分页/搜索(`q`/`creator`/`page` + `X-Total-Count` header)。
114
- - **M14**:Webhook 出站通知(HMAC 签名 + 投递记录 + Admin CRUD)+ 审计日志(关键写操作打点 + 对象/全局查询)。
115
-
116
- 详见 [PRD v0.3](docs/prd/archive/v0.3.md)。
117
-
118
- **v0.4 已完成(M15–M18)**:
119
-
120
- - **M15**:站内通知收件箱(`notifications` 表 + 统一事件扇出 + API/Web/CLI/SDK/MCP)。
121
- - **M16**:评论 `@提及` → 待办 `mentions` 分区 + 定向通知。
122
- - **M17**:实验页计划版本 diff 只读视图(`PlanDiffView`)。
123
- - **M18**:话题置顶(`topics.pinned` + 列表优先排序)。
124
-
125
- 详见 [PRD v0.4](docs/prd/archive/v0.4.md)。
126
-
127
- **v0.5 已完成(M19–M21)**:
128
-
129
- - **M19**:`GET /agents/me/todos` 新增 `pending_topic_replies`(话题主持 thread 级待回复)。
130
- - **M20**:topic-host Skill(`.cursor/skills/topic-host/SKILL.md`)。
131
- - **M21**:Webhook 主持接线文档([WEBHOOK-TOPIC-HOST.md](docs/WEBHOOK-TOPIC-HOST.md))。
98
+ ### PRD
132
99
 
133
- 详见 [PRD v0.5](docs/prd/archive/v0.5.md)。
100
+ - [现行草案:v0.9(waker Phase 2 通知降噪)](docs/prd/v0.9.md)
101
+ - [归档:v0.1 / v0.2 / v0.3 / v0.4 / v0.5 / v0.6](docs/prd/archive/)
102
+ - [占位:v0.7 / v0.8(未单独成稿)](docs/prd/archive/v0.7.md)
134
103
 
135
- **v0.6 已完成(M22–M24)**:
104
+ ## 状态
136
105
 
137
- - **M22**:话题/实验 `archived_at` 归档(默认列表排除、`include_archived`、活跃实验 per-topic 约束更新)。
138
- - **M23**:Web 独立列表页(`/projects/:id/topics`、`/experiments`)+ `client.ts` vitest。
139
- - **M24**:站内通知 **SSE**(`GET /agents/me/notifications/stream`)+ Web 实时 invalidate。
106
+ **稳定能力**:
140
107
 
141
- 详见 [PRD v0.6](docs/prd/archive/v0.6.md)。项目叙事参考 [docs/status-md-v6.md](docs/status-md-v6.md)。
108
+ - **实验生命周期**:计划修订、评审、执行日志、结果审批、状态机
109
+ - **话题协作**:独立话题 + 评论树 + @提及 + 多轮讨论 + Round Summary + 结论与行动项
110
+ - **待办与通知**:Agent 待办视图 + 站内通知 + SSE 实时推送 + Webhook 出站
111
+ - **Web UI**:React + Vite 看板 / 话题 / 实验详情,写操作闭环
112
+ - **多入口接入**:Python SDK + `map` CLI + MCP stdio/HTTP(`map-mcp`)
113
+ - **Agent Runtime**:simple-waker 默认路径(轮询 + remind + action_item 升级)
114
+ - **多 persona 协作**:`.map/` persona + Skill 指导 Agent 写回 MAP
142
115
 
143
- **v0.8 MVP 已完成**:
116
+ **当前主线**:v0.9 草案(waker Phase 2 通知降噪)。详见 [PRD v0.9](docs/prd/v0.9.md) 与 [status-md-v10.md](docs/status-md-v10.md)。
144
117
 
145
- - 话题结论(Decision)与行动项(Action Items):`POST /topics/{id}/resolve`、项目级 `decisions` / `action-items` 查询、`todos.action_items`。
146
- - CLI:`map topic resolve --id <topic-id> --file decision.md|decision.yaml`、`map project decisions`、`map action list --mine`。
147
- - Web:话题详情页展示/修订结论,项目页展示最近结论,待办页展示分配给当前 Agent 的行动项。
118
+ 历史里程碑详见 PRD 归档:[v0.1–v0.6](docs/prd/archive/) · [占位 v0.7 / v0.8](docs/prd/archive/v0.7.md)。
148
119
 
149
120
  **Agent 身份(本仓库)**:统一使用 **`.map/` persona + `map` CLI**(见 [AGENTS.md](AGENTS.md));Cursor MCP 接入计划停用。
150
121
 
@@ -212,9 +183,19 @@ map topic archive --id <topic-id> # v0.7 P3:归档(薄包装 P
212
183
  map topic archive --id <topic-id> --undo # 反归档(--unarchive 同义)
213
184
  map experiment archive --id <exp-id> # 归档实验
214
185
  map topic comment --id <topic-id> --file comment.md
215
- map topic mark-seen --id <topic-id> # 清 contextual unread,不清 reply/ack/mention
186
+ map topic comment --id <topic-id> --body "..." --round-summary # 标记 Round Summary(触发 ack 流)
187
+ map topic advance-round --id <topic-id> # roundN → roundN+1
188
+ map topic advance-round --id <topic-id> --ready # 标记 ready(可开实验)
189
+ map topic advance-round --id <topic-id> --ack accept|reject|dismiss # participant 表态
190
+ map topic advance-round --id <topic-id> --waive-ack --waive-reason "参与者离线,结论已收敛"
191
+ map topic rollback-round --id <topic-id> # 回退一轮
192
+ map topic close --id <topic-id> --reason no_experiment_needed --note "讨论后决定不开实验"
193
+ map topic dismiss --id <topic-id> # 退出话题(与 UI ✕ 相同)
194
+ map topic mark-seen --id <topic-id> # 清 contextual unread,不清 reply/ack/mention
216
195
  map project decisions
217
196
  map action list --mine
197
+ map action mark-wake-sent --id <action-item-id> # waker 升级:标记 WAKE 已发
198
+ map action mark-stale --id <action-item-id> # waker 升级:标记 STALE
218
199
  map notification list --unread-only
219
200
  map notification read --id <notification-id>
220
201
  map notification read-all
@@ -222,6 +203,10 @@ map --persona participant mention list
222
203
  map --persona participant mention dismiss --id <mention-id>
223
204
  map --persona participant mention dismiss-all
224
205
 
206
+ # Host 编排模式:host 直接调用 participant/reviewer(同步响应,不依赖 waker 轮询)
207
+ map --persona host host invoke --persona participant --prompt "请参与话题 <topic-id> 的讨论"
208
+ map --persona host host invoke --persona reviewer --prompt-file ./review-task.md --json
209
+
225
210
  # Web UI(React + Vite)
226
211
  cd web && npm install && npm run dev # http://localhost:5173
227
212
  # 开发模式通过 Vite 代理访问 API;先在设置页填入 API Token
@@ -277,14 +262,11 @@ simple-waker 在每次 remind 后会写一条聚合 `inbound_event` 审计行(
277
262
 
278
263
  **@mention 收敛**:在话题/实验内发过评论后,对应 `mentions` 会自动从 todos 消失;只读不回时可 `map mention dismiss`。
279
264
 
280
- ## Host Worker(旧 bridge,维护模式)
265
+ ## Host Worker(已退役)
281
266
 
282
- `map-host-bridge` / `map-host-worker` 为早期轮询 bridge(进程内 `PersonaAgentClient`),已由 **waker** 取代。`main-bac` 分支保留 bridge 实现供对照;日常开发请在 `agent-runtime` 分支使用 waker。
267
+ 早期轮询 bridge(`map-host-bridge` / `map-host-worker`、`start-host-bridge*.sh`、`start-runtime-waker-claude.sh`、`start-all-wakers-legacy.sh`)已由 **simple-waker** 全面取代并停用(`MAP_USE_LEGACY_WAKER` 不再生效)。`pyproject.toml` 仅保留 `map-participant-bridge` / `map-reviewer-bridge` 两个 legacy console entry(维护模式),`map-host-bridge` 不再提供。
283
268
 
284
- ```bash
285
- # 旧路径(不推荐新接入)
286
- map-host-bridge --persona host --interval 30
287
- ```
269
+ 详见 [docs/LEGACY-ENTRY-MATRIX.md](docs/LEGACY-ENTRY-MATRIX.md);CI 校验:`./scripts/check-deprecated.sh`。
288
270
 
289
271
  ## Docker(API + Web)
290
272
 
@@ -24,10 +24,10 @@ pip install multi-agent-platform
24
24
 
25
25
  ```bash
26
26
  pip install multi-agent-platform
27
- map skill install # 将 6 个 Skill 文件安装到 .cursor/skills/
27
+ map skill install # 将 5 个 Skill 文件安装到 .cursor/skills/
28
28
  ```
29
29
 
30
- 安装后 Cursor 会自动发现 Skill,AI Agent 读取后即可遵循完整的 MAP 协作流程(含两轮讨论门禁、实验生命周期等)。
30
+ 安装后 Cursor 会自动发现 Skill,AI Agent 读取后即可遵循完整的 MAP 协作流程(含讨论门禁(默认两轮,可伸缩)、实验生命周期等)。
31
31
 
32
32
  **方式二:使用简化 Prompt(快速上手)**
33
33
 
@@ -35,71 +35,41 @@ map skill install # 将 6 个 Skill 文件安装到 .cursor/skills/
35
35
 
36
36
  ## 文档
37
37
 
38
+ - [文档总入口](docs/INDEX.md)
38
39
  - [MAP Agent Prompt(给 AI Agent 的协作指南)](MAP_AGENT_PROMPT.md)
39
40
  - [Quick Start 指南(新用户必读)](docs/QUICKSTART.md)
40
- - [产品需求文档(PRD)](docs/prd/archive/v0.1.md)
41
- - [产品需求文档 v0.2(角色与项目边界)](docs/prd/archive/v0.2.md)
42
- - [产品需求文档 v0.3(话题独立、UI 写闭环、待办与通知)](docs/prd/archive/v0.3.md)
43
- - [产品需求文档 v0.4(站内收件箱、@提及、计划 diff、话题置顶)](docs/prd/archive/v0.4.md)
44
- - [产品需求文档 v0.5(主持待办 pending_topic_replies、topic-host Skill)](docs/prd/archive/v0.5.md)
45
- - [产品需求文档 v0.6(列表归档、独立列表页、通知 SSE)](docs/prd/archive/v0.6.md)
46
- - [产品需求文档 v0.9 草案(waker Phase 2 通知降噪)](docs/prd/v0.9.md)
47
- - [Webhook 话题主持接线指南](docs/WEBHOOK-TOPIC-HOST.md)
48
- - [Agent Runtime 集成(simple-waker,默认)](docs/MAP-SIMPLE-WAKER.md)
41
+ - [CLI 指南](docs/CLI.md)
49
42
  - [架构设计](docs/ARCHITECTURE.md)
50
43
  - [Python SDK 指南](docs/SDK.md)
51
44
  - [MCP Server 指南(stdio)](docs/MCP.md)
45
+ - [Webhook 话题主持接线指南](docs/WEBHOOK-TOPIC-HOST.md)
46
+ - [Agent Runtime 集成(simple-waker,默认)](docs/MAP-SIMPLE-WAKER.md)
47
+ - [Persona 行为差异](docs/MAP-PERSONA-COMPARE.md)
48
+ - [Web 端 Agent UI 视图](docs/UI-AGENTS.md)
49
+ - [证据元数据契约](docs/MAP-EVIDENCE-METADATA.md)
50
+ - [错误码清单](docs/MAP-ERROR-CODES.md)
52
51
 
53
- ## 状态
54
-
55
- **M1 已完成**:数据模型、Alembic 迁移、Projects/Experiments CRUD REST API。
56
- **M2 已完成**:Plans 修订、Reviews、Comments、实验阶段与不合理项状态机。
57
- **M3 已完成**:实验日志、Start/Complete、全局 Status API、CLI(`map` 命令)。
58
- **M4 已完成**:React + Vite Web UI(看板、项目、实验话题页)。
59
- **M5 已完成**:Python SDK(`map_client`)、SDK 文档、CLI 基于 SDK 重构、Docker 部署。
60
- **M6 已完成**:MCP stdio + HTTP 服务(`map-mcp`),供 IDE Agent 调用。
61
- **M7 已完成**:项目角色边界(`project_key`、Agent 项目绑定、权限门控、Status MD v1)。
62
- **M8 已完成**:项目 Current Status MD 版本化(修订 API、历史查询、CLI/MCP)。
63
-
64
- **v0.3 已完成(M11–M14)**:
65
-
66
- - **M11**:话题(Topic)独立实体 + 评论树 + 实验↔话题可选关联 + Alembic 迁移 + CLI/SDK/MCP 适配。
67
- - **M12**:Web UI 写操作闭环——发布话题/实验、修订计划、提交评审、追加日志、撤回/取消/编辑、通用讨论;新增话题详情页。
68
- - **M13**:Agent 待办视图(`GET /agents/me/todos`)+ 实验列表筛选/分页/搜索(`q`/`creator`/`page` + `X-Total-Count` header)。
69
- - **M14**:Webhook 出站通知(HMAC 签名 + 投递记录 + Admin CRUD)+ 审计日志(关键写操作打点 + 对象/全局查询)。
70
-
71
- 详见 [PRD v0.3](docs/prd/archive/v0.3.md)。
72
-
73
- **v0.4 已完成(M15–M18)**:
74
-
75
- - **M15**:站内通知收件箱(`notifications` 表 + 统一事件扇出 + API/Web/CLI/SDK/MCP)。
76
- - **M16**:评论 `@提及` → 待办 `mentions` 分区 + 定向通知。
77
- - **M17**:实验页计划版本 diff 只读视图(`PlanDiffView`)。
78
- - **M18**:话题置顶(`topics.pinned` + 列表优先排序)。
79
-
80
- 详见 [PRD v0.4](docs/prd/archive/v0.4.md)。
81
-
82
- **v0.5 已完成(M19–M21)**:
83
-
84
- - **M19**:`GET /agents/me/todos` 新增 `pending_topic_replies`(话题主持 thread 级待回复)。
85
- - **M20**:topic-host Skill(`.cursor/skills/topic-host/SKILL.md`)。
86
- - **M21**:Webhook 主持接线文档([WEBHOOK-TOPIC-HOST.md](docs/WEBHOOK-TOPIC-HOST.md))。
52
+ ### PRD
87
53
 
88
- 详见 [PRD v0.5](docs/prd/archive/v0.5.md)。
54
+ - [现行草案:v0.9(waker Phase 2 通知降噪)](docs/prd/v0.9.md)
55
+ - [归档:v0.1 / v0.2 / v0.3 / v0.4 / v0.5 / v0.6](docs/prd/archive/)
56
+ - [占位:v0.7 / v0.8(未单独成稿)](docs/prd/archive/v0.7.md)
89
57
 
90
- **v0.6 已完成(M22–M24)**:
58
+ ## 状态
91
59
 
92
- - **M22**:话题/实验 `archived_at` 归档(默认列表排除、`include_archived`、活跃实验 per-topic 约束更新)。
93
- - **M23**:Web 独立列表页(`/projects/:id/topics`、`/experiments`)+ `client.ts` vitest。
94
- - **M24**:站内通知 **SSE**(`GET /agents/me/notifications/stream`)+ Web 实时 invalidate。
60
+ **稳定能力**:
95
61
 
96
- 详见 [PRD v0.6](docs/prd/archive/v0.6.md)。项目叙事参考 [docs/status-md-v6.md](docs/status-md-v6.md)。
62
+ - **实验生命周期**:计划修订、评审、执行日志、结果审批、状态机
63
+ - **话题协作**:独立话题 + 评论树 + @提及 + 多轮讨论 + Round Summary + 结论与行动项
64
+ - **待办与通知**:Agent 待办视图 + 站内通知 + SSE 实时推送 + Webhook 出站
65
+ - **Web UI**:React + Vite 看板 / 话题 / 实验详情,写操作闭环
66
+ - **多入口接入**:Python SDK + `map` CLI + MCP stdio/HTTP(`map-mcp`)
67
+ - **Agent Runtime**:simple-waker 默认路径(轮询 + remind + action_item 升级)
68
+ - **多 persona 协作**:`.map/` persona + Skill 指导 Agent 写回 MAP
97
69
 
98
- **v0.8 MVP 已完成**:
70
+ **当前主线**:v0.9 草案(waker Phase 2 通知降噪)。详见 [PRD v0.9](docs/prd/v0.9.md) 与 [status-md-v10.md](docs/status-md-v10.md)。
99
71
 
100
- - 话题结论(Decision)与行动项(Action Items):`POST /topics/{id}/resolve`、项目级 `decisions` / `action-items` 查询、`todos.action_items`。
101
- - CLI:`map topic resolve --id <topic-id> --file decision.md|decision.yaml`、`map project decisions`、`map action list --mine`。
102
- - Web:话题详情页展示/修订结论,项目页展示最近结论,待办页展示分配给当前 Agent 的行动项。
72
+ 历史里程碑详见 PRD 归档:[v0.1–v0.6](docs/prd/archive/) · [占位 v0.7 / v0.8](docs/prd/archive/v0.7.md)。
103
73
 
104
74
  **Agent 身份(本仓库)**:统一使用 **`.map/` persona + `map` CLI**(见 [AGENTS.md](AGENTS.md));Cursor MCP 接入计划停用。
105
75
 
@@ -167,9 +137,19 @@ map topic archive --id <topic-id> # v0.7 P3:归档(薄包装 P
167
137
  map topic archive --id <topic-id> --undo # 反归档(--unarchive 同义)
168
138
  map experiment archive --id <exp-id> # 归档实验
169
139
  map topic comment --id <topic-id> --file comment.md
170
- map topic mark-seen --id <topic-id> # 清 contextual unread,不清 reply/ack/mention
140
+ map topic comment --id <topic-id> --body "..." --round-summary # 标记 Round Summary(触发 ack 流)
141
+ map topic advance-round --id <topic-id> # roundN → roundN+1
142
+ map topic advance-round --id <topic-id> --ready # 标记 ready(可开实验)
143
+ map topic advance-round --id <topic-id> --ack accept|reject|dismiss # participant 表态
144
+ map topic advance-round --id <topic-id> --waive-ack --waive-reason "参与者离线,结论已收敛"
145
+ map topic rollback-round --id <topic-id> # 回退一轮
146
+ map topic close --id <topic-id> --reason no_experiment_needed --note "讨论后决定不开实验"
147
+ map topic dismiss --id <topic-id> # 退出话题(与 UI ✕ 相同)
148
+ map topic mark-seen --id <topic-id> # 清 contextual unread,不清 reply/ack/mention
171
149
  map project decisions
172
150
  map action list --mine
151
+ map action mark-wake-sent --id <action-item-id> # waker 升级:标记 WAKE 已发
152
+ map action mark-stale --id <action-item-id> # waker 升级:标记 STALE
173
153
  map notification list --unread-only
174
154
  map notification read --id <notification-id>
175
155
  map notification read-all
@@ -177,6 +157,10 @@ map --persona participant mention list
177
157
  map --persona participant mention dismiss --id <mention-id>
178
158
  map --persona participant mention dismiss-all
179
159
 
160
+ # Host 编排模式:host 直接调用 participant/reviewer(同步响应,不依赖 waker 轮询)
161
+ map --persona host host invoke --persona participant --prompt "请参与话题 <topic-id> 的讨论"
162
+ map --persona host host invoke --persona reviewer --prompt-file ./review-task.md --json
163
+
180
164
  # Web UI(React + Vite)
181
165
  cd web && npm install && npm run dev # http://localhost:5173
182
166
  # 开发模式通过 Vite 代理访问 API;先在设置页填入 API Token
@@ -232,14 +216,11 @@ simple-waker 在每次 remind 后会写一条聚合 `inbound_event` 审计行(
232
216
 
233
217
  **@mention 收敛**:在话题/实验内发过评论后,对应 `mentions` 会自动从 todos 消失;只读不回时可 `map mention dismiss`。
234
218
 
235
- ## Host Worker(旧 bridge,维护模式)
219
+ ## Host Worker(已退役)
236
220
 
237
- `map-host-bridge` / `map-host-worker` 为早期轮询 bridge(进程内 `PersonaAgentClient`),已由 **waker** 取代。`main-bac` 分支保留 bridge 实现供对照;日常开发请在 `agent-runtime` 分支使用 waker。
221
+ 早期轮询 bridge(`map-host-bridge` / `map-host-worker`、`start-host-bridge*.sh`、`start-runtime-waker-claude.sh`、`start-all-wakers-legacy.sh`)已由 **simple-waker** 全面取代并停用(`MAP_USE_LEGACY_WAKER` 不再生效)。`pyproject.toml` 仅保留 `map-participant-bridge` / `map-reviewer-bridge` 两个 legacy console entry(维护模式),`map-host-bridge` 不再提供。
238
222
 
239
- ```bash
240
- # 旧路径(不推荐新接入)
241
- map-host-bridge --persona host --interval 30
242
- ```
223
+ 详见 [docs/LEGACY-ENTRY-MATRIX.md](docs/LEGACY-ENTRY-MATRIX.md);CI 校验:`./scripts/check-deprecated.sh`。
243
224
 
244
225
  ## Docker(API + Web)
245
226
 
@@ -1,6 +1,6 @@
1
1
  """Persistent in-process Claude SDK client with session resume.
2
2
 
3
- Used by map-runtime-waker (event-driven wake) and legacy bridges. The process
3
+ Used by simple-waker (event-driven wake) and legacy bridges. The process
4
4
  holds ONE ``ClaudeSDKClient`` for its lifetime; ``claude_session_id`` is
5
5
  persisted in local state so the next restart resumes the same Claude session
6
6
  (via ``ClaudeAgentOptions(resume=...)``).
@@ -49,7 +49,7 @@ _MODEL_ENV_KEYS: tuple[str, ...] = ("ANTHROPIC_MODEL", "CLAUDE_MODEL")
49
49
 
50
50
  _EXPORT_RE = re.compile(r"^\s*export\s+([A-Za-z_][A-Za-z0-9_]*)=(.*)$")
51
51
 
52
- IntegrationMode = Literal["bridge", "waker", "manual"]
52
+ IntegrationMode = Literal["bridge", "waker", "manual", "orchestrator"]
53
53
 
54
54
 
55
55
  class WakeUpEvent(TypedDict, total=False):
@@ -410,7 +410,7 @@ class PersonaAgentClient:
410
410
  if self.integration == "waker":
411
411
  return (
412
412
  f"You are the **{self.persona}** persona of the MAP (Multi-Agent Platform) "
413
- "project. When woken by map-runtime-waker you receive a single wake event. "
413
+ "project. When woken by simple-waker you receive a single wake event. "
414
414
  f"Confirm identity with `map --persona {self.persona} persona whoami`, read "
415
415
  f"latest work with `map --persona {self.persona} todos`, then handle only the "
416
416
  "event in the wake prompt using the appropriate skill from `.cursor/skills/`. "
@@ -424,7 +424,18 @@ class PersonaAgentClient:
424
424
  f"Use `map --persona {self.persona}` CLI and skills under `.cursor/skills/` "
425
425
  "(topic-host, topic-participant, experiment-host, experiment-reviewer, "
426
426
  "map-project-collab). Follow the operator's instructions for the current task. "
427
- "Do not assume map-runtime-waker will send another wake for the same work item."
427
+ "Do not assume simple-waker will send another wake for the same work item."
428
+ )
429
+ if self.integration == "orchestrator":
430
+ return (
431
+ f"You are the **{self.persona}** persona of the MAP (Multi-Agent Platform) "
432
+ "project. You are being invoked directly by the host agent via "
433
+ f"`map host invoke`. Use `map --persona {self.persona}` CLI and skills "
434
+ "under `.cursor/skills/` (topic-host, topic-participant, experiment-host, "
435
+ "experiment-reviewer, map-project-collab) to handle the task in the prompt. "
436
+ "Gather context via the `map` CLI, perform the requested action, and report "
437
+ "a brief summary when done. Do not wait for a waker — this is a synchronous "
438
+ "invocation and the host is waiting for your response."
428
439
  )
429
440
  return (
430
441
  f"You are the **{self.persona}** persona of the MAP (Multi-Agent Platform) "
@@ -160,9 +160,34 @@ def experiment_approve(experiment_id: uuid.UUID = typer.Option(..., "--id")) ->
160
160
 
161
161
 
162
162
  @experiment_app.command("start")
163
- def experiment_start(experiment_id: uuid.UUID = typer.Option(..., "--id")) -> None:
164
- from cli.main import _run # lazy: avoid cycle
165
- _run(lambda c: c.start_experiment(experiment_id), experiment_id=experiment_id)
163
+ def experiment_start(
164
+ experiment_id: uuid.UUID = typer.Option(..., "--id"),
165
+ executor: str | None = typer.Option(
166
+ None,
167
+ "--executor",
168
+ help=(
169
+ "Delegate execution to another agent (name or UUID). The designated "
170
+ "executor becomes the sole non-admin caller allowed to ``complete``. "
171
+ "Omit to self-execute (host runs the experiment)."
172
+ ),
173
+ ),
174
+ ) -> None:
175
+ """Start experiment execution (approved → running).
176
+
177
+ Migration 042 adds optional executor delegation: pass ``--executor``
178
+ with an agent name or UUID to designate who may call ``complete``.
179
+ The host retains all other lifecycle gates (cancel / withdraw / etc).
180
+ """
181
+ from cli.main import _resolve_executor_agent_id, _resolve_project, _run # lazy: avoid cycle
182
+
183
+ def action(c: MAPClient):
184
+ executor_agent_id: uuid.UUID | None = None
185
+ if executor is not None:
186
+ pid = _resolve_project(c, None, None)
187
+ executor_agent_id = _resolve_executor_agent_id(c, pid, executor)
188
+ return c.start_experiment(experiment_id, executor_agent_id=executor_agent_id)
189
+
190
+ _run(action, experiment_id=experiment_id)
166
191
 
167
192
 
168
193
  @experiment_app.command("pre-complete")
@@ -0,0 +1,150 @@
1
+ """``map host ...`` sub-app — host-orchestrated agent invocation.
2
+
3
+ Lets the host agent directly invoke participant/reviewer agents and get
4
+ synchronous responses, without relying on simple-waker polling.
5
+
6
+ Usage::
7
+
8
+ map --persona host host invoke --persona participant --prompt "..."
9
+ map --persona host host invoke --persona reviewer --prompt-file ./review-task.md
10
+ """
11
+ from __future__ import annotations
12
+
13
+ from pathlib import Path
14
+
15
+ import typer
16
+
17
+ host_app = typer.Typer(help="Host-only orchestration commands (invoke other personas)")
18
+
19
+
20
+ @host_app.callback()
21
+ def host_callback() -> None:
22
+ """Host-only orchestration commands.
23
+
24
+ Lets the host agent directly invoke participant/reviewer agents
25
+ and get synchronous responses, without relying on simple-waker polling.
26
+ """
27
+ # Callback exists to force multi-command mode (so `map host invoke`
28
+ # is required rather than `map host` directly invoking the single command).
29
+ return
30
+
31
+
32
+ @host_app.command("invoke")
33
+ def host_invoke(
34
+ persona: str = typer.Option(
35
+ ...,
36
+ "--persona",
37
+ "-p",
38
+ help="Target persona to invoke (participant or reviewer)",
39
+ ),
40
+ prompt: str | None = typer.Option(
41
+ None,
42
+ "--prompt",
43
+ help="Prompt text to send to the target persona",
44
+ ),
45
+ prompt_file: Path | None = typer.Option(
46
+ None,
47
+ "--prompt-file",
48
+ help="Read prompt from file (overrides --prompt)",
49
+ ),
50
+ new_session: bool = typer.Option(
51
+ False,
52
+ "--new-session",
53
+ help="Start a fresh Claude session instead of resuming",
54
+ ),
55
+ model: str | None = typer.Option(
56
+ None,
57
+ "--model",
58
+ help="Optional Claude model override",
59
+ ),
60
+ ignore_waker: bool = typer.Option(
61
+ False,
62
+ "--ignore-waker",
63
+ help="Allow invoking even if simple-waker is running for this persona",
64
+ ),
65
+ project_root: Path | None = typer.Option(
66
+ None,
67
+ "--project-root",
68
+ help="Repo root containing .map/ (default: search upward from cwd)",
69
+ ),
70
+ json_output: bool = typer.Option(
71
+ False,
72
+ "--json",
73
+ help="Output result as JSON (response + metadata) instead of plain text",
74
+ ),
75
+ ) -> None:
76
+ """Invoke another persona agent (participant/reviewer) from host.
77
+
78
+ The host agent constructs a prompt describing what the target persona
79
+ should do (e.g., comment on a topic, review an experiment). The target
80
+ persona agent processes the prompt using its own Claude session and
81
+ Skills, and the response is printed to stdout.
82
+
83
+ Examples::
84
+
85
+ # Ask participant to comment on a topic
86
+ map --persona host host invoke --persona participant \\
87
+ --prompt "请参与话题 <topic-id> 的讨论,发表你的观点"
88
+
89
+ # Ask reviewer to review an experiment plan
90
+ map --persona host host invoke --persona reviewer \\
91
+ --prompt "请评审实验 <experiment-id> 的计划,提交结构化评审"
92
+
93
+ # Read prompt from file
94
+ map --persona host host invoke --persona participant \\
95
+ --prompt-file ./task.md
96
+ """
97
+ import json as json_lib
98
+
99
+ from cli.main import _cli_options
100
+ from cli.orchestrator import run_invoke
101
+
102
+ # Resolve prompt
103
+ if prompt_file is not None:
104
+ actual_prompt = prompt_file.read_text(encoding="utf-8")
105
+ elif prompt is not None:
106
+ actual_prompt = prompt
107
+ else:
108
+ typer.echo("Error: either --prompt or --prompt-file is required", err=True)
109
+ raise typer.Exit(1)
110
+
111
+ result = run_invoke(
112
+ persona=persona,
113
+ prompt=actual_prompt,
114
+ project_root=project_root or _cli_options.get("project_root"),
115
+ new_session=new_session,
116
+ model=model,
117
+ ignore_waker=ignore_waker,
118
+ )
119
+
120
+ if json_output:
121
+ typer.echo(
122
+ json_lib.dumps(
123
+ {
124
+ "persona": result.persona,
125
+ "status": result.status,
126
+ "response": result.response_text,
127
+ "session_id": result.session_id,
128
+ },
129
+ ensure_ascii=False,
130
+ indent=2,
131
+ )
132
+ )
133
+ return
134
+
135
+ if result.status == "error":
136
+ typer.echo(
137
+ f"Error: agent '{persona}' returned error status"
138
+ + (f": {result.error}" if result.error else ""),
139
+ err=True,
140
+ )
141
+ raise typer.Exit(1)
142
+
143
+ if result.response_text:
144
+ typer.echo(result.response_text)
145
+
146
+ typer.echo(
147
+ f"\n[orchestrator] persona={result.persona} status={result.status} "
148
+ f"session={result.session_id or '<none>'}",
149
+ err=True,
150
+ )
@@ -52,7 +52,7 @@ def runtime_chat(
52
52
  ignore_waker: bool = typer.Option(
53
53
  False,
54
54
  "--ignore-waker",
55
- help="Allow chat while map-runtime-waker is running (may conflict)",
55
+ help="Allow chat while simple-waker is running (may conflict)",
56
56
  ),
57
57
  model: str | None = typer.Option(None, "--model", help="Optional Claude model override"),
58
58
  ) -> None: