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.
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/PKG-INFO +60 -60
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/README.md +57 -58
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/agent_client.py +15 -4
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/experiment.py +28 -3
- multi_agent_platform-0.3.1/cli/commands/host.py +150 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/runtime.py +1 -1
- multi_agent_platform-0.3.1/cli/commands/skill.py +218 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/topic.py +48 -3
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/e2e_collab.py +2 -2
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/main.py +112 -5
- multi_agent_platform-0.3.1/cli/orchestrator.py +240 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/runtime_chat.py +1 -1
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/simple_waker.py +1 -2
- multi_agent_platform-0.3.1/cli/skills/experiment-host/SKILL.md +213 -0
- multi_agent_platform-0.3.1/cli/skills/experiment-host/references/lifecycle-transitions.md +102 -0
- multi_agent_platform-0.3.1/cli/skills/experiment-reviewer/SKILL.md +121 -0
- multi_agent_platform-0.3.1/cli/skills/experiment-reviewer/references/review-format-guide.md +59 -0
- multi_agent_platform-0.3.1/cli/skills/map-project-collab/SKILL.md +419 -0
- multi_agent_platform-0.3.1/cli/skills/map-project-collab/agents/openai.yaml +4 -0
- multi_agent_platform-0.3.1/cli/skills/map-project-collab/references/bootstrap-troubleshooting.md +90 -0
- multi_agent_platform-0.3.1/cli/skills/map-project-collab/references/waker-mode.md +65 -0
- multi_agent_platform-0.3.1/cli/skills/map-project-collab/scripts/map-bootstrap.sh +6 -0
- multi_agent_platform-0.3.1/cli/skills/topic-host/SKILL.md +303 -0
- multi_agent_platform-0.3.1/cli/skills/topic-host/references/experiment-gate-rubric.md +130 -0
- multi_agent_platform-0.3.1/cli/skills/topic-participant/SKILL.md +168 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/PKG-INFO +60 -60
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/SOURCES.txt +19 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/pyproject.toml +8 -4
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/client.py +39 -4
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/server.py +14 -3
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_sdk/__init__.py +1 -1
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_types/enums.py +37 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_types/schemas.py +36 -5
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/__version__.py +1 -1
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/experiments.py +14 -2
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/topics.py +42 -3
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/domain/models.py +25 -4
- multi_agent_platform-0.3.1/server/services/__init__.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/agent_work_service.py +1 -1
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/mention_service.py +1 -1
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/notification_service.py +1 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/phase_service.py +132 -25
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_ack_service.py +4 -1
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_comment_service.py +9 -1
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_lifecycle_service.py +147 -13
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_service.py +2 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_typing_extensions_clean.py +26 -22
- multi_agent_platform-0.3.1/tests/test_experiment_executor.py +484 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_local_cache.py +1 -2
- multi_agent_platform-0.3.1/tests/test_orchestrator.py +408 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_project_export.py +1 -2
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_sdk.py +3 -3
- multi_agent_platform-0.3.1/tests/test_skill_install.py +233 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_topics.py +254 -8
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/LICENSE +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/__init__.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/action_item_escalation.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/bridge_state.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/__init__.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/action.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/agent.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/audit.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/docs.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/feedback.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/notification.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/persona.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/project.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/commands/sync.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/git_checkpoint.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/host_worker_types.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/local_cache.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/map_command_client.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/participant_worker.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/project_export.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/reviewer_worker.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/runtime/__init__.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/runtime/run_lock.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/session_wake_log.py +0 -0
- {multi_agent_platform-0.2.0/server → multi_agent_platform-0.3.1/cli/skills}/__init__.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/table_render.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/wake_backend.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/cli/worker_cycle_log.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/dependency_links.txt +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/entry_points.txt +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/requires.txt +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/top_level.txt +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/__init__.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/bootstrap.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/config.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/errors.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/exceptions.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/plan_evidence.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/project_config.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/result_template.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/testing.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/__init__.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/_utils.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/auth.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/config.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/context.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/main.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/session.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_sdk/evidence.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/sdk/python/map_types/__init__.py +0 -0
- {multi_agent_platform-0.2.0/server/api → multi_agent_platform-0.3.1/server}/__init__.py +0 -0
- {multi_agent_platform-0.2.0/server/scripts → multi_agent_platform-0.3.1/server/api}/__init__.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/action_items.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/agents.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/audit.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/background_tasks.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/common.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/deps.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/feedback.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/notifications.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/projects.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/router.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/status.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/api/webhooks.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/auth/__init__.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/auth/experiment_access.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/config.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/db/__init__.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/db/base.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/db/deadlock_retry.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/db/session.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/domain/__init__.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/domain/encrypted_types.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/domain/schemas.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/domain/state_machine.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/domain/topic_ack_constants.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/main.py +0 -0
- {multi_agent_platform-0.2.0/server/services → multi_agent_platform-0.3.1/server/scripts}/__init__.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/scripts/migrate_notification_unique.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/scripts/purge_audit_pollution.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/_lookups.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/acceptance_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/action_item_migration_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/action_item_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/archive_lint_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/audit_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/auth.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/comment_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/errors.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/escalation_resolver.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/evidence_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/experiment_capabilities_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/inbound_event_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/lock_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/log_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/notification_stream.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/permissions.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/persona_activity_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/phase_owner_resolver.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/plan_marker_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/plan_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/platform_feedback_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/project_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/project_status_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/review_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/secret_encryption.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/similarity_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/sse_event_schemas.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/status_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/template_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/text_utils.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/thread_activity.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/todo_persona_filter.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/todo_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_action_item_ops.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_comment_kind.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_helpers.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_progress_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_resolve_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/topic_work_item_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/server/services/webhook_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/setup.cfg +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_18a64691_linkage.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_a2_action_item_cascade.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_accept_result_verdict.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_action_items.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_agent_client.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_agent_work.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_agents_list.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_arch_map_sdk_evidence.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_archive_lint_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_audit_admin_cli.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_audit_admin_filter.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_auth.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_auth_experiment_access.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_authz_cross_persona_capability.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_authz_pr3_creator_gating_extended.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_b_acceptance.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_stale.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_wake_endpoints.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_wake_stale.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_wake_stale_notifications.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_b_waker_should_wake_action_item.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_bridge_state.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cleanup_audit_log_no_commit.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cleanup_exp_b_paging_seven_endpoints.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cleanup_exp_b_paging_unified_limit.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_clear_action_template.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_error_envelope.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_evidence_contract.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_format_priority.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_n2_hard_cutover.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_schema_discovery.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_status.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_template_contract.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cli_work_deprecation.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_cross_persona_call_audit.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_deadlock_retry.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_docs_inventory.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_fast_gate_whitelist_complete.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_agent_work_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_agents.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_experiment_capabilities_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_experiments_projects.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_mention_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_notification_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_phase_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_project_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_todo_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topic_comment_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topic_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topic_work_item_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topics.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_uv_lock.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_eng_version_single_source.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_error_codes_cli.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_error_envelope_and_file_options.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_escalation_resolver.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_escalation_target_endpoint.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_evidence_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_experiment_capabilities.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_experiment_capabilities_whitelist.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_experiment_lock_fuzz.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_experiment_lock_notifications.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_experiment_lock_unit.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_experiments.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_feedback.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_feedback_admin_cli.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_field_rename_alias.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_git_checkpoint.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_inbound_event_rejection.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_log_create_response.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_m2_flow.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_m3_flow.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_map_sdk_skeleton.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_mcp.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_mcp_http.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_mention_code_skip_unit.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_mentions.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_notification_bulk_filter.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_notification_service_v09.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_notification_stream.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_notification_upsert_pr2.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_notifications.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_participant_worker_claude_agent.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_perf_count_sql_fixture.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_perf_experiment_bundle_verdict_n_plus_one.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_perf_experiment_summary_bulk.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_perf_topic_comments_bulk.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_perf_work_hotpath_bulk.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_persona_activity.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_persona_compare_partition.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_phase_owner_orm_validation.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_phase_owner_resolver.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_plan_evidence_parser.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_plan_marker_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_plan_revise_auto_archive.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_plan_validate_cli.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_project_config.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_project_status.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_projects.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_rebutted_plan_continues_e2e.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_register_agent_body_model.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_reject_result_misuse.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_resolve_item_sdk_contract.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_resolve_item_status.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_result_template_parser.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_already_archived.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_archived_metadata.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_eligibility.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_item_mutation_audit.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_item_state_closed_migration.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_list_archived_filter.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_substitute_and_withdraw.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_review_verdict_alias.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_reviewer_worker_claude_agent.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_runtime_chat.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_same_second_host_reply.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_same_second_trio.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_sdk_exceptions.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_server_lock_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_session_wake_log.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_similarity_api_contract.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_similarity_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_simple_waker.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_simple_waker_pr3_dedup.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_simple_waker_reviewer_filter.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_sse_acceptance.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_sse_isolation.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_sse_schema_overlap.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_state_machine.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_state_machine_recovery_hint.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_systemd_install.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_template_api_contract.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_template_service.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_todos.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_topic_notifications.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_topic_progress.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_topic_read_cursor.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_topic_work_items.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_waker_phase1_acceptance.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_webhook_secret_encryption.py +0 -0
- {multi_agent_platform-0.2.0 → multi_agent_platform-0.3.1}/tests/test_webhooks_audit.py +0 -0
- {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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
69
|
+
**方式一:安装 Skill(推荐,完整功能)**
|
|
92
70
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
71
|
+
```bash
|
|
72
|
+
pip install multi-agent-platform
|
|
73
|
+
map skill install # 将 5 个 Skill 文件安装到 .cursor/skills/
|
|
74
|
+
```
|
|
97
75
|
|
|
98
|
-
|
|
76
|
+
安装后 Cursor 会自动发现 Skill,AI Agent 读取后即可遵循完整的 MAP 协作流程(含讨论门禁(默认两轮,可伸缩)、实验生命周期等)。
|
|
99
77
|
|
|
100
|
-
|
|
78
|
+
**方式二:使用简化 Prompt(快速上手)**
|
|
101
79
|
|
|
102
|
-
|
|
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
|
-
|
|
82
|
+
## 文档
|
|
108
83
|
|
|
109
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
104
|
+
## 状态
|
|
118
105
|
|
|
119
|
-
|
|
120
|
-
- **M23**:Web 独立列表页(`/projects/:id/topics`、`/experiments`)+ `client.ts` vitest。
|
|
121
|
-
- **M24**:站内通知 **SSE**(`GET /agents/me/notifications/stream`)+ Web 实时 invalidate。
|
|
106
|
+
**稳定能力**:
|
|
122
107
|
|
|
123
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
265
|
+
## Host Worker(已退役)
|
|
263
266
|
|
|
264
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
23
|
+
**方式一:安装 Skill(推荐,完整功能)**
|
|
47
24
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
25
|
+
```bash
|
|
26
|
+
pip install multi-agent-platform
|
|
27
|
+
map skill install # 将 5 个 Skill 文件安装到 .cursor/skills/
|
|
28
|
+
```
|
|
52
29
|
|
|
53
|
-
|
|
30
|
+
安装后 Cursor 会自动发现 Skill,AI Agent 读取后即可遵循完整的 MAP 协作流程(含讨论门禁(默认两轮,可伸缩)、实验生命周期等)。
|
|
54
31
|
|
|
55
|
-
|
|
32
|
+
**方式二:使用简化 Prompt(快速上手)**
|
|
56
33
|
|
|
57
|
-
|
|
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
|
-
|
|
36
|
+
## 文档
|
|
63
37
|
|
|
64
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
58
|
+
## 状态
|
|
73
59
|
|
|
74
|
-
|
|
75
|
-
- **M23**:Web 独立列表页(`/projects/:id/topics`、`/experiments`)+ `client.ts` vitest。
|
|
76
|
-
- **M24**:站内通知 **SSE**(`GET /agents/me/notifications/stream`)+ Web 实时 invalidate。
|
|
60
|
+
**稳定能力**:
|
|
77
61
|
|
|
78
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
219
|
+
## Host Worker(已退役)
|
|
218
220
|
|
|
219
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
164
|
-
|
|
165
|
-
|
|
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
|
|
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:
|