loopx 0.4.8__py3-none-any.whl
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.
- loopx/__init__.py +5 -0
- loopx/agent_onboarding.py +654 -0
- loopx/agent_registry.py +112 -0
- loopx/ark_managed_agent_host.py +59 -0
- loopx/authority.py +805 -0
- loopx/benchmark.py +2875 -0
- loopx/benchmark_adapters/__init__.py +1 -0
- loopx/benchmark_adapters/agentissue.py +2644 -0
- loopx/benchmark_adapters/agents_last_exam.py +3998 -0
- loopx/benchmark_adapters/edgebench.py +322 -0
- loopx/benchmark_adapters/skillsbench.py +5978 -0
- loopx/benchmark_adapters/skillsbench_acp_failure_policy.py +143 -0
- loopx/benchmark_adapters/skillsbench_acp_process.py +31 -0
- loopx/benchmark_adapters/skillsbench_acp_relay.py +4832 -0
- loopx/benchmark_adapters/skillsbench_batch.py +124 -0
- loopx/benchmark_adapters/skillsbench_bridge_guard.py +209 -0
- loopx/benchmark_adapters/skillsbench_bridge_summary.py +203 -0
- loopx/benchmark_adapters/skillsbench_codex_goal_recovery.py +271 -0
- loopx/benchmark_adapters/skillsbench_codex_goal_trace.py +81 -0
- loopx/benchmark_adapters/skillsbench_codex_runtime.py +339 -0
- loopx/benchmark_adapters/skillsbench_dockerfile_runtime.py +467 -0
- loopx/benchmark_adapters/skillsbench_failure_signals.py +652 -0
- loopx/benchmark_adapters/skillsbench_proxy_runtime.py +327 -0
- loopx/benchmark_adapters/skillsbench_remote_bridge.py +402 -0
- loopx/benchmark_adapters/skillsbench_result_discovery.py +143 -0
- loopx/benchmark_adapters/skillsbench_runner_profile.py +436 -0
- loopx/benchmark_adapters/skillsbench_runner_source.py +99 -0
- loopx/benchmark_adapters/skillsbench_setup_preflight.py +771 -0
- loopx/benchmark_adapters/skillsbench_signals.py +15 -0
- loopx/benchmark_adapters/skillsbench_task_source.py +141 -0
- loopx/benchmark_adapters/skillsbench_turn_route.py +723 -0
- loopx/benchmark_adapters/skillsbench_turn_runtime.py +1069 -0
- loopx/benchmark_adapters/skillsbench_typed_repair.py +689 -0
- loopx/benchmark_adapters/skillsbench_uv_cache.py +111 -0
- loopx/benchmark_adapters/skillsbench_verifier_bootstrap.py +227 -0
- loopx/benchmark_adapters/skillsbench_verifier_cache.py +138 -0
- loopx/benchmark_adapters/terminal_bench.py +10078 -0
- loopx/benchmark_case_analysis.py +1276 -0
- loopx/benchmark_case_state.py +1079 -0
- loopx/benchmark_core/__init__.py +239 -0
- loopx/benchmark_core/adapter.py +84 -0
- loopx/benchmark_core/artifacts.py +517 -0
- loopx/benchmark_core/attempts.py +199 -0
- loopx/benchmark_core/container_exec.py +216 -0
- loopx/benchmark_core/io.py +68 -0
- loopx/benchmark_core/lifecycle.py +211 -0
- loopx/benchmark_core/loop_protocol.py +689 -0
- loopx/benchmark_core/observable_handles.py +348 -0
- loopx/benchmark_core/parity.py +256 -0
- loopx/benchmark_core/remote_closeout.py +482 -0
- loopx/benchmark_core/rounds.py +215 -0
- loopx/benchmark_core/route_profile.py +509 -0
- loopx/benchmark_core/run_permissions.py +206 -0
- loopx/benchmark_core/split_control.py +925 -0
- loopx/benchmark_core/turn_fidelity.py +326 -0
- loopx/benchmark_ledger.py +3793 -0
- loopx/benchmark_ledger_countability.py +372 -0
- loopx/benchmark_ledger_current.py +724 -0
- loopx/benchmark_trajectory.py +405 -0
- loopx/benchmarks/__init__.py +1 -0
- loopx/benchmarks/qualification/__init__.py +1 -0
- loopx/benchmarks/qualification/release_outcome_baseline.py +360 -0
- loopx/benchmarks/read_models/__init__.py +1 -0
- loopx/benchmarks/read_models/benchmark_attempt_accounting.py +53 -0
- loopx/benchmarks/read_models/benchmark_comparison.py +414 -0
- loopx/benchmarks/read_models/benchmark_event_timeline.py +113 -0
- loopx/benchmarks/read_models/benchmark_experiment_report.py +475 -0
- loopx/benchmarks/read_models/benchmark_learning_ledger.py +137 -0
- loopx/benchmarks/read_models/benchmark_lifecycle_contracts.py +228 -0
- loopx/benchmarks/read_models/benchmark_projection.py +723 -0
- loopx/benchmarks/read_models/benchmark_result.py +146 -0
- loopx/benchmarks/read_models/benchmark_run_execution_contract.py +116 -0
- loopx/benchmarks/read_models/benchmark_run_failure.py +157 -0
- loopx/benchmarks/read_models/benchmark_run_metrics.py +213 -0
- loopx/benchmarks/read_models/benchmark_run_post_execution.py +635 -0
- loopx/benchmarks/read_models/benchmark_run_pre_execution.py +541 -0
- loopx/benchmarks/read_models/benchmark_status_compaction.py +1255 -0
- loopx/benchmarks/read_models/benchmark_status_runner.py +780 -0
- loopx/benchmarks/read_models/goal_start_control_score.py +857 -0
- loopx/benchmarks/read_models/skillsbench_post_run_debug.py +746 -0
- loopx/benchmarks/read_models/skillsbench_verifier_attribution.py +269 -0
- loopx/bootstrap.py +1116 -0
- loopx/bootstrap_command_pack.py +2167 -0
- loopx/boundary_authority.py +199 -0
- loopx/canary/__init__.py +1 -0
- loopx/canary/maintainability_ratchet.py +800 -0
- loopx/canary/planner.py +1984 -0
- loopx/canary/premerge.py +1130 -0
- loopx/canary/qualification_profiles.py +309 -0
- loopx/canary/quality_surface_catalog.py +838 -0
- loopx/canary/release_profiles.py +51 -0
- loopx/canary/runner.py +1107 -0
- loopx/canary/smoke_health.py +581 -0
- loopx/canary/smoke_profiles.py +212 -0
- loopx/capabilities/__init__.py +0 -0
- loopx/capabilities/agent_turn_recall/__init__.py +17 -0
- loopx/capabilities/agent_turn_recall/cli.py +369 -0
- loopx/capabilities/agent_turn_recall/core.py +296 -0
- loopx/capabilities/auto_research/__init__.py +16 -0
- loopx/capabilities/auto_research/bootstrap_contract.py +157 -0
- loopx/capabilities/auto_research/cli.py +1468 -0
- loopx/capabilities/auto_research/core.py +11 -0
- loopx/capabilities/auto_research/defaults.py +79 -0
- loopx/capabilities/auto_research/demo_e2e.py +1848 -0
- loopx/capabilities/auto_research/demo_supervisor.py +186 -0
- loopx/capabilities/auto_research/evidence_packet.py +767 -0
- loopx/capabilities/auto_research/human_view.py +794 -0
- loopx/capabilities/auto_research/kernel.py +191 -0
- loopx/capabilities/auto_research/knn_demo_workspace.py +322 -0
- loopx/capabilities/auto_research/live_evidence.py +248 -0
- loopx/capabilities/auto_research/preset.py +176 -0
- loopx/capabilities/auto_research/research_state.py +1085 -0
- loopx/capabilities/auto_research/role_profiles.py +394 -0
- loopx/capabilities/auto_research/rollout_append.py +97 -0
- loopx/capabilities/auto_research/terminal_result_contract.py +422 -0
- loopx/capabilities/auto_research/terminal_result_projection.py +171 -0
- loopx/capabilities/auto_research/terminal_result_query.py +233 -0
- loopx/capabilities/auto_research/terminal_results.py +349 -0
- loopx/capabilities/auto_research/user_contract.py +190 -0
- loopx/capabilities/auto_research/worker_loop.py +163 -0
- loopx/capabilities/auto_research/worker_runtime.py +777 -0
- loopx/capabilities/auto_research/worker_skill/SKILL.md +343 -0
- loopx/capabilities/benchmark_toolkit/__init__.py +19 -0
- loopx/capabilities/benchmark_toolkit/integrity.py +387 -0
- loopx/capabilities/catalog.py +1875 -0
- loopx/capabilities/change_quality/__init__.py +19 -0
- loopx/capabilities/change_quality/cli.py +171 -0
- loopx/capabilities/change_quality/context.py +156 -0
- loopx/capabilities/change_quality/oracles.py +269 -0
- loopx/capabilities/change_quality/policy.py +34 -0
- loopx/capabilities/change_quality/receipt.py +482 -0
- loopx/capabilities/change_quality/result.py +493 -0
- loopx/capabilities/change_quality/scope.py +171 -0
- loopx/capabilities/change_quality/shadow.py +680 -0
- loopx/capabilities/content_ops/__init__.py +0 -0
- loopx/capabilities/content_ops/cli.py +649 -0
- loopx/capabilities/content_ops/connector_packets.py +164 -0
- loopx/capabilities/content_ops/item_lifecycle.py +1000 -0
- loopx/capabilities/content_ops/layout.py +451 -0
- loopx/capabilities/content_ops/markdown.py +456 -0
- loopx/capabilities/content_ops/schemas.py +51 -0
- loopx/capabilities/content_ops/social_browser_x.py +107 -0
- loopx/capabilities/content_ops/surface.py +1956 -0
- loopx/capabilities/content_ops/templates/layout-catalog-v0.json +72 -0
- loopx/capabilities/context_providers/__init__.py +36 -0
- loopx/capabilities/context_providers/base.py +189 -0
- loopx/capabilities/context_providers/factory.py +32 -0
- loopx/capabilities/context_providers/openviking.py +702 -0
- loopx/capabilities/context_providers/service_ownership.py +185 -0
- loopx/capabilities/decision_context/__init__.py +129 -0
- loopx/capabilities/decision_context/architecture.py +83 -0
- loopx/capabilities/decision_context/assembler.py +849 -0
- loopx/capabilities/decision_context/catalog_entry.py +195 -0
- loopx/capabilities/decision_context/cli.py +310 -0
- loopx/capabilities/decision_context/cursor_commit.py +535 -0
- loopx/capabilities/decision_context/outcome_feedback.py +352 -0
- loopx/capabilities/decision_context/packets.py +654 -0
- loopx/capabilities/decision_context/private_state.py +189 -0
- loopx/capabilities/decision_context/profile.py +453 -0
- loopx/capabilities/decision_context/providers.py +228 -0
- loopx/capabilities/decision_context/review_settlement.py +136 -0
- loopx/capabilities/decision_context/runtime.py +273 -0
- loopx/capabilities/decision_context/sources.py +415 -0
- loopx/capabilities/explore/__init__.py +1 -0
- loopx/capabilities/explore/activation.py +198 -0
- loopx/capabilities/explore/adaptive_replay_planner.py +221 -0
- loopx/capabilities/explore/child_replay_runtime.py +463 -0
- loopx/capabilities/explore/composition_frontier.py +291 -0
- loopx/capabilities/explore/counterfactual_runtime.py +578 -0
- loopx/capabilities/explore/episode_runtime.py +647 -0
- loopx/capabilities/explore/harness_checkpoint.py +171 -0
- loopx/capabilities/explore/harness_gate.py +115 -0
- loopx/capabilities/explore/harness_runtime.py +1124 -0
- loopx/capabilities/explore/replay_metrics.py +206 -0
- loopx/capabilities/explore/replay_runtime.py +1271 -0
- loopx/capabilities/explore/resource_portfolio.py +173 -0
- loopx/capabilities/explore/result_log.py +974 -0
- loopx/capabilities/explore/router_state.py +432 -0
- loopx/capabilities/explore/source_history_reconcile.py +255 -0
- loopx/capabilities/explore/speculative_scheduler.py +498 -0
- loopx/capabilities/explore/todo_branch_plan.py +650 -0
- loopx/capabilities/explore/todo_evidence.py +141 -0
- loopx/capabilities/explore/trace_runtime.py +284 -0
- loopx/capabilities/explore/worker_branch_plan.py +1257 -0
- loopx/capabilities/integration_branch/__init__.py +13 -0
- loopx/capabilities/integration_branch/cli.py +148 -0
- loopx/capabilities/integration_branch/core.py +916 -0
- loopx/capabilities/issue_fix/__init__.py +19 -0
- loopx/capabilities/issue_fix/acceptance_loop.py +1050 -0
- loopx/capabilities/issue_fix/candidate_evidence.py +503 -0
- loopx/capabilities/issue_fix/candidate_preflight.py +676 -0
- loopx/capabilities/issue_fix/cli.py +1822 -0
- loopx/capabilities/issue_fix/cli_input.py +87 -0
- loopx/capabilities/issue_fix/content_ops_cli.py +148 -0
- loopx/capabilities/issue_fix/discovered_issue_promotion.py +947 -0
- loopx/capabilities/issue_fix/explore_projection.py +710 -0
- loopx/capabilities/issue_fix/feasibility.py +542 -0
- loopx/capabilities/issue_fix/github_public.py +661 -0
- loopx/capabilities/issue_fix/intake_surface.py +832 -0
- loopx/capabilities/issue_fix/metadata_preview.py +218 -0
- loopx/capabilities/issue_fix/metrics_projection.py +1340 -0
- loopx/capabilities/issue_fix/metrics_supplement.py +634 -0
- loopx/capabilities/issue_fix/metrics_supplement_cli.py +127 -0
- loopx/capabilities/issue_fix/outcome_projection.py +1235 -0
- loopx/capabilities/issue_fix/periodic_report.py +189 -0
- loopx/capabilities/issue_fix/pr_description.py +418 -0
- loopx/capabilities/issue_fix/pr_gate_reconcile.py +496 -0
- loopx/capabilities/issue_fix/pr_gate_reconcile_cli.py +464 -0
- loopx/capabilities/issue_fix/pr_lifecycle.py +1327 -0
- loopx/capabilities/issue_fix/pr_lifecycle_rollout.py +85 -0
- loopx/capabilities/issue_fix/pr_monitor_materialization.py +257 -0
- loopx/capabilities/issue_fix/pr_review_ack.py +439 -0
- loopx/capabilities/issue_fix/provider_hooks.py +24 -0
- loopx/capabilities/issue_fix/repository_commit_evidence.py +186 -0
- loopx/capabilities/issue_fix/repository_context.py +457 -0
- loopx/capabilities/issue_fix/repository_memory.py +459 -0
- loopx/capabilities/issue_fix/repository_memory_provider.py +1454 -0
- loopx/capabilities/issue_fix/repository_snapshot.py +454 -0
- loopx/capabilities/issue_fix/reviewer_cli.py +917 -0
- loopx/capabilities/issue_fix/reviewer_notification.py +882 -0
- loopx/capabilities/issue_fix/reviewer_notification_drain.py +942 -0
- loopx/capabilities/issue_fix/reviewer_recommendation.py +1057 -0
- loopx/capabilities/issue_fix/reviewer_request.py +1282 -0
- loopx/capabilities/issue_fix/reward_memory.py +879 -0
- loopx/capabilities/issue_fix/workflow_plan.py +1286 -0
- loopx/capabilities/material_lifecycle/__init__.py +161 -0
- loopx/capabilities/material_lifecycle/_validation.py +183 -0
- loopx/capabilities/material_lifecycle/apply.py +672 -0
- loopx/capabilities/material_lifecycle/architecture.py +122 -0
- loopx/capabilities/material_lifecycle/cli.py +161 -0
- loopx/capabilities/material_lifecycle/decision_planning.py +470 -0
- loopx/capabilities/material_lifecycle/explore_execution.py +306 -0
- loopx/capabilities/material_lifecycle/intake.py +869 -0
- loopx/capabilities/material_lifecycle/inventory.py +147 -0
- loopx/capabilities/material_lifecycle/lifecycle.py +98 -0
- loopx/capabilities/material_lifecycle/preparation.py +147 -0
- loopx/capabilities/material_lifecycle/project_skill.py +83 -0
- loopx/capabilities/material_lifecycle/ranking.py +267 -0
- loopx/capabilities/material_lifecycle/readable_projection.py +500 -0
- loopx/capabilities/material_lifecycle/rebuild.py +480 -0
- loopx/capabilities/material_lifecycle/settlement.py +238 -0
- loopx/capabilities/periodic_report/__init__.py +71 -0
- loopx/capabilities/periodic_report/adapters.py +939 -0
- loopx/capabilities/periodic_report/archive.py +422 -0
- loopx/capabilities/periodic_report/bindings.py +705 -0
- loopx/capabilities/periodic_report/cli.py +277 -0
- loopx/capabilities/periodic_report/core.py +691 -0
- loopx/capabilities/periodic_report/extension_envelope.py +66 -0
- loopx/capabilities/periodic_report/presets.py +103 -0
- loopx/capabilities/periodic_report/profile.py +235 -0
- loopx/capabilities/periodic_report/project_progress.py +179 -0
- loopx/capabilities/periodic_report/triggers.py +452 -0
- loopx/capabilities/pr_review_queue/__init__.py +17 -0
- loopx/capabilities/pr_review_queue/core.py +506 -0
- loopx/capabilities/pr_review_queue/review_contract.py +506 -0
- loopx/capabilities/registry.py +192 -0
- loopx/capabilities/reward_memory/__init__.py +75 -0
- loopx/capabilities/reward_memory/application.py +819 -0
- loopx/capabilities/reward_memory/architecture.py +572 -0
- loopx/capabilities/reward_memory/candidate_review.py +511 -0
- loopx/capabilities/reward_memory/cli.py +469 -0
- loopx/capabilities/reward_memory/dogfood.py +574 -0
- loopx/capabilities/reward_memory/evaluation.py +296 -0
- loopx/capabilities/reward_memory/evaluation_fixtures.py +362 -0
- loopx/capabilities/reward_memory/experiment.py +567 -0
- loopx/capabilities/reward_memory/health.py +222 -0
- loopx/capabilities/reward_memory/ingestion.py +519 -0
- loopx/capabilities/reward_memory/registry.py +600 -0
- loopx/capabilities/reward_memory/runtime_hooks.py +312 -0
- loopx/capabilities/reward_memory/scoped_feedback.py +173 -0
- loopx/capabilities/semantic_preference/__init__.py +12 -0
- loopx/capabilities/semantic_preference/cli.py +189 -0
- loopx/capabilities/semantic_preference/contract.py +592 -0
- loopx/capabilities/semantic_preference/reward_memory.py +62 -0
- loopx/capabilities/value_connectors/__init__.py +1 -0
- loopx/capabilities/value_connectors/cli.py +401 -0
- loopx/capabilities/value_connectors/finance_extension_migration.py +108 -0
- loopx/capabilities/value_connectors/install_check.py +147 -0
- loopx/capabilities/value_connectors/planner.py +733 -0
- loopx/capabilities/value_connectors/source_map.py +446 -0
- loopx/claude_goal_baseline.py +138 -0
- loopx/claude_goal_mode/__init__.py +23 -0
- loopx/claude_goal_mode/hooks/goal_policy.py +212 -0
- loopx/claude_goal_mode/hooks/goal_state.py +139 -0
- loopx/claude_goal_mode/mcp/loopx_mcp.py +167 -0
- loopx/claude_goal_mode/scripts/connect.py +103 -0
- loopx/claude_goal_mode/scripts/goalmode_cmd.py +241 -0
- loopx/claude_goal_mode/scripts/install.py +328 -0
- loopx/claude_goal_mode/statusline/goal_status.py +97 -0
- loopx/cli.py +836 -0
- loopx/cli_commands/__init__.py +334 -0
- loopx/cli_commands/_host_thread.py +13 -0
- loopx/cli_commands/agentissue_runner_flow.py +447 -0
- loopx/cli_commands/agents_last_exam.py +160 -0
- loopx/cli_commands/agents_last_exam_baked_input.py +302 -0
- loopx/cli_commands/agents_last_exam_host_codex.py +374 -0
- loopx/cli_commands/agents_last_exam_launch_dry_run.py +372 -0
- loopx/cli_commands/agents_last_exam_local_plan.py +322 -0
- loopx/cli_commands/agents_last_exam_runner_source.py +352 -0
- loopx/cli_commands/agents_last_exam_task_material.py +335 -0
- loopx/cli_commands/agents_last_exam_validation_gate.py +236 -0
- loopx/cli_commands/benchmark_boundary.py +499 -0
- loopx/cli_commands/benchmark_dispatch.py +161 -0
- loopx/cli_commands/benchmark_release_outcome.py +123 -0
- loopx/cli_commands/benchmark_review_lifecycle.py +1275 -0
- loopx/cli_commands/benchmark_run_ledger.py +763 -0
- loopx/cli_commands/benchmark_run_ledger_case_analysis.py +249 -0
- loopx/cli_commands/benchmark_run_ledger_classification.py +45 -0
- loopx/cli_commands/benchmark_run_ledger_maintenance.py +486 -0
- loopx/cli_commands/benchmark_run_ledger_maintenance_registration.py +342 -0
- loopx/cli_commands/benchmark_run_ledger_maintenance_rendering.py +233 -0
- loopx/cli_commands/benchmark_run_ledger_parity.py +92 -0
- loopx/cli_commands/bootstrap_connect.py +238 -0
- loopx/cli_commands/canary.py +707 -0
- loopx/cli_commands/canary_release_qualification.py +79 -0
- loopx/cli_commands/capability.py +96 -0
- loopx/cli_commands/doctor.py +43 -0
- loopx/cli_commands/dreaming.py +143 -0
- loopx/cli_commands/edgebench.py +205 -0
- loopx/cli_commands/evidence_log.py +275 -0
- loopx/cli_commands/explore.py +989 -0
- loopx/cli_commands/explore_planning_commands.py +157 -0
- loopx/cli_commands/extension.py +271 -0
- loopx/cli_commands/first_run_report.py +73 -0
- loopx/cli_commands/goal_channel.py +656 -0
- loopx/cli_commands/handoff_mode.py +158 -0
- loopx/cli_commands/history.py +622 -0
- loopx/cli_commands/host_mode_plan.py +113 -0
- loopx/cli_commands/lark_inbox.py +431 -0
- loopx/cli_commands/lark_kanban.py +629 -0
- loopx/cli_commands/ml_experiment.py +321 -0
- loopx/cli_commands/multi_agent.py +211 -0
- loopx/cli_commands/opencode2_goal_worker.py +217 -0
- loopx/cli_commands/pr_review.py +167 -0
- loopx/cli_commands/presentation.py +218 -0
- loopx/cli_commands/preset.py +96 -0
- loopx/cli_commands/project.py +150 -0
- loopx/cli_commands/project_lifecycle.py +915 -0
- loopx/cli_commands/quota.py +859 -0
- loopx/cli_commands/quota_registration.py +241 -0
- loopx/cli_commands/quota_request.py +113 -0
- loopx/cli_commands/ready_score.py +110 -0
- loopx/cli_commands/registry_admin.py +975 -0
- loopx/cli_commands/registry_admin_configure.py +344 -0
- loopx/cli_commands/registry_admin_peer.py +84 -0
- loopx/cli_commands/registry_authority.py +218 -0
- loopx/cli_commands/review_batch.py +146 -0
- loopx/cli_commands/slash_commands.py +145 -0
- loopx/cli_commands/start_goal.py +251 -0
- loopx/cli_commands/starter.py +175 -0
- loopx/cli_commands/starter_bootstrap.py +179 -0
- loopx/cli_commands/starter_bootstrap_registration.py +198 -0
- loopx/cli_commands/starter_runtime_idle.py +107 -0
- loopx/cli_commands/starter_scheduler.py +207 -0
- loopx/cli_commands/starter_session_runtime.py +152 -0
- loopx/cli_commands/starter_visible_common.py +54 -0
- loopx/cli_commands/starter_visible_driver.py +161 -0
- loopx/cli_commands/starter_visible_pilot.py +278 -0
- loopx/cli_commands/status.py +867 -0
- loopx/cli_commands/status_registration.py +239 -0
- loopx/cli_commands/summary_all.py +222 -0
- loopx/cli_commands/support_control.py +809 -0
- loopx/cli_commands/support_control_registry.py +68 -0
- loopx/cli_commands/support_control_supervisor.py +289 -0
- loopx/cli_commands/task_lease.py +306 -0
- loopx/cli_commands/terminal_bench_adapter.py +717 -0
- loopx/cli_commands/terminal_bench_environment_result.py +1246 -0
- loopx/cli_commands/todo.py +940 -0
- loopx/cli_commands/todo_argument_validation.py +572 -0
- loopx/cli_commands/todo_event.py +114 -0
- loopx/cli_commands/turn.py +804 -0
- loopx/cli_commands/version.py +46 -0
- loopx/cli_commands/worker_bridge.py +659 -0
- loopx/cli_rollout.py +314 -0
- loopx/codex_cli_goal_tui.py +672 -0
- loopx/codex_cli_probe.py +1530 -0
- loopx/codex_cli_probe_markdown.py +935 -0
- loopx/codex_cli_runtime_probe.py +733 -0
- loopx/codex_cli_scheduler.py +564 -0
- loopx/codex_goal_baseline.py +620 -0
- loopx/configuration_catalog.py +617 -0
- loopx/configure_goal.py +1375 -0
- loopx/contract.py +996 -0
- loopx/control_plane/__init__.py +71 -0
- loopx/control_plane/agents/__init__.py +1 -0
- loopx/control_plane/agents/agent_lane_recommendation.py +516 -0
- loopx/control_plane/agents/agent_scope.py +1578 -0
- loopx/control_plane/agents/agent_scope_frontier.py +60 -0
- loopx/control_plane/agents/capability_gate.py +531 -0
- loopx/control_plane/agents/identity.py +140 -0
- loopx/control_plane/agents/legacy_migration.py +169 -0
- loopx/control_plane/agents/management_projection.py +658 -0
- loopx/control_plane/agents/material_frontier.py +608 -0
- loopx/control_plane/agents/material_handoff.py +156 -0
- loopx/control_plane/agents/multi_agent/__init__.py +1 -0
- loopx/control_plane/agents/multi_agent/codex_executable.py +207 -0
- loopx/control_plane/agents/multi_agent/collective_round_ledger.py +387 -0
- loopx/control_plane/agents/multi_agent/contract.py +474 -0
- loopx/control_plane/agents/multi_agent/recipe.py +110 -0
- loopx/control_plane/agents/multi_agent/role_successor.py +297 -0
- loopx/control_plane/agents/multi_agent/runtime_scripts.py +426 -0
- loopx/control_plane/agents/multi_agent/visible_launch_policy.py +149 -0
- loopx/control_plane/agents/multi_agent/visible_wake_scheduler.py +392 -0
- loopx/control_plane/agents/profile.py +216 -0
- loopx/control_plane/agents/runtime_model.py +73 -0
- loopx/control_plane/agents/subagent_activity.py +164 -0
- loopx/control_plane/agents/supervisor.py +544 -0
- loopx/control_plane/agents/supervisor_events.py +462 -0
- loopx/control_plane/agents/supervisor_inject.py +204 -0
- loopx/control_plane/agents/work_mode.py +56 -0
- loopx/control_plane/agents/workspace_guard.py +364 -0
- loopx/control_plane/effect_program.py +644 -0
- loopx/control_plane/goals/__init__.py +1 -0
- loopx/control_plane/goals/active_state_event_projection.py +103 -0
- loopx/control_plane/goals/active_state_metadata.py +47 -0
- loopx/control_plane/goals/active_state_sections.py +58 -0
- loopx/control_plane/goals/configure_goal_service.py +354 -0
- loopx/control_plane/goals/contract_health.py +132 -0
- loopx/control_plane/goals/dreaming.py +152 -0
- loopx/control_plane/goals/global_registry_health.py +199 -0
- loopx/control_plane/goals/global_registry_shadow.py +33 -0
- loopx/control_plane/goals/goal_channel.py +34 -0
- loopx/control_plane/goals/goal_channel_projection.py +560 -0
- loopx/control_plane/goals/goal_frontier/__init__.py +1917 -0
- loopx/control_plane/goals/goal_frontier/ack_policy.py +149 -0
- loopx/control_plane/goals/goal_frontier/outcome_continuity.py +437 -0
- loopx/control_plane/goals/goal_frontier/replan_rules.py +210 -0
- loopx/control_plane/goals/goal_frontier/semantic_history.py +314 -0
- loopx/control_plane/goals/goal_frontier/terminal.py +180 -0
- loopx/control_plane/goals/goal_vision.py +443 -0
- loopx/control_plane/goals/goal_vision_policy.py +36 -0
- loopx/control_plane/goals/goal_vision_state.py +62 -0
- loopx/control_plane/goals/goal_vision_wait.py +290 -0
- loopx/control_plane/goals/path_resolution.py +20 -0
- loopx/control_plane/goals/start_contract.py +206 -0
- loopx/control_plane/goals/vision_checkpoint.py +92 -0
- loopx/control_plane/handoff/__init__.py +1 -0
- loopx/control_plane/handoff/cross_runtime_impl_review.py +311 -0
- loopx/control_plane/handoff/delivery_contract.py +161 -0
- loopx/control_plane/handoff/handoff_runs.py +71 -0
- loopx/control_plane/handoff/project_handoff.py +155 -0
- loopx/control_plane/handoff/review_batch.py +463 -0
- loopx/control_plane/handoff/review_packet_context.py +216 -0
- loopx/control_plane/heartbeat/agent.py +173 -0
- loopx/control_plane/heartbeat/budget.py +66 -0
- loopx/control_plane/heartbeat/builder.py +501 -0
- loopx/control_plane/heartbeat/host.py +64 -0
- loopx/control_plane/heartbeat/rules.py +68 -0
- loopx/control_plane/heartbeat/task_body.py +759 -0
- loopx/control_plane/heartbeat/visible_goal.py +86 -0
- loopx/control_plane/projects/__init__.py +1 -0
- loopx/control_plane/projects/contract.py +25 -0
- loopx/control_plane/projects/registry.py +663 -0
- loopx/control_plane/quota/__init__.py +1 -0
- loopx/control_plane/quota/cli_projection.py +704 -0
- loopx/control_plane/quota/decision_summary.py +431 -0
- loopx/control_plane/quota/effect_program.py +152 -0
- loopx/control_plane/quota/error_codes.py +19 -0
- loopx/control_plane/quota/goal_boundary.py +464 -0
- loopx/control_plane/quota/heartbeat_receipt.py +277 -0
- loopx/control_plane/quota/heartbeat_recommendation.py +718 -0
- loopx/control_plane/quota/host_poll_receipts.py +162 -0
- loopx/control_plane/quota/live_decision.py +142 -0
- loopx/control_plane/quota/monitor_poll.py +786 -0
- loopx/control_plane/quota/policy_constants.py +40 -0
- loopx/control_plane/quota/projection_repair.py +262 -0
- loopx/control_plane/quota/recent_runs.py +210 -0
- loopx/control_plane/quota/scheduler_ack.py +490 -0
- loopx/control_plane/quota/selected_todo_projection.py +139 -0
- loopx/control_plane/quota/settlement.py +437 -0
- loopx/control_plane/quota/settlement_cli.py +246 -0
- loopx/control_plane/quota/settlement_validation.py +64 -0
- loopx/control_plane/quota/settlement_workspace_causality.py +180 -0
- loopx/control_plane/quota/should_run.py +249 -0
- loopx/control_plane/quota/should_run_packet.py +1165 -0
- loopx/control_plane/quota/should_run_prepare.py +675 -0
- loopx/control_plane/quota/slot_accounting.py +1123 -0
- loopx/control_plane/quota/spend_sources.py +11 -0
- loopx/control_plane/quota/stall_repair.py +397 -0
- loopx/control_plane/quota/states.py +29 -0
- loopx/control_plane/quota/task_orchestration.py +448 -0
- loopx/control_plane/quota/task_orchestration_admission.py +497 -0
- loopx/control_plane/quota/turn_envelope.py +889 -0
- loopx/control_plane/quota/usage_summary.py +140 -0
- loopx/control_plane/reward_memory.py +43 -0
- loopx/control_plane/runtime/__init__.py +2 -0
- loopx/control_plane/runtime/active_user_assisted_pilot.py +275 -0
- loopx/control_plane/runtime/agent_scoped_evidence_log.py +435 -0
- loopx/control_plane/runtime/decision_freshness.py +203 -0
- loopx/control_plane/runtime/event_ledger.py +197 -0
- loopx/control_plane/runtime/event_store_migration_bridge.py +196 -0
- loopx/control_plane/runtime/goal_project_route.py +70 -0
- loopx/control_plane/runtime/local_state_write_correctness.py +242 -0
- loopx/control_plane/runtime/promotion_readiness.py +152 -0
- loopx/control_plane/runtime/public_safety.py +120 -0
- loopx/control_plane/runtime/run_artifacts.py +78 -0
- loopx/control_plane/runtime/run_compaction.py +397 -0
- loopx/control_plane/runtime/run_context_retention.py +241 -0
- loopx/control_plane/runtime/run_history.py +132 -0
- loopx/control_plane/runtime/run_index_duplicates.py +205 -0
- loopx/control_plane/runtime/run_index_rebuild.py +263 -0
- loopx/control_plane/runtime/run_ingest_health.py +336 -0
- loopx/control_plane/runtime/runtime_projection_route.py +624 -0
- loopx/control_plane/runtime/runtime_projection_writer.py +98 -0
- loopx/control_plane/runtime/session_runtime.py +339 -0
- loopx/control_plane/runtime/shared_runtime_material_projection.py +332 -0
- loopx/control_plane/runtime/shared_runtime_refresh_projection.py +183 -0
- loopx/control_plane/runtime/stale_latest_run.py +90 -0
- loopx/control_plane/runtime/status_classifications.py +49 -0
- loopx/control_plane/runtime/status_projection_cache.py +235 -0
- loopx/control_plane/runtime/stride_observation.py +144 -0
- loopx/control_plane/runtime/time.py +39 -0
- loopx/control_plane/runtime/trajectory_hygiene.py +149 -0
- loopx/control_plane/runtime/validation_command.py +69 -0
- loopx/control_plane/scheduler/__init__.py +1 -0
- loopx/control_plane/scheduler/ack.py +329 -0
- loopx/control_plane/scheduler/arbitration.py +188 -0
- loopx/control_plane/scheduler/automation_liveness.py +183 -0
- loopx/control_plane/scheduler/execution_context.py +555 -0
- loopx/control_plane/scheduler/external_evidence_observation.py +428 -0
- loopx/control_plane/scheduler/monitor_display.py +143 -0
- loopx/control_plane/scheduler/monitor_poll_policy.py +161 -0
- loopx/control_plane/scheduler/monitor_poll_writeback.py +351 -0
- loopx/control_plane/scheduler/monitor_target.py +64 -0
- loopx/control_plane/scheduler/monitor_todo.py +146 -0
- loopx/control_plane/scheduler/monitor_wait.py +237 -0
- loopx/control_plane/scheduler/scheduler_hint.py +1284 -0
- loopx/control_plane/scheduler/state.py +354 -0
- loopx/control_plane/scheduler/state_transition_rules.py +179 -0
- loopx/control_plane/scheduler/time.py +10 -0
- loopx/control_plane/settlement_driver.py +293 -0
- loopx/control_plane/status/__init__.py +6 -0
- loopx/control_plane/status/active_state_projection.py +105 -0
- loopx/control_plane/status/agent_lane_projection.py +375 -0
- loopx/control_plane/status/attention_projection.py +74 -0
- loopx/control_plane/status/autonomous_replan_projection.py +103 -0
- loopx/control_plane/status/collection.py +140 -0
- loopx/control_plane/status/contract_projection.py +31 -0
- loopx/control_plane/status/dreaming_projection.py +52 -0
- loopx/control_plane/status/goal_attention_projection.py +157 -0
- loopx/control_plane/status/lifecycle_projection.py +110 -0
- loopx/control_plane/status/monitor_display_projection.py +69 -0
- loopx/control_plane/status/registry_health_projection.py +75 -0
- loopx/control_plane/status/run_projection.py +70 -0
- loopx/control_plane/status/runtime_summaries.py +161 -0
- loopx/control_plane/testing/__init__.py +1 -0
- loopx/control_plane/testing/actual_default_model_behavior_portfolio.py +1371 -0
- loopx/control_plane/testing/canary_harness.py +182 -0
- loopx/control_plane/testing/capability_monitor_repair_tool_behavior.py +674 -0
- loopx/control_plane/testing/cli_output_budget.py +807 -0
- loopx/control_plane/testing/cli_output_differential.py +250 -0
- loopx/control_plane/testing/cli_output_semantics.py +87 -0
- loopx/control_plane/testing/control_plane_composition_scenarios.py +225 -0
- loopx/control_plane/testing/decision_replay.py +268 -0
- loopx/control_plane/testing/doubao_model_behavior_actor.py +559 -0
- loopx/control_plane/testing/model_behavior_corpus.py +344 -0
- loopx/control_plane/testing/model_behavior_qualification.py +769 -0
- loopx/control_plane/testing/model_behavior_retained_cases.py +235 -0
- loopx/control_plane/testing/model_tool_behavior.py +536 -0
- loopx/control_plane/testing/onboarding_model_behavior_qualification.py +642 -0
- loopx/control_plane/testing/quota_fixtures.py +208 -0
- loopx/control_plane/testing/quota_should_run_parity.py +57 -0
- loopx/control_plane/testing/release_commit_qualification.py +671 -0
- loopx/control_plane/testing/replan_semantic_action_behavior.py +1302 -0
- loopx/control_plane/testing/scoped_gate_successor_tool_behavior.py +527 -0
- loopx/control_plane/testing/selected_todo_tool_behavior.py +1002 -0
- loopx/control_plane/testing/terminal_settlement_tool_behavior.py +656 -0
- loopx/control_plane/todos/__init__.py +1 -0
- loopx/control_plane/todos/active_state_editing.py +296 -0
- loopx/control_plane/todos/active_state_todo_parser.py +138 -0
- loopx/control_plane/todos/active_state_todos.py +175 -0
- loopx/control_plane/todos/addition.py +103 -0
- loopx/control_plane/todos/claim_visibility.py +253 -0
- loopx/control_plane/todos/completed_archive.py +139 -0
- loopx/control_plane/todos/completion_fence.py +49 -0
- loopx/control_plane/todos/completion_policy.py +153 -0
- loopx/control_plane/todos/completion_validation.py +248 -0
- loopx/control_plane/todos/completion_validation_accountability.py +27 -0
- loopx/control_plane/todos/completion_validation_projection.py +57 -0
- loopx/control_plane/todos/contract.py +1476 -0
- loopx/control_plane/todos/decision_scope.py +554 -0
- loopx/control_plane/todos/deferred_resume.py +546 -0
- loopx/control_plane/todos/durable_completion.py +201 -0
- loopx/control_plane/todos/event_writeback.py +484 -0
- loopx/control_plane/todos/frontier_deadline.py +132 -0
- loopx/control_plane/todos/handoff_gate.py +283 -0
- loopx/control_plane/todos/handoff_mode.py +444 -0
- loopx/control_plane/todos/handoff_note.py +202 -0
- loopx/control_plane/todos/line_update.py +361 -0
- loopx/control_plane/todos/list_projection.py +205 -0
- loopx/control_plane/todos/markdown.py +199 -0
- loopx/control_plane/todos/monitor_metadata.py +88 -0
- loopx/control_plane/todos/mutation_authority.py +299 -0
- loopx/control_plane/todos/projection.py +655 -0
- loopx/control_plane/todos/quota_summary.py +1138 -0
- loopx/control_plane/todos/route_continuation.py +267 -0
- loopx/control_plane/todos/succession_warning.py +174 -0
- loopx/control_plane/todos/summary_item.py +223 -0
- loopx/control_plane/todos/text.py +30 -0
- loopx/control_plane/todos/todo_index.py +226 -0
- loopx/control_plane/todos/todo_summary.py +1458 -0
- loopx/control_plane/todos/unblock_resume.py +326 -0
- loopx/control_plane/todos/user_gate.py +263 -0
- loopx/control_plane/todos/write_hint.py +63 -0
- loopx/control_plane/todos/write_policy.py +135 -0
- loopx/control_plane/turn_driver/__init__.py +85 -0
- loopx/control_plane/turn_driver/codex_cli.py +502 -0
- loopx/control_plane/turn_driver/driver.py +355 -0
- loopx/control_plane/turn_driver/executor.py +1468 -0
- loopx/control_plane/turn_driver/loop_controller.py +669 -0
- loopx/control_plane/turn_driver/settlement.py +318 -0
- loopx/control_plane/turn_driver/transaction.py +375 -0
- loopx/control_plane/work_items/__init__.py +1 -0
- loopx/control_plane/work_items/attention_fields.py +56 -0
- loopx/control_plane/work_items/attention_item.py +77 -0
- loopx/control_plane/work_items/attention_queue.py +322 -0
- loopx/control_plane/work_items/attention_routing.py +213 -0
- loopx/control_plane/work_items/autonomous_candidates.py +135 -0
- loopx/control_plane/work_items/autonomous_replan_ack.py +276 -0
- loopx/control_plane/work_items/autonomous_replan_obligation.py +786 -0
- loopx/control_plane/work_items/backlog_hygiene.py +59 -0
- loopx/control_plane/work_items/capability_monitor_fallback.py +221 -0
- loopx/control_plane/work_items/delivery_batch_scale.py +66 -0
- loopx/control_plane/work_items/delivery_outcome.py +152 -0
- loopx/control_plane/work_items/delivery_signals.py +113 -0
- loopx/control_plane/work_items/execution_obligation.py +235 -0
- loopx/control_plane/work_items/goal_route_hint.py +320 -0
- loopx/control_plane/work_items/interaction_contract.py +1540 -0
- loopx/control_plane/work_items/issue_meta_surface.py +159 -0
- loopx/control_plane/work_items/lifecycle.py +139 -0
- loopx/control_plane/work_items/operator_inbox.py +266 -0
- loopx/control_plane/work_items/outcome_followthrough.py +69 -0
- loopx/control_plane/work_items/primary_action.py +326 -0
- loopx/control_plane/work_items/progress_observation.py +630 -0
- loopx/control_plane/work_items/project_asset.py +675 -0
- loopx/control_plane/work_items/repair_delta.py +693 -0
- loopx/control_plane/work_items/runtime_capability_reentry.py +168 -0
- loopx/control_plane/work_items/semantic_replan_writeback.py +177 -0
- loopx/control_plane/work_items/status_contract.py +49 -0
- loopx/control_plane/work_items/task_graph.py +1046 -0
- loopx/control_plane/work_items/task_lease.py +1254 -0
- loopx/control_plane/work_items/task_lease_settlement.py +422 -0
- loopx/control_plane/work_items/work_lane.py +510 -0
- loopx/control_plane/work_items/work_lane_context.py +161 -0
- loopx/demo.py +247 -0
- loopx/diagnose.py +633 -0
- loopx/doctor.py +1251 -0
- loopx/domain_packs/__init__.py +1 -0
- loopx/domain_packs/issue_fix.py +571 -0
- loopx/domain_packs/ml_experiment.py +854 -0
- loopx/domain_state.py +137 -0
- loopx/dreaming.py +706 -0
- loopx/entrypoint.py +16 -0
- loopx/event_sourced_state.py +981 -0
- loopx/execution_profile.py +286 -0
- loopx/experiments/__init__.py +1 -0
- loopx/experiments/planner_worker/__init__.py +1 -0
- loopx/experiments/planner_worker/contract.py +523 -0
- loopx/experiments/planner_worker/runtime.py +391 -0
- loopx/experiments/planner_worker/traex.py +461 -0
- loopx/explore_graph.py +11 -0
- loopx/extensions/__init__.py +1 -0
- loopx/extensions/bundled.py +28 -0
- loopx/extensions/execution_envelope.py +126 -0
- loopx/extensions/lark/__init__.py +11 -0
- loopx/extensions/lark/event_collector.py +478 -0
- loopx/extensions/lark/event_collector_runtime.py +506 -0
- loopx/extensions/lark/event_inbox.py +454 -0
- loopx/extensions/lark/extension.toml +88 -0
- loopx/extensions/lark/goal_channel.py +44 -0
- loopx/extensions/lark/goal_channel_contracts.py +388 -0
- loopx/extensions/lark/goal_channel_lifecycle.py +218 -0
- loopx/extensions/lark/goal_channel_runtime.py +792 -0
- loopx/extensions/lark/goal_channel_setup.py +805 -0
- loopx/extensions/lark/goal_channel_targets.py +215 -0
- loopx/extensions/lark/goal_channel_transport.py +281 -0
- loopx/extensions/lark/inbox_reactions.py +650 -0
- loopx/extensions/lark/inbox_reply.py +430 -0
- loopx/extensions/lark/presentation/__init__.py +11 -0
- loopx/extensions/lark/presentation/explore_results.py +2276 -0
- loopx/extensions/lark/presentation/explore_singleflight.py +127 -0
- loopx/extensions/lark/presentation/explore_source_guard.py +121 -0
- loopx/extensions/lark/presentation/explore_stage_document.py +703 -0
- loopx/extensions/lark/presentation/explore_visual_integrity.py +122 -0
- loopx/extensions/lark/presentation/explore_visual_readback.py +452 -0
- loopx/extensions/lark/presentation/explore_visual_styles.py +156 -0
- loopx/extensions/lark/presentation/issue_fix_surface.py +612 -0
- loopx/extensions/lark/presentation/kanban.py +2791 -0
- loopx/extensions/lark/presentation/message_card.py +112 -0
- loopx/extensions/lark/presentation/periodic_report.py +261 -0
- loopx/extensions/lark/presentation/projection_rows.py +600 -0
- loopx/extensions/lark/presentation/record_io.py +95 -0
- loopx/extensions/lark/presentation/sync_receipt.py +145 -0
- loopx/extensions/lark/private_json.py +40 -0
- loopx/extensions/lark/provider.py +86 -0
- loopx/extensions/lark/reviewer_notification.py +604 -0
- loopx/extensions/manifest.py +385 -0
- loopx/extensions/openviking_periodic_report/__init__.py +17 -0
- loopx/extensions/openviking_periodic_report/activation.py +173 -0
- loopx/extensions/openviking_periodic_report/extension.toml +17 -0
- loopx/extensions/openviking_periodic_report/provider.py +355 -0
- loopx/extensions/openviking_periodic_report/sink.py +117 -0
- loopx/extensions/openviking_semantic_preference/__init__.py +5 -0
- loopx/extensions/openviking_semantic_preference/extension.toml +16 -0
- loopx/extensions/openviking_semantic_preference/history_export.py +484 -0
- loopx/extensions/openviking_semantic_preference/project_peer.py +68 -0
- loopx/extensions/openviking_semantic_preference/provider.py +312 -0
- loopx/extensions/presentation.py +979 -0
- loopx/extensions/process_runtime.py +204 -0
- loopx/extensions/readiness.py +168 -0
- loopx/extensions/runtime.py +931 -0
- loopx/extensions/scaffold.py +335 -0
- loopx/feedback.py +581 -0
- loopx/file_lock.py +382 -0
- loopx/global_registry.py +842 -0
- loopx/global_risks.py +970 -0
- loopx/global_todos.py +568 -0
- loopx/handoff_budget.py +28 -0
- loopx/heartbeat_prequota.py +80 -0
- loopx/heartbeat_prompt.py +159 -0
- loopx/help_surface.py +516 -0
- loopx/history.py +1507 -0
- loopx/host_loop_activation.py +1311 -0
- loopx/host_mode_planner.py +991 -0
- loopx/install_contract.py +1 -0
- loopx/interface_budget.py +196 -0
- loopx/long_task_cadence.py +208 -0
- loopx/materials.py +185 -0
- loopx/ml_experiment.py +3 -0
- loopx/onboarding.py +214 -0
- loopx/opencode2_goal_mode/README.md +81 -0
- loopx/opencode2_goal_mode/__init__.py +9 -0
- loopx/opencode2_goal_mode/opencode2-goal-worker.mjs +1018 -0
- loopx/opencode_goal_mode/README.md +99 -0
- loopx/opencode_goal_mode/__init__.py +13 -0
- loopx/opencode_goal_mode/goal-bridge-runtime.mjs +858 -0
- loopx/opencode_goal_mode/loopx-goal.js +8 -0
- loopx/operator_gate.py +420 -0
- loopx/orchestration.py +127 -0
- loopx/paths.py +59 -0
- loopx/pi_goal_mode/README.md +67 -0
- loopx/pi_goal_mode/__init__.py +13 -0
- loopx/pi_goal_mode/loopx-goal.ts +254 -0
- loopx/pi_goal_mode/pi-goal-loop-runtime.mjs +574 -0
- loopx/pr_review.py +1206 -0
- loopx/presentation/__init__.py +1 -0
- loopx/presentation/explore_views.py +1334 -0
- loopx/presentation/markdown.py +61 -0
- loopx/presentation/projection_source_reconcile.py +140 -0
- loopx/presentation/public_safety.py +42 -0
- loopx/presentation/renderers/__init__.py +17 -0
- loopx/presentation/renderers/goal_channel_html.py +269 -0
- loopx/presentation/renderers/periodic_report_html.py +786 -0
- loopx/presentation/renderers/periodic_report_markdown.py +184 -0
- loopx/presentation/renderers/quota_event_markdown.py +116 -0
- loopx/presentation/renderers/quota_markdown.py +1112 -0
- loopx/presentation/renderers/status_markdown.py +1570 -0
- loopx/presentation/renderers/trajectory_hygiene_markdown.py +39 -0
- loopx/presentation/renderers/turn_envelope_markdown.py +33 -0
- loopx/presentation/sinks/__init__.py +5 -0
- loopx/presentation/sinks/openviking_periodic_report.py +7 -0
- loopx/presentation/static_site.py +691 -0
- loopx/presets.py +369 -0
- loopx/project_alias.py +217 -0
- loopx/project_map.py +589 -0
- loopx/project_prompt.py +1153 -0
- loopx/project_skill_cli.py +125 -0
- loopx/project_skill_delivery.py +470 -0
- loopx/project_uninstall.py +462 -0
- loopx/promotion_gate.py +197 -0
- loopx/quota.py +1197 -0
- loopx/ready_score.py +413 -0
- loopx/registry.py +621 -0
- loopx/registry_writability.py +64 -0
- loopx/release_candidate.py +148 -0
- loopx/release_manifest.py +316 -0
- loopx/repository_identity.py +100 -0
- loopx/review_packet.py +1024 -0
- loopx/rollout_event_log.py +505 -0
- loopx/runtime.py +112 -0
- loopx/self_update.py +750 -0
- loopx/session_runtime.py +418 -0
- loopx/skill_install_readback.py +500 -0
- loopx/slash_command_install.py +1393 -0
- loopx/slash_commands.py +264 -0
- loopx/state_backup.py +573 -0
- loopx/state_migration.py +350 -0
- loopx/state_projection.py +809 -0
- loopx/state_refresh.py +1416 -0
- loopx/status.py +1383 -0
- loopx/status_server.py +935 -0
- loopx/summary_all.py +725 -0
- loopx/terminal_bench_agent.py +2056 -0
- loopx/thread_agent_binding.py +408 -0
- loopx/todo_followups.py +168 -0
- loopx/todo_suggestion_prompt.py +204 -0
- loopx/todos.py +2229 -0
- loopx/turn_identity.py +17 -0
- loopx/upgrade.py +1083 -0
- loopx/visible_governance.py +667 -0
- loopx/visible_multi_agent_launcher.py +1253 -0
- loopx/visible_multi_agent_tmux.py +429 -0
- loopx/worker_bridge.py +1574 -0
- loopx-0.4.8.dist-info/METADATA +708 -0
- loopx-0.4.8.dist-info/RECORD +811 -0
- loopx-0.4.8.dist-info/WHEEL +5 -0
- loopx-0.4.8.dist-info/entry_points.txt +5 -0
- loopx-0.4.8.dist-info/licenses/LICENSE +202 -0
- loopx-0.4.8.dist-info/licenses/LICENSE-MIT +21 -0
- loopx-0.4.8.dist-info/licenses/NOTICE +6 -0
- loopx-0.4.8.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,1875 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Iterable, Mapping
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from ..extensions.runtime import extension_catalog_entries
|
|
8
|
+
from .decision_context.catalog_entry import DECISION_CONTEXT_CATALOG_ENTRY
|
|
9
|
+
from .issue_fix.workflow_plan import build_issue_fix_pr_lifecycle_command
|
|
10
|
+
from .registry import CapabilityRegistry
|
|
11
|
+
|
|
12
|
+
CAPABILITY_CATALOG_SCHEMA_VERSION = "loopx_capability_catalog_v0"
|
|
13
|
+
CAPABILITY_DETAIL_SCHEMA_VERSION = "loopx_capability_detail_v0"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
BUILTIN_CAPABILITIES: tuple[dict[str, Any], ...] = (
|
|
17
|
+
{
|
|
18
|
+
"id": "benchmark-toolkit",
|
|
19
|
+
"origin": "builtin",
|
|
20
|
+
"visibility": "public",
|
|
21
|
+
"provider_id": "loopx-core",
|
|
22
|
+
"title": "Benchmark experiment toolkit",
|
|
23
|
+
"status": "active-preview",
|
|
24
|
+
"real_world_anchor": (
|
|
25
|
+
"local no-upload agent benchmark experiments with independent scoring"
|
|
26
|
+
),
|
|
27
|
+
"user_value": (
|
|
28
|
+
"Prepare, qualify, compare, and record benchmark runs through one "
|
|
29
|
+
"fail-closed evidence lifecycle without publishing raw tasks, "
|
|
30
|
+
"trajectories, verifier output, credentials, or local paths."
|
|
31
|
+
),
|
|
32
|
+
"entry_command": "loopx benchmark --help",
|
|
33
|
+
"commands": [
|
|
34
|
+
{
|
|
35
|
+
"command": (
|
|
36
|
+
"loopx benchmark integrity-qualification "
|
|
37
|
+
"--trajectory-json <private.json> "
|
|
38
|
+
"--runtime-attestation-json <attestation.json> "
|
|
39
|
+
"--require-qualified --format json"
|
|
40
|
+
),
|
|
41
|
+
"purpose": (
|
|
42
|
+
"Reduce private ATIF tool evidence and runner-owned isolation "
|
|
43
|
+
"facts to a compact integrity qualification receipt."
|
|
44
|
+
),
|
|
45
|
+
"write_boundary": (
|
|
46
|
+
"read-only private local inputs; emits hashes, counts, and "
|
|
47
|
+
"reason codes only"
|
|
48
|
+
),
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"command": "loopx benchmark classify-artifacts <paths...> --format json",
|
|
52
|
+
"purpose": "Classify benchmark artifacts before reading or publishing them.",
|
|
53
|
+
"write_boundary": "path classification only; no file reads or writes",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"command": (
|
|
57
|
+
"loopx benchmark run <family> --goal-id <goal-id> --format json"
|
|
58
|
+
),
|
|
59
|
+
"purpose": (
|
|
60
|
+
"Build a compact benchmark_run_v0 or ingest supported official "
|
|
61
|
+
"result metadata through an adapter."
|
|
62
|
+
),
|
|
63
|
+
"write_boundary": (
|
|
64
|
+
"dry-run by default; explicit append paths consume compact "
|
|
65
|
+
"results and never publish raw evidence"
|
|
66
|
+
),
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"command": (
|
|
70
|
+
"loopx benchmark run-ledger-check --goal-id <goal-id> --format json"
|
|
71
|
+
),
|
|
72
|
+
"purpose": "Reconcile compact run history with the public benchmark ledger.",
|
|
73
|
+
"write_boundary": "read-only compact history and ledger",
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
"implemented_protocols": [
|
|
77
|
+
{
|
|
78
|
+
"schema_version": "benchmark_integrity_qualification_v0",
|
|
79
|
+
"module": "loopx.capabilities.benchmark_toolkit.integrity",
|
|
80
|
+
"doc": "docs/capabilities/benchmark-toolkit/README.md",
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"schema_version": "benchmark_runtime_integrity_attestation_v0",
|
|
84
|
+
"module": "loopx.capabilities.benchmark_toolkit.integrity",
|
|
85
|
+
"doc": "docs/capabilities/benchmark-toolkit/README.md",
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"schema_version": "run_permission_policy_v0",
|
|
89
|
+
"module": "loopx.benchmark_core.run_permissions",
|
|
90
|
+
"doc": "docs/capabilities/benchmark-toolkit/README.md",
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
"smokes": ["python -m pytest tests/capabilities/test_benchmark_toolkit.py -q"],
|
|
94
|
+
"docs": ["docs/capabilities/benchmark-toolkit/README.md"],
|
|
95
|
+
"boundaries": [
|
|
96
|
+
"The toolkit never grants runner, Docker, model, upload, submission, or publication authority; each effect remains separately gated.",
|
|
97
|
+
"Raw trajectories are private local inputs to integrity qualification and are never copied into receipts, ledgers, docs, or PR artifacts.",
|
|
98
|
+
"A clean trajectory scan is not isolation proof: runner-owned permission and verifier-order attestations are mandatory and fail closed when absent.",
|
|
99
|
+
"Integrity qualification establishes countability eligibility only; an independent official result and matched experiment contract are still required.",
|
|
100
|
+
"Benchmark-family wiring remains in benchmark_adapters; the toolkit owns provider-neutral experiment and evidence policy.",
|
|
101
|
+
],
|
|
102
|
+
"next_real_step": (
|
|
103
|
+
"Qualify one private local run, ingest its independent compact result, "
|
|
104
|
+
"and block the paired claim when either trajectory evidence or runner "
|
|
105
|
+
"isolation attestation is incomplete."
|
|
106
|
+
),
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": "integration-branch-reconcile",
|
|
110
|
+
"origin": "builtin",
|
|
111
|
+
"visibility": "public",
|
|
112
|
+
"provider_id": "loopx-core",
|
|
113
|
+
"title": "Local integration branch reconciliation",
|
|
114
|
+
"status": "active-preview",
|
|
115
|
+
"real_world_anchor": (
|
|
116
|
+
"long-running repository work with independently reviewed feature branches"
|
|
117
|
+
),
|
|
118
|
+
"user_value": (
|
|
119
|
+
"Keep one local integration branch aligned with the latest ordered "
|
|
120
|
+
"feature and fix heads without mutating or pushing those source branches."
|
|
121
|
+
),
|
|
122
|
+
"entry_command": (
|
|
123
|
+
"loopx integration-branch status --repo-path <repo> --format json"
|
|
124
|
+
),
|
|
125
|
+
"commands": [
|
|
126
|
+
{
|
|
127
|
+
"command": (
|
|
128
|
+
"loopx integration-branch configure --repo-path <repo> "
|
|
129
|
+
"--base-ref <base> --integration-branch <branch> "
|
|
130
|
+
"--source-branch <branch>... --execute --format json"
|
|
131
|
+
),
|
|
132
|
+
"purpose": "Write one ordered project-local branch plan with no sync receipt.",
|
|
133
|
+
"write_boundary": "ignored local plan only; no git ref or remote write",
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"command": (
|
|
137
|
+
"loopx integration-branch status --repo-path <repo> "
|
|
138
|
+
"[--refresh-remotes] --format json"
|
|
139
|
+
),
|
|
140
|
+
"purpose": "Optionally refresh remote-tracking refs, then compare exact base, source, and integration heads with the last successful sync.",
|
|
141
|
+
"write_boundary": "remote-read-only inputs; optional fetch updates configured local remote-tracking refs only",
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"command": (
|
|
145
|
+
"loopx integration-branch sync --repo-path <repo> "
|
|
146
|
+
"[--refresh-remotes] [--execute] --format json"
|
|
147
|
+
),
|
|
148
|
+
"purpose": "Preview or atomically publish an ordered merge candidate to the local integration branch.",
|
|
149
|
+
"write_boundary": "local integration branch, ignored receipt, and optional configured remote-tracking refs only; no source-branch or remote-repository write",
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
"implemented_protocols": [
|
|
153
|
+
{
|
|
154
|
+
"schema_version": "loopx_integration_branch_plan_v0",
|
|
155
|
+
"module": "loopx.capabilities.integration_branch.core",
|
|
156
|
+
"doc": "docs/capabilities/integration-branch/README.md",
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"schema_version": "loopx_integration_branch_status_v0",
|
|
160
|
+
"module": "loopx.capabilities.integration_branch.core",
|
|
161
|
+
"doc": "docs/capabilities/integration-branch/README.md",
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"schema_version": "loopx_integration_branch_sync_v0",
|
|
165
|
+
"module": "loopx.capabilities.integration_branch.core",
|
|
166
|
+
"doc": "docs/capabilities/integration-branch/README.md",
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
"smokes": ["python -m pytest tests/capabilities/test_integration_branch.py -q"],
|
|
170
|
+
"docs": ["docs/capabilities/integration-branch/README.md"],
|
|
171
|
+
"boundaries": [
|
|
172
|
+
"The plan is project-local and ignored; it records refs and sync receipts, not credentials, review bodies, or private evidence.",
|
|
173
|
+
"Sync uses exact resolved source heads and updates only the configured local integration branch after every ordered merge succeeds.",
|
|
174
|
+
"Dirty checked-out integration worktrees, merge conflicts, missing refs, and concurrent plan/input/integration movement fail closed before publication.",
|
|
175
|
+
"Remote refresh is explicit and remote-read-only; it updates only configured local remote-tracking refs and never pushes, force-pushes, retargets PRs, merges protected branches, or changes source branches.",
|
|
176
|
+
"v0 uses ordered merge commits; it does not rewrite or squash source history.",
|
|
177
|
+
],
|
|
178
|
+
"next_real_step": (
|
|
179
|
+
"Configure one local feature stack, change a source head after review, "
|
|
180
|
+
"and verify status reports drift before sync restores an exact readback."
|
|
181
|
+
),
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"id": "change-quality-qualification",
|
|
185
|
+
"origin": "builtin",
|
|
186
|
+
"visibility": "public",
|
|
187
|
+
"provider_id": "loopx-core",
|
|
188
|
+
"title": "Exact-scope change quality qualification",
|
|
189
|
+
"status": "active-preview",
|
|
190
|
+
"default_enabled": False,
|
|
191
|
+
"real_world_anchor": (
|
|
192
|
+
"provider-neutral final-diff review with bounded repair and merge evidence"
|
|
193
|
+
),
|
|
194
|
+
"user_value": (
|
|
195
|
+
"Give every managed project the same compact engineering-quality "
|
|
196
|
+
"contract without assuming its language, framework, or agent host."
|
|
197
|
+
),
|
|
198
|
+
"entry_command": (
|
|
199
|
+
"loopx change-quality prepare --goal-id <goal-id> "
|
|
200
|
+
"--repo-path <repo> --format json"
|
|
201
|
+
),
|
|
202
|
+
"workflow_skill": {
|
|
203
|
+
"name": "loopx-change-quality",
|
|
204
|
+
"delivery": "project_managed_copy",
|
|
205
|
+
"activation": "explicit_project_install_plus_goal_policy",
|
|
206
|
+
"project_copy_required": True,
|
|
207
|
+
"install_command": (
|
|
208
|
+
"loopx project-skill install --project . --skill "
|
|
209
|
+
"loopx-change-quality --surface codex --execute"
|
|
210
|
+
),
|
|
211
|
+
},
|
|
212
|
+
"commands": [
|
|
213
|
+
{
|
|
214
|
+
"command": (
|
|
215
|
+
"loopx change-quality prepare --goal-id <goal-id> "
|
|
216
|
+
"--repo-path <repo> --format json"
|
|
217
|
+
),
|
|
218
|
+
"purpose": "Build a self-contained review contract for the exact final diff.",
|
|
219
|
+
"write_boundary": "read-only git and registry projection; no code or receipt write",
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"command": (
|
|
223
|
+
"loopx change-quality record --goal-id <goal-id> "
|
|
224
|
+
"--repo-path <repo> --result-json <result.json> --execute --format json"
|
|
225
|
+
),
|
|
226
|
+
"purpose": "Validate a provider result against the exact diff and store its receipt.",
|
|
227
|
+
"write_boundary": "atomic goal-runtime receipt only; no repository or external write",
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"command": (
|
|
231
|
+
"loopx change-quality verify --goal-id <goal-id> "
|
|
232
|
+
"--repo-path <repo> --format json"
|
|
233
|
+
),
|
|
234
|
+
"purpose": "Verify goal policy and the current exact-diff receipt.",
|
|
235
|
+
"write_boundary": "read-only registry, git, and runtime receipt verification",
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"command": (
|
|
239
|
+
"loopx canary premerge --from-git-diff --goal-id <goal-id>"
|
|
240
|
+
),
|
|
241
|
+
"purpose": "Apply strict receipt policy inside the authoritative premerge gate.",
|
|
242
|
+
"write_boundary": "validation only; no merge, push, or external action",
|
|
243
|
+
},
|
|
244
|
+
],
|
|
245
|
+
"implemented_protocols": [
|
|
246
|
+
{
|
|
247
|
+
"schema_version": "change_quality_scope_v0",
|
|
248
|
+
"module": "loopx.capabilities.change_quality.scope",
|
|
249
|
+
"doc": "docs/capabilities/change-quality/README.md",
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"schema_version": "change_quality_prepare_packet_v2",
|
|
253
|
+
"module": "loopx.capabilities.change_quality.receipt",
|
|
254
|
+
"doc": "docs/capabilities/change-quality/README.md",
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"schema_version": "change_quality_agent_result_v2",
|
|
258
|
+
"module": "loopx.capabilities.change_quality.result",
|
|
259
|
+
"doc": "docs/capabilities/change-quality/README.md",
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"schema_version": "change_quality_receipt_v2",
|
|
263
|
+
"module": "loopx.capabilities.change_quality.receipt",
|
|
264
|
+
"doc": "docs/capabilities/change-quality/README.md",
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"schema_version": "change_quality_receipt_verification_v2",
|
|
268
|
+
"module": "loopx.capabilities.change_quality.receipt",
|
|
269
|
+
"doc": "docs/capabilities/change-quality/README.md",
|
|
270
|
+
},
|
|
271
|
+
],
|
|
272
|
+
"smokes": ["python3 examples/change-quality-qualification-smoke.py"],
|
|
273
|
+
"docs": ["docs/capabilities/change-quality/README.md"],
|
|
274
|
+
"boundaries": [
|
|
275
|
+
"The capability is default-off and activates only through explicit per-goal policy; managed skill discovery is a separate project-level choice.",
|
|
276
|
+
"safe_fix permits at most one bounded repair pass; it grants no destructive git, permission expansion, or unrelated refactor authority.",
|
|
277
|
+
"strict_receipt is an exact-diff premerge evidence gate and does not itself permit code mutation.",
|
|
278
|
+
"Subjective style advice stays nonblocking; only concrete correctness, security, privacy, contract, or required-validation failures may block.",
|
|
279
|
+
"Turn may transport a packet or receipt reference, but premerge remains the enforcement authority.",
|
|
280
|
+
"The canonical workflow skill is release-owned and project-delivered; the global installer does not publish it into every agent configuration.",
|
|
281
|
+
"Receipts stay in local runtime state; raw model transcripts, private context, and credentials are not persisted.",
|
|
282
|
+
"Agents write only grounded reuse and simplification conclusions, sparse triggered risks, and validation evidence; LoopX derives guardrail states.",
|
|
283
|
+
"Existing v1 receipts remain verifiable read-only for their exact scope; new receipts use v2.",
|
|
284
|
+
"The first version is single-level: it qualifies one final diff and does not recursively review reviews.",
|
|
285
|
+
],
|
|
286
|
+
"next_real_step": (
|
|
287
|
+
"Enable it on an explicit goal, qualify one final diff, and verify "
|
|
288
|
+
"that safe-fix and strict-receipt policies remain independently enforced."
|
|
289
|
+
),
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"id": "pull-request-review",
|
|
293
|
+
"origin": "builtin",
|
|
294
|
+
"visibility": "public",
|
|
295
|
+
"provider_id": "loopx-core",
|
|
296
|
+
"title": "Autonomous pull-request review queue",
|
|
297
|
+
"status": "active-preview",
|
|
298
|
+
"default_enabled": False,
|
|
299
|
+
"real_world_anchor": "maintainer review of a changing public GitHub PR queue",
|
|
300
|
+
"user_value": (
|
|
301
|
+
"Turn one complete open-PR observation into a deterministic exact-head "
|
|
302
|
+
"review candidate without repeating unchanged work or granting review writes."
|
|
303
|
+
),
|
|
304
|
+
"entry_command": (
|
|
305
|
+
"loopx pr-review --repo <owner/repo> --state open "
|
|
306
|
+
"--autonomous-observation --format json"
|
|
307
|
+
),
|
|
308
|
+
"commands": [
|
|
309
|
+
{
|
|
310
|
+
"command": (
|
|
311
|
+
"loopx pr-review --repo <owner/repo> --state open "
|
|
312
|
+
"--autonomous-observation --format json"
|
|
313
|
+
),
|
|
314
|
+
"purpose": "Observe one complete public PR queue and emit at most one exact-head candidate.",
|
|
315
|
+
"write_boundary": "public GitHub metadata read only; no review, comment, todo, push, or merge write",
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"command": (
|
|
319
|
+
"loopx pr-review --repo <owner/repo> --state open "
|
|
320
|
+
"--autonomous-observation --previous-observation-json "
|
|
321
|
+
"<previous.json> [--handled-exact-head NUMBER@HEAD_OID] "
|
|
322
|
+
"--format json"
|
|
323
|
+
),
|
|
324
|
+
"purpose": "Classify a complete queue and advance from explicitly handled exact heads to the next unhandled candidate.",
|
|
325
|
+
"write_boundary": "reads one caller-supplied local observation; emits a preview only and grants no external authority",
|
|
326
|
+
},
|
|
327
|
+
],
|
|
328
|
+
"implemented_protocols": [
|
|
329
|
+
{
|
|
330
|
+
"schema_version": "pull_request_review_execution_contract_v1",
|
|
331
|
+
"module": "loopx.capabilities.pr_review_queue.review_contract",
|
|
332
|
+
"doc": "docs/reference/protocols/pr-review-command-v0.md",
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
"schema_version": "pull_request_review_plan_v1",
|
|
336
|
+
"module": "loopx.capabilities.pr_review_queue.review_contract",
|
|
337
|
+
"doc": "docs/reference/protocols/pr-review-command-v0.md",
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
"schema_version": "pull_request_review_result_v1",
|
|
341
|
+
"module": "loopx.capabilities.pr_review_queue.review_contract",
|
|
342
|
+
"doc": "docs/reference/protocols/pr-review-command-v0.md",
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
"schema_version": "pull_request_review_queue_observation_v0",
|
|
346
|
+
"module": "loopx.capabilities.pr_review_queue.core",
|
|
347
|
+
"doc": "docs/reference/protocols/pr-review-command-v0.md",
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"schema_version": "pull_request_review_candidate_v0",
|
|
351
|
+
"module": "loopx.capabilities.pr_review_queue.core",
|
|
352
|
+
"doc": "docs/reference/protocols/pr-review-command-v0.md",
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"schema_version": "pull_request_review_todo_preview_v0",
|
|
356
|
+
"module": "loopx.capabilities.pr_review_queue.core",
|
|
357
|
+
"doc": "docs/reference/protocols/pr-review-command-v0.md",
|
|
358
|
+
},
|
|
359
|
+
],
|
|
360
|
+
"smokes": [
|
|
361
|
+
"python -m pytest tests/capabilities/test_pr_review_queue.py -q",
|
|
362
|
+
"python3 examples/pr-review-command-smoke.py",
|
|
363
|
+
],
|
|
364
|
+
"docs": ["docs/reference/protocols/pr-review-command-v0.md"],
|
|
365
|
+
"boundaries": [
|
|
366
|
+
"The shared execution contract owns review depth, evidence completeness, exact-head freshness, symbol-map, walkthrough, validation, failure, and code-volume requirements; host skills only route and publish it.",
|
|
367
|
+
"A queue is observed only when result_completeness.complete=true; partial or failed reads are not_observed and never count as unchanged.",
|
|
368
|
+
"Fingerprints cover exact head, review decision, check state, draft state, and mergeability for every open PR.",
|
|
369
|
+
"One observation emits at most one exact-head advancement Todo preview; unchanged observations emit no duplicate candidate and may advance only from an explicit handled exact-head cursor.",
|
|
370
|
+
"The capability reuses the existing pr-review GitHub scan and normalized packet; it does not add a second provider or capture review bodies and logs.",
|
|
371
|
+
"Candidate selection grants no GitHub review, comment, push, merge, quota, or Todo-write authority; those remain with their existing policy surfaces.",
|
|
372
|
+
],
|
|
373
|
+
"next_real_step": (
|
|
374
|
+
"Persist one observation fingerprint in a continuous-monitor Todo, "
|
|
375
|
+
"observe a changed head, and materialize exactly one candidate through normal Todo authority."
|
|
376
|
+
),
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
"id": "issue-fix",
|
|
380
|
+
"origin": "builtin",
|
|
381
|
+
"visibility": "public",
|
|
382
|
+
"provider_id": "loopx-core",
|
|
383
|
+
"title": "Repo issue-fix loop",
|
|
384
|
+
"status": "active-preview",
|
|
385
|
+
"default_enabled": False,
|
|
386
|
+
"real_world_anchor": "open-source issue/PR solver",
|
|
387
|
+
"user_value": (
|
|
388
|
+
"Turn a public GitHub issue or PR signal into a caller-approved "
|
|
389
|
+
"local issue branch with validation evidence and a PR-review packet."
|
|
390
|
+
),
|
|
391
|
+
"entry_command": "loopx issue-fix workflow-plan --url <github-issue-url> --format json",
|
|
392
|
+
"commands": [
|
|
393
|
+
{
|
|
394
|
+
"command": "loopx content-ops issue-fix-metadata-preview --url <github-issue-url> --fetch-metadata --format json",
|
|
395
|
+
"purpose": "Fetch body-free public GitHub issue/PR metadata.",
|
|
396
|
+
"write_boundary": "read-only external metadata; no issue comment, PR, or todo write",
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
"command": "loopx value-connectors github-public-probe --url <github-issue-or-pr-url> --fetch-metadata --format json",
|
|
400
|
+
"purpose": "Use the compatibility CLI to fetch the issue-fix-owned public GitHub probe packet.",
|
|
401
|
+
"write_boundary": "public metadata read only; no issue bodies, comments, PRs, account changes, or writes",
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
"command": "loopx value-connectors github-reply-monitor --issue-url <github-issue-or-pr-url> --after-comment-url <github-issue-comment-url> --fetch-metadata --format json",
|
|
405
|
+
"purpose": "Use the compatibility CLI to detect public maintainer replies through the issue-fix provider.",
|
|
406
|
+
"write_boundary": "public comment metadata read only; no comment bodies, thread bump, or external write",
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"command": "loopx content-ops issue-fix-intake --format json",
|
|
410
|
+
"purpose": "Project public issue metadata into an issue-fix intake packet.",
|
|
411
|
+
"write_boundary": "fixture-only; no external read or write",
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
"command": "loopx issue-fix workflow-plan --url <github-issue-url> --repo-path <repo> --repository-context-json <context.json> --format json",
|
|
415
|
+
"purpose": "Compose metadata, repository context, intake, feasibility, validation labels, and PR review readiness blockers.",
|
|
416
|
+
"write_boundary": "preview-only; no todo write, repo execution, external comment, PR creation, merge, or publish",
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
"command": "loopx issue-fix feasibility --url <github-issue-url> --reproduction-status <state> --scope-class <scope> --repository-context-json <context.json> --goal-id <goal-id> --format json",
|
|
420
|
+
"purpose": "Select one route and persist its compact repository evidence basis with feasibility domain state.",
|
|
421
|
+
"write_boundary": "writes compact project-local domain state with goal or ledger context; no raw issue/comment/log capture or external write",
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"command": "loopx issue-fix promote-discovered-issue --goal-id <goal-id> --project <repo> --promotion-json <promotion.json> --execute --format json",
|
|
425
|
+
"purpose": "Create or reuse one canonical public issue for a reproducible discovered defect and replace its local placeholder.",
|
|
426
|
+
"write_boundary": "active publish authority only; bounded issue create/reuse and optional PR closing-reference verification plus compact issue-fix domain-state reconciliation; no merge or production action",
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"command": "loopx issue-fix reviewer-plan --repo-path <repo> --repo <owner/repo> --base-ref <base-ref> --execute --format json",
|
|
430
|
+
"purpose": "Rank explainable reviewer candidates from CODEOWNERS and changed-path/module history.",
|
|
431
|
+
"write_boundary": "approved local repo read only; no external review request",
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
"command": "loopx issue-fix reviewer-request --url <github-pr-url> --repo-path <repo> --base-ref <base-ref> [--notification-sinks-json <local-private.json>] --execute --format json",
|
|
435
|
+
"purpose": "Under reviewer-notification authority, exclude the live PR author, establish canonical GitHub coverage, and optionally deliver the same reviewer through verified project-dedicated sinks.",
|
|
436
|
+
"write_boundary": "one formal GitHub review request, or one reviewer-tagging comment only after confirmed permission denial; optional configured secondary sends consume local-private identity/destination data without copying it; no arbitrary comment, push, merge, or publish",
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"command": "loopx issue-fix reviewer-notification-drain --goal-id <goal-id> --project <project> --execute --format json",
|
|
440
|
+
"purpose": "Drain one bounded review-required state bucket after live PR verification while preserving one PR per group message.",
|
|
441
|
+
"write_boundary": "verified configured secondary sends plus compact receipt or stale-queue state writeback; no per-PR continuous monitor, arbitrary comment, push, merge, or publish",
|
|
442
|
+
},
|
|
443
|
+
{
|
|
444
|
+
"command": build_issue_fix_pr_lifecycle_command(
|
|
445
|
+
cli_bin="loopx",
|
|
446
|
+
goal_id="<goal-id>",
|
|
447
|
+
agent_id="<agent-id>",
|
|
448
|
+
project="<repo>",
|
|
449
|
+
),
|
|
450
|
+
"purpose": "Project public PR lifecycle state and reconcile its grouped monitor, successor, user gate, or no-follow-up transition.",
|
|
451
|
+
"write_boundary": "reads compact public PR metadata and writes compact project-local domain state plus generic LoopX todos; no external comment, PR creation, merge, raw logs, or body/comment capture",
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
"command": "loopx issue-fix outcome --goal-id <goal-id> --repo <owner/repo> --issue-ref <issue-ref> --pr-ref <pr-ref> --format json",
|
|
455
|
+
"purpose": "Compose one operator-facing issue status/output card from existing feasibility, repository context, optional delivery evidence, and PR lifecycle state.",
|
|
456
|
+
"write_boundary": "read-only derived projection; writes no source ledger and performs no external action",
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
"command": "loopx issue-fix acceptance-fixture --format json",
|
|
460
|
+
"purpose": "Prove the failure-before/fix-after acceptance loop on a deterministic fixture.",
|
|
461
|
+
"write_boundary": "temporary local fixture only",
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"command": "loopx issue-fix repo-branch-fixture --format json",
|
|
465
|
+
"purpose": "Exercise the same loop through a temporary git issue branch.",
|
|
466
|
+
"write_boundary": "temporary local git fixture only",
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
"command": "loopx issue-fix caller-repo-branch --repo-path <repo> --validation-command <cmd> --execute --format json",
|
|
470
|
+
"purpose": "Create or claim a caller-approved local issue branch and run caller-declared validation.",
|
|
471
|
+
"write_boundary": "approved local repo only; no external comment, PR creation, merge, or publish",
|
|
472
|
+
},
|
|
473
|
+
],
|
|
474
|
+
"implemented_protocols": [
|
|
475
|
+
{
|
|
476
|
+
"schema_version": "github_public_channel_probe_packet_v0",
|
|
477
|
+
"module": "loopx.capabilities.issue_fix.github_public",
|
|
478
|
+
"doc": "docs/reference/protocols/value-connector-plan-v0.md",
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
"schema_version": "github_public_reply_monitor_packet_v0",
|
|
482
|
+
"module": "loopx.capabilities.issue_fix.github_public",
|
|
483
|
+
"doc": "docs/reference/protocols/value-connector-plan-v0.md",
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
"schema_version": "github_issue_metadata_preview_v0",
|
|
487
|
+
"module": "loopx.capabilities.issue_fix.metadata_preview",
|
|
488
|
+
"doc": "docs/reference/protocols/content-ops-surface-v0.md",
|
|
489
|
+
},
|
|
490
|
+
{
|
|
491
|
+
"schema_version": "content_ops_issue_fix_metadata_preview_packet_v0",
|
|
492
|
+
"module": "loopx.capabilities.issue_fix.intake_surface",
|
|
493
|
+
"doc": "docs/reference/protocols/content-ops-surface-v0.md",
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"schema_version": "content_ops_issue_fix_intake_packet_v0",
|
|
497
|
+
"module": "loopx.capabilities.issue_fix.intake_surface",
|
|
498
|
+
"doc": "docs/reference/protocols/content-ops-surface-v0.md",
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
"schema_version": "issue_fix_intake_v0",
|
|
502
|
+
"module": "loopx.capabilities.issue_fix.intake_surface",
|
|
503
|
+
"doc": "docs/reference/protocols/content-ops-surface-v0.md",
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
"schema_version": "issue_fix_workflow_plan_packet_v0",
|
|
507
|
+
"module": "loopx.capabilities.issue_fix.workflow_plan",
|
|
508
|
+
"doc": "docs/capabilities/issue-fix/protocols/issue-fix-workflow-contract-v0.md",
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
"schema_version": "issue_fix_repository_context_v0",
|
|
512
|
+
"module": "loopx.capabilities.issue_fix.repository_context",
|
|
513
|
+
"doc": "docs/capabilities/issue-fix/protocols/issue-fix-workflow-contract-v0.md",
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
"schema_version": "issue_fix_feasibility_v0",
|
|
517
|
+
"module": "loopx.capabilities.issue_fix.feasibility",
|
|
518
|
+
"doc": "docs/capabilities/issue-fix/protocols/issue-fix-workflow-contract-v0.md",
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
"schema_version": "issue_fix_discovered_issue_promotion_v0",
|
|
522
|
+
"module": "loopx.capabilities.issue_fix.discovered_issue_promotion",
|
|
523
|
+
"doc": "docs/capabilities/issue-fix/protocols/issue-fix-discovered-issue-promotion-v0.md",
|
|
524
|
+
},
|
|
525
|
+
{
|
|
526
|
+
"schema_version": "issue_fix_pr_lifecycle_monitor_v0",
|
|
527
|
+
"module": "loopx.capabilities.issue_fix.pr_lifecycle",
|
|
528
|
+
"doc": "docs/capabilities/issue-fix/protocols/issue-fix-workflow-contract-v0.md",
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
"schema_version": "issue_fix_maintainer_correction_input_v0",
|
|
532
|
+
"module": "loopx.capabilities.issue_fix.pr_lifecycle",
|
|
533
|
+
"doc": "docs/capabilities/issue-fix/README.md",
|
|
534
|
+
},
|
|
535
|
+
{
|
|
536
|
+
"schema_version": "issue_fix_reviewer_recommendation_v0",
|
|
537
|
+
"module": "loopx.capabilities.issue_fix.reviewer_recommendation",
|
|
538
|
+
"doc": "docs/capabilities/issue-fix/protocols/issue-fix-reviewer-recommendation-v0.md",
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
"schema_version": "issue_fix_reviewer_request_v0",
|
|
542
|
+
"module": "loopx.capabilities.issue_fix.reviewer_request",
|
|
543
|
+
"doc": "docs/capabilities/issue-fix/protocols/issue-fix-reviewer-request-v0.md",
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
"schema_version": "issue_fix_reviewer_notification_sinks_result_v0",
|
|
547
|
+
"module": "loopx.capabilities.issue_fix.reviewer_notification",
|
|
548
|
+
"doc": "docs/capabilities/issue-fix/protocols/issue-fix-reviewer-notification-sinks-v0.md",
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
"schema_version": "issue_fix_reviewer_notification_drain_v0",
|
|
552
|
+
"module": "loopx.capabilities.issue_fix.reviewer_notification_drain",
|
|
553
|
+
"doc": "docs/capabilities/issue-fix/protocols/issue-fix-reviewer-notification-sinks-v0.md",
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
"schema_version": "issue_fix_outcome_projection_v0",
|
|
557
|
+
"module": "loopx.capabilities.issue_fix.outcome_projection",
|
|
558
|
+
"doc": "docs/capabilities/issue-fix/protocols/issue-fix-workflow-contract-v0.md",
|
|
559
|
+
},
|
|
560
|
+
{
|
|
561
|
+
"schema_version": "issue_fix_validated_outcome_memory_writeback_v0",
|
|
562
|
+
"module": "loopx.capabilities.issue_fix.repository_memory_provider",
|
|
563
|
+
"doc": "docs/capabilities/issue-fix/README.md",
|
|
564
|
+
},
|
|
565
|
+
{
|
|
566
|
+
"schema_version": "issue_fix_acceptance_loop_v0",
|
|
567
|
+
"module": "loopx.capabilities.issue_fix.acceptance_loop",
|
|
568
|
+
"doc": "docs/capabilities/issue-fix/protocols/issue-fix-acceptance-loop-v0.md",
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
"schema_version": "issue_fix_validated_fix_artifact_v0",
|
|
572
|
+
"module": "loopx.capabilities.issue_fix.acceptance_loop",
|
|
573
|
+
"doc": "docs/capabilities/issue-fix/protocols/issue-fix-acceptance-loop-v0.md",
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
"schema_version": "issue_fix_caller_repo_branch_packet_v0",
|
|
577
|
+
"module": "loopx.capabilities.issue_fix.acceptance_loop",
|
|
578
|
+
"doc": "docs/capabilities/issue-fix/protocols/issue-fix-acceptance-loop-v0.md",
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"schema_version": "issue_fix_pr_review_binding_v0",
|
|
582
|
+
"module": "loopx.capabilities.issue_fix.pr_review_ack",
|
|
583
|
+
"doc": "docs/project-agent-todo-contract.md",
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
"schema_version": "issue_fix_pr_review_ack_receipt_v0",
|
|
587
|
+
"module": "loopx.capabilities.issue_fix.pr_review_ack",
|
|
588
|
+
"doc": "docs/project-agent-todo-contract.md",
|
|
589
|
+
},
|
|
590
|
+
{
|
|
591
|
+
"schema_version": "issue_fix_pr_review_acked_reconciliation_v0",
|
|
592
|
+
"module": "loopx.capabilities.issue_fix.pr_gate_reconcile",
|
|
593
|
+
"doc": "docs/project-agent-todo-contract.md",
|
|
594
|
+
},
|
|
595
|
+
],
|
|
596
|
+
"smokes": [
|
|
597
|
+
"python3 examples/value-connectors-github-public-probe-smoke.py",
|
|
598
|
+
"python3 examples/issue-fix-workflow-plan-smoke.py",
|
|
599
|
+
"python3 examples/issue-fix-repository-context-smoke.py",
|
|
600
|
+
"python3 examples/issue-fix-feasibility-smoke.py",
|
|
601
|
+
"python3 examples/issue-fix-discovered-issue-promotion-smoke.py",
|
|
602
|
+
"python3 examples/issue-fix-pr-lifecycle-smoke.py",
|
|
603
|
+
"python3 examples/issue-fix-pr-review-reconcile-smoke.py",
|
|
604
|
+
"python3 examples/issue-fix-maintainer-correction-smoke.py",
|
|
605
|
+
"python3 examples/issue-fix-outcome-projection-smoke.py",
|
|
606
|
+
"python3 examples/issue-fix-validated-memory-writeback-smoke.py",
|
|
607
|
+
"python3 examples/issue-fix-reviewer-recommendation-smoke.py",
|
|
608
|
+
"python3 examples/issue-fix-reviewer-request-smoke.py",
|
|
609
|
+
"python3 examples/issue-fix-json-input-boundary-smoke.py",
|
|
610
|
+
"python3 examples/issue-fix-reviewer-notification-sink-smoke.py",
|
|
611
|
+
"python3 examples/content-ops-issue-fix-metadata-preview-smoke.py",
|
|
612
|
+
"python3 examples/content-ops-issue-fix-intake-smoke.py",
|
|
613
|
+
"python3 examples/issue-fix-acceptance-loop-smoke.py",
|
|
614
|
+
],
|
|
615
|
+
"docs": [
|
|
616
|
+
"docs/capabilities/issue-fix/README.md",
|
|
617
|
+
"docs/reference/protocols/value-connector-plan-v0.md",
|
|
618
|
+
"docs/capabilities/issue-fix/openviking-pilot-handoff.md",
|
|
619
|
+
"docs/capabilities/issue-fix/protocols/issue-fix-workflow-contract-v0.md",
|
|
620
|
+
"docs/capabilities/issue-fix/protocols/issue-fix-discovered-issue-promotion-v0.md",
|
|
621
|
+
"docs/capabilities/issue-fix/protocols/issue-fix-reviewer-recommendation-v0.md",
|
|
622
|
+
"docs/capabilities/issue-fix/protocols/issue-fix-reviewer-request-v0.md",
|
|
623
|
+
"docs/capabilities/issue-fix/protocols/issue-fix-reviewer-notification-sinks-v0.md",
|
|
624
|
+
"docs/capabilities/issue-fix/protocols/issue-fix-acceptance-loop-v0.md",
|
|
625
|
+
"docs/reference/protocols/content-ops-surface-v0.md",
|
|
626
|
+
"docs/reference/protocols/issue-fix-acceptance-loop-v0.md",
|
|
627
|
+
],
|
|
628
|
+
"boundaries": [
|
|
629
|
+
"GitHub issue body, comments, timeline, and raw provider payloads are gated and not copied.",
|
|
630
|
+
"Caller repo mode reads and writes only the explicitly approved local git repo.",
|
|
631
|
+
"Arbitrary external comments, PR creation, merge, publish, and destructive git remain separately gated; reviewer-request may use one reviewer-tagging comment only as a verified permission-denial fallback under the same narrow authority.",
|
|
632
|
+
"Secondary reviewer sinks require an explicit project-dedicated identity and local-private destination/member mapping; no credential, raw roster, provider response, or private identifier enters public state.",
|
|
633
|
+
],
|
|
634
|
+
"next_real_step": (
|
|
635
|
+
"Exercise route selection and continuation on a public issue-fix pilot, "
|
|
636
|
+
"while keeping external PR/comment actions explicit."
|
|
637
|
+
),
|
|
638
|
+
},
|
|
639
|
+
DECISION_CONTEXT_CATALOG_ENTRY,
|
|
640
|
+
{
|
|
641
|
+
"id": "project-skill-delivery",
|
|
642
|
+
"origin": "builtin",
|
|
643
|
+
"visibility": "public",
|
|
644
|
+
"provider_id": "loopx-core",
|
|
645
|
+
"title": "Managed project skill delivery",
|
|
646
|
+
"status": "active-preview",
|
|
647
|
+
"real_world_anchor": (
|
|
648
|
+
"one release-owned skill delivered into selected projects for "
|
|
649
|
+
"Codex, Claude Code, or OpenCode"
|
|
650
|
+
),
|
|
651
|
+
"user_value": (
|
|
652
|
+
"Keep capability skills out of global agent configuration while "
|
|
653
|
+
"installing, upgrading, and removing verified project-local copies "
|
|
654
|
+
"through one host-neutral lifecycle."
|
|
655
|
+
),
|
|
656
|
+
"entry_command": (
|
|
657
|
+
"loopx project-skill status --project . --skill <skill-id> "
|
|
658
|
+
"--surface codex --format json"
|
|
659
|
+
),
|
|
660
|
+
"commands": [
|
|
661
|
+
{
|
|
662
|
+
"command": (
|
|
663
|
+
"loopx project-skill status --project . --skill "
|
|
664
|
+
"<skill-id> --surface <surface> --format json"
|
|
665
|
+
),
|
|
666
|
+
"purpose": "Inspect source and managed-copy digests without writing the project.",
|
|
667
|
+
"write_boundary": "read-only project and release inspection",
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
"command": (
|
|
671
|
+
"loopx project-skill install --project . --skill "
|
|
672
|
+
"<skill-id> --surface <surface> --execute --format json"
|
|
673
|
+
),
|
|
674
|
+
"purpose": "Transactionally install or upgrade one release-owned project skill for one or more agent hosts.",
|
|
675
|
+
"write_boundary": "managed host-native project skill directories only; unmanaged or locally modified targets fail closed",
|
|
676
|
+
},
|
|
677
|
+
{
|
|
678
|
+
"command": (
|
|
679
|
+
"loopx project-skill uninstall --project . --skill "
|
|
680
|
+
"<skill-id> --surface <surface> --execute --format json"
|
|
681
|
+
),
|
|
682
|
+
"purpose": "Transactionally remove verified managed copies while preserving user-owned targets.",
|
|
683
|
+
"write_boundary": "verified managed host-native project skill directories only",
|
|
684
|
+
},
|
|
685
|
+
],
|
|
686
|
+
"implemented_protocols": [
|
|
687
|
+
{
|
|
688
|
+
"schema_version": "loopx_project_skill_status_v0",
|
|
689
|
+
"module": "loopx.project_skill_delivery",
|
|
690
|
+
"doc": "docs/reference/project-skill-delivery.md",
|
|
691
|
+
},
|
|
692
|
+
{
|
|
693
|
+
"schema_version": "loopx_managed_project_skill_v0",
|
|
694
|
+
"module": "loopx.project_skill_delivery",
|
|
695
|
+
"doc": "docs/reference/project-skill-delivery.md",
|
|
696
|
+
},
|
|
697
|
+
],
|
|
698
|
+
"docs": ["docs/reference/project-skill-delivery.md"],
|
|
699
|
+
"boundaries": [
|
|
700
|
+
"Only skills marked project-scoped in the LoopX release can be delivered.",
|
|
701
|
+
"Project connection, preview-first mutation, digest readback, symlink containment, and rollback are mandatory.",
|
|
702
|
+
"Skill discovery never creates a goal, todo, write scope, domain authority, credential, or external permission.",
|
|
703
|
+
"Public delivery metadata contains no private project content, locators, provider payloads, or credentials.",
|
|
704
|
+
],
|
|
705
|
+
"next_real_step": (
|
|
706
|
+
"Dogfood a second project-scoped skill or host combination before "
|
|
707
|
+
"considering higher-level automatic installation."
|
|
708
|
+
),
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
"id": "material-lifecycle",
|
|
712
|
+
"origin": "builtin",
|
|
713
|
+
"visibility": "public",
|
|
714
|
+
"provider_id": "loopx-core",
|
|
715
|
+
"title": "Backup-safe material inventory, ranked-entry rebuild, and rerank",
|
|
716
|
+
"status": "experimental",
|
|
717
|
+
"default_enabled": False,
|
|
718
|
+
"real_world_anchor": (
|
|
719
|
+
"large local candidate and archive stores that must remain "
|
|
720
|
+
"recoverable while decisions change their short-list"
|
|
721
|
+
),
|
|
722
|
+
"user_value": (
|
|
723
|
+
"Preserve raw source authority and stable material references while "
|
|
724
|
+
"making migration, archive transitions, structural entry rebuilds, "
|
|
725
|
+
"and small reranks auditable."
|
|
726
|
+
),
|
|
727
|
+
"entry_command": "loopx material-lifecycle architecture --format json",
|
|
728
|
+
"workflow_skill": {
|
|
729
|
+
"name": "loopx-material",
|
|
730
|
+
"delivery": "project_managed_copy",
|
|
731
|
+
"activation": "explicit_project_install_plus_goal_authority",
|
|
732
|
+
"project_copy_required": True,
|
|
733
|
+
"install_command": (
|
|
734
|
+
"loopx project-skill install --project . --skill "
|
|
735
|
+
"loopx-material --surface codex --execute"
|
|
736
|
+
),
|
|
737
|
+
},
|
|
738
|
+
"commands": [
|
|
739
|
+
{
|
|
740
|
+
"command": "loopx material-lifecycle architecture --format json",
|
|
741
|
+
"purpose": "Render the default-off Stage-0 inventory, migration, lifecycle, and bounded-rerank boundaries.",
|
|
742
|
+
"write_boundary": "stateless contract output only; no source store, backup, goal state, provider, or external write",
|
|
743
|
+
}
|
|
744
|
+
],
|
|
745
|
+
"implemented_protocols": [
|
|
746
|
+
{
|
|
747
|
+
"schema_version": "material_lifecycle_architecture_v0",
|
|
748
|
+
"module": "loopx.capabilities.material_lifecycle.architecture",
|
|
749
|
+
"doc": "docs/reference/protocols/material-lifecycle-architecture-v0.md",
|
|
750
|
+
},
|
|
751
|
+
{
|
|
752
|
+
"schema_version": "material_store_inventory_v0",
|
|
753
|
+
"module": "loopx.capabilities.material_lifecycle.inventory",
|
|
754
|
+
"doc": "docs/reference/protocols/material-lifecycle-architecture-v0.md",
|
|
755
|
+
},
|
|
756
|
+
{
|
|
757
|
+
"schema_version": "material_migration_plan_v0",
|
|
758
|
+
"module": "loopx.capabilities.material_lifecycle.inventory",
|
|
759
|
+
"doc": "docs/reference/protocols/material-lifecycle-architecture-v0.md",
|
|
760
|
+
},
|
|
761
|
+
{
|
|
762
|
+
"schema_version": "material_lifecycle_receipt_v0",
|
|
763
|
+
"module": "loopx.capabilities.material_lifecycle.lifecycle",
|
|
764
|
+
"doc": "docs/reference/protocols/material-lifecycle-architecture-v0.md",
|
|
765
|
+
},
|
|
766
|
+
{
|
|
767
|
+
"schema_version": "material_rerank_proposal_v0",
|
|
768
|
+
"module": "loopx.capabilities.material_lifecycle.ranking",
|
|
769
|
+
"doc": "docs/reference/protocols/material-lifecycle-architecture-v0.md",
|
|
770
|
+
},
|
|
771
|
+
{
|
|
772
|
+
"schema_version": "material_rerank_apply_receipt_v0",
|
|
773
|
+
"module": "loopx.capabilities.material_lifecycle.ranking",
|
|
774
|
+
"doc": "docs/reference/protocols/material-lifecycle-architecture-v0.md",
|
|
775
|
+
},
|
|
776
|
+
{
|
|
777
|
+
"schema_version": "material_ranked_entry_rebuild_plan_v0",
|
|
778
|
+
"module": "loopx.capabilities.material_lifecycle.rebuild",
|
|
779
|
+
"doc": "docs/reference/protocols/material-lifecycle-architecture-v0.md",
|
|
780
|
+
},
|
|
781
|
+
{
|
|
782
|
+
"schema_version": "material_ranked_entry_rebuild_apply_receipt_v0",
|
|
783
|
+
"module": "loopx.capabilities.material_lifecycle.rebuild",
|
|
784
|
+
"doc": "docs/reference/protocols/material-lifecycle-architecture-v0.md",
|
|
785
|
+
},
|
|
786
|
+
],
|
|
787
|
+
"smokes": ["python3 examples/material-lifecycle-contract-smoke.py"],
|
|
788
|
+
"docs": [
|
|
789
|
+
"docs/reference/protocols/material-lifecycle-architecture-v0.md",
|
|
790
|
+
"docs/reference/protocols/material-lifecycle-architecture-v0.zh-CN.md",
|
|
791
|
+
],
|
|
792
|
+
"boundaries": [
|
|
793
|
+
"The capability is default-off and cannot create action authority or mutate Core state.",
|
|
794
|
+
"Raw material, private locations, provider payloads, credentials, and source-store formats stay outside public packets.",
|
|
795
|
+
"Snapshot and verified backup precede dual-read reconciliation; cutover and rollback remain owner-gated.",
|
|
796
|
+
"Decision Context may supply revisioned evidence, but Material Lifecycle owns candidate, archive, and rerank receipts.",
|
|
797
|
+
"Oversized ranked entries are rebuilt into independently sortable entries; overflow cannot be hidden outside the ranked set.",
|
|
798
|
+
"LoopX ships the canonical loopx-material source, but discovery uses an explicit managed project copy rather than a global skill install.",
|
|
799
|
+
"A project-local skill makes the workflow discoverable; it does not replace explicit goal-scoped Material Lifecycle authority.",
|
|
800
|
+
"Concrete legacy adapters, exploration providers, source profiles, and material-store writes remain deferred to private dogfood.",
|
|
801
|
+
],
|
|
802
|
+
"next_real_step": (
|
|
803
|
+
"Dogfood one exact-read semantic rebuild through owner-gated apply "
|
|
804
|
+
"while preserving complete source bytes and canonical records."
|
|
805
|
+
),
|
|
806
|
+
},
|
|
807
|
+
{
|
|
808
|
+
"id": "agent-turn-recall",
|
|
809
|
+
"origin": "builtin",
|
|
810
|
+
"visibility": "public",
|
|
811
|
+
"provider_id": "loopx-core",
|
|
812
|
+
"title": "Autonomous agent turn recall",
|
|
813
|
+
"status": "active-preview",
|
|
814
|
+
"default_enabled": False,
|
|
815
|
+
"real_world_anchor": (
|
|
816
|
+
"long-running autonomous agent turns without a fresh user prompt"
|
|
817
|
+
),
|
|
818
|
+
"user_value": (
|
|
819
|
+
"Recall temporary agent-scoped guidance from the current Goal, Todo, "
|
|
820
|
+
"phase, recent outcome, and next intent before autonomous work begins."
|
|
821
|
+
),
|
|
822
|
+
"entry_command": (
|
|
823
|
+
"loopx agent-turn-recall --goal-id <goal-id> --agent-id <agent-id> "
|
|
824
|
+
"--turn-instance-id <id> --quota-decision-json <quota.json> "
|
|
825
|
+
"--execute --format json"
|
|
826
|
+
),
|
|
827
|
+
"commands": [
|
|
828
|
+
{
|
|
829
|
+
"command": (
|
|
830
|
+
"loopx agent-turn-recall --goal-id <goal-id> --agent-id "
|
|
831
|
+
"<agent-id> --turn-instance-id <id> --quota-decision-json "
|
|
832
|
+
"<quota.json> --format json"
|
|
833
|
+
),
|
|
834
|
+
"purpose": "Preview the bounded situation, semantic query identity, and exact opt-in route without provider access.",
|
|
835
|
+
"write_boundary": "read-only status/quota/config projection; no provider, receipt, quota, or external write",
|
|
836
|
+
},
|
|
837
|
+
{
|
|
838
|
+
"command": (
|
|
839
|
+
"loopx agent-turn-recall --goal-id <goal-id> --agent-id "
|
|
840
|
+
"<agent-id> --turn-instance-id <id> --quota-decision-json "
|
|
841
|
+
"<quota.json> --execute --format json"
|
|
842
|
+
),
|
|
843
|
+
"purpose": "Recall exact-scope guidance and inject it into one private turn context.",
|
|
844
|
+
"write_boundary": "provider read plus one ignored local same-turn receipt; no quota spend or external sink delivery",
|
|
845
|
+
},
|
|
846
|
+
],
|
|
847
|
+
"implemented_protocols": [
|
|
848
|
+
{
|
|
849
|
+
"schema_version": "agent_turn_situation_v0",
|
|
850
|
+
"module": "loopx.capabilities.agent_turn_recall.core",
|
|
851
|
+
"doc": "docs/capabilities/agent-turn-recall/README.md",
|
|
852
|
+
},
|
|
853
|
+
{
|
|
854
|
+
"schema_version": "agent_turn_recall_context_v0",
|
|
855
|
+
"module": "loopx.capabilities.agent_turn_recall.core",
|
|
856
|
+
"doc": "docs/capabilities/agent-turn-recall/README.md",
|
|
857
|
+
},
|
|
858
|
+
{
|
|
859
|
+
"schema_version": "agent_turn_recall_v0",
|
|
860
|
+
"module": "loopx.capabilities.agent_turn_recall.core",
|
|
861
|
+
"doc": "docs/capabilities/agent-turn-recall/README.md",
|
|
862
|
+
},
|
|
863
|
+
],
|
|
864
|
+
"smokes": [
|
|
865
|
+
"python -m pytest tests/capabilities/test_agent_turn_recall.py -q"
|
|
866
|
+
],
|
|
867
|
+
"docs": ["docs/capabilities/agent-turn-recall/README.md"],
|
|
868
|
+
"boundaries": [
|
|
869
|
+
"The capability is default-off and reuses reward-memory corpus, scope, freshness, authority, and provider guards.",
|
|
870
|
+
"The semantic query is built from durable turn state; a user prompt is neither required nor copied into the situation.",
|
|
871
|
+
"Provider content is injected only into the private agent context, is suppressed from external sinks, and grants no new action authority.",
|
|
872
|
+
"A matching receipt deduplicates retries inside one turn; a new turn instance recalls again even when the material situation is unchanged.",
|
|
873
|
+
"Provider, application, and receipt failures are fail-open, are not user gates, and never spend quota.",
|
|
874
|
+
"Project-specific habits, task ids, PR rules, provider URIs, and credentials stay in ignored local config or provider-owned memory.",
|
|
875
|
+
],
|
|
876
|
+
"next_real_step": (
|
|
877
|
+
"Promote the dogfooded host hook after repeated turn-admission "
|
|
878
|
+
"readback confirms exact scope, expiry, and retry deduplication."
|
|
879
|
+
),
|
|
880
|
+
},
|
|
881
|
+
{
|
|
882
|
+
"id": "semantic-preference",
|
|
883
|
+
"origin": "builtin",
|
|
884
|
+
"visibility": "public",
|
|
885
|
+
"provider_id": "loopx-core",
|
|
886
|
+
"title": "Optional semantic preference hook",
|
|
887
|
+
"status": "active-preview",
|
|
888
|
+
"real_world_anchor": "provider-neutral preference recall before domain work",
|
|
889
|
+
"user_value": (
|
|
890
|
+
"Let any LoopX module recall provider-owned semantic preferences and "
|
|
891
|
+
"record a compact application receipt without creating a second memory ledger."
|
|
892
|
+
),
|
|
893
|
+
"entry_command": "loopx semantic-preference recall --config <ignored-config.json> --surface <module.surface> --format json",
|
|
894
|
+
"commands": [
|
|
895
|
+
{
|
|
896
|
+
"command": "loopx semantic-preference doctor --config <ignored-config.json> --execute --format json",
|
|
897
|
+
"purpose": "Check a configured provider entry point and optional read-only probe, then return explicit install/config guidance when unavailable.",
|
|
898
|
+
"write_boundary": "read-only discovery; never installs packages, starts services, changes config, or writes credentials",
|
|
899
|
+
},
|
|
900
|
+
{
|
|
901
|
+
"command": "loopx semantic-preference recall --config <ignored-config.json> --surface <module.surface> --execute --format json",
|
|
902
|
+
"purpose": "Send one bounded recall request to a configured command_json_v0 provider.",
|
|
903
|
+
"write_boundary": "provider read only; LoopX does not persist recalled semantic content",
|
|
904
|
+
},
|
|
905
|
+
{
|
|
906
|
+
"command": "loopx semantic-preference receipt --surface <module.surface> --application-id <id> --outcome applied --format json",
|
|
907
|
+
"purpose": "Build a compact receipt with hashed preference references for existing evidence/state writeback.",
|
|
908
|
+
"write_boundary": "stateless output only; no provider, file, or external write",
|
|
909
|
+
},
|
|
910
|
+
{
|
|
911
|
+
"command": "loopx semantic-preference maintenance-receipt --trigger explicit_feedback --outcome verified --corpus-id <id> --format json",
|
|
912
|
+
"purpose": "Build a compact receipt after a provider-owned corpus maintenance decision and readback closure.",
|
|
913
|
+
"write_boundary": "stateless output only; scope references are hashed and semantic content is excluded",
|
|
914
|
+
},
|
|
915
|
+
],
|
|
916
|
+
"implemented_protocols": [
|
|
917
|
+
{
|
|
918
|
+
"schema_version": "semantic_preference_hook_config_v0",
|
|
919
|
+
"module": "loopx.capabilities.semantic_preference.contract",
|
|
920
|
+
"doc": "docs/capabilities/semantic-preference/README.md",
|
|
921
|
+
},
|
|
922
|
+
{
|
|
923
|
+
"schema_version": "semantic_preference_provider_request_v0",
|
|
924
|
+
"module": "loopx.capabilities.semantic_preference.contract",
|
|
925
|
+
"doc": "docs/capabilities/semantic-preference/README.md",
|
|
926
|
+
},
|
|
927
|
+
{
|
|
928
|
+
"schema_version": "semantic_preference_provider_doctor_v0",
|
|
929
|
+
"module": "loopx.capabilities.semantic_preference.contract",
|
|
930
|
+
"doc": "docs/capabilities/semantic-preference/README.md",
|
|
931
|
+
},
|
|
932
|
+
{
|
|
933
|
+
"schema_version": "semantic_preference_application_receipt_v0",
|
|
934
|
+
"module": "loopx.capabilities.semantic_preference.contract",
|
|
935
|
+
"doc": "docs/capabilities/semantic-preference/README.md",
|
|
936
|
+
},
|
|
937
|
+
{
|
|
938
|
+
"schema_version": "semantic_preference_maintenance_guidance_v0",
|
|
939
|
+
"module": "loopx.capabilities.semantic_preference.contract",
|
|
940
|
+
"doc": "docs/capabilities/semantic-preference/README.md",
|
|
941
|
+
},
|
|
942
|
+
{
|
|
943
|
+
"schema_version": "semantic_preference_maintenance_receipt_v0",
|
|
944
|
+
"module": "loopx.capabilities.semantic_preference.contract",
|
|
945
|
+
"doc": "docs/capabilities/semantic-preference/README.md",
|
|
946
|
+
},
|
|
947
|
+
],
|
|
948
|
+
"smokes": [
|
|
949
|
+
"python3 examples/semantic-preference-hook-smoke.py",
|
|
950
|
+
"python3 examples/openviking-extension-runtime-smoke.py",
|
|
951
|
+
],
|
|
952
|
+
"docs": ["docs/capabilities/semantic-preference/README.md"],
|
|
953
|
+
"boundaries": [
|
|
954
|
+
"The hook is disabled until an enabled local-private config is supplied.",
|
|
955
|
+
"Surface ids and queries are domain-owned configuration; the runtime has no issue-fix branch.",
|
|
956
|
+
"LoopX does not persist recalled semantic content, receipts, provider commands, config paths, or raw errors.",
|
|
957
|
+
"Provider failures follow explicit fail-open/fail-closed policy and do not become user gates automatically.",
|
|
958
|
+
"Provider setup remains guidance-only: package, service, config, and credential writes require an explicit operator action.",
|
|
959
|
+
],
|
|
960
|
+
"next_real_step": (
|
|
961
|
+
"Keep the hook opt-in until a second domain module proves useful recall and existing-state receipt writeback."
|
|
962
|
+
),
|
|
963
|
+
},
|
|
964
|
+
{
|
|
965
|
+
"id": "reward-memory",
|
|
966
|
+
"origin": "builtin",
|
|
967
|
+
"visibility": "public",
|
|
968
|
+
"provider_id": "loopx-core",
|
|
969
|
+
"title": "Reward-memory candidate, recall, and application foundation",
|
|
970
|
+
"status": "active-preview",
|
|
971
|
+
"real_world_anchor": (
|
|
972
|
+
"typed feedback memory, provider-owned corpus health, and pilot/meta delegation"
|
|
973
|
+
),
|
|
974
|
+
"user_value": (
|
|
975
|
+
"Keep run judgments, policies, preferences, reusable experience, and "
|
|
976
|
+
"working context distinct; derive policy content from verified contributor "
|
|
977
|
+
"signals without inventing or widening authority."
|
|
978
|
+
),
|
|
979
|
+
"entry_command": "loopx reward-memory architecture --format json",
|
|
980
|
+
"commands": [
|
|
981
|
+
{
|
|
982
|
+
"command": "loopx reward-memory architecture --format json",
|
|
983
|
+
"purpose": "Render the five-class Stage-0 architecture, lifecycle, precedence, and staged ownership contract.",
|
|
984
|
+
"write_boundary": "stateless contract output only; no memory, provider, state, or external write",
|
|
985
|
+
},
|
|
986
|
+
{
|
|
987
|
+
"command": "loopx reward-memory route-check --case pr-3237 --format json",
|
|
988
|
+
"purpose": "Exercise deterministic safety guards for the public PR #3237 regression; this fixture is not the live reasoning router.",
|
|
989
|
+
"write_boundary": "stateless public guard fixture only; no issue body, memory content, repository, provider, or external write",
|
|
990
|
+
},
|
|
991
|
+
{
|
|
992
|
+
"command": "loopx reward-memory corpus-registry --format json",
|
|
993
|
+
"purpose": "Render the Stage-1 corpus ownership, authority, scope, freshness, lifecycle, and maintenance registry.",
|
|
994
|
+
"write_boundary": "stateless read model only; provider content stays at its source of truth",
|
|
995
|
+
},
|
|
996
|
+
{
|
|
997
|
+
"command": "loopx reward-memory health-check --case wrong-project --format json",
|
|
998
|
+
"purpose": "Exercise deterministic project, surface, freshness, index, retrieval, readback, and application health states.",
|
|
999
|
+
"write_boundary": "public fixture classification only; no memory, index, receipt, state, or external write",
|
|
1000
|
+
},
|
|
1001
|
+
{
|
|
1002
|
+
"command": "loopx reward-memory candidate-review --case issue-fix-verified-contributor --decision accept --format json",
|
|
1003
|
+
"purpose": "Exercise the Stage-2 shared candidate/review seam through the mapping-only Issue Fix adapter.",
|
|
1004
|
+
"write_boundary": "stateless decision output only; persistence stays with the declared corpus owner and this command performs no provider or external write",
|
|
1005
|
+
},
|
|
1006
|
+
{
|
|
1007
|
+
"command": "loopx reward-memory evaluate --format json",
|
|
1008
|
+
"purpose": "Run the Stage-4 provider-neutral core-contract suite and compact release gate over the real recall/application seam.",
|
|
1009
|
+
"write_boundary": "bounded local fixture reads only; no provider, memory, repository, state, model API, or external write",
|
|
1010
|
+
},
|
|
1011
|
+
{
|
|
1012
|
+
"command": "loopx reward-memory dogfood-evaluate --input <compact-observations.json> --format json",
|
|
1013
|
+
"purpose": "Bind verified Issue Fix and LoopX module outcomes to compact hit, miss, refute, cost, intervention, and bot-feedback receipts after the Stage-4 gate.",
|
|
1014
|
+
"write_boundary": "reads compact receipts only; no raw provider content, memory write, operator write, automatic recall, or external write",
|
|
1015
|
+
},
|
|
1016
|
+
{
|
|
1017
|
+
"command": "loopx reward-memory operator-control --input <reviewed-record.json> --action edit --control-ref <ref> --reasoning-summary <summary> --edited-content-summary <summary> --format json",
|
|
1018
|
+
"purpose": "Prepare an authority-matched edit or retirement decision for a reviewed active record.",
|
|
1019
|
+
"write_boundary": "returns a control decision and next-step receipt only; the declared corpus owner must perform and exactly read back any provider write",
|
|
1020
|
+
},
|
|
1021
|
+
],
|
|
1022
|
+
"implemented_protocols": [
|
|
1023
|
+
{
|
|
1024
|
+
"schema_version": "reward_memory_architecture_v0",
|
|
1025
|
+
"module": "loopx.capabilities.reward_memory.architecture",
|
|
1026
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1027
|
+
},
|
|
1028
|
+
{
|
|
1029
|
+
"schema_version": "reward_memory_pilot_meta_route_v0",
|
|
1030
|
+
"module": "loopx.capabilities.reward_memory.architecture",
|
|
1031
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1032
|
+
},
|
|
1033
|
+
{
|
|
1034
|
+
"schema_version": "reward_memory_corpus_registry_v0",
|
|
1035
|
+
"module": "loopx.capabilities.reward_memory.registry",
|
|
1036
|
+
"doc": "docs/reference/protocols/reward-memory-corpus-registry-v0.md",
|
|
1037
|
+
},
|
|
1038
|
+
{
|
|
1039
|
+
"schema_version": "reward_memory_corpus_health_v0",
|
|
1040
|
+
"module": "loopx.capabilities.reward_memory.health",
|
|
1041
|
+
"doc": "docs/reference/protocols/reward-memory-corpus-registry-v0.md",
|
|
1042
|
+
},
|
|
1043
|
+
{
|
|
1044
|
+
"schema_version": "reward_memory_candidate_v0",
|
|
1045
|
+
"module": "loopx.capabilities.reward_memory.candidate_review",
|
|
1046
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1047
|
+
},
|
|
1048
|
+
{
|
|
1049
|
+
"schema_version": "reward_memory_candidate_review_v0",
|
|
1050
|
+
"module": "loopx.capabilities.reward_memory.candidate_review",
|
|
1051
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1052
|
+
},
|
|
1053
|
+
{
|
|
1054
|
+
"schema_version": "issue_fix_reward_memory_candidate_adapter_v0",
|
|
1055
|
+
"module": "loopx.capabilities.reward_memory.candidate_review",
|
|
1056
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1057
|
+
},
|
|
1058
|
+
{
|
|
1059
|
+
"schema_version": "scoped_feedback_reward_memory_event_v0",
|
|
1060
|
+
"module": "loopx.capabilities.reward_memory.scoped_feedback",
|
|
1061
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1062
|
+
},
|
|
1063
|
+
{
|
|
1064
|
+
"schema_version": (
|
|
1065
|
+
"scoped_feedback_reward_memory_candidate_adapter_v0"
|
|
1066
|
+
),
|
|
1067
|
+
"module": "loopx.capabilities.reward_memory.scoped_feedback",
|
|
1068
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1069
|
+
},
|
|
1070
|
+
{
|
|
1071
|
+
"schema_version": "reward_memory_active_record_v0",
|
|
1072
|
+
"module": "loopx.capabilities.reward_memory.application",
|
|
1073
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1074
|
+
},
|
|
1075
|
+
{
|
|
1076
|
+
"schema_version": "reward_memory_recall_request_v0",
|
|
1077
|
+
"module": "loopx.capabilities.reward_memory.application",
|
|
1078
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1079
|
+
},
|
|
1080
|
+
{
|
|
1081
|
+
"schema_version": "reward_memory_recall_v0",
|
|
1082
|
+
"module": "loopx.capabilities.reward_memory.application",
|
|
1083
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1084
|
+
},
|
|
1085
|
+
{
|
|
1086
|
+
"schema_version": "reward_memory_application_receipt_v0",
|
|
1087
|
+
"module": "loopx.capabilities.reward_memory.application",
|
|
1088
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1089
|
+
},
|
|
1090
|
+
{
|
|
1091
|
+
"schema_version": "issue_fix_reward_memory_application_v0",
|
|
1092
|
+
"module": "loopx.capabilities.issue_fix.reward_memory",
|
|
1093
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1094
|
+
},
|
|
1095
|
+
{
|
|
1096
|
+
"schema_version": ("semantic_preference_reward_memory_application_v0"),
|
|
1097
|
+
"module": "loopx.capabilities.semantic_preference.reward_memory",
|
|
1098
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1099
|
+
},
|
|
1100
|
+
{
|
|
1101
|
+
"schema_version": "reward_memory_evaluation_v0",
|
|
1102
|
+
"module": "loopx.capabilities.reward_memory.evaluation",
|
|
1103
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1104
|
+
},
|
|
1105
|
+
{
|
|
1106
|
+
"schema_version": "reward_memory_release_gate_v0",
|
|
1107
|
+
"module": "loopx.capabilities.reward_memory.evaluation",
|
|
1108
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1109
|
+
},
|
|
1110
|
+
{
|
|
1111
|
+
"schema_version": "reward_memory_dogfood_receipt_v0",
|
|
1112
|
+
"module": "loopx.capabilities.reward_memory.dogfood",
|
|
1113
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1114
|
+
},
|
|
1115
|
+
{
|
|
1116
|
+
"schema_version": "reward_memory_dogfood_batch_v0",
|
|
1117
|
+
"module": "loopx.capabilities.reward_memory.dogfood",
|
|
1118
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1119
|
+
},
|
|
1120
|
+
{
|
|
1121
|
+
"schema_version": "reward_memory_operator_control_v0",
|
|
1122
|
+
"module": "loopx.capabilities.reward_memory.dogfood",
|
|
1123
|
+
"doc": "docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1124
|
+
},
|
|
1125
|
+
],
|
|
1126
|
+
"smokes": [
|
|
1127
|
+
"python3 examples/reward-memory-architecture-smoke.py",
|
|
1128
|
+
"python3 examples/reward-memory-corpus-registry-smoke.py",
|
|
1129
|
+
"python3 examples/reward-memory-candidate-review-smoke.py",
|
|
1130
|
+
"python3 examples/reward-memory-recall-application-smoke.py",
|
|
1131
|
+
"python3 examples/reward-memory-evaluation-smoke.py",
|
|
1132
|
+
"python3 examples/reward-memory-dogfood-smoke.py",
|
|
1133
|
+
],
|
|
1134
|
+
"docs": [
|
|
1135
|
+
"docs/reference/protocols/reward-memory-architecture-v0.md",
|
|
1136
|
+
"docs/reference/protocols/reward-memory-corpus-registry-v0.md",
|
|
1137
|
+
],
|
|
1138
|
+
"boundaries": [
|
|
1139
|
+
"Run-bound reward is outcome evidence; future influence requires compact candidate derivation and an activation policy.",
|
|
1140
|
+
"Verified owner or core-contributor feedback may derive hard-policy content only inside independently verified repository and action authority scope.",
|
|
1141
|
+
"Deterministic code enforces authority, scope, privacy, freshness, verification, and conflict guards; model reasoning owns interpretation and trade-offs inside those guards.",
|
|
1142
|
+
"Retrieval without current-artifact verification has zero patch authority.",
|
|
1143
|
+
"OpenViking cases are evaluation fixtures, provider soul text is not action authority, and session working memory remains continuation context.",
|
|
1144
|
+
"LoopX fresh execution context already exists and Stage 2 must reuse it rather than add another context system.",
|
|
1145
|
+
"Corpus presence, index presence, retrieval success, readback, and applied receipts are distinct health states.",
|
|
1146
|
+
"Project or surface mismatch fails closed before provider availability can influence application.",
|
|
1147
|
+
"Stages 0-1 write no corpus, candidate, provider memory, evaluation result, or external artifact.",
|
|
1148
|
+
"Stage 2 returns inspectable candidate/review decisions only; accept or retire still requires the caller to use the corpus owner's declared write authority and verify readback.",
|
|
1149
|
+
"Issue Fix and generic scoped-feedback adapters map compact domain evidence into the shared core and own no parallel lifecycle, store, scheduler, or recall path.",
|
|
1150
|
+
"Stage 3 recalls only after an explicit exact-corpus, module-surface request and a matching read-authority checkpoint; it never scans every corpus automatically.",
|
|
1151
|
+
"Function-boundary recall permits one caller-owned query; bounded agentic search permits at most three caller/model-owned queries and contains no semantic router.",
|
|
1152
|
+
"Provider and application failures preserve the base output, emit compact receipts or setup hints, and never become user gates automatically.",
|
|
1153
|
+
"Private corpus summaries stay transient in-process; public packets retain opaque references and compact lineage only.",
|
|
1154
|
+
"Stage 4 proves bounded core-contract invariants only; its fixture pass does not claim semantic uplift or authorize production rollout.",
|
|
1155
|
+
"Stage 5 receipts are derived from Stage-3 application receipts and verified module outcomes; hit or refute requires exact provider readback plus current-artifact verification.",
|
|
1156
|
+
"Stage 5 trial readiness requires Issue Fix, two distinct LoopX domains, hit/miss/refute coverage, and authority-matched edit/retire controls; it still does not authorize production rollout.",
|
|
1157
|
+
],
|
|
1158
|
+
"next_real_step": (
|
|
1159
|
+
"Feed one corpus-owner-approved, exactly read-back record through the "
|
|
1160
|
+
"bounded OpenViking Issue Fix pilot and write back compact bot feedback "
|
|
1161
|
+
"without widening the Stage-5 trial-only claim."
|
|
1162
|
+
),
|
|
1163
|
+
},
|
|
1164
|
+
{
|
|
1165
|
+
"id": "periodic-report",
|
|
1166
|
+
"origin": "builtin",
|
|
1167
|
+
"visibility": "public",
|
|
1168
|
+
"provider_id": "loopx-core",
|
|
1169
|
+
"title": "Provider-neutral periodic and progress report runs",
|
|
1170
|
+
"status": "active-preview",
|
|
1171
|
+
"default_enabled": False,
|
|
1172
|
+
"real_world_anchor": "scheduled and milestone project reports with verified archive and delivery",
|
|
1173
|
+
"user_value": (
|
|
1174
|
+
"Generate a concise weekly project report from the active session "
|
|
1175
|
+
"with one built-in portable profile, while retaining deterministic "
|
|
1176
|
+
"trigger, receipt, partial-state, and retry contracts for custom runs."
|
|
1177
|
+
),
|
|
1178
|
+
"entry_command": "loopx periodic-report inspect-profile --preset weekly --format json",
|
|
1179
|
+
"commands": [
|
|
1180
|
+
{
|
|
1181
|
+
"command": "loopx periodic-report inspect-profile --preset weekly --format json",
|
|
1182
|
+
"purpose": "Resolve the built-in domain-neutral weekly profile for an explicitly requested in-session report.",
|
|
1183
|
+
"write_boundary": "local preset inspection only; creates no schedule, persists no activation, declares no sink, and performs no provider lookup or write",
|
|
1184
|
+
},
|
|
1185
|
+
{
|
|
1186
|
+
"command": "loopx periodic-report inspect-profile --profile-json <profile.json> --format json",
|
|
1187
|
+
"purpose": "Validate custom project trigger, source, renderer, schedule, and extension sink bindings.",
|
|
1188
|
+
"write_boundary": "local profile inspection only; performs no provider lookup, schedule mutation, or write",
|
|
1189
|
+
},
|
|
1190
|
+
{
|
|
1191
|
+
"command": "loopx periodic-report evaluate-trigger --request-json <request.json> --format json",
|
|
1192
|
+
"purpose": "Select, coalesce, cool down, and deduplicate cadence or material progress triggers without provider effects.",
|
|
1193
|
+
"write_boundary": "local trigger decision only; no source read, schedule mutation, rendering, archive write, message delivery, or provider write",
|
|
1194
|
+
},
|
|
1195
|
+
{
|
|
1196
|
+
"command": "loopx periodic-report compose-run --request-json <request.json> --format json",
|
|
1197
|
+
"purpose": "Normalize one typed report attempt and derive stable run/sink idempotency, state, and retry evidence.",
|
|
1198
|
+
"write_boundary": "local contract output only; no source read, rendering, archive write, message delivery, or provider write",
|
|
1199
|
+
},
|
|
1200
|
+
{
|
|
1201
|
+
"command": "loopx periodic-report archive-openviking --request-json <request.json> --available-capability openviking_context_write --execute --format json",
|
|
1202
|
+
"purpose": "Invoke the optional OpenViking archive extension after profile, runtime-capability, manifest permission, revision, and doctor checks.",
|
|
1203
|
+
"write_boundary": "writes report.md and then manifest.json only when --execute is explicit; exact Resource readback is required for sent",
|
|
1204
|
+
},
|
|
1205
|
+
],
|
|
1206
|
+
"implemented_protocols": [
|
|
1207
|
+
{
|
|
1208
|
+
"schema_version": "periodic_report_profile_v0",
|
|
1209
|
+
"module": "loopx.capabilities.periodic_report.profile",
|
|
1210
|
+
"doc": "docs/reference/protocols/periodic-report-v0.md",
|
|
1211
|
+
},
|
|
1212
|
+
{
|
|
1213
|
+
"schema_version": "periodic_report_activation_v0",
|
|
1214
|
+
"module": "loopx.capabilities.periodic_report.profile",
|
|
1215
|
+
"doc": "docs/reference/protocols/periodic-report-v0.md",
|
|
1216
|
+
},
|
|
1217
|
+
{
|
|
1218
|
+
"schema_version": "periodic_report_project_progress_projection_v0",
|
|
1219
|
+
"module": "loopx.capabilities.periodic_report.project_progress",
|
|
1220
|
+
"doc": "docs/reference/protocols/periodic-report-v0.md",
|
|
1221
|
+
},
|
|
1222
|
+
{
|
|
1223
|
+
"schema_version": "periodic_report_trigger_decision_v0",
|
|
1224
|
+
"module": "loopx.capabilities.periodic_report.triggers",
|
|
1225
|
+
"doc": "docs/reference/protocols/periodic-report-v0.md",
|
|
1226
|
+
},
|
|
1227
|
+
{
|
|
1228
|
+
"schema_version": "periodic_report_v0",
|
|
1229
|
+
"module": "loopx.capabilities.periodic_report.core",
|
|
1230
|
+
"doc": "docs/reference/protocols/periodic-report-v0.md",
|
|
1231
|
+
},
|
|
1232
|
+
{
|
|
1233
|
+
"schema_version": "periodic_report_editorial_orchestration_v0",
|
|
1234
|
+
"module": "loopx.capabilities.periodic_report.adapters",
|
|
1235
|
+
"doc": "docs/reference/protocols/periodic-report-v0.md",
|
|
1236
|
+
},
|
|
1237
|
+
{
|
|
1238
|
+
"schema_version": "periodic_report_generation_bundle_v0",
|
|
1239
|
+
"module": "loopx.capabilities.periodic_report.bindings",
|
|
1240
|
+
"doc": "docs/reference/protocols/periodic-report-v0.md",
|
|
1241
|
+
},
|
|
1242
|
+
{
|
|
1243
|
+
"schema_version": "periodic_report_generation_receipt_v0",
|
|
1244
|
+
"module": "loopx.capabilities.periodic_report.bindings",
|
|
1245
|
+
"doc": "docs/reference/protocols/periodic-report-v0.md",
|
|
1246
|
+
},
|
|
1247
|
+
{
|
|
1248
|
+
"schema_version": "periodic_report_sink_binding_v0",
|
|
1249
|
+
"module": "loopx.capabilities.periodic_report.bindings",
|
|
1250
|
+
"doc": "docs/reference/protocols/periodic-report-v0.md",
|
|
1251
|
+
},
|
|
1252
|
+
{
|
|
1253
|
+
"schema_version": "periodic_report_extension_readiness_v0",
|
|
1254
|
+
"module": "loopx.capabilities.periodic_report.bindings",
|
|
1255
|
+
"doc": "docs/reference/protocols/periodic-report-v0.md",
|
|
1256
|
+
},
|
|
1257
|
+
{
|
|
1258
|
+
"schema_version": "periodic_report_delivery_receipt_v0",
|
|
1259
|
+
"module": "loopx.capabilities.periodic_report.bindings",
|
|
1260
|
+
"doc": "docs/reference/protocols/periodic-report-v0.md",
|
|
1261
|
+
},
|
|
1262
|
+
],
|
|
1263
|
+
"smokes": [
|
|
1264
|
+
"python3 examples/periodic-report-smoke.py",
|
|
1265
|
+
"python3 examples/periodic-report-adapters-smoke.py",
|
|
1266
|
+
"python3 examples/periodic-report-html-smoke.py",
|
|
1267
|
+
"python3 examples/periodic-report-bindings-smoke.py",
|
|
1268
|
+
"python3 examples/openviking-periodic-report-extension-smoke.py",
|
|
1269
|
+
"python3 examples/periodic-report-profile-smoke.py",
|
|
1270
|
+
],
|
|
1271
|
+
"docs": [
|
|
1272
|
+
"docs/capabilities/periodic-report/README.md",
|
|
1273
|
+
"docs/reference/protocols/periodic-report-v0.md",
|
|
1274
|
+
],
|
|
1275
|
+
"boundaries": [
|
|
1276
|
+
"An explicit request in an active project session may select the built-in weekly-progress profile for one provider-free local generation; it persists no project activation and creates no schedule or sink.",
|
|
1277
|
+
"Custom, unattended, or externally delivered reports remain disabled until a project profile and host/runtime authority explicitly enable those separate paths.",
|
|
1278
|
+
"The core owns material trigger classification, coalescing, cooldown/deduplication, period/profile binding, deterministic identity, receipts, run state, and retry projection.",
|
|
1279
|
+
"Profiles own schedule calculation, enabled trigger kinds, minimum interval, timezone, sections, audience, and project policy.",
|
|
1280
|
+
"Adapters own domain source collection; renderers and sinks own all provider effects and verified readback.",
|
|
1281
|
+
"The document builder compiles hero summaries only from typed primary outcomes, risks, and next actions; renderers reject authored or stale summaries.",
|
|
1282
|
+
"Markdown and HTML render from one normalized document; runtime and delivery-receipt items must be supporting, HTML collapses them, and Markdown preserves them in a labeled appendix.",
|
|
1283
|
+
"Raw content, messages, logs, transcripts, credentials, secrets, and private paths are rejected.",
|
|
1284
|
+
"The optional openviking-periodic-report extension implements only the archive sink; it rejects activation unless the periodic-report profile is enabled, its sink binding matches, and openviking_context_write is observed.",
|
|
1285
|
+
],
|
|
1286
|
+
"next_real_step": (
|
|
1287
|
+
"Exercise the built-in weekly profile in a normal project session, then "
|
|
1288
|
+
"prove one separately configured scheduled delivery without widening its "
|
|
1289
|
+
"authority into the portable path."
|
|
1290
|
+
),
|
|
1291
|
+
},
|
|
1292
|
+
{
|
|
1293
|
+
"id": "content-ops",
|
|
1294
|
+
"origin": "builtin",
|
|
1295
|
+
"visibility": "public",
|
|
1296
|
+
"provider_id": "loopx-core",
|
|
1297
|
+
"title": "Creator/content operations loop",
|
|
1298
|
+
"status": "active-preview",
|
|
1299
|
+
"real_world_anchor": "self-media operations and public/private source intake",
|
|
1300
|
+
"user_value": (
|
|
1301
|
+
"Collect public handles and approved private-connector metadata into "
|
|
1302
|
+
"reviewable source, angle, draft, feedback, and publish-gate packets."
|
|
1303
|
+
),
|
|
1304
|
+
"entry_command": "loopx content-ops aggregate-packets --format json",
|
|
1305
|
+
"commands": [
|
|
1306
|
+
{
|
|
1307
|
+
"command": "loopx content-ops exploration-plan --format json",
|
|
1308
|
+
"purpose": "Plan source lanes before reading connector material.",
|
|
1309
|
+
"write_boundary": "fixture-only; no source read",
|
|
1310
|
+
},
|
|
1311
|
+
{
|
|
1312
|
+
"command": "loopx content-ops observe-public-handle --url <public-url> --source-item-id <id> --format json",
|
|
1313
|
+
"purpose": "Create a metadata-only public source item.",
|
|
1314
|
+
"write_boundary": "public HEAD-only metadata read unless --no-fetch is used",
|
|
1315
|
+
},
|
|
1316
|
+
{
|
|
1317
|
+
"command": "loopx content-ops project-private-connector-gate --format json",
|
|
1318
|
+
"purpose": "Represent a private connector as an owner gate before metadata intake.",
|
|
1319
|
+
"write_boundary": "no private connector read",
|
|
1320
|
+
},
|
|
1321
|
+
{
|
|
1322
|
+
"command": "loopx content-ops project-chatview-report --format json",
|
|
1323
|
+
"purpose": "Summarize approved ChatView connector counts without raw chat content.",
|
|
1324
|
+
"write_boundary": "compact counts only; no raw message text",
|
|
1325
|
+
},
|
|
1326
|
+
{
|
|
1327
|
+
"command": "loopx content-ops aggregate-packets --format json",
|
|
1328
|
+
"purpose": "Merge public source packets and private owner gates into a control-plane surface.",
|
|
1329
|
+
"write_boundary": "local packet aggregation only",
|
|
1330
|
+
},
|
|
1331
|
+
{
|
|
1332
|
+
"command": "loopx content-ops item-create --item-id <id> --item-kind <kind> --channel <channel> --content-digest <sha256> --content-ref <ref> --created-at <iso> --format json",
|
|
1333
|
+
"purpose": "Create one provider-neutral content item without draft bodies.",
|
|
1334
|
+
"write_boundary": "local item packet only; no external write",
|
|
1335
|
+
},
|
|
1336
|
+
{
|
|
1337
|
+
"command": "loopx content-ops item-transition --item-json <item.json> --event-json <event.json> --format json",
|
|
1338
|
+
"purpose": "Apply one content item lifecycle event and emit a compact receipt.",
|
|
1339
|
+
"write_boundary": "local item transition only; no external write",
|
|
1340
|
+
},
|
|
1341
|
+
{
|
|
1342
|
+
"command": "loopx content-ops queue-status --item-json <item.json> --format json",
|
|
1343
|
+
"purpose": "Project caller-owned content items into one read-only managed queue surface.",
|
|
1344
|
+
"write_boundary": "local queue projection only; no external read or write",
|
|
1345
|
+
},
|
|
1346
|
+
{
|
|
1347
|
+
"command": "loopx content-ops template-list --format json",
|
|
1348
|
+
"purpose": "List the built-in public-safe content layout template library.",
|
|
1349
|
+
"write_boundary": "packaged template read only; no external read or write",
|
|
1350
|
+
},
|
|
1351
|
+
{
|
|
1352
|
+
"command": "loopx content-ops layout-plan --item-id <id> --template-id <id> --page <page:role:subject> --generated-at <iso> --format json",
|
|
1353
|
+
"purpose": "Record typed page roles and a closing obligation before rendering.",
|
|
1354
|
+
"write_boundary": "local plan packet only; no draft body or external write",
|
|
1355
|
+
},
|
|
1356
|
+
{
|
|
1357
|
+
"command": "loopx content-ops layout-check --plan-json <plan.json> --measurement-json <measurement.json> --format json",
|
|
1358
|
+
"purpose": "Enforce template density, visual safety, required page roles, and the final-page role.",
|
|
1359
|
+
"write_boundary": "local deterministic check only; never grants publish authority",
|
|
1360
|
+
},
|
|
1361
|
+
],
|
|
1362
|
+
"implemented_protocols": [
|
|
1363
|
+
{
|
|
1364
|
+
"schema_version": "content_ops_surface_v0",
|
|
1365
|
+
"module": "loopx.capabilities.content_ops.surface",
|
|
1366
|
+
"doc": "docs/reference/protocols/content-ops-surface-v0.md",
|
|
1367
|
+
},
|
|
1368
|
+
{
|
|
1369
|
+
"schema_version": "source_item_v0",
|
|
1370
|
+
"module": "loopx.capabilities.content_ops.surface",
|
|
1371
|
+
"doc": "docs/reference/protocols/content-ops-surface-v0.md",
|
|
1372
|
+
},
|
|
1373
|
+
{
|
|
1374
|
+
"schema_version": "content_ops_private_connector_owner_gate_v0",
|
|
1375
|
+
"module": "loopx.capabilities.content_ops.surface",
|
|
1376
|
+
"doc": "docs/reference/protocols/content-ops-surface-v0.md",
|
|
1377
|
+
},
|
|
1378
|
+
{
|
|
1379
|
+
"schema_version": "content_ops_packet_aggregation_v0",
|
|
1380
|
+
"module": "loopx.capabilities.content_ops.surface",
|
|
1381
|
+
"doc": "docs/reference/protocols/content-ops-surface-v0.md",
|
|
1382
|
+
},
|
|
1383
|
+
{
|
|
1384
|
+
"schema_version": "content_ops_chatview_connector_report_v0",
|
|
1385
|
+
"module": "loopx.capabilities.content_ops.surface",
|
|
1386
|
+
"doc": "docs/reference/protocols/content-ops-surface-v0.md",
|
|
1387
|
+
},
|
|
1388
|
+
{
|
|
1389
|
+
"schema_version": "content_ops_social_browser_x_provider_v0",
|
|
1390
|
+
"module": "loopx.capabilities.content_ops.social_browser_x",
|
|
1391
|
+
"doc": "docs/capabilities/content-ops/README.md",
|
|
1392
|
+
},
|
|
1393
|
+
{
|
|
1394
|
+
"schema_version": "content_ops_item_v0",
|
|
1395
|
+
"module": "loopx.capabilities.content_ops.item_lifecycle",
|
|
1396
|
+
"doc": "docs/reference/protocols/content-ops-item-lifecycle-v0.md",
|
|
1397
|
+
},
|
|
1398
|
+
{
|
|
1399
|
+
"schema_version": "content_ops_queue_projection_v0",
|
|
1400
|
+
"module": "loopx.capabilities.content_ops.item_lifecycle",
|
|
1401
|
+
"doc": "docs/reference/protocols/content-ops-queue-v0.md",
|
|
1402
|
+
},
|
|
1403
|
+
{
|
|
1404
|
+
"schema_version": "content_ops_layout_plan_v0",
|
|
1405
|
+
"module": "loopx.capabilities.content_ops.layout",
|
|
1406
|
+
"doc": "docs/reference/protocols/content-ops-layout-v0.md",
|
|
1407
|
+
},
|
|
1408
|
+
{
|
|
1409
|
+
"schema_version": "content_ops_layout_check_packet_v0",
|
|
1410
|
+
"module": "loopx.capabilities.content_ops.layout",
|
|
1411
|
+
"doc": "docs/reference/protocols/content-ops-layout-v0.md",
|
|
1412
|
+
},
|
|
1413
|
+
],
|
|
1414
|
+
"smokes": [
|
|
1415
|
+
"python3 examples/content-ops-exploration-plan-smoke.py",
|
|
1416
|
+
"python3 examples/content-ops-public-handle-observation-smoke.py",
|
|
1417
|
+
"python3 examples/content-ops-private-connector-gate-smoke.py",
|
|
1418
|
+
"python3 examples/content-ops-chatview-report-smoke.py",
|
|
1419
|
+
"python3 examples/content-ops-packet-aggregation-smoke.py",
|
|
1420
|
+
"python3 examples/content-ops-queue-status-smoke.py",
|
|
1421
|
+
"python3 examples/content-ops-layout-library-smoke.py",
|
|
1422
|
+
],
|
|
1423
|
+
"docs": [
|
|
1424
|
+
"docs/capabilities/content-ops/README.md",
|
|
1425
|
+
"docs/reference/protocols/content-ops-surface-v0.md",
|
|
1426
|
+
"docs/reference/protocols/content-ops-item-lifecycle-v0.md",
|
|
1427
|
+
"docs/reference/protocols/content-ops-queue-v0.md",
|
|
1428
|
+
"docs/reference/protocols/content-ops-layout-v0.md",
|
|
1429
|
+
],
|
|
1430
|
+
"boundaries": [
|
|
1431
|
+
"Private connectors enter as owner gates or compact approved counts first.",
|
|
1432
|
+
"Raw chats, transcripts, auth material, logs, and local paths are not copied into public packets.",
|
|
1433
|
+
"Publish remains blocked until an explicit user decision.",
|
|
1434
|
+
"Queue projection is read-only and never stores draft bodies or provider credentials.",
|
|
1435
|
+
"Layout checks consume relative asset references and compact measurements, never draft bodies or local absolute paths.",
|
|
1436
|
+
"Layout acceptance is deterministic and never implies creator approval or publishing authority.",
|
|
1437
|
+
],
|
|
1438
|
+
"next_real_step": (
|
|
1439
|
+
"Turn the aggregated surface into a small review/feed UI where a user "
|
|
1440
|
+
"can score source items, angles, and drafts."
|
|
1441
|
+
),
|
|
1442
|
+
},
|
|
1443
|
+
{
|
|
1444
|
+
"id": "value-connectors",
|
|
1445
|
+
"origin": "builtin",
|
|
1446
|
+
"visibility": "public",
|
|
1447
|
+
"provider_id": "loopx-core",
|
|
1448
|
+
"title": "Value connector compatibility facade",
|
|
1449
|
+
"status": "compatibility-facade",
|
|
1450
|
+
"real_world_anchor": "external channel intake for revenue, cost, demand, and connector reuse",
|
|
1451
|
+
"user_value": (
|
|
1452
|
+
"Keep existing connector commands and packet schemas stable while "
|
|
1453
|
+
"each profile moves to the outcome capability that serves callers."
|
|
1454
|
+
),
|
|
1455
|
+
"entry_command": "loopx value-connectors source-map --format json",
|
|
1456
|
+
"commands": [
|
|
1457
|
+
{
|
|
1458
|
+
"command": "loopx value-connectors install-check --format json",
|
|
1459
|
+
"purpose": "Show connector starter install/use commands and local dependency status.",
|
|
1460
|
+
"write_boundary": "local check only; no external read or write",
|
|
1461
|
+
},
|
|
1462
|
+
{
|
|
1463
|
+
"command": "loopx value-connectors source-map --format json",
|
|
1464
|
+
"purpose": "Give agents a read-first source-map packet for all currently surfaced connector profiles.",
|
|
1465
|
+
"write_boundary": "packet only; no external read, write, account setup, or raw payload capture",
|
|
1466
|
+
},
|
|
1467
|
+
{
|
|
1468
|
+
"command": "loopx value-connectors github-public-probe --url <github-issue-or-pr-url> --format json",
|
|
1469
|
+
"purpose": "Validate a public GitHub channel URL and build a connector call packet.",
|
|
1470
|
+
"write_boundary": "no network read unless --fetch-metadata is provided",
|
|
1471
|
+
"compatibility_for": "issue-fix",
|
|
1472
|
+
},
|
|
1473
|
+
{
|
|
1474
|
+
"command": "loopx value-connectors github-public-probe --url <github-issue-or-pr-url> --fetch-metadata --format json",
|
|
1475
|
+
"purpose": "Fetch allowlisted public GitHub metadata without body/comment/timeline content.",
|
|
1476
|
+
"write_boundary": "public metadata read only; no comments, PRs, account changes, or writes",
|
|
1477
|
+
"compatibility_for": "issue-fix",
|
|
1478
|
+
},
|
|
1479
|
+
{
|
|
1480
|
+
"command": "loopx value-connectors github-reply-monitor --issue-url <github-issue-or-pr-url> --after-comment-url <github-issue-comment-url> --fetch-metadata --format json",
|
|
1481
|
+
"purpose": "Detect public maintainer replies after a LoopX comment without capturing comment bodies.",
|
|
1482
|
+
"write_boundary": "public comment metadata read only; no comment bodies, thread bump, or external write",
|
|
1483
|
+
"compatibility_for": "issue-fix",
|
|
1484
|
+
},
|
|
1485
|
+
{
|
|
1486
|
+
"command": "loopx value-connectors plan --connector-id <id> ... --format json",
|
|
1487
|
+
"purpose": "Plan gated account setup, external replies, sends, or future connector calls.",
|
|
1488
|
+
"write_boundary": "plan-only; external writes and account setup require exact approval",
|
|
1489
|
+
},
|
|
1490
|
+
],
|
|
1491
|
+
"implemented_protocols": [
|
|
1492
|
+
{
|
|
1493
|
+
"schema_version": "value_connector_plan_v0",
|
|
1494
|
+
"module": "loopx.capabilities.value_connectors.planner",
|
|
1495
|
+
"doc": "docs/reference/protocols/value-connector-plan-v0.md",
|
|
1496
|
+
},
|
|
1497
|
+
{
|
|
1498
|
+
"schema_version": "connector_call_intent_v0",
|
|
1499
|
+
"module": "loopx.capabilities.value_connectors.planner",
|
|
1500
|
+
"doc": "docs/reference/protocols/value-connector-plan-v0.md",
|
|
1501
|
+
},
|
|
1502
|
+
{
|
|
1503
|
+
"schema_version": "connector_approval_gate_v0",
|
|
1504
|
+
"module": "loopx.capabilities.value_connectors.planner",
|
|
1505
|
+
"doc": "docs/reference/protocols/value-connector-plan-v0.md",
|
|
1506
|
+
},
|
|
1507
|
+
{
|
|
1508
|
+
"schema_version": "value_connector_install_check_packet_v0",
|
|
1509
|
+
"module": "loopx.capabilities.value_connectors.install_check",
|
|
1510
|
+
"doc": "docs/reference/protocols/value-connector-plan-v0.md",
|
|
1511
|
+
},
|
|
1512
|
+
{
|
|
1513
|
+
"schema_version": "value_connector_source_map_packet_v0",
|
|
1514
|
+
"module": "loopx.capabilities.value_connectors.source_map",
|
|
1515
|
+
"doc": "docs/capabilities/value-connectors/agent-reach-ops-source-map.md",
|
|
1516
|
+
},
|
|
1517
|
+
],
|
|
1518
|
+
"smokes": [
|
|
1519
|
+
"python3 examples/value-connectors-github-public-probe-smoke.py",
|
|
1520
|
+
],
|
|
1521
|
+
"docs": [
|
|
1522
|
+
"docs/capabilities/value-connectors/README.md",
|
|
1523
|
+
"docs/reference/protocols/value-connector-plan-v0.md",
|
|
1524
|
+
],
|
|
1525
|
+
"boundaries": [
|
|
1526
|
+
"The GitHub starter copies allowlisted public metadata only, not bodies, comments, timelines, raw provider payloads, auth material, or local paths.",
|
|
1527
|
+
"The reply monitor reads or accepts comment metadata only: author, association, timestamps, and URL; it never bumps a thread.",
|
|
1528
|
+
"Account signup, email sends, community posts, public replies, private reads, paid services, and production actions remain gated exact-call actions.",
|
|
1529
|
+
"Every connector call must include a money, cost, demand, or capability metric plus a kill condition.",
|
|
1530
|
+
],
|
|
1531
|
+
"next_real_step": (
|
|
1532
|
+
"Move one mapped profile at a time to its declared outcome capability, "
|
|
1533
|
+
"keeping this CLI and its packet schemas stable until callers migrate."
|
|
1534
|
+
),
|
|
1535
|
+
},
|
|
1536
|
+
{
|
|
1537
|
+
"id": "explore",
|
|
1538
|
+
"origin": "builtin",
|
|
1539
|
+
"visibility": "public",
|
|
1540
|
+
"provider_id": "loopx-core",
|
|
1541
|
+
"title": "Explore evidence topology",
|
|
1542
|
+
"status": "active-preview",
|
|
1543
|
+
"real_world_anchor": (
|
|
1544
|
+
"goal-scoped questions, hypotheses, experiments, findings, and result projections"
|
|
1545
|
+
),
|
|
1546
|
+
"user_value": (
|
|
1547
|
+
"Keep exploration outcomes queryable and attributable instead of leaving them "
|
|
1548
|
+
"only in chat or a presentation sink."
|
|
1549
|
+
),
|
|
1550
|
+
"entry_command": "loopx explore summary --goal-id <goal-id> --format json",
|
|
1551
|
+
"commands": [
|
|
1552
|
+
{
|
|
1553
|
+
"command": "loopx explore finding --goal-id <goal-id> --title <finding> --evidence-ref <ref> --format json",
|
|
1554
|
+
"purpose": "Append one public-safe, attributable finding to the canonical result log.",
|
|
1555
|
+
"write_boundary": "goal-scoped local result log only; no sink or external write",
|
|
1556
|
+
},
|
|
1557
|
+
{
|
|
1558
|
+
"command": "loopx explore summary --goal-id <goal-id> --format json",
|
|
1559
|
+
"purpose": "Fold canonical result events into the bounded operator projection.",
|
|
1560
|
+
"write_boundary": "read-only projection over the goal result log",
|
|
1561
|
+
},
|
|
1562
|
+
],
|
|
1563
|
+
"implemented_protocols": [
|
|
1564
|
+
{
|
|
1565
|
+
"schema_version": "loopx_explore_result_event_v0",
|
|
1566
|
+
"module": "loopx.capabilities.explore.result_log",
|
|
1567
|
+
"doc": "docs/capabilities/explore/README.md",
|
|
1568
|
+
},
|
|
1569
|
+
{
|
|
1570
|
+
"schema_version": "loopx_explore_result_projection_v0",
|
|
1571
|
+
"module": "loopx.capabilities.explore.result_log",
|
|
1572
|
+
"doc": "docs/capabilities/explore/README.md",
|
|
1573
|
+
},
|
|
1574
|
+
],
|
|
1575
|
+
"smokes": [
|
|
1576
|
+
"python3 examples/explore-result-layer-smoke.py",
|
|
1577
|
+
"python3 examples/explore-todo-result-node-linkage-smoke.py",
|
|
1578
|
+
],
|
|
1579
|
+
"docs": ["docs/capabilities/explore/README.md"],
|
|
1580
|
+
"boundaries": [
|
|
1581
|
+
"Canonical result events are the source of truth; Lark and other sinks render projections only.",
|
|
1582
|
+
"Evidence refs must be public-safe relative refs or opaque ids, never credentials, raw private payloads, or local absolute paths.",
|
|
1583
|
+
],
|
|
1584
|
+
"next_real_step": (
|
|
1585
|
+
"Register findings and terminal outcomes through the result log before refreshing any display sink."
|
|
1586
|
+
),
|
|
1587
|
+
},
|
|
1588
|
+
{
|
|
1589
|
+
"id": "auto-research",
|
|
1590
|
+
"origin": "builtin",
|
|
1591
|
+
"visibility": "public",
|
|
1592
|
+
"provider_id": "loopx-core",
|
|
1593
|
+
"title": "Decentralized auto-research preset",
|
|
1594
|
+
"status": "experimental",
|
|
1595
|
+
"real_world_anchor": (
|
|
1596
|
+
"one-question research contracts with role-scoped workers, evidence packets, and a visible frontier"
|
|
1597
|
+
),
|
|
1598
|
+
"user_value": (
|
|
1599
|
+
"Launch a thin multi-agent research recipe while reusing LoopX todo, quota, "
|
|
1600
|
+
"history, evidence, and continuation contracts."
|
|
1601
|
+
),
|
|
1602
|
+
"entry_command": "loopx auto-research <open-question>",
|
|
1603
|
+
"commands": [
|
|
1604
|
+
{
|
|
1605
|
+
"command": "loopx auto-research <open-question>",
|
|
1606
|
+
"purpose": "Render the fixed one-question contract, bounded plan, and exact start command.",
|
|
1607
|
+
"write_boundary": "stateless contract output only",
|
|
1608
|
+
},
|
|
1609
|
+
{
|
|
1610
|
+
"command": "loopx auto-research start <open-question> --execute",
|
|
1611
|
+
"purpose": "Create an isolated goal and launch visible role-scoped workers through the shared multi-agent runtime.",
|
|
1612
|
+
"write_boundary": "local goal, workspace, and visible launcher state; no publication, benchmark submission, or protected external action",
|
|
1613
|
+
},
|
|
1614
|
+
{
|
|
1615
|
+
"command": "loopx auto-research decide --goal-id <goal-id> --hypothesis-id <id> --outcome <promoted|retired> --reason <reason> --agent-id <agent-id> --execute",
|
|
1616
|
+
"purpose": "Record one terminal research decision after current evidence satisfies the promotion or retirement contract.",
|
|
1617
|
+
"write_boundary": "one public-safe validation event bound to the current hypothesis evidence revision",
|
|
1618
|
+
},
|
|
1619
|
+
{
|
|
1620
|
+
"command": "loopx auto-research review --goal-id <goal-id> --hypothesis-id <id> --reviewer-agent-id <peer-id> --verdict <verdict> --require-independent --execute",
|
|
1621
|
+
"purpose": "Record a registered-peer review receipt without rewriting the research evidence or terminal decision.",
|
|
1622
|
+
"write_boundary": "one public-safe validation receipt; independent mode rejects producer and decision-agent self-review",
|
|
1623
|
+
},
|
|
1624
|
+
{
|
|
1625
|
+
"command": "loopx auto-research results --goal-id <goal-id> [--hypothesis-id <id>] [--include-history]",
|
|
1626
|
+
"purpose": "Read exact current and historical terminal outcomes, review state, and Explore readback.",
|
|
1627
|
+
"write_boundary": "read-only projection over rollout and Explore result events",
|
|
1628
|
+
},
|
|
1629
|
+
{
|
|
1630
|
+
"command": "loopx auto-research project-results --goal-id <goal-id> --execute",
|
|
1631
|
+
"purpose": "Project current terminal outcomes into deterministic existing Explore node and finding events.",
|
|
1632
|
+
"write_boundary": "goal-scoped Explore result log only; repeated projection is idempotent",
|
|
1633
|
+
},
|
|
1634
|
+
],
|
|
1635
|
+
"implemented_protocols": [
|
|
1636
|
+
{
|
|
1637
|
+
"schema_version": "auto_research_user_contract_v0",
|
|
1638
|
+
"module": "loopx.capabilities.auto_research.user_contract",
|
|
1639
|
+
"doc": "docs/guides/auto-research-command-path.md",
|
|
1640
|
+
},
|
|
1641
|
+
{
|
|
1642
|
+
"schema_version": "decentralized_auto_research_projection_v0",
|
|
1643
|
+
"module": "loopx.capabilities.auto_research.research_state",
|
|
1644
|
+
"doc": "docs/reference/protocols/decentralized-auto-research-state-v0.md",
|
|
1645
|
+
},
|
|
1646
|
+
{
|
|
1647
|
+
"schema_version": "auto_research_terminal_decision_v0",
|
|
1648
|
+
"module": "loopx.capabilities.auto_research.terminal_result_contract",
|
|
1649
|
+
"doc": "docs/reference/protocols/decentralized-auto-research-state-v0.md",
|
|
1650
|
+
},
|
|
1651
|
+
{
|
|
1652
|
+
"schema_version": "auto_research_peer_review_v0",
|
|
1653
|
+
"module": "loopx.capabilities.auto_research.terminal_result_contract",
|
|
1654
|
+
"doc": "docs/reference/protocols/auto-research-lane-contract-v1.md",
|
|
1655
|
+
},
|
|
1656
|
+
{
|
|
1657
|
+
"schema_version": "auto_research_terminal_result_query_v0",
|
|
1658
|
+
"module": "loopx.capabilities.auto_research.terminal_result_query",
|
|
1659
|
+
"doc": "docs/reference/protocols/decentralized-auto-research-state-v0.md",
|
|
1660
|
+
},
|
|
1661
|
+
{
|
|
1662
|
+
"schema_version": "auto_research_terminal_result_projection_v0",
|
|
1663
|
+
"module": "loopx.capabilities.auto_research.terminal_results",
|
|
1664
|
+
"doc": "docs/reference/protocols/decentralized-auto-research-state-v0.md",
|
|
1665
|
+
},
|
|
1666
|
+
],
|
|
1667
|
+
"smokes": [
|
|
1668
|
+
"python3 examples/auto-research-user-contract-entry-smoke.py",
|
|
1669
|
+
"python3 examples/auto-research-worker-turn-smoke.py",
|
|
1670
|
+
"python3 examples/auto-research-terminal-results-smoke.py",
|
|
1671
|
+
"python3 examples/auto-research-terminal-results-cli-smoke.py",
|
|
1672
|
+
],
|
|
1673
|
+
"docs": [
|
|
1674
|
+
"docs/guides/auto-research-command-path.md",
|
|
1675
|
+
"docs/product/use-cases/auto-research/decentralized-auto-research-showcase.md",
|
|
1676
|
+
],
|
|
1677
|
+
"boundaries": [
|
|
1678
|
+
"The preset reuses shared control-plane and multi-agent contracts; it is not a second scheduler or runner.",
|
|
1679
|
+
"Completion and uplift require role-authored evidence and projected outcomes; the launcher does not manufacture research results.",
|
|
1680
|
+
"Promotion and retirement candidates are not terminal decisions; explicit decisions bind one hypothesis evidence revision.",
|
|
1681
|
+
"Same-agent review remains visible but cannot be labeled independent or upgrade a finding to confirmed or refuted.",
|
|
1682
|
+
],
|
|
1683
|
+
"next_real_step": (
|
|
1684
|
+
"Use the one-question entrypoint for bounded research and preserve every promoted or rejected outcome in canonical evidence."
|
|
1685
|
+
),
|
|
1686
|
+
},
|
|
1687
|
+
)
|
|
1688
|
+
|
|
1689
|
+
# Preserve the original import surface while routing all reads through the registry.
|
|
1690
|
+
CAPABILITIES = BUILTIN_CAPABILITIES
|
|
1691
|
+
|
|
1692
|
+
|
|
1693
|
+
def _summary(record: Mapping[str, Any]) -> dict[str, Any]:
|
|
1694
|
+
return {
|
|
1695
|
+
"id": record["id"],
|
|
1696
|
+
"title": record["title"],
|
|
1697
|
+
"status": record["status"],
|
|
1698
|
+
"origin": record["origin"],
|
|
1699
|
+
"visibility": record["visibility"],
|
|
1700
|
+
"provider_id": record["provider_id"],
|
|
1701
|
+
"provider_state": record["provider_state"],
|
|
1702
|
+
"real_world_anchor": record["real_world_anchor"],
|
|
1703
|
+
"entry_command": record["entry_command"],
|
|
1704
|
+
"implemented_protocol_count": len(record.get("implemented_protocols") or []),
|
|
1705
|
+
"implementation_provider_count": len(
|
|
1706
|
+
record.get("implementation_providers") or []
|
|
1707
|
+
),
|
|
1708
|
+
"smoke_count": len(record.get("smokes") or []),
|
|
1709
|
+
"next_real_step": record["next_real_step"],
|
|
1710
|
+
}
|
|
1711
|
+
|
|
1712
|
+
|
|
1713
|
+
def build_capability_registry(
|
|
1714
|
+
extension_manifest_paths: Iterable[str | Path] = (),
|
|
1715
|
+
*,
|
|
1716
|
+
extension_state_file: str | Path | None = None,
|
|
1717
|
+
) -> CapabilityRegistry:
|
|
1718
|
+
registry = CapabilityRegistry()
|
|
1719
|
+
registry.register_provider(
|
|
1720
|
+
{
|
|
1721
|
+
"id": "loopx-core",
|
|
1722
|
+
"origin": "builtin",
|
|
1723
|
+
"declared": True,
|
|
1724
|
+
"installed": True,
|
|
1725
|
+
"enabled": True,
|
|
1726
|
+
"ready": True,
|
|
1727
|
+
}
|
|
1728
|
+
)
|
|
1729
|
+
for record in BUILTIN_CAPABILITIES:
|
|
1730
|
+
registry.register_capability(record)
|
|
1731
|
+
for manifest in extension_catalog_entries(
|
|
1732
|
+
extension_manifest_paths,
|
|
1733
|
+
state_file=extension_state_file,
|
|
1734
|
+
):
|
|
1735
|
+
registry.register_provider(manifest["provider"])
|
|
1736
|
+
for record in manifest["capabilities"]:
|
|
1737
|
+
registry.register_capability(record)
|
|
1738
|
+
for implementation in manifest["implementations"]:
|
|
1739
|
+
registry.register_implementation(implementation)
|
|
1740
|
+
return registry
|
|
1741
|
+
|
|
1742
|
+
|
|
1743
|
+
def capability_ids(
|
|
1744
|
+
extension_manifest_paths: Iterable[str | Path] = (),
|
|
1745
|
+
*,
|
|
1746
|
+
include_internal: bool = False,
|
|
1747
|
+
extension_state_file: str | Path | None = None,
|
|
1748
|
+
) -> list[str]:
|
|
1749
|
+
return build_capability_registry(
|
|
1750
|
+
extension_manifest_paths,
|
|
1751
|
+
extension_state_file=extension_state_file,
|
|
1752
|
+
).capability_ids(include_internal=include_internal)
|
|
1753
|
+
|
|
1754
|
+
|
|
1755
|
+
def get_capability(
|
|
1756
|
+
capability_id: str,
|
|
1757
|
+
extension_manifest_paths: Iterable[str | Path] = (),
|
|
1758
|
+
*,
|
|
1759
|
+
include_internal: bool = False,
|
|
1760
|
+
extension_state_file: str | Path | None = None,
|
|
1761
|
+
) -> dict[str, Any]:
|
|
1762
|
+
return build_capability_registry(
|
|
1763
|
+
extension_manifest_paths,
|
|
1764
|
+
extension_state_file=extension_state_file,
|
|
1765
|
+
).get(
|
|
1766
|
+
capability_id,
|
|
1767
|
+
include_internal=include_internal,
|
|
1768
|
+
)
|
|
1769
|
+
|
|
1770
|
+
|
|
1771
|
+
def build_capability_catalog_packet(
|
|
1772
|
+
extension_manifest_paths: Iterable[str | Path] = (),
|
|
1773
|
+
*,
|
|
1774
|
+
extension_state_file: str | Path | None = None,
|
|
1775
|
+
) -> dict[str, Any]:
|
|
1776
|
+
registry = build_capability_registry(
|
|
1777
|
+
extension_manifest_paths,
|
|
1778
|
+
extension_state_file=extension_state_file,
|
|
1779
|
+
)
|
|
1780
|
+
return {
|
|
1781
|
+
"ok": True,
|
|
1782
|
+
"schema_version": CAPABILITY_CATALOG_SCHEMA_VERSION,
|
|
1783
|
+
"capabilities": [_summary(record) for record in registry.records()],
|
|
1784
|
+
"providers": registry.providers(),
|
|
1785
|
+
}
|
|
1786
|
+
|
|
1787
|
+
|
|
1788
|
+
def build_capability_detail_packet(
|
|
1789
|
+
capability_id: str,
|
|
1790
|
+
extension_manifest_paths: Iterable[str | Path] = (),
|
|
1791
|
+
*,
|
|
1792
|
+
extension_state_file: str | Path | None = None,
|
|
1793
|
+
) -> dict[str, Any]:
|
|
1794
|
+
record = get_capability(
|
|
1795
|
+
capability_id,
|
|
1796
|
+
extension_manifest_paths,
|
|
1797
|
+
extension_state_file=extension_state_file,
|
|
1798
|
+
)
|
|
1799
|
+
return {
|
|
1800
|
+
"ok": True,
|
|
1801
|
+
"schema_version": CAPABILITY_DETAIL_SCHEMA_VERSION,
|
|
1802
|
+
"capability": record,
|
|
1803
|
+
}
|
|
1804
|
+
|
|
1805
|
+
|
|
1806
|
+
def render_capability_catalog_markdown(payload: dict[str, Any]) -> str:
|
|
1807
|
+
lines = ["# LoopX Capabilities", ""]
|
|
1808
|
+
for item in payload.get("capabilities") or []:
|
|
1809
|
+
if not isinstance(item, Mapping):
|
|
1810
|
+
continue
|
|
1811
|
+
lines.extend(
|
|
1812
|
+
[
|
|
1813
|
+
f"## {item.get('id')}: {item.get('title')}",
|
|
1814
|
+
"",
|
|
1815
|
+
f"- status: `{item.get('status')}`",
|
|
1816
|
+
f"- provider: `{item.get('provider_id')}` ({item.get('origin')})",
|
|
1817
|
+
f"- provider_state: `{item.get('provider_state')}`",
|
|
1818
|
+
f"- visibility: `{item.get('visibility')}`",
|
|
1819
|
+
f"- anchor: {item.get('real_world_anchor')}",
|
|
1820
|
+
f"- entry: `{item.get('entry_command')}`",
|
|
1821
|
+
f"- implemented_protocol_count: `{item.get('implemented_protocol_count')}`",
|
|
1822
|
+
f"- implementation_provider_count: `{item.get('implementation_provider_count')}`",
|
|
1823
|
+
f"- smoke_count: `{item.get('smoke_count')}`",
|
|
1824
|
+
f"- next: {item.get('next_real_step')}",
|
|
1825
|
+
"",
|
|
1826
|
+
]
|
|
1827
|
+
)
|
|
1828
|
+
return "\n".join(lines).rstrip() + "\n"
|
|
1829
|
+
|
|
1830
|
+
|
|
1831
|
+
def render_capability_detail_markdown(payload: dict[str, Any]) -> str:
|
|
1832
|
+
record = payload.get("capability")
|
|
1833
|
+
if not isinstance(record, Mapping):
|
|
1834
|
+
return "# LoopX Capability\n\nNo capability found.\n"
|
|
1835
|
+
lines = [
|
|
1836
|
+
f"# LoopX Capability: {record.get('title')}",
|
|
1837
|
+
"",
|
|
1838
|
+
f"- id: `{record.get('id')}`",
|
|
1839
|
+
f"- status: `{record.get('status')}`",
|
|
1840
|
+
f"- provider: `{record.get('provider_id')}` ({record.get('origin')})",
|
|
1841
|
+
f"- provider_state: `{record.get('provider_state')}`",
|
|
1842
|
+
f"- visibility: `{record.get('visibility')}`",
|
|
1843
|
+
f"- anchor: {record.get('real_world_anchor')}",
|
|
1844
|
+
f"- value: {record.get('user_value')}",
|
|
1845
|
+
f"- entry: `{record.get('entry_command')}`",
|
|
1846
|
+
"",
|
|
1847
|
+
"## Commands",
|
|
1848
|
+
"",
|
|
1849
|
+
]
|
|
1850
|
+
for item in record.get("commands") or []:
|
|
1851
|
+
if not isinstance(item, Mapping):
|
|
1852
|
+
continue
|
|
1853
|
+
lines.extend(
|
|
1854
|
+
[
|
|
1855
|
+
f"- `{item.get('command')}`",
|
|
1856
|
+
f" - purpose: {item.get('purpose')}",
|
|
1857
|
+
f" - boundary: {item.get('write_boundary')}",
|
|
1858
|
+
]
|
|
1859
|
+
)
|
|
1860
|
+
lines.extend(["", "## Implemented Protocols", ""])
|
|
1861
|
+
for item in record.get("implemented_protocols") or []:
|
|
1862
|
+
if not isinstance(item, Mapping):
|
|
1863
|
+
continue
|
|
1864
|
+
lines.append(
|
|
1865
|
+
f"- `{item.get('schema_version')}` in `{item.get('module')}` "
|
|
1866
|
+
f"([{item.get('doc')}]({item.get('doc')}))"
|
|
1867
|
+
)
|
|
1868
|
+
lines.extend(["", "## Smokes", ""])
|
|
1869
|
+
for smoke in record.get("smokes") or []:
|
|
1870
|
+
lines.append(f"- `{smoke}`")
|
|
1871
|
+
lines.extend(["", "## Boundaries", ""])
|
|
1872
|
+
for boundary in record.get("boundaries") or []:
|
|
1873
|
+
lines.append(f"- {boundary}")
|
|
1874
|
+
lines.extend(["", "## Next Real Step", "", str(record.get("next_real_step"))])
|
|
1875
|
+
return "\n".join(lines).rstrip() + "\n"
|