multi-agent-platform 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- multi_agent_platform-0.1.0/LICENSE +21 -0
- multi_agent_platform-0.1.0/PKG-INFO +298 -0
- multi_agent_platform-0.1.0/README.md +253 -0
- multi_agent_platform-0.1.0/cli/__init__.py +0 -0
- multi_agent_platform-0.1.0/cli/action_item_escalation.py +177 -0
- multi_agent_platform-0.1.0/cli/agent_client.py +554 -0
- multi_agent_platform-0.1.0/cli/bridge_state.py +43 -0
- multi_agent_platform-0.1.0/cli/commands/__init__.py +13 -0
- multi_agent_platform-0.1.0/cli/commands/action.py +142 -0
- multi_agent_platform-0.1.0/cli/commands/agent.py +117 -0
- multi_agent_platform-0.1.0/cli/commands/audit.py +68 -0
- multi_agent_platform-0.1.0/cli/commands/docs.py +179 -0
- multi_agent_platform-0.1.0/cli/commands/experiment.py +755 -0
- multi_agent_platform-0.1.0/cli/commands/feedback.py +106 -0
- multi_agent_platform-0.1.0/cli/commands/notification.py +213 -0
- multi_agent_platform-0.1.0/cli/commands/persona.py +63 -0
- multi_agent_platform-0.1.0/cli/commands/project.py +87 -0
- multi_agent_platform-0.1.0/cli/commands/runtime.py +105 -0
- multi_agent_platform-0.1.0/cli/commands/topic.py +361 -0
- multi_agent_platform-0.1.0/cli/e2e_collab.py +602 -0
- multi_agent_platform-0.1.0/cli/git_checkpoint.py +68 -0
- multi_agent_platform-0.1.0/cli/host_worker_types.py +151 -0
- multi_agent_platform-0.1.0/cli/main.py +1553 -0
- multi_agent_platform-0.1.0/cli/map_command_client.py +497 -0
- multi_agent_platform-0.1.0/cli/participant_worker.py +255 -0
- multi_agent_platform-0.1.0/cli/reviewer_worker.py +263 -0
- multi_agent_platform-0.1.0/cli/runtime/__init__.py +5 -0
- multi_agent_platform-0.1.0/cli/runtime/run_lock.py +497 -0
- multi_agent_platform-0.1.0/cli/runtime_chat.py +317 -0
- multi_agent_platform-0.1.0/cli/session_wake_log.py +235 -0
- multi_agent_platform-0.1.0/cli/simple_waker.py +950 -0
- multi_agent_platform-0.1.0/cli/table_render.py +113 -0
- multi_agent_platform-0.1.0/cli/wake_backend.py +236 -0
- multi_agent_platform-0.1.0/cli/worker_cycle_log.py +36 -0
- multi_agent_platform-0.1.0/multi_agent_platform.egg-info/PKG-INFO +298 -0
- multi_agent_platform-0.1.0/multi_agent_platform.egg-info/SOURCES.txt +293 -0
- multi_agent_platform-0.1.0/multi_agent_platform.egg-info/dependency_links.txt +1 -0
- multi_agent_platform-0.1.0/multi_agent_platform.egg-info/entry_points.txt +6 -0
- multi_agent_platform-0.1.0/multi_agent_platform.egg-info/requires.txt +29 -0
- multi_agent_platform-0.1.0/multi_agent_platform.egg-info/top_level.txt +6 -0
- multi_agent_platform-0.1.0/pyproject.toml +198 -0
- multi_agent_platform-0.1.0/sdk/python/map_client/__init__.py +37 -0
- multi_agent_platform-0.1.0/sdk/python/map_client/bootstrap.py +193 -0
- multi_agent_platform-0.1.0/sdk/python/map_client/client.py +1045 -0
- multi_agent_platform-0.1.0/sdk/python/map_client/config.py +21 -0
- multi_agent_platform-0.1.0/sdk/python/map_client/errors.py +283 -0
- multi_agent_platform-0.1.0/sdk/python/map_client/exceptions.py +130 -0
- multi_agent_platform-0.1.0/sdk/python/map_client/plan_evidence.py +159 -0
- multi_agent_platform-0.1.0/sdk/python/map_client/project_config.py +153 -0
- multi_agent_platform-0.1.0/sdk/python/map_client/result_template.py +167 -0
- multi_agent_platform-0.1.0/sdk/python/map_client/testing.py +27 -0
- multi_agent_platform-0.1.0/sdk/python/map_mcp/__init__.py +4 -0
- multi_agent_platform-0.1.0/sdk/python/map_mcp/_utils.py +28 -0
- multi_agent_platform-0.1.0/sdk/python/map_mcp/auth.py +34 -0
- multi_agent_platform-0.1.0/sdk/python/map_mcp/config.py +50 -0
- multi_agent_platform-0.1.0/sdk/python/map_mcp/context.py +39 -0
- multi_agent_platform-0.1.0/sdk/python/map_mcp/main.py +75 -0
- multi_agent_platform-0.1.0/sdk/python/map_mcp/server.py +573 -0
- multi_agent_platform-0.1.0/sdk/python/map_mcp/session.py +79 -0
- multi_agent_platform-0.1.0/sdk/python/map_sdk/__init__.py +29 -0
- multi_agent_platform-0.1.0/sdk/python/map_sdk/evidence.py +68 -0
- multi_agent_platform-0.1.0/sdk/python/map_types/__init__.py +203 -0
- multi_agent_platform-0.1.0/sdk/python/map_types/enums.py +199 -0
- multi_agent_platform-0.1.0/sdk/python/map_types/schemas.py +1351 -0
- multi_agent_platform-0.1.0/server/__init__.py +0 -0
- multi_agent_platform-0.1.0/server/__version__.py +14 -0
- multi_agent_platform-0.1.0/server/api/__init__.py +0 -0
- multi_agent_platform-0.1.0/server/api/action_items.py +138 -0
- multi_agent_platform-0.1.0/server/api/agents.py +412 -0
- multi_agent_platform-0.1.0/server/api/audit.py +54 -0
- multi_agent_platform-0.1.0/server/api/background_tasks.py +18 -0
- multi_agent_platform-0.1.0/server/api/common.py +117 -0
- multi_agent_platform-0.1.0/server/api/deps.py +30 -0
- multi_agent_platform-0.1.0/server/api/experiments.py +858 -0
- multi_agent_platform-0.1.0/server/api/feedback.py +75 -0
- multi_agent_platform-0.1.0/server/api/notifications.py +22 -0
- multi_agent_platform-0.1.0/server/api/projects.py +209 -0
- multi_agent_platform-0.1.0/server/api/router.py +25 -0
- multi_agent_platform-0.1.0/server/api/status.py +33 -0
- multi_agent_platform-0.1.0/server/api/topics.py +302 -0
- multi_agent_platform-0.1.0/server/api/webhooks.py +74 -0
- multi_agent_platform-0.1.0/server/auth/__init__.py +8 -0
- multi_agent_platform-0.1.0/server/auth/experiment_access.py +66 -0
- multi_agent_platform-0.1.0/server/config.py +38 -0
- multi_agent_platform-0.1.0/server/db/__init__.py +3 -0
- multi_agent_platform-0.1.0/server/db/base.py +5 -0
- multi_agent_platform-0.1.0/server/db/deadlock_retry.py +146 -0
- multi_agent_platform-0.1.0/server/db/session.py +41 -0
- multi_agent_platform-0.1.0/server/domain/__init__.py +3 -0
- multi_agent_platform-0.1.0/server/domain/encrypted_types.py +63 -0
- multi_agent_platform-0.1.0/server/domain/models.py +713 -0
- multi_agent_platform-0.1.0/server/domain/schemas.py +3 -0
- multi_agent_platform-0.1.0/server/domain/state_machine.py +79 -0
- multi_agent_platform-0.1.0/server/domain/topic_ack_constants.py +9 -0
- multi_agent_platform-0.1.0/server/main.py +148 -0
- multi_agent_platform-0.1.0/server/scripts/__init__.py +0 -0
- multi_agent_platform-0.1.0/server/scripts/migrate_notification_unique.py +231 -0
- multi_agent_platform-0.1.0/server/scripts/purge_audit_pollution.py +116 -0
- multi_agent_platform-0.1.0/server/services/__init__.py +0 -0
- multi_agent_platform-0.1.0/server/services/_lookups.py +26 -0
- multi_agent_platform-0.1.0/server/services/acceptance_service.py +90 -0
- multi_agent_platform-0.1.0/server/services/action_item_migration_service.py +190 -0
- multi_agent_platform-0.1.0/server/services/action_item_service.py +200 -0
- multi_agent_platform-0.1.0/server/services/agent_work_service.py +405 -0
- multi_agent_platform-0.1.0/server/services/archive_lint_service.py +156 -0
- multi_agent_platform-0.1.0/server/services/audit_service.py +457 -0
- multi_agent_platform-0.1.0/server/services/auth.py +66 -0
- multi_agent_platform-0.1.0/server/services/comment_service.py +173 -0
- multi_agent_platform-0.1.0/server/services/errors.py +65 -0
- multi_agent_platform-0.1.0/server/services/escalation_resolver.py +248 -0
- multi_agent_platform-0.1.0/server/services/evidence_service.py +88 -0
- multi_agent_platform-0.1.0/server/services/experiment_capabilities_service.py +277 -0
- multi_agent_platform-0.1.0/server/services/inbound_event_service.py +111 -0
- multi_agent_platform-0.1.0/server/services/lock_service.py +273 -0
- multi_agent_platform-0.1.0/server/services/log_service.py +202 -0
- multi_agent_platform-0.1.0/server/services/mention_service.py +730 -0
- multi_agent_platform-0.1.0/server/services/notification_service.py +939 -0
- multi_agent_platform-0.1.0/server/services/notification_stream.py +138 -0
- multi_agent_platform-0.1.0/server/services/permissions.py +147 -0
- multi_agent_platform-0.1.0/server/services/persona_activity_service.py +108 -0
- multi_agent_platform-0.1.0/server/services/phase_owner_resolver.py +95 -0
- multi_agent_platform-0.1.0/server/services/phase_service.py +381 -0
- multi_agent_platform-0.1.0/server/services/plan_marker_service.py +235 -0
- multi_agent_platform-0.1.0/server/services/plan_service.py +186 -0
- multi_agent_platform-0.1.0/server/services/platform_feedback_service.py +114 -0
- multi_agent_platform-0.1.0/server/services/project_service.py +534 -0
- multi_agent_platform-0.1.0/server/services/project_status_service.py +132 -0
- multi_agent_platform-0.1.0/server/services/review_service.py +707 -0
- multi_agent_platform-0.1.0/server/services/secret_encryption.py +97 -0
- multi_agent_platform-0.1.0/server/services/similarity_service.py +119 -0
- multi_agent_platform-0.1.0/server/services/sse_event_schemas.py +17 -0
- multi_agent_platform-0.1.0/server/services/status_service.py +68 -0
- multi_agent_platform-0.1.0/server/services/template_service.py +134 -0
- multi_agent_platform-0.1.0/server/services/text_utils.py +19 -0
- multi_agent_platform-0.1.0/server/services/thread_activity.py +180 -0
- multi_agent_platform-0.1.0/server/services/todo_persona_filter.py +73 -0
- multi_agent_platform-0.1.0/server/services/todo_service.py +604 -0
- multi_agent_platform-0.1.0/server/services/topic_ack_service.py +312 -0
- multi_agent_platform-0.1.0/server/services/topic_action_item_ops.py +538 -0
- multi_agent_platform-0.1.0/server/services/topic_comment_kind.py +14 -0
- multi_agent_platform-0.1.0/server/services/topic_comment_service.py +237 -0
- multi_agent_platform-0.1.0/server/services/topic_helpers.py +32 -0
- multi_agent_platform-0.1.0/server/services/topic_lifecycle_service.py +478 -0
- multi_agent_platform-0.1.0/server/services/topic_progress_service.py +40 -0
- multi_agent_platform-0.1.0/server/services/topic_resolve_service.py +234 -0
- multi_agent_platform-0.1.0/server/services/topic_service.py +102 -0
- multi_agent_platform-0.1.0/server/services/topic_work_item_service.py +570 -0
- multi_agent_platform-0.1.0/server/services/webhook_service.py +273 -0
- multi_agent_platform-0.1.0/setup.cfg +4 -0
- multi_agent_platform-0.1.0/tests/test_18a64691_linkage.py +182 -0
- multi_agent_platform-0.1.0/tests/test_a2_action_item_cascade.py +653 -0
- multi_agent_platform-0.1.0/tests/test_accept_result_verdict.py +796 -0
- multi_agent_platform-0.1.0/tests/test_action_items.py +484 -0
- multi_agent_platform-0.1.0/tests/test_agent_client.py +718 -0
- multi_agent_platform-0.1.0/tests/test_agent_work.py +76 -0
- multi_agent_platform-0.1.0/tests/test_agents_list.py +90 -0
- multi_agent_platform-0.1.0/tests/test_arch_map_sdk_evidence.py +100 -0
- multi_agent_platform-0.1.0/tests/test_archive_lint_service.py +362 -0
- multi_agent_platform-0.1.0/tests/test_audit_admin_cli.py +230 -0
- multi_agent_platform-0.1.0/tests/test_audit_admin_filter.py +275 -0
- multi_agent_platform-0.1.0/tests/test_auth.py +82 -0
- multi_agent_platform-0.1.0/tests/test_auth_experiment_access.py +162 -0
- multi_agent_platform-0.1.0/tests/test_authz_cross_persona_capability.py +238 -0
- multi_agent_platform-0.1.0/tests/test_authz_pr3_creator_gating_extended.py +177 -0
- multi_agent_platform-0.1.0/tests/test_b_acceptance.py +634 -0
- multi_agent_platform-0.1.0/tests/test_b_action_item_stale.py +218 -0
- multi_agent_platform-0.1.0/tests/test_b_action_item_wake_endpoints.py +253 -0
- multi_agent_platform-0.1.0/tests/test_b_action_item_wake_stale.py +399 -0
- multi_agent_platform-0.1.0/tests/test_b_action_item_wake_stale_notifications.py +429 -0
- multi_agent_platform-0.1.0/tests/test_b_waker_should_wake_action_item.py +248 -0
- multi_agent_platform-0.1.0/tests/test_bridge_state.py +58 -0
- multi_agent_platform-0.1.0/tests/test_cleanup_audit_log_no_commit.py +55 -0
- multi_agent_platform-0.1.0/tests/test_cleanup_exp_b_paging_seven_endpoints.py +200 -0
- multi_agent_platform-0.1.0/tests/test_cleanup_exp_b_paging_unified_limit.py +132 -0
- multi_agent_platform-0.1.0/tests/test_clear_action_template.py +207 -0
- multi_agent_platform-0.1.0/tests/test_cli.py +989 -0
- multi_agent_platform-0.1.0/tests/test_cli_error_envelope.py +271 -0
- multi_agent_platform-0.1.0/tests/test_cli_evidence_contract.py +340 -0
- multi_agent_platform-0.1.0/tests/test_cli_format_priority.py +300 -0
- multi_agent_platform-0.1.0/tests/test_cli_n2_hard_cutover.py +431 -0
- multi_agent_platform-0.1.0/tests/test_cli_schema_discovery.py +156 -0
- multi_agent_platform-0.1.0/tests/test_cli_status.py +50 -0
- multi_agent_platform-0.1.0/tests/test_cli_template_contract.py +364 -0
- multi_agent_platform-0.1.0/tests/test_cli_work_deprecation.py +127 -0
- multi_agent_platform-0.1.0/tests/test_cross_persona_call_audit.py +228 -0
- multi_agent_platform-0.1.0/tests/test_deadlock_retry.py +182 -0
- multi_agent_platform-0.1.0/tests/test_docs_inventory.py +131 -0
- multi_agent_platform-0.1.0/tests/test_eng_fast_gate_whitelist_complete.py +85 -0
- multi_agent_platform-0.1.0/tests/test_eng_mypy_strict_agent_work_service.py +198 -0
- multi_agent_platform-0.1.0/tests/test_eng_mypy_strict_agents.py +95 -0
- multi_agent_platform-0.1.0/tests/test_eng_mypy_strict_experiment_capabilities_service.py +111 -0
- multi_agent_platform-0.1.0/tests/test_eng_mypy_strict_experiments_projects.py +151 -0
- multi_agent_platform-0.1.0/tests/test_eng_mypy_strict_mention_service.py +125 -0
- multi_agent_platform-0.1.0/tests/test_eng_mypy_strict_notification_service.py +156 -0
- multi_agent_platform-0.1.0/tests/test_eng_mypy_strict_phase_service.py +115 -0
- multi_agent_platform-0.1.0/tests/test_eng_mypy_strict_project_service.py +117 -0
- multi_agent_platform-0.1.0/tests/test_eng_mypy_strict_todo_service.py +161 -0
- multi_agent_platform-0.1.0/tests/test_eng_mypy_strict_topic_comment_service.py +136 -0
- multi_agent_platform-0.1.0/tests/test_eng_mypy_strict_topic_service.py +177 -0
- multi_agent_platform-0.1.0/tests/test_eng_mypy_strict_topic_work_item_service.py +151 -0
- multi_agent_platform-0.1.0/tests/test_eng_mypy_strict_topics.py +111 -0
- multi_agent_platform-0.1.0/tests/test_eng_typing_extensions_clean.py +103 -0
- multi_agent_platform-0.1.0/tests/test_eng_uv_lock.py +65 -0
- multi_agent_platform-0.1.0/tests/test_eng_version_single_source.py +116 -0
- multi_agent_platform-0.1.0/tests/test_error_codes_cli.py +309 -0
- multi_agent_platform-0.1.0/tests/test_error_envelope_and_file_options.py +321 -0
- multi_agent_platform-0.1.0/tests/test_escalation_resolver.py +339 -0
- multi_agent_platform-0.1.0/tests/test_escalation_target_endpoint.py +238 -0
- multi_agent_platform-0.1.0/tests/test_evidence_service.py +138 -0
- multi_agent_platform-0.1.0/tests/test_experiment_capabilities.py +223 -0
- multi_agent_platform-0.1.0/tests/test_experiment_capabilities_whitelist.py +335 -0
- multi_agent_platform-0.1.0/tests/test_experiment_lock_fuzz.py +119 -0
- multi_agent_platform-0.1.0/tests/test_experiment_lock_notifications.py +245 -0
- multi_agent_platform-0.1.0/tests/test_experiment_lock_unit.py +319 -0
- multi_agent_platform-0.1.0/tests/test_experiments.py +275 -0
- multi_agent_platform-0.1.0/tests/test_feedback.py +120 -0
- multi_agent_platform-0.1.0/tests/test_feedback_admin_cli.py +170 -0
- multi_agent_platform-0.1.0/tests/test_field_rename_alias.py +154 -0
- multi_agent_platform-0.1.0/tests/test_git_checkpoint.py +48 -0
- multi_agent_platform-0.1.0/tests/test_inbound_event_rejection.py +296 -0
- multi_agent_platform-0.1.0/tests/test_log_create_response.py +352 -0
- multi_agent_platform-0.1.0/tests/test_m2_flow.py +183 -0
- multi_agent_platform-0.1.0/tests/test_m3_flow.py +177 -0
- multi_agent_platform-0.1.0/tests/test_map_sdk_skeleton.py +74 -0
- multi_agent_platform-0.1.0/tests/test_mcp.py +241 -0
- multi_agent_platform-0.1.0/tests/test_mcp_http.py +53 -0
- multi_agent_platform-0.1.0/tests/test_mention_code_skip_unit.py +32 -0
- multi_agent_platform-0.1.0/tests/test_mentions.py +882 -0
- multi_agent_platform-0.1.0/tests/test_notification_bulk_filter.py +198 -0
- multi_agent_platform-0.1.0/tests/test_notification_service_v09.py +609 -0
- multi_agent_platform-0.1.0/tests/test_notification_stream.py +157 -0
- multi_agent_platform-0.1.0/tests/test_notification_upsert_pr2.py +171 -0
- multi_agent_platform-0.1.0/tests/test_notifications.py +135 -0
- multi_agent_platform-0.1.0/tests/test_participant_worker_claude_agent.py +237 -0
- multi_agent_platform-0.1.0/tests/test_perf_count_sql_fixture.py +153 -0
- multi_agent_platform-0.1.0/tests/test_perf_experiment_bundle_verdict_n_plus_one.py +224 -0
- multi_agent_platform-0.1.0/tests/test_perf_experiment_summary_bulk.py +308 -0
- multi_agent_platform-0.1.0/tests/test_perf_topic_comments_bulk.py +142 -0
- multi_agent_platform-0.1.0/tests/test_perf_work_hotpath_bulk.py +272 -0
- multi_agent_platform-0.1.0/tests/test_persona_activity.py +382 -0
- multi_agent_platform-0.1.0/tests/test_persona_compare_partition.py +281 -0
- multi_agent_platform-0.1.0/tests/test_phase_owner_orm_validation.py +141 -0
- multi_agent_platform-0.1.0/tests/test_phase_owner_resolver.py +252 -0
- multi_agent_platform-0.1.0/tests/test_plan_evidence_parser.py +168 -0
- multi_agent_platform-0.1.0/tests/test_plan_marker_service.py +202 -0
- multi_agent_platform-0.1.0/tests/test_plan_revise_auto_archive.py +420 -0
- multi_agent_platform-0.1.0/tests/test_plan_validate_cli.py +218 -0
- multi_agent_platform-0.1.0/tests/test_project_config.py +84 -0
- multi_agent_platform-0.1.0/tests/test_project_status.py +88 -0
- multi_agent_platform-0.1.0/tests/test_projects.py +117 -0
- multi_agent_platform-0.1.0/tests/test_rebutted_plan_continues_e2e.py +211 -0
- multi_agent_platform-0.1.0/tests/test_register_agent_body_model.py +128 -0
- multi_agent_platform-0.1.0/tests/test_reject_result_misuse.py +390 -0
- multi_agent_platform-0.1.0/tests/test_resolve_item_sdk_contract.py +142 -0
- multi_agent_platform-0.1.0/tests/test_resolve_item_status.py +187 -0
- multi_agent_platform-0.1.0/tests/test_result_template_parser.py +155 -0
- multi_agent_platform-0.1.0/tests/test_review_already_archived.py +380 -0
- multi_agent_platform-0.1.0/tests/test_review_archived_metadata.py +235 -0
- multi_agent_platform-0.1.0/tests/test_review_eligibility.py +110 -0
- multi_agent_platform-0.1.0/tests/test_review_item_mutation_audit.py +361 -0
- multi_agent_platform-0.1.0/tests/test_review_item_state_closed_migration.py +256 -0
- multi_agent_platform-0.1.0/tests/test_review_list_archived_filter.py +303 -0
- multi_agent_platform-0.1.0/tests/test_review_substitute_and_withdraw.py +203 -0
- multi_agent_platform-0.1.0/tests/test_review_verdict_alias.py +125 -0
- multi_agent_platform-0.1.0/tests/test_reviewer_worker_claude_agent.py +234 -0
- multi_agent_platform-0.1.0/tests/test_runtime_chat.py +175 -0
- multi_agent_platform-0.1.0/tests/test_same_second_host_reply.py +56 -0
- multi_agent_platform-0.1.0/tests/test_same_second_trio.py +119 -0
- multi_agent_platform-0.1.0/tests/test_sdk.py +329 -0
- multi_agent_platform-0.1.0/tests/test_sdk_exceptions.py +70 -0
- multi_agent_platform-0.1.0/tests/test_server_lock_service.py +155 -0
- multi_agent_platform-0.1.0/tests/test_session_wake_log.py +159 -0
- multi_agent_platform-0.1.0/tests/test_similarity_api_contract.py +218 -0
- multi_agent_platform-0.1.0/tests/test_similarity_service.py +142 -0
- multi_agent_platform-0.1.0/tests/test_simple_waker.py +587 -0
- multi_agent_platform-0.1.0/tests/test_simple_waker_pr3_dedup.py +160 -0
- multi_agent_platform-0.1.0/tests/test_simple_waker_reviewer_filter.py +21 -0
- multi_agent_platform-0.1.0/tests/test_sse_acceptance.py +55 -0
- multi_agent_platform-0.1.0/tests/test_sse_isolation.py +73 -0
- multi_agent_platform-0.1.0/tests/test_sse_schema_overlap.py +56 -0
- multi_agent_platform-0.1.0/tests/test_state_machine.py +48 -0
- multi_agent_platform-0.1.0/tests/test_state_machine_recovery_hint.py +153 -0
- multi_agent_platform-0.1.0/tests/test_systemd_install.py +102 -0
- multi_agent_platform-0.1.0/tests/test_template_api_contract.py +258 -0
- multi_agent_platform-0.1.0/tests/test_template_service.py +200 -0
- multi_agent_platform-0.1.0/tests/test_todos.py +832 -0
- multi_agent_platform-0.1.0/tests/test_topic_notifications.py +101 -0
- multi_agent_platform-0.1.0/tests/test_topic_progress.py +97 -0
- multi_agent_platform-0.1.0/tests/test_topic_read_cursor.py +102 -0
- multi_agent_platform-0.1.0/tests/test_topic_work_items.py +353 -0
- multi_agent_platform-0.1.0/tests/test_topics.py +917 -0
- multi_agent_platform-0.1.0/tests/test_waker_phase1_acceptance.py +498 -0
- multi_agent_platform-0.1.0/tests/test_webhook_secret_encryption.py +227 -0
- multi_agent_platform-0.1.0/tests/test_webhooks_audit.py +235 -0
- multi_agent_platform-0.1.0/tests/test_work_summary.py +313 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 multi-agent-platform contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: multi-agent-platform
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Multi-Agent experiment collaboration platform
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
Project-URL: Homepage, https://github.com/quantaeye/multi-agent-platform
|
|
7
|
+
Project-URL: Documentation, https://github.com/quantaeye/multi-agent-platform/tree/main/docs
|
|
8
|
+
Project-URL: Repository, https://github.com/quantaeye/multi-agent-platform
|
|
9
|
+
Project-URL: Issues, https://github.com/quantaeye/multi-agent-platform/issues
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Requires-Python: >=3.11
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: fastapi<0.116,>=0.115.0
|
|
20
|
+
Requires-Dist: uvicorn[standard]<0.41,>=0.32.0
|
|
21
|
+
Requires-Dist: sqlalchemy<2.1,>=2.0.36
|
|
22
|
+
Requires-Dist: alembic<2.0,>=1.14.0
|
|
23
|
+
Requires-Dist: pydantic<2.12,>=2.10.0
|
|
24
|
+
Requires-Dist: pydantic-settings<2.9,>=2.6.0
|
|
25
|
+
Requires-Dist: bcrypt<6.0,>=4.2.0
|
|
26
|
+
Requires-Dist: python-multipart<0.1,>=0.0.17
|
|
27
|
+
Requires-Dist: typer<0.17,>=0.15.0
|
|
28
|
+
Requires-Dist: httpx<0.29,>=0.28.0
|
|
29
|
+
Requires-Dist: pyyaml<7.0,>=6.0
|
|
30
|
+
Requires-Dist: cryptography<50.0,>=44.0.0
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: pytest<9.0,>=8.3.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest-asyncio<1.0,>=0.24.0; extra == "dev"
|
|
34
|
+
Requires-Dist: pytest-cov<7.0,>=5.0.0; extra == "dev"
|
|
35
|
+
Requires-Dist: httpx<0.29,>=0.28.0; extra == "dev"
|
|
36
|
+
Requires-Dist: mcp<2.0,>=1.26.0; extra == "dev"
|
|
37
|
+
Requires-Dist: ruff<1.0,>=0.8.0; extra == "dev"
|
|
38
|
+
Requires-Dist: pydantic-to-typescript<3.0,>=2.0.0; extra == "dev"
|
|
39
|
+
Provides-Extra: mcp
|
|
40
|
+
Requires-Dist: mcp<2.0,>=1.26.0; extra == "mcp"
|
|
41
|
+
Provides-Extra: codex-runtime
|
|
42
|
+
Provides-Extra: claude-runtime
|
|
43
|
+
Requires-Dist: claude-agent-sdk<1.0,>=0.2; extra == "claude-runtime"
|
|
44
|
+
Dynamic: license-file
|
|
45
|
+
|
|
46
|
+
# Multi-Agent Platform (MAP)
|
|
47
|
+
|
|
48
|
+
多 Agent 实验协作平台:以话题为中心,管理实验计划、评审讨论、执行日志与项目状态。
|
|
49
|
+
|
|
50
|
+
**新用户?** 一键启动:`./scripts/quickstart.sh`,或阅读 [Quick Start 指南](docs/QUICKSTART.md)。
|
|
51
|
+
|
|
52
|
+
## 文档
|
|
53
|
+
|
|
54
|
+
- [Quick Start 指南(新用户必读)](docs/QUICKSTART.md)
|
|
55
|
+
- [产品需求文档(PRD)](docs/prd/archive/v0.1.md)
|
|
56
|
+
- [产品需求文档 v0.2(角色与项目边界)](docs/prd/archive/v0.2.md)
|
|
57
|
+
- [产品需求文档 v0.3(话题独立、UI 写闭环、待办与通知)](docs/prd/archive/v0.3.md)
|
|
58
|
+
- [产品需求文档 v0.4(站内收件箱、@提及、计划 diff、话题置顶)](docs/prd/archive/v0.4.md)
|
|
59
|
+
- [产品需求文档 v0.5(主持待办 pending_topic_replies、topic-host Skill)](docs/prd/archive/v0.5.md)
|
|
60
|
+
- [产品需求文档 v0.6(列表归档、独立列表页、通知 SSE)](docs/prd/archive/v0.6.md)
|
|
61
|
+
- [产品需求文档 v0.9 草案(waker Phase 2 通知降噪)](docs/prd/v0.9.md)
|
|
62
|
+
- [Webhook 话题主持接线指南](docs/WEBHOOK-TOPIC-HOST.md)
|
|
63
|
+
- [Agent Runtime 集成(simple-waker,默认)](docs/MAP-SIMPLE-WAKER.md)
|
|
64
|
+
- [架构设计](docs/ARCHITECTURE.md)
|
|
65
|
+
- [Python SDK 指南](docs/SDK.md)
|
|
66
|
+
- [MCP Server 指南(stdio)](docs/MCP.md)
|
|
67
|
+
|
|
68
|
+
## 状态
|
|
69
|
+
|
|
70
|
+
**M1 已完成**:数据模型、Alembic 迁移、Projects/Experiments CRUD REST API。
|
|
71
|
+
**M2 已完成**:Plans 修订、Reviews、Comments、实验阶段与不合理项状态机。
|
|
72
|
+
**M3 已完成**:实验日志、Start/Complete、全局 Status API、CLI(`map` 命令)。
|
|
73
|
+
**M4 已完成**:React + Vite Web UI(看板、项目、实验话题页)。
|
|
74
|
+
**M5 已完成**:Python SDK(`map_client`)、SDK 文档、CLI 基于 SDK 重构、Docker 部署。
|
|
75
|
+
**M6 已完成**:MCP stdio + HTTP 服务(`map-mcp`),供 IDE Agent 调用。
|
|
76
|
+
**M7 已完成**:项目角色边界(`project_key`、Agent 项目绑定、权限门控、Status MD v1)。
|
|
77
|
+
**M8 已完成**:项目 Current Status MD 版本化(修订 API、历史查询、CLI/MCP)。
|
|
78
|
+
|
|
79
|
+
**v0.3 已完成(M11–M14)**:
|
|
80
|
+
|
|
81
|
+
- **M11**:话题(Topic)独立实体 + 评论树 + 实验↔话题可选关联 + Alembic 迁移 + CLI/SDK/MCP 适配。
|
|
82
|
+
- **M12**:Web UI 写操作闭环——发布话题/实验、修订计划、提交评审、追加日志、撤回/取消/编辑、通用讨论;新增话题详情页。
|
|
83
|
+
- **M13**:Agent 待办视图(`GET /agents/me/todos`)+ 实验列表筛选/分页/搜索(`q`/`creator`/`page` + `X-Total-Count` header)。
|
|
84
|
+
- **M14**:Webhook 出站通知(HMAC 签名 + 投递记录 + Admin CRUD)+ 审计日志(关键写操作打点 + 对象/全局查询)。
|
|
85
|
+
|
|
86
|
+
详见 [PRD v0.3](docs/prd/archive/v0.3.md)。
|
|
87
|
+
|
|
88
|
+
**v0.4 已完成(M15–M18)**:
|
|
89
|
+
|
|
90
|
+
- **M15**:站内通知收件箱(`notifications` 表 + 统一事件扇出 + API/Web/CLI/SDK/MCP)。
|
|
91
|
+
- **M16**:评论 `@提及` → 待办 `mentions` 分区 + 定向通知。
|
|
92
|
+
- **M17**:实验页计划版本 diff 只读视图(`PlanDiffView`)。
|
|
93
|
+
- **M18**:话题置顶(`topics.pinned` + 列表优先排序)。
|
|
94
|
+
|
|
95
|
+
详见 [PRD v0.4](docs/prd/archive/v0.4.md)。
|
|
96
|
+
|
|
97
|
+
**v0.5 已完成(M19–M21)**:
|
|
98
|
+
|
|
99
|
+
- **M19**:`GET /agents/me/todos` 新增 `pending_topic_replies`(话题主持 thread 级待回复)。
|
|
100
|
+
- **M20**:topic-host Skill(`.cursor/skills/topic-host/SKILL.md`)。
|
|
101
|
+
- **M21**:Webhook 主持接线文档([WEBHOOK-TOPIC-HOST.md](docs/WEBHOOK-TOPIC-HOST.md))。
|
|
102
|
+
|
|
103
|
+
详见 [PRD v0.5](docs/prd/archive/v0.5.md)。
|
|
104
|
+
|
|
105
|
+
**v0.6 已完成(M22–M24)**:
|
|
106
|
+
|
|
107
|
+
- **M22**:话题/实验 `archived_at` 归档(默认列表排除、`include_archived`、活跃实验 per-topic 约束更新)。
|
|
108
|
+
- **M23**:Web 独立列表页(`/projects/:id/topics`、`/experiments`)+ `client.ts` vitest。
|
|
109
|
+
- **M24**:站内通知 **SSE**(`GET /agents/me/notifications/stream`)+ Web 实时 invalidate。
|
|
110
|
+
|
|
111
|
+
详见 [PRD v0.6](docs/prd/archive/v0.6.md)。项目叙事参考 [docs/status-md-v6.md](docs/status-md-v6.md)。
|
|
112
|
+
|
|
113
|
+
**v0.8 MVP 已完成**:
|
|
114
|
+
|
|
115
|
+
- 话题结论(Decision)与行动项(Action Items):`POST /topics/{id}/resolve`、项目级 `decisions` / `action-items` 查询、`todos.action_items`。
|
|
116
|
+
- CLI:`map topic resolve --id <topic-id> --file decision.md|decision.yaml`、`map project decisions`、`map action list --mine`。
|
|
117
|
+
- Web:话题详情页展示/修订结论,项目页展示最近结论,待办页展示分配给当前 Agent 的行动项。
|
|
118
|
+
|
|
119
|
+
**Agent 身份(本仓库)**:统一使用 **`.map/` persona + `map` CLI**(见 [AGENTS.md](AGENTS.md));Cursor MCP 接入计划停用。
|
|
120
|
+
|
|
121
|
+
### 连接已有 MAP 服务(本仓库协作)
|
|
122
|
+
|
|
123
|
+
MAP API 运行后,在本仓库根目录执行一次 bootstrap(生成 `.map/config.yaml` 与 persona token,详见 [AGENTS.md](AGENTS.md)):
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
export MAP_ADMIN_TOKEN=<admin-token> # 或 ~/.map/admin.yaml
|
|
127
|
+
map bootstrap \
|
|
128
|
+
--key multi-agent-platform \
|
|
129
|
+
--name "Multi Agents Platform" \
|
|
130
|
+
--api-url http://localhost:8001
|
|
131
|
+
|
|
132
|
+
map --persona host persona whoami
|
|
133
|
+
map --persona host todos
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
与 `docker compose up` 并列:先起服务,再 bootstrap,再用 `--persona` 协作。
|
|
137
|
+
|
|
138
|
+
## 快速开始
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
# 安装依赖(含开发工具)
|
|
142
|
+
pip install -e ".[dev]"
|
|
143
|
+
|
|
144
|
+
# 运行数据库迁移
|
|
145
|
+
alembic upgrade head
|
|
146
|
+
|
|
147
|
+
# 启动 API 服务
|
|
148
|
+
map-server
|
|
149
|
+
# 或: uvicorn server.main:app --reload
|
|
150
|
+
|
|
151
|
+
# 注册首个 Admin(仅当系统中尚无 Agent 时可匿名调用)
|
|
152
|
+
curl -X POST "http://localhost:8000/api/v1/agents?name=ops-admin&role=admin"
|
|
153
|
+
|
|
154
|
+
# 后续 Agent 须由 Admin 注册
|
|
155
|
+
curl -H "Authorization: Bearer <admin-token>" \
|
|
156
|
+
-X POST "http://localhost:8000/api/v1/agents?name=agent-alpha&role=agent&project_key=<project-key>"
|
|
157
|
+
|
|
158
|
+
# 创建项目
|
|
159
|
+
curl -H "Authorization: Bearer <token>" \
|
|
160
|
+
-H "Content-Type: application/json" \
|
|
161
|
+
-d '{"name":"demo","workspace_path":"/tmp/demo"}' \
|
|
162
|
+
http://localhost:8000/api/v1/projects
|
|
163
|
+
|
|
164
|
+
# 运行测试
|
|
165
|
+
pytest
|
|
166
|
+
|
|
167
|
+
# CLI 用法(需设置 MAP_TOKEN 或 ~/.map/config.yaml)
|
|
168
|
+
export MAP_TOKEN=<your-token>
|
|
169
|
+
map project list
|
|
170
|
+
map status
|
|
171
|
+
map experiment start --id <exp-id>
|
|
172
|
+
map experiment status --id <exp-id> # 含 acceptance_status
|
|
173
|
+
map experiment pre-complete --id <exp-id> --metadata evidence.yaml
|
|
174
|
+
map experiment complete --id <exp-id> --summary "提交结果" --file log.md --metadata evidence.yaml # running -> result_review
|
|
175
|
+
map experiment accept-result --id <exp-id> --summary "通过" --file review.md
|
|
176
|
+
map experiment reject-result --id <exp-id> --summary "驳回" --file review.md
|
|
177
|
+
map topic resolve --id <topic-id> --file decision.md
|
|
178
|
+
map topic archive --id <topic-id> # v0.7 P3:归档(薄包装 PATCH)
|
|
179
|
+
map topic archive --id <topic-id> --undo # 反归档(--unarchive 同义)
|
|
180
|
+
map experiment archive --id <exp-id> # 归档实验
|
|
181
|
+
map topic comment --id <topic-id> --file comment.md
|
|
182
|
+
map topic mark-seen --id <topic-id> # 清 contextual unread,不清 reply/ack/mention
|
|
183
|
+
map project decisions
|
|
184
|
+
map action list --mine
|
|
185
|
+
map notification list --unread-only
|
|
186
|
+
map notification read --id <notification-id>
|
|
187
|
+
map notification read-all
|
|
188
|
+
map --persona participant mention list
|
|
189
|
+
map --persona participant mention dismiss --id <mention-id>
|
|
190
|
+
map --persona participant mention dismiss-all
|
|
191
|
+
|
|
192
|
+
# Web UI(React + Vite)
|
|
193
|
+
cd web && npm install && npm run dev # http://localhost:5173
|
|
194
|
+
# 开发模式通过 Vite 代理访问 API;先在设置页填入 API Token
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
实验计划可在验收列表项行首标记类型,例如
|
|
198
|
+
`- [acceptance_type: unit_test] pytest 覆盖解析`。允许值为
|
|
199
|
+
`migration`、`smoke`、`unit_test`、`integration`、`manual`;未知类型会在
|
|
200
|
+
`experiment status` 解析时报错,不会降级为 manual。详情响应中的
|
|
201
|
+
`acceptance_status` 会给 host / reviewer / participant 展示每条验收的稳定
|
|
202
|
+
`id`、类型、证据状态与评审结论;`todos.experiment_review_informational`
|
|
203
|
+
只是跨 persona 可见性提示,不是待办 obligation。
|
|
204
|
+
|
|
205
|
+
## 多项目协作(Skill + `.map/`,推荐)
|
|
206
|
+
|
|
207
|
+
不依赖 Cursor MCP。每个代码仓库:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
export MAP_ADMIN_TOKEN=<admin-token> # 或 ~/.map/admin.yaml
|
|
211
|
+
map bootstrap --key my-app --name "My App" --api-url http://localhost:8001
|
|
212
|
+
map --persona host status # 查看 open_topics
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**实验须由 host persona 创建**,否则生命周期操作可能 403。详见 [AGENTS.md](./AGENTS.md) 与 [.cursor/skills/map-project-collab/SKILL.md](./.cursor/skills/map-project-collab/SKILL.md)。
|
|
216
|
+
|
|
217
|
+
## Agent Runtime Waker(推荐)
|
|
218
|
+
|
|
219
|
+
**默认路径为 `map-simple-waker`**:轮询 `topic-progress`、`map todos` 与 wakeable 通知,统一 remind 后 resume 长会话;Agent 自行读 Skill 并用 `map` CLI 写回 MAP(不在 waker 内嵌业务逻辑)。
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# 三 persona 各起一个 waker(默认 simple-waker,active interval=30s)
|
|
223
|
+
./scripts/start-all-wakers.sh
|
|
224
|
+
|
|
225
|
+
# 一键推进话题:持续运行三 persona waker,直到 open topic 为 0 后自动退出
|
|
226
|
+
./scripts/start-all-wakers.sh --drain-topics
|
|
227
|
+
|
|
228
|
+
# 单 persona
|
|
229
|
+
./scripts/start-simple-waker.sh --persona host
|
|
230
|
+
./scripts/start-simple-waker.sh --persona participant
|
|
231
|
+
./scripts/start-simple-waker.sh --persona reviewer
|
|
232
|
+
|
|
233
|
+
# 干跑一轮
|
|
234
|
+
./scripts/start-simple-waker.sh --persona host --once --dry-run
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
状态文件:`.map/simple-waker-state-<persona>.json`(session + remind 时间戳,勿提交 Git)。详见 [docs/MAP-SIMPLE-WAKER.md](docs/MAP-SIMPLE-WAKER.md)。
|
|
238
|
+
|
|
239
|
+
`--drain-topics` 只负责启动/监控:脚本每轮检查 `map topic list --status open`,所有话题 resolved/closed 后停止 waker;具体评论、Round Summary、resolve/close 仍由被唤醒的 Agent 按 Skill 通过 `map` CLI 完成。
|
|
240
|
+
|
|
241
|
+
Legacy bridge / 旧 console entry 分类见 [docs/LEGACY-ENTRY-MATRIX.md](docs/LEGACY-ENTRY-MATRIX.md);CI 校验:`./scripts/check-deprecated.sh`。
|
|
242
|
+
|
|
243
|
+
simple-waker 在每次 remind 后会写一条聚合 `inbound_event` 审计行(fingerprint=`simple-remind:{persona}:{ts}`),并在 remind 前推进 `action_item` 升级时间线(WAKE → `action mark-wake-sent`,STALE → `action mark-stale`)。
|
|
244
|
+
|
|
245
|
+
**@mention 收敛**:在话题/实验内发过评论后,对应 `mentions` 会自动从 todos 消失;只读不回时可 `map mention dismiss`。
|
|
246
|
+
|
|
247
|
+
## Host Worker(旧 bridge,维护模式)
|
|
248
|
+
|
|
249
|
+
`map-host-bridge` / `map-host-worker` 为早期轮询 bridge(进程内 `PersonaAgentClient`),已由 **waker** 取代。`main-bac` 分支保留 bridge 实现供对照;日常开发请在 `agent-runtime` 分支使用 waker。
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
# 旧路径(不推荐新接入)
|
|
253
|
+
map-host-bridge --persona host --interval 30
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## Docker(API + Web)
|
|
257
|
+
|
|
258
|
+
默认 `docker-compose.yml` 暴露 API `:8000`、Web `:3000`、MCP `:8080`。本仓包含 `docker-compose.override.yml`,用于本机端口冲突场景,会把 API 改为 `:8001`、MCP 改为 `:18081`;因此本仓 `.map/` bootstrap 示例使用 `http://localhost:8001`。
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
docker compose up --build
|
|
262
|
+
# 默认端口: API :8000 Web :3000 MCP :8080/mcp
|
|
263
|
+
# 使用本仓 override 时: API :8001 Web :3000 MCP :18081/mcp
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## Python SDK
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
python -c "from map_client import MAPClient; print(MAPClient.from_env().get_me())"
|
|
270
|
+
# 详见 docs/SDK.md
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## MCP(IDE Agent)
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
pip install -e ".[mcp]"
|
|
277
|
+
export MAP_TOKEN=<your-token>
|
|
278
|
+
|
|
279
|
+
# stdio — Cursor 本地子进程(默认)
|
|
280
|
+
map-mcp
|
|
281
|
+
|
|
282
|
+
# HTTP — Docker 或本机独立服务
|
|
283
|
+
map-mcp --transport streamable-http --host 0.0.0.0 --port 8080
|
|
284
|
+
# 详见 docs/MCP.md
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## 核心流程(简述)
|
|
288
|
+
|
|
289
|
+
1. Agent 创建实验话题并提交计划
|
|
290
|
+
2. 其他 Agent 评审:列出合理项 / 不合理项
|
|
291
|
+
3. 通过评论树讨论争议,修订计划或反驳,直至无 open 不合理项
|
|
292
|
+
4. 批准后执行实验并写入结果日志,进入结果待审批
|
|
293
|
+
5. reviewer/admin 审批结果;通过后完成,驳回则回到执行中返工
|
|
294
|
+
6. 看板展示项目与实验的 Current Status
|
|
295
|
+
|
|
296
|
+
## 后续
|
|
297
|
+
|
|
298
|
+
v0.3–v0.6 与 v0.7 P3(CLI archive)已落地;当前主线为 **agent-runtime**(simple-waker 默认 + PersonaAgentClient;legacy runtime-waker 启动路径已退役,模块保留为 re-export 兼容层)。待推进项见 [docs/status-md-v10.md](docs/status-md-v10.md) 与 [架构文档](docs/ARCHITECTURE.md)。
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# Multi-Agent Platform (MAP)
|
|
2
|
+
|
|
3
|
+
多 Agent 实验协作平台:以话题为中心,管理实验计划、评审讨论、执行日志与项目状态。
|
|
4
|
+
|
|
5
|
+
**新用户?** 一键启动:`./scripts/quickstart.sh`,或阅读 [Quick Start 指南](docs/QUICKSTART.md)。
|
|
6
|
+
|
|
7
|
+
## 文档
|
|
8
|
+
|
|
9
|
+
- [Quick Start 指南(新用户必读)](docs/QUICKSTART.md)
|
|
10
|
+
- [产品需求文档(PRD)](docs/prd/archive/v0.1.md)
|
|
11
|
+
- [产品需求文档 v0.2(角色与项目边界)](docs/prd/archive/v0.2.md)
|
|
12
|
+
- [产品需求文档 v0.3(话题独立、UI 写闭环、待办与通知)](docs/prd/archive/v0.3.md)
|
|
13
|
+
- [产品需求文档 v0.4(站内收件箱、@提及、计划 diff、话题置顶)](docs/prd/archive/v0.4.md)
|
|
14
|
+
- [产品需求文档 v0.5(主持待办 pending_topic_replies、topic-host Skill)](docs/prd/archive/v0.5.md)
|
|
15
|
+
- [产品需求文档 v0.6(列表归档、独立列表页、通知 SSE)](docs/prd/archive/v0.6.md)
|
|
16
|
+
- [产品需求文档 v0.9 草案(waker Phase 2 通知降噪)](docs/prd/v0.9.md)
|
|
17
|
+
- [Webhook 话题主持接线指南](docs/WEBHOOK-TOPIC-HOST.md)
|
|
18
|
+
- [Agent Runtime 集成(simple-waker,默认)](docs/MAP-SIMPLE-WAKER.md)
|
|
19
|
+
- [架构设计](docs/ARCHITECTURE.md)
|
|
20
|
+
- [Python SDK 指南](docs/SDK.md)
|
|
21
|
+
- [MCP Server 指南(stdio)](docs/MCP.md)
|
|
22
|
+
|
|
23
|
+
## 状态
|
|
24
|
+
|
|
25
|
+
**M1 已完成**:数据模型、Alembic 迁移、Projects/Experiments CRUD REST API。
|
|
26
|
+
**M2 已完成**:Plans 修订、Reviews、Comments、实验阶段与不合理项状态机。
|
|
27
|
+
**M3 已完成**:实验日志、Start/Complete、全局 Status API、CLI(`map` 命令)。
|
|
28
|
+
**M4 已完成**:React + Vite Web UI(看板、项目、实验话题页)。
|
|
29
|
+
**M5 已完成**:Python SDK(`map_client`)、SDK 文档、CLI 基于 SDK 重构、Docker 部署。
|
|
30
|
+
**M6 已完成**:MCP stdio + HTTP 服务(`map-mcp`),供 IDE Agent 调用。
|
|
31
|
+
**M7 已完成**:项目角色边界(`project_key`、Agent 项目绑定、权限门控、Status MD v1)。
|
|
32
|
+
**M8 已完成**:项目 Current Status MD 版本化(修订 API、历史查询、CLI/MCP)。
|
|
33
|
+
|
|
34
|
+
**v0.3 已完成(M11–M14)**:
|
|
35
|
+
|
|
36
|
+
- **M11**:话题(Topic)独立实体 + 评论树 + 实验↔话题可选关联 + Alembic 迁移 + CLI/SDK/MCP 适配。
|
|
37
|
+
- **M12**:Web UI 写操作闭环——发布话题/实验、修订计划、提交评审、追加日志、撤回/取消/编辑、通用讨论;新增话题详情页。
|
|
38
|
+
- **M13**:Agent 待办视图(`GET /agents/me/todos`)+ 实验列表筛选/分页/搜索(`q`/`creator`/`page` + `X-Total-Count` header)。
|
|
39
|
+
- **M14**:Webhook 出站通知(HMAC 签名 + 投递记录 + Admin CRUD)+ 审计日志(关键写操作打点 + 对象/全局查询)。
|
|
40
|
+
|
|
41
|
+
详见 [PRD v0.3](docs/prd/archive/v0.3.md)。
|
|
42
|
+
|
|
43
|
+
**v0.4 已完成(M15–M18)**:
|
|
44
|
+
|
|
45
|
+
- **M15**:站内通知收件箱(`notifications` 表 + 统一事件扇出 + API/Web/CLI/SDK/MCP)。
|
|
46
|
+
- **M16**:评论 `@提及` → 待办 `mentions` 分区 + 定向通知。
|
|
47
|
+
- **M17**:实验页计划版本 diff 只读视图(`PlanDiffView`)。
|
|
48
|
+
- **M18**:话题置顶(`topics.pinned` + 列表优先排序)。
|
|
49
|
+
|
|
50
|
+
详见 [PRD v0.4](docs/prd/archive/v0.4.md)。
|
|
51
|
+
|
|
52
|
+
**v0.5 已完成(M19–M21)**:
|
|
53
|
+
|
|
54
|
+
- **M19**:`GET /agents/me/todos` 新增 `pending_topic_replies`(话题主持 thread 级待回复)。
|
|
55
|
+
- **M20**:topic-host Skill(`.cursor/skills/topic-host/SKILL.md`)。
|
|
56
|
+
- **M21**:Webhook 主持接线文档([WEBHOOK-TOPIC-HOST.md](docs/WEBHOOK-TOPIC-HOST.md))。
|
|
57
|
+
|
|
58
|
+
详见 [PRD v0.5](docs/prd/archive/v0.5.md)。
|
|
59
|
+
|
|
60
|
+
**v0.6 已完成(M22–M24)**:
|
|
61
|
+
|
|
62
|
+
- **M22**:话题/实验 `archived_at` 归档(默认列表排除、`include_archived`、活跃实验 per-topic 约束更新)。
|
|
63
|
+
- **M23**:Web 独立列表页(`/projects/:id/topics`、`/experiments`)+ `client.ts` vitest。
|
|
64
|
+
- **M24**:站内通知 **SSE**(`GET /agents/me/notifications/stream`)+ Web 实时 invalidate。
|
|
65
|
+
|
|
66
|
+
详见 [PRD v0.6](docs/prd/archive/v0.6.md)。项目叙事参考 [docs/status-md-v6.md](docs/status-md-v6.md)。
|
|
67
|
+
|
|
68
|
+
**v0.8 MVP 已完成**:
|
|
69
|
+
|
|
70
|
+
- 话题结论(Decision)与行动项(Action Items):`POST /topics/{id}/resolve`、项目级 `decisions` / `action-items` 查询、`todos.action_items`。
|
|
71
|
+
- CLI:`map topic resolve --id <topic-id> --file decision.md|decision.yaml`、`map project decisions`、`map action list --mine`。
|
|
72
|
+
- Web:话题详情页展示/修订结论,项目页展示最近结论,待办页展示分配给当前 Agent 的行动项。
|
|
73
|
+
|
|
74
|
+
**Agent 身份(本仓库)**:统一使用 **`.map/` persona + `map` CLI**(见 [AGENTS.md](AGENTS.md));Cursor MCP 接入计划停用。
|
|
75
|
+
|
|
76
|
+
### 连接已有 MAP 服务(本仓库协作)
|
|
77
|
+
|
|
78
|
+
MAP API 运行后,在本仓库根目录执行一次 bootstrap(生成 `.map/config.yaml` 与 persona token,详见 [AGENTS.md](AGENTS.md)):
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
export MAP_ADMIN_TOKEN=<admin-token> # 或 ~/.map/admin.yaml
|
|
82
|
+
map bootstrap \
|
|
83
|
+
--key multi-agent-platform \
|
|
84
|
+
--name "Multi Agents Platform" \
|
|
85
|
+
--api-url http://localhost:8001
|
|
86
|
+
|
|
87
|
+
map --persona host persona whoami
|
|
88
|
+
map --persona host todos
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
与 `docker compose up` 并列:先起服务,再 bootstrap,再用 `--persona` 协作。
|
|
92
|
+
|
|
93
|
+
## 快速开始
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# 安装依赖(含开发工具)
|
|
97
|
+
pip install -e ".[dev]"
|
|
98
|
+
|
|
99
|
+
# 运行数据库迁移
|
|
100
|
+
alembic upgrade head
|
|
101
|
+
|
|
102
|
+
# 启动 API 服务
|
|
103
|
+
map-server
|
|
104
|
+
# 或: uvicorn server.main:app --reload
|
|
105
|
+
|
|
106
|
+
# 注册首个 Admin(仅当系统中尚无 Agent 时可匿名调用)
|
|
107
|
+
curl -X POST "http://localhost:8000/api/v1/agents?name=ops-admin&role=admin"
|
|
108
|
+
|
|
109
|
+
# 后续 Agent 须由 Admin 注册
|
|
110
|
+
curl -H "Authorization: Bearer <admin-token>" \
|
|
111
|
+
-X POST "http://localhost:8000/api/v1/agents?name=agent-alpha&role=agent&project_key=<project-key>"
|
|
112
|
+
|
|
113
|
+
# 创建项目
|
|
114
|
+
curl -H "Authorization: Bearer <token>" \
|
|
115
|
+
-H "Content-Type: application/json" \
|
|
116
|
+
-d '{"name":"demo","workspace_path":"/tmp/demo"}' \
|
|
117
|
+
http://localhost:8000/api/v1/projects
|
|
118
|
+
|
|
119
|
+
# 运行测试
|
|
120
|
+
pytest
|
|
121
|
+
|
|
122
|
+
# CLI 用法(需设置 MAP_TOKEN 或 ~/.map/config.yaml)
|
|
123
|
+
export MAP_TOKEN=<your-token>
|
|
124
|
+
map project list
|
|
125
|
+
map status
|
|
126
|
+
map experiment start --id <exp-id>
|
|
127
|
+
map experiment status --id <exp-id> # 含 acceptance_status
|
|
128
|
+
map experiment pre-complete --id <exp-id> --metadata evidence.yaml
|
|
129
|
+
map experiment complete --id <exp-id> --summary "提交结果" --file log.md --metadata evidence.yaml # running -> result_review
|
|
130
|
+
map experiment accept-result --id <exp-id> --summary "通过" --file review.md
|
|
131
|
+
map experiment reject-result --id <exp-id> --summary "驳回" --file review.md
|
|
132
|
+
map topic resolve --id <topic-id> --file decision.md
|
|
133
|
+
map topic archive --id <topic-id> # v0.7 P3:归档(薄包装 PATCH)
|
|
134
|
+
map topic archive --id <topic-id> --undo # 反归档(--unarchive 同义)
|
|
135
|
+
map experiment archive --id <exp-id> # 归档实验
|
|
136
|
+
map topic comment --id <topic-id> --file comment.md
|
|
137
|
+
map topic mark-seen --id <topic-id> # 清 contextual unread,不清 reply/ack/mention
|
|
138
|
+
map project decisions
|
|
139
|
+
map action list --mine
|
|
140
|
+
map notification list --unread-only
|
|
141
|
+
map notification read --id <notification-id>
|
|
142
|
+
map notification read-all
|
|
143
|
+
map --persona participant mention list
|
|
144
|
+
map --persona participant mention dismiss --id <mention-id>
|
|
145
|
+
map --persona participant mention dismiss-all
|
|
146
|
+
|
|
147
|
+
# Web UI(React + Vite)
|
|
148
|
+
cd web && npm install && npm run dev # http://localhost:5173
|
|
149
|
+
# 开发模式通过 Vite 代理访问 API;先在设置页填入 API Token
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
实验计划可在验收列表项行首标记类型,例如
|
|
153
|
+
`- [acceptance_type: unit_test] pytest 覆盖解析`。允许值为
|
|
154
|
+
`migration`、`smoke`、`unit_test`、`integration`、`manual`;未知类型会在
|
|
155
|
+
`experiment status` 解析时报错,不会降级为 manual。详情响应中的
|
|
156
|
+
`acceptance_status` 会给 host / reviewer / participant 展示每条验收的稳定
|
|
157
|
+
`id`、类型、证据状态与评审结论;`todos.experiment_review_informational`
|
|
158
|
+
只是跨 persona 可见性提示,不是待办 obligation。
|
|
159
|
+
|
|
160
|
+
## 多项目协作(Skill + `.map/`,推荐)
|
|
161
|
+
|
|
162
|
+
不依赖 Cursor MCP。每个代码仓库:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
export MAP_ADMIN_TOKEN=<admin-token> # 或 ~/.map/admin.yaml
|
|
166
|
+
map bootstrap --key my-app --name "My App" --api-url http://localhost:8001
|
|
167
|
+
map --persona host status # 查看 open_topics
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**实验须由 host persona 创建**,否则生命周期操作可能 403。详见 [AGENTS.md](./AGENTS.md) 与 [.cursor/skills/map-project-collab/SKILL.md](./.cursor/skills/map-project-collab/SKILL.md)。
|
|
171
|
+
|
|
172
|
+
## Agent Runtime Waker(推荐)
|
|
173
|
+
|
|
174
|
+
**默认路径为 `map-simple-waker`**:轮询 `topic-progress`、`map todos` 与 wakeable 通知,统一 remind 后 resume 长会话;Agent 自行读 Skill 并用 `map` CLI 写回 MAP(不在 waker 内嵌业务逻辑)。
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# 三 persona 各起一个 waker(默认 simple-waker,active interval=30s)
|
|
178
|
+
./scripts/start-all-wakers.sh
|
|
179
|
+
|
|
180
|
+
# 一键推进话题:持续运行三 persona waker,直到 open topic 为 0 后自动退出
|
|
181
|
+
./scripts/start-all-wakers.sh --drain-topics
|
|
182
|
+
|
|
183
|
+
# 单 persona
|
|
184
|
+
./scripts/start-simple-waker.sh --persona host
|
|
185
|
+
./scripts/start-simple-waker.sh --persona participant
|
|
186
|
+
./scripts/start-simple-waker.sh --persona reviewer
|
|
187
|
+
|
|
188
|
+
# 干跑一轮
|
|
189
|
+
./scripts/start-simple-waker.sh --persona host --once --dry-run
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
状态文件:`.map/simple-waker-state-<persona>.json`(session + remind 时间戳,勿提交 Git)。详见 [docs/MAP-SIMPLE-WAKER.md](docs/MAP-SIMPLE-WAKER.md)。
|
|
193
|
+
|
|
194
|
+
`--drain-topics` 只负责启动/监控:脚本每轮检查 `map topic list --status open`,所有话题 resolved/closed 后停止 waker;具体评论、Round Summary、resolve/close 仍由被唤醒的 Agent 按 Skill 通过 `map` CLI 完成。
|
|
195
|
+
|
|
196
|
+
Legacy bridge / 旧 console entry 分类见 [docs/LEGACY-ENTRY-MATRIX.md](docs/LEGACY-ENTRY-MATRIX.md);CI 校验:`./scripts/check-deprecated.sh`。
|
|
197
|
+
|
|
198
|
+
simple-waker 在每次 remind 后会写一条聚合 `inbound_event` 审计行(fingerprint=`simple-remind:{persona}:{ts}`),并在 remind 前推进 `action_item` 升级时间线(WAKE → `action mark-wake-sent`,STALE → `action mark-stale`)。
|
|
199
|
+
|
|
200
|
+
**@mention 收敛**:在话题/实验内发过评论后,对应 `mentions` 会自动从 todos 消失;只读不回时可 `map mention dismiss`。
|
|
201
|
+
|
|
202
|
+
## Host Worker(旧 bridge,维护模式)
|
|
203
|
+
|
|
204
|
+
`map-host-bridge` / `map-host-worker` 为早期轮询 bridge(进程内 `PersonaAgentClient`),已由 **waker** 取代。`main-bac` 分支保留 bridge 实现供对照;日常开发请在 `agent-runtime` 分支使用 waker。
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
# 旧路径(不推荐新接入)
|
|
208
|
+
map-host-bridge --persona host --interval 30
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## Docker(API + Web)
|
|
212
|
+
|
|
213
|
+
默认 `docker-compose.yml` 暴露 API `:8000`、Web `:3000`、MCP `:8080`。本仓包含 `docker-compose.override.yml`,用于本机端口冲突场景,会把 API 改为 `:8001`、MCP 改为 `:18081`;因此本仓 `.map/` bootstrap 示例使用 `http://localhost:8001`。
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
docker compose up --build
|
|
217
|
+
# 默认端口: API :8000 Web :3000 MCP :8080/mcp
|
|
218
|
+
# 使用本仓 override 时: API :8001 Web :3000 MCP :18081/mcp
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## Python SDK
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
python -c "from map_client import MAPClient; print(MAPClient.from_env().get_me())"
|
|
225
|
+
# 详见 docs/SDK.md
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## MCP(IDE Agent)
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
pip install -e ".[mcp]"
|
|
232
|
+
export MAP_TOKEN=<your-token>
|
|
233
|
+
|
|
234
|
+
# stdio — Cursor 本地子进程(默认)
|
|
235
|
+
map-mcp
|
|
236
|
+
|
|
237
|
+
# HTTP — Docker 或本机独立服务
|
|
238
|
+
map-mcp --transport streamable-http --host 0.0.0.0 --port 8080
|
|
239
|
+
# 详见 docs/MCP.md
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## 核心流程(简述)
|
|
243
|
+
|
|
244
|
+
1. Agent 创建实验话题并提交计划
|
|
245
|
+
2. 其他 Agent 评审:列出合理项 / 不合理项
|
|
246
|
+
3. 通过评论树讨论争议,修订计划或反驳,直至无 open 不合理项
|
|
247
|
+
4. 批准后执行实验并写入结果日志,进入结果待审批
|
|
248
|
+
5. reviewer/admin 审批结果;通过后完成,驳回则回到执行中返工
|
|
249
|
+
6. 看板展示项目与实验的 Current Status
|
|
250
|
+
|
|
251
|
+
## 后续
|
|
252
|
+
|
|
253
|
+
v0.3–v0.6 与 v0.7 P3(CLI archive)已落地;当前主线为 **agent-runtime**(simple-waker 默认 + PersonaAgentClient;legacy runtime-waker 启动路径已退役,模块保留为 re-export 兼容层)。待推进项见 [docs/status-md-v10.md](docs/status-md-v10.md) 与 [架构文档](docs/ARCHITECTURE.md)。
|
|
File without changes
|