multi-agent-platform 0.3.0__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/PKG-INFO +46 -64
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/README.md +43 -62
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/agent_client.py +15 -4
- {multi_agent_platform-0.3.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.3.0 → multi_agent_platform-0.3.1}/cli/commands/runtime.py +1 -1
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/skill.py +53 -3
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/topic.py +48 -3
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/e2e_collab.py +2 -2
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/main.py +110 -5
- multi_agent_platform-0.3.1/cli/orchestrator.py +240 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/runtime_chat.py +1 -1
- {multi_agent_platform-0.3.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.0 → multi_agent_platform-0.3.1}/cli/skills/map-project-collab/SKILL.md +100 -46
- multi_agent_platform-0.3.1/cli/skills/map-project-collab/references/bootstrap-troubleshooting.md +90 -0
- multi_agent_platform-0.3.0/cli/skills/map-runtime-waker/SKILL.md → multi_agent_platform-0.3.1/cli/skills/map-project-collab/references/waker-mode.md +17 -41
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/skills/topic-host/SKILL.md +109 -95
- multi_agent_platform-0.3.1/cli/skills/topic-host/references/experiment-gate-rubric.md +130 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/skills/topic-participant/SKILL.md +49 -6
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/PKG-INFO +46 -64
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/SOURCES.txt +10 -2
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/pyproject.toml +5 -4
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/client.py +39 -4
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/server.py +14 -3
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_sdk/__init__.py +1 -1
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_types/enums.py +37 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_types/schemas.py +36 -5
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/__version__.py +1 -1
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/experiments.py +14 -2
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/topics.py +42 -3
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/domain/models.py +25 -4
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/agent_work_service.py +1 -1
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/mention_service.py +1 -1
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/notification_service.py +1 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/phase_service.py +132 -25
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_ack_service.py +4 -1
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_comment_service.py +9 -1
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_lifecycle_service.py +147 -13
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_service.py +2 -0
- {multi_agent_platform-0.3.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.3.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.3.0 → multi_agent_platform-0.3.1}/tests/test_project_export.py +1 -2
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_sdk.py +3 -3
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_skill_install.py +72 -3
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_topics.py +254 -8
- multi_agent_platform-0.3.0/cli/skills/experiment-host/SKILL.md +0 -223
- multi_agent_platform-0.3.0/cli/skills/experiment-reviewer/SKILL.md +0 -108
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/LICENSE +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/__init__.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/action_item_escalation.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/bridge_state.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/__init__.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/action.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/agent.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/audit.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/docs.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/feedback.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/notification.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/persona.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/project.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/commands/sync.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/git_checkpoint.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/host_worker_types.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/local_cache.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/map_command_client.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/participant_worker.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/project_export.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/reviewer_worker.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/runtime/__init__.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/runtime/run_lock.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/session_wake_log.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/skills/__init__.py +0 -0
- {multi_agent_platform-0.3.0/cli/skills/map-runtime-waker → multi_agent_platform-0.3.1/cli/skills/map-project-collab}/agents/openai.yaml +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/skills/map-project-collab/scripts/map-bootstrap.sh +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/table_render.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/wake_backend.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/cli/worker_cycle_log.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/dependency_links.txt +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/entry_points.txt +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/requires.txt +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/multi_agent_platform.egg-info/top_level.txt +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/__init__.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/bootstrap.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/config.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/errors.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/exceptions.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/plan_evidence.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/project_config.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/result_template.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_client/testing.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/__init__.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/_utils.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/auth.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/config.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/context.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/main.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_mcp/session.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_sdk/evidence.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/sdk/python/map_types/__init__.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/__init__.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/__init__.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/action_items.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/agents.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/audit.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/background_tasks.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/common.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/deps.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/feedback.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/notifications.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/projects.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/router.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/status.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/api/webhooks.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/auth/__init__.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/auth/experiment_access.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/config.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/db/__init__.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/db/base.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/db/deadlock_retry.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/db/session.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/domain/__init__.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/domain/encrypted_types.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/domain/schemas.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/domain/state_machine.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/domain/topic_ack_constants.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/main.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/scripts/__init__.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/scripts/migrate_notification_unique.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/scripts/purge_audit_pollution.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/__init__.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/_lookups.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/acceptance_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/action_item_migration_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/action_item_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/archive_lint_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/audit_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/auth.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/comment_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/errors.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/escalation_resolver.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/evidence_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/experiment_capabilities_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/inbound_event_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/lock_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/log_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/notification_stream.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/permissions.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/persona_activity_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/phase_owner_resolver.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/plan_marker_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/plan_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/platform_feedback_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/project_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/project_status_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/review_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/secret_encryption.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/similarity_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/sse_event_schemas.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/status_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/template_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/text_utils.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/thread_activity.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/todo_persona_filter.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/todo_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_action_item_ops.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_comment_kind.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_helpers.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_progress_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_resolve_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/topic_work_item_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/server/services/webhook_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/setup.cfg +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_18a64691_linkage.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_a2_action_item_cascade.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_accept_result_verdict.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_action_items.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_agent_client.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_agent_work.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_agents_list.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_arch_map_sdk_evidence.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_archive_lint_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_audit_admin_cli.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_audit_admin_filter.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_auth.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_auth_experiment_access.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_authz_cross_persona_capability.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_authz_pr3_creator_gating_extended.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_b_acceptance.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_stale.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_wake_endpoints.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_wake_stale.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_b_action_item_wake_stale_notifications.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_b_waker_should_wake_action_item.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_bridge_state.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cleanup_audit_log_no_commit.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cleanup_exp_b_paging_seven_endpoints.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cleanup_exp_b_paging_unified_limit.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_clear_action_template.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_error_envelope.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_evidence_contract.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_format_priority.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_n2_hard_cutover.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_schema_discovery.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_status.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_template_contract.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cli_work_deprecation.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_cross_persona_call_audit.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_deadlock_retry.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_docs_inventory.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_fast_gate_whitelist_complete.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_agent_work_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_agents.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_experiment_capabilities_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_experiments_projects.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_mention_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_notification_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_phase_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_project_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_todo_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topic_comment_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topic_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topic_work_item_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_mypy_strict_topics.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_uv_lock.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_eng_version_single_source.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_error_codes_cli.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_error_envelope_and_file_options.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_escalation_resolver.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_escalation_target_endpoint.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_evidence_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_experiment_capabilities.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_experiment_capabilities_whitelist.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_experiment_lock_fuzz.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_experiment_lock_notifications.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_experiment_lock_unit.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_experiments.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_feedback.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_feedback_admin_cli.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_field_rename_alias.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_git_checkpoint.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_inbound_event_rejection.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_log_create_response.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_m2_flow.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_m3_flow.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_map_sdk_skeleton.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_mcp.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_mcp_http.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_mention_code_skip_unit.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_mentions.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_notification_bulk_filter.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_notification_service_v09.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_notification_stream.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_notification_upsert_pr2.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_notifications.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_participant_worker_claude_agent.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_perf_count_sql_fixture.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_perf_experiment_bundle_verdict_n_plus_one.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_perf_experiment_summary_bulk.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_perf_topic_comments_bulk.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_perf_work_hotpath_bulk.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_persona_activity.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_persona_compare_partition.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_phase_owner_orm_validation.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_phase_owner_resolver.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_plan_evidence_parser.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_plan_marker_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_plan_revise_auto_archive.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_plan_validate_cli.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_project_config.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_project_status.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_projects.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_rebutted_plan_continues_e2e.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_register_agent_body_model.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_reject_result_misuse.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_resolve_item_sdk_contract.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_resolve_item_status.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_result_template_parser.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_already_archived.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_archived_metadata.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_eligibility.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_item_mutation_audit.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_item_state_closed_migration.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_list_archived_filter.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_substitute_and_withdraw.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_review_verdict_alias.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_reviewer_worker_claude_agent.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_runtime_chat.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_same_second_host_reply.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_same_second_trio.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_sdk_exceptions.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_server_lock_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_session_wake_log.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_similarity_api_contract.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_similarity_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_simple_waker.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_simple_waker_pr3_dedup.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_simple_waker_reviewer_filter.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_sse_acceptance.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_sse_isolation.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_sse_schema_overlap.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_state_machine.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_state_machine_recovery_hint.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_systemd_install.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_template_api_contract.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_template_service.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_todos.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_topic_notifications.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_topic_progress.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_topic_read_cursor.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_topic_work_items.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_waker_phase1_acceptance.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_webhook_secret_encryption.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_webhooks_audit.py +0 -0
- {multi_agent_platform-0.3.0 → multi_agent_platform-0.3.1}/tests/test_work_summary.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: multi-agent-platform
|
|
3
|
-
Version: 0.3.
|
|
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
|
|
@@ -69,10 +70,10 @@ pip install multi-agent-platform
|
|
|
69
70
|
|
|
70
71
|
```bash
|
|
71
72
|
pip install multi-agent-platform
|
|
72
|
-
map skill install # 将
|
|
73
|
+
map skill install # 将 5 个 Skill 文件安装到 .cursor/skills/
|
|
73
74
|
```
|
|
74
75
|
|
|
75
|
-
安装后 Cursor 会自动发现 Skill,AI Agent 读取后即可遵循完整的 MAP
|
|
76
|
+
安装后 Cursor 会自动发现 Skill,AI Agent 读取后即可遵循完整的 MAP 协作流程(含讨论门禁(默认两轮,可伸缩)、实验生命周期等)。
|
|
76
77
|
|
|
77
78
|
**方式二:使用简化 Prompt(快速上手)**
|
|
78
79
|
|
|
@@ -80,71 +81,41 @@ map skill install # 将 6 个 Skill 文件安装到 .cursor/skills/
|
|
|
80
81
|
|
|
81
82
|
## 文档
|
|
82
83
|
|
|
84
|
+
- [文档总入口](docs/INDEX.md)
|
|
83
85
|
- [MAP Agent Prompt(给 AI Agent 的协作指南)](MAP_AGENT_PROMPT.md)
|
|
84
86
|
- [Quick Start 指南(新用户必读)](docs/QUICKSTART.md)
|
|
85
|
-
- [
|
|
86
|
-
- [产品需求文档 v0.2(角色与项目边界)](docs/prd/archive/v0.2.md)
|
|
87
|
-
- [产品需求文档 v0.3(话题独立、UI 写闭环、待办与通知)](docs/prd/archive/v0.3.md)
|
|
88
|
-
- [产品需求文档 v0.4(站内收件箱、@提及、计划 diff、话题置顶)](docs/prd/archive/v0.4.md)
|
|
89
|
-
- [产品需求文档 v0.5(主持待办 pending_topic_replies、topic-host Skill)](docs/prd/archive/v0.5.md)
|
|
90
|
-
- [产品需求文档 v0.6(列表归档、独立列表页、通知 SSE)](docs/prd/archive/v0.6.md)
|
|
91
|
-
- [产品需求文档 v0.9 草案(waker Phase 2 通知降噪)](docs/prd/v0.9.md)
|
|
92
|
-
- [Webhook 话题主持接线指南](docs/WEBHOOK-TOPIC-HOST.md)
|
|
93
|
-
- [Agent Runtime 集成(simple-waker,默认)](docs/MAP-SIMPLE-WAKER.md)
|
|
87
|
+
- [CLI 指南](docs/CLI.md)
|
|
94
88
|
- [架构设计](docs/ARCHITECTURE.md)
|
|
95
89
|
- [Python SDK 指南](docs/SDK.md)
|
|
96
90
|
- [MCP Server 指南(stdio)](docs/MCP.md)
|
|
91
|
+
- [Webhook 话题主持接线指南](docs/WEBHOOK-TOPIC-HOST.md)
|
|
92
|
+
- [Agent Runtime 集成(simple-waker,默认)](docs/MAP-SIMPLE-WAKER.md)
|
|
93
|
+
- [Persona 行为差异](docs/MAP-PERSONA-COMPARE.md)
|
|
94
|
+
- [Web 端 Agent UI 视图](docs/UI-AGENTS.md)
|
|
95
|
+
- [证据元数据契约](docs/MAP-EVIDENCE-METADATA.md)
|
|
96
|
+
- [错误码清单](docs/MAP-ERROR-CODES.md)
|
|
97
97
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
**M1 已完成**:数据模型、Alembic 迁移、Projects/Experiments CRUD REST API。
|
|
101
|
-
**M2 已完成**:Plans 修订、Reviews、Comments、实验阶段与不合理项状态机。
|
|
102
|
-
**M3 已完成**:实验日志、Start/Complete、全局 Status API、CLI(`map` 命令)。
|
|
103
|
-
**M4 已完成**:React + Vite Web UI(看板、项目、实验话题页)。
|
|
104
|
-
**M5 已完成**:Python SDK(`map_client`)、SDK 文档、CLI 基于 SDK 重构、Docker 部署。
|
|
105
|
-
**M6 已完成**:MCP stdio + HTTP 服务(`map-mcp`),供 IDE Agent 调用。
|
|
106
|
-
**M7 已完成**:项目角色边界(`project_key`、Agent 项目绑定、权限门控、Status MD v1)。
|
|
107
|
-
**M8 已完成**:项目 Current Status MD 版本化(修订 API、历史查询、CLI/MCP)。
|
|
108
|
-
|
|
109
|
-
**v0.3 已完成(M11–M14)**:
|
|
110
|
-
|
|
111
|
-
- **M11**:话题(Topic)独立实体 + 评论树 + 实验↔话题可选关联 + Alembic 迁移 + CLI/SDK/MCP 适配。
|
|
112
|
-
- **M12**:Web UI 写操作闭环——发布话题/实验、修订计划、提交评审、追加日志、撤回/取消/编辑、通用讨论;新增话题详情页。
|
|
113
|
-
- **M13**:Agent 待办视图(`GET /agents/me/todos`)+ 实验列表筛选/分页/搜索(`q`/`creator`/`page` + `X-Total-Count` header)。
|
|
114
|
-
- **M14**:Webhook 出站通知(HMAC 签名 + 投递记录 + Admin CRUD)+ 审计日志(关键写操作打点 + 对象/全局查询)。
|
|
115
|
-
|
|
116
|
-
详见 [PRD v0.3](docs/prd/archive/v0.3.md)。
|
|
117
|
-
|
|
118
|
-
**v0.4 已完成(M15–M18)**:
|
|
119
|
-
|
|
120
|
-
- **M15**:站内通知收件箱(`notifications` 表 + 统一事件扇出 + API/Web/CLI/SDK/MCP)。
|
|
121
|
-
- **M16**:评论 `@提及` → 待办 `mentions` 分区 + 定向通知。
|
|
122
|
-
- **M17**:实验页计划版本 diff 只读视图(`PlanDiffView`)。
|
|
123
|
-
- **M18**:话题置顶(`topics.pinned` + 列表优先排序)。
|
|
124
|
-
|
|
125
|
-
详见 [PRD v0.4](docs/prd/archive/v0.4.md)。
|
|
126
|
-
|
|
127
|
-
**v0.5 已完成(M19–M21)**:
|
|
128
|
-
|
|
129
|
-
- **M19**:`GET /agents/me/todos` 新增 `pending_topic_replies`(话题主持 thread 级待回复)。
|
|
130
|
-
- **M20**:topic-host Skill(`.cursor/skills/topic-host/SKILL.md`)。
|
|
131
|
-
- **M21**:Webhook 主持接线文档([WEBHOOK-TOPIC-HOST.md](docs/WEBHOOK-TOPIC-HOST.md))。
|
|
98
|
+
### PRD
|
|
132
99
|
|
|
133
|
-
|
|
100
|
+
- [现行草案:v0.9(waker Phase 2 通知降噪)](docs/prd/v0.9.md)
|
|
101
|
+
- [归档:v0.1 / v0.2 / v0.3 / v0.4 / v0.5 / v0.6](docs/prd/archive/)
|
|
102
|
+
- [占位:v0.7 / v0.8(未单独成稿)](docs/prd/archive/v0.7.md)
|
|
134
103
|
|
|
135
|
-
|
|
104
|
+
## 状态
|
|
136
105
|
|
|
137
|
-
|
|
138
|
-
- **M23**:Web 独立列表页(`/projects/:id/topics`、`/experiments`)+ `client.ts` vitest。
|
|
139
|
-
- **M24**:站内通知 **SSE**(`GET /agents/me/notifications/stream`)+ Web 实时 invalidate。
|
|
106
|
+
**稳定能力**:
|
|
140
107
|
|
|
141
|
-
|
|
108
|
+
- **实验生命周期**:计划修订、评审、执行日志、结果审批、状态机
|
|
109
|
+
- **话题协作**:独立话题 + 评论树 + @提及 + 多轮讨论 + Round Summary + 结论与行动项
|
|
110
|
+
- **待办与通知**:Agent 待办视图 + 站内通知 + SSE 实时推送 + Webhook 出站
|
|
111
|
+
- **Web UI**:React + Vite 看板 / 话题 / 实验详情,写操作闭环
|
|
112
|
+
- **多入口接入**:Python SDK + `map` CLI + MCP stdio/HTTP(`map-mcp`)
|
|
113
|
+
- **Agent Runtime**:simple-waker 默认路径(轮询 + remind + action_item 升级)
|
|
114
|
+
- **多 persona 协作**:`.map/` persona + Skill 指导 Agent 写回 MAP
|
|
142
115
|
|
|
143
|
-
|
|
116
|
+
**当前主线**:v0.9 草案(waker Phase 2 通知降噪)。详见 [PRD v0.9](docs/prd/v0.9.md) 与 [status-md-v10.md](docs/status-md-v10.md)。
|
|
144
117
|
|
|
145
|
-
|
|
146
|
-
- CLI:`map topic resolve --id <topic-id> --file decision.md|decision.yaml`、`map project decisions`、`map action list --mine`。
|
|
147
|
-
- Web:话题详情页展示/修订结论,项目页展示最近结论,待办页展示分配给当前 Agent 的行动项。
|
|
118
|
+
历史里程碑详见 PRD 归档:[v0.1–v0.6](docs/prd/archive/) · [占位 v0.7 / v0.8](docs/prd/archive/v0.7.md)。
|
|
148
119
|
|
|
149
120
|
**Agent 身份(本仓库)**:统一使用 **`.map/` persona + `map` CLI**(见 [AGENTS.md](AGENTS.md));Cursor MCP 接入计划停用。
|
|
150
121
|
|
|
@@ -212,9 +183,19 @@ map topic archive --id <topic-id> # v0.7 P3:归档(薄包装 P
|
|
|
212
183
|
map topic archive --id <topic-id> --undo # 反归档(--unarchive 同义)
|
|
213
184
|
map experiment archive --id <exp-id> # 归档实验
|
|
214
185
|
map topic comment --id <topic-id> --file comment.md
|
|
215
|
-
map topic
|
|
186
|
+
map topic comment --id <topic-id> --body "..." --round-summary # 标记 Round Summary(触发 ack 流)
|
|
187
|
+
map topic advance-round --id <topic-id> # roundN → roundN+1
|
|
188
|
+
map topic advance-round --id <topic-id> --ready # 标记 ready(可开实验)
|
|
189
|
+
map topic advance-round --id <topic-id> --ack accept|reject|dismiss # participant 表态
|
|
190
|
+
map topic advance-round --id <topic-id> --waive-ack --waive-reason "参与者离线,结论已收敛"
|
|
191
|
+
map topic rollback-round --id <topic-id> # 回退一轮
|
|
192
|
+
map topic close --id <topic-id> --reason no_experiment_needed --note "讨论后决定不开实验"
|
|
193
|
+
map topic dismiss --id <topic-id> # 退出话题(与 UI ✕ 相同)
|
|
194
|
+
map topic mark-seen --id <topic-id> # 清 contextual unread,不清 reply/ack/mention
|
|
216
195
|
map project decisions
|
|
217
196
|
map action list --mine
|
|
197
|
+
map action mark-wake-sent --id <action-item-id> # waker 升级:标记 WAKE 已发
|
|
198
|
+
map action mark-stale --id <action-item-id> # waker 升级:标记 STALE
|
|
218
199
|
map notification list --unread-only
|
|
219
200
|
map notification read --id <notification-id>
|
|
220
201
|
map notification read-all
|
|
@@ -222,6 +203,10 @@ map --persona participant mention list
|
|
|
222
203
|
map --persona participant mention dismiss --id <mention-id>
|
|
223
204
|
map --persona participant mention dismiss-all
|
|
224
205
|
|
|
206
|
+
# Host 编排模式:host 直接调用 participant/reviewer(同步响应,不依赖 waker 轮询)
|
|
207
|
+
map --persona host host invoke --persona participant --prompt "请参与话题 <topic-id> 的讨论"
|
|
208
|
+
map --persona host host invoke --persona reviewer --prompt-file ./review-task.md --json
|
|
209
|
+
|
|
225
210
|
# Web UI(React + Vite)
|
|
226
211
|
cd web && npm install && npm run dev # http://localhost:5173
|
|
227
212
|
# 开发模式通过 Vite 代理访问 API;先在设置页填入 API Token
|
|
@@ -277,14 +262,11 @@ simple-waker 在每次 remind 后会写一条聚合 `inbound_event` 审计行(
|
|
|
277
262
|
|
|
278
263
|
**@mention 收敛**:在话题/实验内发过评论后,对应 `mentions` 会自动从 todos 消失;只读不回时可 `map mention dismiss`。
|
|
279
264
|
|
|
280
|
-
## Host Worker
|
|
265
|
+
## Host Worker(已退役)
|
|
281
266
|
|
|
282
|
-
|
|
267
|
+
早期轮询 bridge(`map-host-bridge` / `map-host-worker`、`start-host-bridge*.sh`、`start-runtime-waker-claude.sh`、`start-all-wakers-legacy.sh`)已由 **simple-waker** 全面取代并停用(`MAP_USE_LEGACY_WAKER` 不再生效)。`pyproject.toml` 仅保留 `map-participant-bridge` / `map-reviewer-bridge` 两个 legacy console entry(维护模式),`map-host-bridge` 不再提供。
|
|
283
268
|
|
|
284
|
-
|
|
285
|
-
# 旧路径(不推荐新接入)
|
|
286
|
-
map-host-bridge --persona host --interval 30
|
|
287
|
-
```
|
|
269
|
+
详见 [docs/LEGACY-ENTRY-MATRIX.md](docs/LEGACY-ENTRY-MATRIX.md);CI 校验:`./scripts/check-deprecated.sh`。
|
|
288
270
|
|
|
289
271
|
## Docker(API + Web)
|
|
290
272
|
|
|
@@ -24,10 +24,10 @@ pip install multi-agent-platform
|
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
26
|
pip install multi-agent-platform
|
|
27
|
-
map skill install # 将
|
|
27
|
+
map skill install # 将 5 个 Skill 文件安装到 .cursor/skills/
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
安装后 Cursor 会自动发现 Skill,AI Agent 读取后即可遵循完整的 MAP
|
|
30
|
+
安装后 Cursor 会自动发现 Skill,AI Agent 读取后即可遵循完整的 MAP 协作流程(含讨论门禁(默认两轮,可伸缩)、实验生命周期等)。
|
|
31
31
|
|
|
32
32
|
**方式二:使用简化 Prompt(快速上手)**
|
|
33
33
|
|
|
@@ -35,71 +35,41 @@ map skill install # 将 6 个 Skill 文件安装到 .cursor/skills/
|
|
|
35
35
|
|
|
36
36
|
## 文档
|
|
37
37
|
|
|
38
|
+
- [文档总入口](docs/INDEX.md)
|
|
38
39
|
- [MAP Agent Prompt(给 AI Agent 的协作指南)](MAP_AGENT_PROMPT.md)
|
|
39
40
|
- [Quick Start 指南(新用户必读)](docs/QUICKSTART.md)
|
|
40
|
-
- [
|
|
41
|
-
- [产品需求文档 v0.2(角色与项目边界)](docs/prd/archive/v0.2.md)
|
|
42
|
-
- [产品需求文档 v0.3(话题独立、UI 写闭环、待办与通知)](docs/prd/archive/v0.3.md)
|
|
43
|
-
- [产品需求文档 v0.4(站内收件箱、@提及、计划 diff、话题置顶)](docs/prd/archive/v0.4.md)
|
|
44
|
-
- [产品需求文档 v0.5(主持待办 pending_topic_replies、topic-host Skill)](docs/prd/archive/v0.5.md)
|
|
45
|
-
- [产品需求文档 v0.6(列表归档、独立列表页、通知 SSE)](docs/prd/archive/v0.6.md)
|
|
46
|
-
- [产品需求文档 v0.9 草案(waker Phase 2 通知降噪)](docs/prd/v0.9.md)
|
|
47
|
-
- [Webhook 话题主持接线指南](docs/WEBHOOK-TOPIC-HOST.md)
|
|
48
|
-
- [Agent Runtime 集成(simple-waker,默认)](docs/MAP-SIMPLE-WAKER.md)
|
|
41
|
+
- [CLI 指南](docs/CLI.md)
|
|
49
42
|
- [架构设计](docs/ARCHITECTURE.md)
|
|
50
43
|
- [Python SDK 指南](docs/SDK.md)
|
|
51
44
|
- [MCP Server 指南(stdio)](docs/MCP.md)
|
|
45
|
+
- [Webhook 话题主持接线指南](docs/WEBHOOK-TOPIC-HOST.md)
|
|
46
|
+
- [Agent Runtime 集成(simple-waker,默认)](docs/MAP-SIMPLE-WAKER.md)
|
|
47
|
+
- [Persona 行为差异](docs/MAP-PERSONA-COMPARE.md)
|
|
48
|
+
- [Web 端 Agent UI 视图](docs/UI-AGENTS.md)
|
|
49
|
+
- [证据元数据契约](docs/MAP-EVIDENCE-METADATA.md)
|
|
50
|
+
- [错误码清单](docs/MAP-ERROR-CODES.md)
|
|
52
51
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
**M1 已完成**:数据模型、Alembic 迁移、Projects/Experiments CRUD REST API。
|
|
56
|
-
**M2 已完成**:Plans 修订、Reviews、Comments、实验阶段与不合理项状态机。
|
|
57
|
-
**M3 已完成**:实验日志、Start/Complete、全局 Status API、CLI(`map` 命令)。
|
|
58
|
-
**M4 已完成**:React + Vite Web UI(看板、项目、实验话题页)。
|
|
59
|
-
**M5 已完成**:Python SDK(`map_client`)、SDK 文档、CLI 基于 SDK 重构、Docker 部署。
|
|
60
|
-
**M6 已完成**:MCP stdio + HTTP 服务(`map-mcp`),供 IDE Agent 调用。
|
|
61
|
-
**M7 已完成**:项目角色边界(`project_key`、Agent 项目绑定、权限门控、Status MD v1)。
|
|
62
|
-
**M8 已完成**:项目 Current Status MD 版本化(修订 API、历史查询、CLI/MCP)。
|
|
63
|
-
|
|
64
|
-
**v0.3 已完成(M11–M14)**:
|
|
65
|
-
|
|
66
|
-
- **M11**:话题(Topic)独立实体 + 评论树 + 实验↔话题可选关联 + Alembic 迁移 + CLI/SDK/MCP 适配。
|
|
67
|
-
- **M12**:Web UI 写操作闭环——发布话题/实验、修订计划、提交评审、追加日志、撤回/取消/编辑、通用讨论;新增话题详情页。
|
|
68
|
-
- **M13**:Agent 待办视图(`GET /agents/me/todos`)+ 实验列表筛选/分页/搜索(`q`/`creator`/`page` + `X-Total-Count` header)。
|
|
69
|
-
- **M14**:Webhook 出站通知(HMAC 签名 + 投递记录 + Admin CRUD)+ 审计日志(关键写操作打点 + 对象/全局查询)。
|
|
70
|
-
|
|
71
|
-
详见 [PRD v0.3](docs/prd/archive/v0.3.md)。
|
|
72
|
-
|
|
73
|
-
**v0.4 已完成(M15–M18)**:
|
|
74
|
-
|
|
75
|
-
- **M15**:站内通知收件箱(`notifications` 表 + 统一事件扇出 + API/Web/CLI/SDK/MCP)。
|
|
76
|
-
- **M16**:评论 `@提及` → 待办 `mentions` 分区 + 定向通知。
|
|
77
|
-
- **M17**:实验页计划版本 diff 只读视图(`PlanDiffView`)。
|
|
78
|
-
- **M18**:话题置顶(`topics.pinned` + 列表优先排序)。
|
|
79
|
-
|
|
80
|
-
详见 [PRD v0.4](docs/prd/archive/v0.4.md)。
|
|
81
|
-
|
|
82
|
-
**v0.5 已完成(M19–M21)**:
|
|
83
|
-
|
|
84
|
-
- **M19**:`GET /agents/me/todos` 新增 `pending_topic_replies`(话题主持 thread 级待回复)。
|
|
85
|
-
- **M20**:topic-host Skill(`.cursor/skills/topic-host/SKILL.md`)。
|
|
86
|
-
- **M21**:Webhook 主持接线文档([WEBHOOK-TOPIC-HOST.md](docs/WEBHOOK-TOPIC-HOST.md))。
|
|
52
|
+
### PRD
|
|
87
53
|
|
|
88
|
-
|
|
54
|
+
- [现行草案:v0.9(waker Phase 2 通知降噪)](docs/prd/v0.9.md)
|
|
55
|
+
- [归档:v0.1 / v0.2 / v0.3 / v0.4 / v0.5 / v0.6](docs/prd/archive/)
|
|
56
|
+
- [占位:v0.7 / v0.8(未单独成稿)](docs/prd/archive/v0.7.md)
|
|
89
57
|
|
|
90
|
-
|
|
58
|
+
## 状态
|
|
91
59
|
|
|
92
|
-
|
|
93
|
-
- **M23**:Web 独立列表页(`/projects/:id/topics`、`/experiments`)+ `client.ts` vitest。
|
|
94
|
-
- **M24**:站内通知 **SSE**(`GET /agents/me/notifications/stream`)+ Web 实时 invalidate。
|
|
60
|
+
**稳定能力**:
|
|
95
61
|
|
|
96
|
-
|
|
62
|
+
- **实验生命周期**:计划修订、评审、执行日志、结果审批、状态机
|
|
63
|
+
- **话题协作**:独立话题 + 评论树 + @提及 + 多轮讨论 + Round Summary + 结论与行动项
|
|
64
|
+
- **待办与通知**:Agent 待办视图 + 站内通知 + SSE 实时推送 + Webhook 出站
|
|
65
|
+
- **Web UI**:React + Vite 看板 / 话题 / 实验详情,写操作闭环
|
|
66
|
+
- **多入口接入**:Python SDK + `map` CLI + MCP stdio/HTTP(`map-mcp`)
|
|
67
|
+
- **Agent Runtime**:simple-waker 默认路径(轮询 + remind + action_item 升级)
|
|
68
|
+
- **多 persona 协作**:`.map/` persona + Skill 指导 Agent 写回 MAP
|
|
97
69
|
|
|
98
|
-
|
|
70
|
+
**当前主线**:v0.9 草案(waker Phase 2 通知降噪)。详见 [PRD v0.9](docs/prd/v0.9.md) 与 [status-md-v10.md](docs/status-md-v10.md)。
|
|
99
71
|
|
|
100
|
-
|
|
101
|
-
- CLI:`map topic resolve --id <topic-id> --file decision.md|decision.yaml`、`map project decisions`、`map action list --mine`。
|
|
102
|
-
- Web:话题详情页展示/修订结论,项目页展示最近结论,待办页展示分配给当前 Agent 的行动项。
|
|
72
|
+
历史里程碑详见 PRD 归档:[v0.1–v0.6](docs/prd/archive/) · [占位 v0.7 / v0.8](docs/prd/archive/v0.7.md)。
|
|
103
73
|
|
|
104
74
|
**Agent 身份(本仓库)**:统一使用 **`.map/` persona + `map` CLI**(见 [AGENTS.md](AGENTS.md));Cursor MCP 接入计划停用。
|
|
105
75
|
|
|
@@ -167,9 +137,19 @@ map topic archive --id <topic-id> # v0.7 P3:归档(薄包装 P
|
|
|
167
137
|
map topic archive --id <topic-id> --undo # 反归档(--unarchive 同义)
|
|
168
138
|
map experiment archive --id <exp-id> # 归档实验
|
|
169
139
|
map topic comment --id <topic-id> --file comment.md
|
|
170
|
-
map topic
|
|
140
|
+
map topic comment --id <topic-id> --body "..." --round-summary # 标记 Round Summary(触发 ack 流)
|
|
141
|
+
map topic advance-round --id <topic-id> # roundN → roundN+1
|
|
142
|
+
map topic advance-round --id <topic-id> --ready # 标记 ready(可开实验)
|
|
143
|
+
map topic advance-round --id <topic-id> --ack accept|reject|dismiss # participant 表态
|
|
144
|
+
map topic advance-round --id <topic-id> --waive-ack --waive-reason "参与者离线,结论已收敛"
|
|
145
|
+
map topic rollback-round --id <topic-id> # 回退一轮
|
|
146
|
+
map topic close --id <topic-id> --reason no_experiment_needed --note "讨论后决定不开实验"
|
|
147
|
+
map topic dismiss --id <topic-id> # 退出话题(与 UI ✕ 相同)
|
|
148
|
+
map topic mark-seen --id <topic-id> # 清 contextual unread,不清 reply/ack/mention
|
|
171
149
|
map project decisions
|
|
172
150
|
map action list --mine
|
|
151
|
+
map action mark-wake-sent --id <action-item-id> # waker 升级:标记 WAKE 已发
|
|
152
|
+
map action mark-stale --id <action-item-id> # waker 升级:标记 STALE
|
|
173
153
|
map notification list --unread-only
|
|
174
154
|
map notification read --id <notification-id>
|
|
175
155
|
map notification read-all
|
|
@@ -177,6 +157,10 @@ map --persona participant mention list
|
|
|
177
157
|
map --persona participant mention dismiss --id <mention-id>
|
|
178
158
|
map --persona participant mention dismiss-all
|
|
179
159
|
|
|
160
|
+
# Host 编排模式:host 直接调用 participant/reviewer(同步响应,不依赖 waker 轮询)
|
|
161
|
+
map --persona host host invoke --persona participant --prompt "请参与话题 <topic-id> 的讨论"
|
|
162
|
+
map --persona host host invoke --persona reviewer --prompt-file ./review-task.md --json
|
|
163
|
+
|
|
180
164
|
# Web UI(React + Vite)
|
|
181
165
|
cd web && npm install && npm run dev # http://localhost:5173
|
|
182
166
|
# 开发模式通过 Vite 代理访问 API;先在设置页填入 API Token
|
|
@@ -232,14 +216,11 @@ simple-waker 在每次 remind 后会写一条聚合 `inbound_event` 审计行(
|
|
|
232
216
|
|
|
233
217
|
**@mention 收敛**:在话题/实验内发过评论后,对应 `mentions` 会自动从 todos 消失;只读不回时可 `map mention dismiss`。
|
|
234
218
|
|
|
235
|
-
## Host Worker
|
|
219
|
+
## Host Worker(已退役)
|
|
236
220
|
|
|
237
|
-
|
|
221
|
+
早期轮询 bridge(`map-host-bridge` / `map-host-worker`、`start-host-bridge*.sh`、`start-runtime-waker-claude.sh`、`start-all-wakers-legacy.sh`)已由 **simple-waker** 全面取代并停用(`MAP_USE_LEGACY_WAKER` 不再生效)。`pyproject.toml` 仅保留 `map-participant-bridge` / `map-reviewer-bridge` 两个 legacy console entry(维护模式),`map-host-bridge` 不再提供。
|
|
238
222
|
|
|
239
|
-
|
|
240
|
-
# 旧路径(不推荐新接入)
|
|
241
|
-
map-host-bridge --persona host --interval 30
|
|
242
|
-
```
|
|
223
|
+
详见 [docs/LEGACY-ENTRY-MATRIX.md](docs/LEGACY-ENTRY-MATRIX.md);CI 校验:`./scripts/check-deprecated.sh`。
|
|
243
224
|
|
|
244
225
|
## Docker(API + Web)
|
|
245
226
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Persistent in-process Claude SDK client with session resume.
|
|
2
2
|
|
|
3
|
-
Used by
|
|
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:
|