multi-agent-platform 0.2.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 (319) hide show
  1. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/PKG-INFO +60 -60
  2. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/README.md +57 -58
  3. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/agent_client.py +15 -4
  4. {multi_agent_platform-0.2.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.2.0 → multi_agent_platform-0.3.1}/cli/commands/runtime.py +1 -1
  7. multi_agent_platform-0.3.1/cli/commands/skill.py +218 -0
  8. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/topic.py +48 -3
  9. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/e2e_collab.py +2 -2
  10. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/main.py +112 -5
  11. multi_agent_platform-0.3.1/cli/orchestrator.py +240 -0
  12. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/runtime_chat.py +1 -1
  13. {multi_agent_platform-0.2.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.1/cli/skills/map-project-collab/SKILL.md +419 -0
  19. multi_agent_platform-0.3.1/cli/skills/map-project-collab/agents/openai.yaml +4 -0
  20. multi_agent_platform-0.3.1/cli/skills/map-project-collab/references/bootstrap-troubleshooting.md +90 -0
  21. multi_agent_platform-0.3.1/cli/skills/map-project-collab/references/waker-mode.md +65 -0
  22. multi_agent_platform-0.3.1/cli/skills/map-project-collab/scripts/map-bootstrap.sh +6 -0
  23. multi_agent_platform-0.3.1/cli/skills/topic-host/SKILL.md +303 -0
  24. multi_agent_platform-0.3.1/cli/skills/topic-host/references/experiment-gate-rubric.md +130 -0
  25. multi_agent_platform-0.3.1/cli/skills/topic-participant/SKILL.md +168 -0
  26. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/PKG-INFO +60 -60
  27. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/SOURCES.txt +19 -0
  28. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/pyproject.toml +8 -4
  29. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/client.py +39 -4
  30. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/server.py +14 -3
  31. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_sdk/__init__.py +1 -1
  32. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_types/enums.py +37 -0
  33. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_types/schemas.py +36 -5
  34. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/__version__.py +1 -1
  35. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/experiments.py +14 -2
  36. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/topics.py +42 -3
  37. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/domain/models.py +25 -4
  38. multi_agent_platform-0.3.1/server/services/__init__.py +0 -0
  39. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/agent_work_service.py +1 -1
  40. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/mention_service.py +1 -1
  41. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/notification_service.py +1 -0
  42. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/phase_service.py +132 -25
  43. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_ack_service.py +4 -1
  44. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_comment_service.py +9 -1
  45. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_lifecycle_service.py +147 -13
  46. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_service.py +2 -0
  47. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_typing_extensions_clean.py +26 -22
  48. multi_agent_platform-0.3.1/tests/test_experiment_executor.py +484 -0
  49. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_local_cache.py +1 -2
  50. multi_agent_platform-0.3.1/tests/test_orchestrator.py +408 -0
  51. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_project_export.py +1 -2
  52. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_sdk.py +3 -3
  53. multi_agent_platform-0.3.1/tests/test_skill_install.py +233 -0
  54. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_topics.py +254 -8
  55. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/LICENSE +0 -0
  56. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/__init__.py +0 -0
  57. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/action_item_escalation.py +0 -0
  58. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/bridge_state.py +0 -0
  59. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/__init__.py +0 -0
  60. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/action.py +0 -0
  61. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/agent.py +0 -0
  62. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/audit.py +0 -0
  63. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/docs.py +0 -0
  64. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/feedback.py +0 -0
  65. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/notification.py +0 -0
  66. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/persona.py +0 -0
  67. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/project.py +0 -0
  68. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/sync.py +0 -0
  69. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/git_checkpoint.py +0 -0
  70. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/host_worker_types.py +0 -0
  71. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/local_cache.py +0 -0
  72. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/map_command_client.py +0 -0
  73. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/participant_worker.py +0 -0
  74. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/project_export.py +0 -0
  75. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/reviewer_worker.py +0 -0
  76. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/runtime/__init__.py +0 -0
  77. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/runtime/run_lock.py +0 -0
  78. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/session_wake_log.py +0 -0
  79. {multi_agent_platform-0.2.0/server → multi_agent_platform-0.3.1/cli/skills}/__init__.py +0 -0
  80. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/table_render.py +0 -0
  81. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/wake_backend.py +0 -0
  82. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/worker_cycle_log.py +0 -0
  83. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/dependency_links.txt +0 -0
  84. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/entry_points.txt +0 -0
  85. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/requires.txt +0 -0
  86. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/top_level.txt +0 -0
  87. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/__init__.py +0 -0
  88. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/bootstrap.py +0 -0
  89. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/config.py +0 -0
  90. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/errors.py +0 -0
  91. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/exceptions.py +0 -0
  92. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/plan_evidence.py +0 -0
  93. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/project_config.py +0 -0
  94. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/result_template.py +0 -0
  95. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/testing.py +0 -0
  96. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/__init__.py +0 -0
  97. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/_utils.py +0 -0
  98. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/auth.py +0 -0
  99. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/config.py +0 -0
  100. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/context.py +0 -0
  101. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/main.py +0 -0
  102. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/session.py +0 -0
  103. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_sdk/evidence.py +0 -0
  104. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_types/__init__.py +0 -0
  105. {multi_agent_platform-0.2.0/server/api → multi_agent_platform-0.3.1/server}/__init__.py +0 -0
  106. {multi_agent_platform-0.2.0/server/scripts → multi_agent_platform-0.3.1/server/api}/__init__.py +0 -0
  107. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/action_items.py +0 -0
  108. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/agents.py +0 -0
  109. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/audit.py +0 -0
  110. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/background_tasks.py +0 -0
  111. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/common.py +0 -0
  112. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/deps.py +0 -0
  113. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/feedback.py +0 -0
  114. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/notifications.py +0 -0
  115. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/projects.py +0 -0
  116. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/router.py +0 -0
  117. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/status.py +0 -0
  118. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/webhooks.py +0 -0
  119. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/auth/__init__.py +0 -0
  120. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/auth/experiment_access.py +0 -0
  121. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/config.py +0 -0
  122. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/db/__init__.py +0 -0
  123. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/db/base.py +0 -0
  124. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/db/deadlock_retry.py +0 -0
  125. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/db/session.py +0 -0
  126. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/domain/__init__.py +0 -0
  127. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/domain/encrypted_types.py +0 -0
  128. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/domain/schemas.py +0 -0
  129. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/domain/state_machine.py +0 -0
  130. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/domain/topic_ack_constants.py +0 -0
  131. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/main.py +0 -0
  132. {multi_agent_platform-0.2.0/server/services → multi_agent_platform-0.3.1/server/scripts}/__init__.py +0 -0
  133. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/scripts/migrate_notification_unique.py +0 -0
  134. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/scripts/purge_audit_pollution.py +0 -0
  135. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/_lookups.py +0 -0
  136. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/acceptance_service.py +0 -0
  137. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/action_item_migration_service.py +0 -0
  138. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/action_item_service.py +0 -0
  139. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/archive_lint_service.py +0 -0
  140. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/audit_service.py +0 -0
  141. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/auth.py +0 -0
  142. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/comment_service.py +0 -0
  143. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/errors.py +0 -0
  144. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/escalation_resolver.py +0 -0
  145. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/evidence_service.py +0 -0
  146. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/experiment_capabilities_service.py +0 -0
  147. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/inbound_event_service.py +0 -0
  148. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/lock_service.py +0 -0
  149. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/log_service.py +0 -0
  150. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/notification_stream.py +0 -0
  151. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/permissions.py +0 -0
  152. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/persona_activity_service.py +0 -0
  153. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/phase_owner_resolver.py +0 -0
  154. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/plan_marker_service.py +0 -0
  155. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/plan_service.py +0 -0
  156. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/platform_feedback_service.py +0 -0
  157. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/project_service.py +0 -0
  158. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/project_status_service.py +0 -0
  159. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/review_service.py +0 -0
  160. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/secret_encryption.py +0 -0
  161. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/similarity_service.py +0 -0
  162. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/sse_event_schemas.py +0 -0
  163. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/status_service.py +0 -0
  164. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/template_service.py +0 -0
  165. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/text_utils.py +0 -0
  166. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/thread_activity.py +0 -0
  167. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/todo_persona_filter.py +0 -0
  168. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/todo_service.py +0 -0
  169. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_action_item_ops.py +0 -0
  170. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_comment_kind.py +0 -0
  171. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_helpers.py +0 -0
  172. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_progress_service.py +0 -0
  173. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_resolve_service.py +0 -0
  174. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_work_item_service.py +0 -0
  175. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/webhook_service.py +0 -0
  176. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/setup.cfg +0 -0
  177. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_18a64691_linkage.py +0 -0
  178. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_a2_action_item_cascade.py +0 -0
  179. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_accept_result_verdict.py +0 -0
  180. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_action_items.py +0 -0
  181. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_agent_client.py +0 -0
  182. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_agent_work.py +0 -0
  183. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_agents_list.py +0 -0
  184. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_arch_map_sdk_evidence.py +0 -0
  185. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_archive_lint_service.py +0 -0
  186. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_audit_admin_cli.py +0 -0
  187. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_audit_admin_filter.py +0 -0
  188. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_auth.py +0 -0
  189. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_auth_experiment_access.py +0 -0
  190. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_authz_cross_persona_capability.py +0 -0
  191. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_authz_pr3_creator_gating_extended.py +0 -0
  192. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_b_acceptance.py +0 -0
  193. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_stale.py +0 -0
  194. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_wake_endpoints.py +0 -0
  195. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_wake_stale.py +0 -0
  196. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_wake_stale_notifications.py +0 -0
  197. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_b_waker_should_wake_action_item.py +0 -0
  198. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_bridge_state.py +0 -0
  199. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cleanup_audit_log_no_commit.py +0 -0
  200. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cleanup_exp_b_paging_seven_endpoints.py +0 -0
  201. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cleanup_exp_b_paging_unified_limit.py +0 -0
  202. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_clear_action_template.py +0 -0
  203. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli.py +0 -0
  204. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_error_envelope.py +0 -0
  205. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_evidence_contract.py +0 -0
  206. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_format_priority.py +0 -0
  207. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_n2_hard_cutover.py +0 -0
  208. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_schema_discovery.py +0 -0
  209. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_status.py +0 -0
  210. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_template_contract.py +0 -0
  211. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_work_deprecation.py +0 -0
  212. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cross_persona_call_audit.py +0 -0
  213. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_deadlock_retry.py +0 -0
  214. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_docs_inventory.py +0 -0
  215. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_fast_gate_whitelist_complete.py +0 -0
  216. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_agent_work_service.py +0 -0
  217. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_agents.py +0 -0
  218. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_experiment_capabilities_service.py +0 -0
  219. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_experiments_projects.py +0 -0
  220. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_mention_service.py +0 -0
  221. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_notification_service.py +0 -0
  222. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_phase_service.py +0 -0
  223. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_project_service.py +0 -0
  224. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_todo_service.py +0 -0
  225. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topic_comment_service.py +0 -0
  226. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topic_service.py +0 -0
  227. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topic_work_item_service.py +0 -0
  228. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topics.py +0 -0
  229. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_uv_lock.py +0 -0
  230. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_version_single_source.py +0 -0
  231. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_error_codes_cli.py +0 -0
  232. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_error_envelope_and_file_options.py +0 -0
  233. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_escalation_resolver.py +0 -0
  234. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_escalation_target_endpoint.py +0 -0
  235. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_evidence_service.py +0 -0
  236. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_experiment_capabilities.py +0 -0
  237. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_experiment_capabilities_whitelist.py +0 -0
  238. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_experiment_lock_fuzz.py +0 -0
  239. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_experiment_lock_notifications.py +0 -0
  240. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_experiment_lock_unit.py +0 -0
  241. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_experiments.py +0 -0
  242. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_feedback.py +0 -0
  243. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_feedback_admin_cli.py +0 -0
  244. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_field_rename_alias.py +0 -0
  245. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_git_checkpoint.py +0 -0
  246. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_inbound_event_rejection.py +0 -0
  247. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_log_create_response.py +0 -0
  248. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_m2_flow.py +0 -0
  249. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_m3_flow.py +0 -0
  250. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_map_sdk_skeleton.py +0 -0
  251. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_mcp.py +0 -0
  252. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_mcp_http.py +0 -0
  253. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_mention_code_skip_unit.py +0 -0
  254. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_mentions.py +0 -0
  255. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_notification_bulk_filter.py +0 -0
  256. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_notification_service_v09.py +0 -0
  257. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_notification_stream.py +0 -0
  258. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_notification_upsert_pr2.py +0 -0
  259. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_notifications.py +0 -0
  260. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_participant_worker_claude_agent.py +0 -0
  261. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_perf_count_sql_fixture.py +0 -0
  262. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_perf_experiment_bundle_verdict_n_plus_one.py +0 -0
  263. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_perf_experiment_summary_bulk.py +0 -0
  264. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_perf_topic_comments_bulk.py +0 -0
  265. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_perf_work_hotpath_bulk.py +0 -0
  266. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_persona_activity.py +0 -0
  267. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_persona_compare_partition.py +0 -0
  268. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_phase_owner_orm_validation.py +0 -0
  269. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_phase_owner_resolver.py +0 -0
  270. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_plan_evidence_parser.py +0 -0
  271. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_plan_marker_service.py +0 -0
  272. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_plan_revise_auto_archive.py +0 -0
  273. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_plan_validate_cli.py +0 -0
  274. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_project_config.py +0 -0
  275. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_project_status.py +0 -0
  276. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_projects.py +0 -0
  277. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_rebutted_plan_continues_e2e.py +0 -0
  278. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_register_agent_body_model.py +0 -0
  279. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_reject_result_misuse.py +0 -0
  280. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_resolve_item_sdk_contract.py +0 -0
  281. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_resolve_item_status.py +0 -0
  282. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_result_template_parser.py +0 -0
  283. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_already_archived.py +0 -0
  284. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_archived_metadata.py +0 -0
  285. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_eligibility.py +0 -0
  286. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_item_mutation_audit.py +0 -0
  287. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_item_state_closed_migration.py +0 -0
  288. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_list_archived_filter.py +0 -0
  289. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_substitute_and_withdraw.py +0 -0
  290. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_verdict_alias.py +0 -0
  291. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_reviewer_worker_claude_agent.py +0 -0
  292. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_runtime_chat.py +0 -0
  293. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_same_second_host_reply.py +0 -0
  294. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_same_second_trio.py +0 -0
  295. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_sdk_exceptions.py +0 -0
  296. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_server_lock_service.py +0 -0
  297. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_session_wake_log.py +0 -0
  298. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_similarity_api_contract.py +0 -0
  299. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_similarity_service.py +0 -0
  300. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_simple_waker.py +0 -0
  301. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_simple_waker_pr3_dedup.py +0 -0
  302. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_simple_waker_reviewer_filter.py +0 -0
  303. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_sse_acceptance.py +0 -0
  304. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_sse_isolation.py +0 -0
  305. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_sse_schema_overlap.py +0 -0
  306. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_state_machine.py +0 -0
  307. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_state_machine_recovery_hint.py +0 -0
  308. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_systemd_install.py +0 -0
  309. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_template_api_contract.py +0 -0
  310. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_template_service.py +0 -0
  311. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_todos.py +0 -0
  312. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_topic_notifications.py +0 -0
  313. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_topic_progress.py +0 -0
  314. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_topic_read_cursor.py +0 -0
  315. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_topic_work_items.py +0 -0
  316. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_waker_phase1_acceptance.py +0 -0
  317. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_webhook_secret_encryption.py +0 -0
  318. {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_webhooks_audit.py +0 -0
  319. {multi_agent_platform-0.2.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.2.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
@@ -61,72 +62,60 @@ pip install multi-agent-platform
61
62
 
62
63
  **新用户?** 一键启动:`./scripts/quickstart.sh`,或阅读 [Quick Start 指南](docs/QUICKSTART.md)。
63
64
 
64
- ## 文档
65
-
66
- - [Quick Start 指南(新用户必读)](docs/QUICKSTART.md)
67
- - [产品需求文档(PRD)](docs/prd/archive/v0.1.md)
68
- - [产品需求文档 v0.2(角色与项目边界)](docs/prd/archive/v0.2.md)
69
- - [产品需求文档 v0.3(话题独立、UI 写闭环、待办与通知)](docs/prd/archive/v0.3.md)
70
- - [产品需求文档 v0.4(站内收件箱、@提及、计划 diff、话题置顶)](docs/prd/archive/v0.4.md)
71
- - [产品需求文档 v0.5(主持待办 pending_topic_replies、topic-host Skill)](docs/prd/archive/v0.5.md)
72
- - [产品需求文档 v0.6(列表归档、独立列表页、通知 SSE)](docs/prd/archive/v0.6.md)
73
- - [产品需求文档 v0.9 草案(waker Phase 2 通知降噪)](docs/prd/v0.9.md)
74
- - [Webhook 话题主持接线指南](docs/WEBHOOK-TOPIC-HOST.md)
75
- - [Agent Runtime 集成(simple-waker,默认)](docs/MAP-SIMPLE-WAKER.md)
76
- - [架构设计](docs/ARCHITECTURE.md)
77
- - [Python SDK 指南](docs/SDK.md)
78
- - [MCP Server 指南(stdio)](docs/MCP.md)
79
-
80
- ## 状态
65
+ ## 让你的 AI Agent 自动使用 MAP
81
66
 
82
- **M1 已完成**:数据模型、Alembic 迁移、Projects/Experiments CRUD REST API。
83
- **M2 已完成**:Plans 修订、Reviews、Comments、实验阶段与不合理项状态机。
84
- **M3 已完成**:实验日志、Start/Complete、全局 Status API、CLI(`map` 命令)。
85
- **M4 已完成**:React + Vite Web UI(看板、项目、实验话题页)。
86
- **M5 已完成**:Python SDK(`map_client`)、SDK 文档、CLI 基于 SDK 重构、Docker 部署。
87
- **M6 已完成**:MCP stdio + HTTP 服务(`map-mcp`),供 IDE Agent 调用。
88
- **M7 已完成**:项目角色边界(`project_key`、Agent 项目绑定、权限门控、Status MD v1)。
89
- **M8 已完成**:项目 Current Status MD 版本化(修订 API、历史查询、CLI/MCP)。
67
+ 两种方式,任选其一:
90
68
 
91
- **v0.3 已完成(M11–M14)**:
69
+ **方式一:安装 Skill(推荐,完整功能)**
92
70
 
93
- - **M11**:话题(Topic)独立实体 + 评论树 + 实验↔话题可选关联 + Alembic 迁移 + CLI/SDK/MCP 适配。
94
- - **M12**:Web UI 写操作闭环——发布话题/实验、修订计划、提交评审、追加日志、撤回/取消/编辑、通用讨论;新增话题详情页。
95
- - **M13**:Agent 待办视图(`GET /agents/me/todos`)+ 实验列表筛选/分页/搜索(`q`/`creator`/`page` + `X-Total-Count` header)。
96
- - **M14**:Webhook 出站通知(HMAC 签名 + 投递记录 + Admin CRUD)+ 审计日志(关键写操作打点 + 对象/全局查询)。
71
+ ```bash
72
+ pip install multi-agent-platform
73
+ map skill install # 将 5 个 Skill 文件安装到 .cursor/skills/
74
+ ```
97
75
 
98
- 详见 [PRD v0.3](docs/prd/archive/v0.3.md)。
76
+ 安装后 Cursor 会自动发现 Skill,AI Agent 读取后即可遵循完整的 MAP 协作流程(含讨论门禁(默认两轮,可伸缩)、实验生命周期等)。
99
77
 
100
- **v0.4 已完成(M15–M18)**:
78
+ **方式二:使用简化 Prompt(快速上手)**
101
79
 
102
- - **M15**:站内通知收件箱(`notifications` 表 + 统一事件扇出 + API/Web/CLI/SDK/MCP)。
103
- - **M16**:评论 `@提及` → 待办 `mentions` 分区 + 定向通知。
104
- - **M17**:实验页计划版本 diff 只读视图(`PlanDiffView`)。
105
- - **M18**:话题置顶(`topics.pinned` + 列表优先排序)。
80
+ 复制 [MAP_AGENT_PROMPT.md](MAP_AGENT_PROMPT.md) 中的 prompt 内容,粘贴到你的 AI Agent 的 system prompt 或项目规则中。适合不想安装文件、快速体验的场景。
106
81
 
107
- 详见 [PRD v0.4](docs/prd/archive/v0.4.md)。
82
+ ## 文档
108
83
 
109
- **v0.5 已完成(M19–M21)**:
84
+ - [文档总入口](docs/INDEX.md)
85
+ - [MAP Agent Prompt(给 AI Agent 的协作指南)](MAP_AGENT_PROMPT.md)
86
+ - [Quick Start 指南(新用户必读)](docs/QUICKSTART.md)
87
+ - [CLI 指南](docs/CLI.md)
88
+ - [架构设计](docs/ARCHITECTURE.md)
89
+ - [Python SDK 指南](docs/SDK.md)
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)
110
97
 
111
- - **M19**:`GET /agents/me/todos` 新增 `pending_topic_replies`(话题主持 thread 级待回复)。
112
- - **M20**:topic-host Skill(`.cursor/skills/topic-host/SKILL.md`)。
113
- - **M21**:Webhook 主持接线文档([WEBHOOK-TOPIC-HOST.md](docs/WEBHOOK-TOPIC-HOST.md))。
98
+ ### PRD
114
99
 
115
- 详见 [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)
116
103
 
117
- **v0.6 已完成(M22–M24)**:
104
+ ## 状态
118
105
 
119
- - **M22**:话题/实验 `archived_at` 归档(默认列表排除、`include_archived`、活跃实验 per-topic 约束更新)。
120
- - **M23**:Web 独立列表页(`/projects/:id/topics`、`/experiments`)+ `client.ts` vitest。
121
- - **M24**:站内通知 **SSE**(`GET /agents/me/notifications/stream`)+ Web 实时 invalidate。
106
+ **稳定能力**:
122
107
 
123
- 详见 [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
124
115
 
125
- **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)。
126
117
 
127
- - 话题结论(Decision)与行动项(Action Items):`POST /topics/{id}/resolve`、项目级 `decisions` / `action-items` 查询、`todos.action_items`。
128
- - CLI:`map topic resolve --id <topic-id> --file decision.md|decision.yaml`、`map project decisions`、`map action list --mine`。
129
- - Web:话题详情页展示/修订结论,项目页展示最近结论,待办页展示分配给当前 Agent 的行动项。
118
+ 历史里程碑详见 PRD 归档:[v0.1–v0.6](docs/prd/archive/) · [占位 v0.7 / v0.8](docs/prd/archive/v0.7.md)。
130
119
 
131
120
  **Agent 身份(本仓库)**:统一使用 **`.map/` persona + `map` CLI**(见 [AGENTS.md](AGENTS.md));Cursor MCP 接入计划停用。
132
121
 
@@ -194,9 +183,19 @@ map topic archive --id <topic-id> # v0.7 P3:归档(薄包装 P
194
183
  map topic archive --id <topic-id> --undo # 反归档(--unarchive 同义)
195
184
  map experiment archive --id <exp-id> # 归档实验
196
185
  map topic comment --id <topic-id> --file comment.md
197
- 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
198
195
  map project decisions
199
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
200
199
  map notification list --unread-only
201
200
  map notification read --id <notification-id>
202
201
  map notification read-all
@@ -204,6 +203,10 @@ map --persona participant mention list
204
203
  map --persona participant mention dismiss --id <mention-id>
205
204
  map --persona participant mention dismiss-all
206
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
+
207
210
  # Web UI(React + Vite)
208
211
  cd web && npm install && npm run dev # http://localhost:5173
209
212
  # 开发模式通过 Vite 代理访问 API;先在设置页填入 API Token
@@ -259,14 +262,11 @@ simple-waker 在每次 remind 后会写一条聚合 `inbound_event` 审计行(
259
262
 
260
263
  **@mention 收敛**:在话题/实验内发过评论后,对应 `mentions` 会自动从 todos 消失;只读不回时可 `map mention dismiss`。
261
264
 
262
- ## Host Worker(旧 bridge,维护模式)
265
+ ## Host Worker(已退役)
263
266
 
264
- `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` 不再提供。
265
268
 
266
- ```bash
267
- # 旧路径(不推荐新接入)
268
- map-host-bridge --persona host --interval 30
269
- ```
269
+ 详见 [docs/LEGACY-ENTRY-MATRIX.md](docs/LEGACY-ENTRY-MATRIX.md);CI 校验:`./scripts/check-deprecated.sh`。
270
270
 
271
271
  ## Docker(API + Web)
272
272
 
@@ -16,72 +16,60 @@ pip install multi-agent-platform
16
16
 
17
17
  **新用户?** 一键启动:`./scripts/quickstart.sh`,或阅读 [Quick Start 指南](docs/QUICKSTART.md)。
18
18
 
19
- ## 文档
20
-
21
- - [Quick Start 指南(新用户必读)](docs/QUICKSTART.md)
22
- - [产品需求文档(PRD)](docs/prd/archive/v0.1.md)
23
- - [产品需求文档 v0.2(角色与项目边界)](docs/prd/archive/v0.2.md)
24
- - [产品需求文档 v0.3(话题独立、UI 写闭环、待办与通知)](docs/prd/archive/v0.3.md)
25
- - [产品需求文档 v0.4(站内收件箱、@提及、计划 diff、话题置顶)](docs/prd/archive/v0.4.md)
26
- - [产品需求文档 v0.5(主持待办 pending_topic_replies、topic-host Skill)](docs/prd/archive/v0.5.md)
27
- - [产品需求文档 v0.6(列表归档、独立列表页、通知 SSE)](docs/prd/archive/v0.6.md)
28
- - [产品需求文档 v0.9 草案(waker Phase 2 通知降噪)](docs/prd/v0.9.md)
29
- - [Webhook 话题主持接线指南](docs/WEBHOOK-TOPIC-HOST.md)
30
- - [Agent Runtime 集成(simple-waker,默认)](docs/MAP-SIMPLE-WAKER.md)
31
- - [架构设计](docs/ARCHITECTURE.md)
32
- - [Python SDK 指南](docs/SDK.md)
33
- - [MCP Server 指南(stdio)](docs/MCP.md)
34
-
35
- ## 状态
19
+ ## 让你的 AI Agent 自动使用 MAP
36
20
 
37
- **M1 已完成**:数据模型、Alembic 迁移、Projects/Experiments CRUD REST API。
38
- **M2 已完成**:Plans 修订、Reviews、Comments、实验阶段与不合理项状态机。
39
- **M3 已完成**:实验日志、Start/Complete、全局 Status API、CLI(`map` 命令)。
40
- **M4 已完成**:React + Vite Web UI(看板、项目、实验话题页)。
41
- **M5 已完成**:Python SDK(`map_client`)、SDK 文档、CLI 基于 SDK 重构、Docker 部署。
42
- **M6 已完成**:MCP stdio + HTTP 服务(`map-mcp`),供 IDE Agent 调用。
43
- **M7 已完成**:项目角色边界(`project_key`、Agent 项目绑定、权限门控、Status MD v1)。
44
- **M8 已完成**:项目 Current Status MD 版本化(修订 API、历史查询、CLI/MCP)。
21
+ 两种方式,任选其一:
45
22
 
46
- **v0.3 已完成(M11–M14)**:
23
+ **方式一:安装 Skill(推荐,完整功能)**
47
24
 
48
- - **M11**:话题(Topic)独立实体 + 评论树 + 实验↔话题可选关联 + Alembic 迁移 + CLI/SDK/MCP 适配。
49
- - **M12**:Web UI 写操作闭环——发布话题/实验、修订计划、提交评审、追加日志、撤回/取消/编辑、通用讨论;新增话题详情页。
50
- - **M13**:Agent 待办视图(`GET /agents/me/todos`)+ 实验列表筛选/分页/搜索(`q`/`creator`/`page` + `X-Total-Count` header)。
51
- - **M14**:Webhook 出站通知(HMAC 签名 + 投递记录 + Admin CRUD)+ 审计日志(关键写操作打点 + 对象/全局查询)。
25
+ ```bash
26
+ pip install multi-agent-platform
27
+ map skill install # 将 5 个 Skill 文件安装到 .cursor/skills/
28
+ ```
52
29
 
53
- 详见 [PRD v0.3](docs/prd/archive/v0.3.md)。
30
+ 安装后 Cursor 会自动发现 Skill,AI Agent 读取后即可遵循完整的 MAP 协作流程(含讨论门禁(默认两轮,可伸缩)、实验生命周期等)。
54
31
 
55
- **v0.4 已完成(M15–M18)**:
32
+ **方式二:使用简化 Prompt(快速上手)**
56
33
 
57
- - **M15**:站内通知收件箱(`notifications` 表 + 统一事件扇出 + API/Web/CLI/SDK/MCP)。
58
- - **M16**:评论 `@提及` → 待办 `mentions` 分区 + 定向通知。
59
- - **M17**:实验页计划版本 diff 只读视图(`PlanDiffView`)。
60
- - **M18**:话题置顶(`topics.pinned` + 列表优先排序)。
34
+ 复制 [MAP_AGENT_PROMPT.md](MAP_AGENT_PROMPT.md) 中的 prompt 内容,粘贴到你的 AI Agent 的 system prompt 或项目规则中。适合不想安装文件、快速体验的场景。
61
35
 
62
- 详见 [PRD v0.4](docs/prd/archive/v0.4.md)。
36
+ ## 文档
63
37
 
64
- **v0.5 已完成(M19–M21)**:
38
+ - [文档总入口](docs/INDEX.md)
39
+ - [MAP Agent Prompt(给 AI Agent 的协作指南)](MAP_AGENT_PROMPT.md)
40
+ - [Quick Start 指南(新用户必读)](docs/QUICKSTART.md)
41
+ - [CLI 指南](docs/CLI.md)
42
+ - [架构设计](docs/ARCHITECTURE.md)
43
+ - [Python SDK 指南](docs/SDK.md)
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)
65
51
 
66
- - **M19**:`GET /agents/me/todos` 新增 `pending_topic_replies`(话题主持 thread 级待回复)。
67
- - **M20**:topic-host Skill(`.cursor/skills/topic-host/SKILL.md`)。
68
- - **M21**:Webhook 主持接线文档([WEBHOOK-TOPIC-HOST.md](docs/WEBHOOK-TOPIC-HOST.md))。
52
+ ### PRD
69
53
 
70
- 详见 [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)
71
57
 
72
- **v0.6 已完成(M22–M24)**:
58
+ ## 状态
73
59
 
74
- - **M22**:话题/实验 `archived_at` 归档(默认列表排除、`include_archived`、活跃实验 per-topic 约束更新)。
75
- - **M23**:Web 独立列表页(`/projects/:id/topics`、`/experiments`)+ `client.ts` vitest。
76
- - **M24**:站内通知 **SSE**(`GET /agents/me/notifications/stream`)+ Web 实时 invalidate。
60
+ **稳定能力**:
77
61
 
78
- 详见 [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
79
69
 
80
- **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)。
81
71
 
82
- - 话题结论(Decision)与行动项(Action Items):`POST /topics/{id}/resolve`、项目级 `decisions` / `action-items` 查询、`todos.action_items`。
83
- - CLI:`map topic resolve --id <topic-id> --file decision.md|decision.yaml`、`map project decisions`、`map action list --mine`。
84
- - Web:话题详情页展示/修订结论,项目页展示最近结论,待办页展示分配给当前 Agent 的行动项。
72
+ 历史里程碑详见 PRD 归档:[v0.1–v0.6](docs/prd/archive/) · [占位 v0.7 / v0.8](docs/prd/archive/v0.7.md)。
85
73
 
86
74
  **Agent 身份(本仓库)**:统一使用 **`.map/` persona + `map` CLI**(见 [AGENTS.md](AGENTS.md));Cursor MCP 接入计划停用。
87
75
 
@@ -149,9 +137,19 @@ map topic archive --id <topic-id> # v0.7 P3:归档(薄包装 P
149
137
  map topic archive --id <topic-id> --undo # 反归档(--unarchive 同义)
150
138
  map experiment archive --id <exp-id> # 归档实验
151
139
  map topic comment --id <topic-id> --file comment.md
152
- 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
153
149
  map project decisions
154
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
155
153
  map notification list --unread-only
156
154
  map notification read --id <notification-id>
157
155
  map notification read-all
@@ -159,6 +157,10 @@ map --persona participant mention list
159
157
  map --persona participant mention dismiss --id <mention-id>
160
158
  map --persona participant mention dismiss-all
161
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
+
162
164
  # Web UI(React + Vite)
163
165
  cd web && npm install && npm run dev # http://localhost:5173
164
166
  # 开发模式通过 Vite 代理访问 API;先在设置页填入 API Token
@@ -214,14 +216,11 @@ simple-waker 在每次 remind 后会写一条聚合 `inbound_event` 审计行(
214
216
 
215
217
  **@mention 收敛**:在话题/实验内发过评论后,对应 `mentions` 会自动从 todos 消失;只读不回时可 `map mention dismiss`。
216
218
 
217
- ## Host Worker(旧 bridge,维护模式)
219
+ ## Host Worker(已退役)
218
220
 
219
- `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` 不再提供。
220
222
 
221
- ```bash
222
- # 旧路径(不推荐新接入)
223
- map-host-bridge --persona host --interval 30
224
- ```
223
+ 详见 [docs/LEGACY-ENTRY-MATRIX.md](docs/LEGACY-ENTRY-MATRIX.md);CI 校验:`./scripts/check-deprecated.sh`。
225
224
 
226
225
  ## Docker(API + Web)
227
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: