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,159 @@
|
|
|
1
|
+
"""Public heartbeat prompt compatibility surface."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from .control_plane.heartbeat.agent import (
|
|
8
|
+
agent_prompt_command_args,
|
|
9
|
+
agent_profile_prompt_projection,
|
|
10
|
+
agent_profile_scopes,
|
|
11
|
+
build_peer_identity_required_error,
|
|
12
|
+
normalize_agent_scope,
|
|
13
|
+
normalize_agent_scopes,
|
|
14
|
+
render_peer_agent_scope_instruction,
|
|
15
|
+
)
|
|
16
|
+
from .control_plane.heartbeat.budget import (
|
|
17
|
+
INTERFACE_BUDGET_CHARS,
|
|
18
|
+
NATIVE_GOAL_HOST_MAX_CHARS,
|
|
19
|
+
build_interface_budget,
|
|
20
|
+
heartbeat_prompt_mode,
|
|
21
|
+
prompt_budget_text,
|
|
22
|
+
)
|
|
23
|
+
from .control_plane.heartbeat.host import (
|
|
24
|
+
uses_ark_managed_agent_goal_host,
|
|
25
|
+
uses_native_goal_host_loop,
|
|
26
|
+
)
|
|
27
|
+
from .control_plane.heartbeat.rules import (
|
|
28
|
+
CODEX_NATIVE_GOAL_UNCHANGED_WAIT_RULE,
|
|
29
|
+
DEFAULT_MATERIAL_QUEUE_RULE,
|
|
30
|
+
DEFAULT_PERMISSION_RULE,
|
|
31
|
+
HEARTBEAT_NOTIFICATION_RULE_SHORT,
|
|
32
|
+
HEARTBEAT_VISION_WRITEBACK_RULE_SHORT,
|
|
33
|
+
RUNTIME_CAPABILITY_PROJECTION_THIN_RULE,
|
|
34
|
+
RUNTIME_EXECUTION_ROUTING_RULE,
|
|
35
|
+
SCHEDULER_HINT_APPLICATION_RULE,
|
|
36
|
+
SCHEDULER_HINT_COMPACT_RULE,
|
|
37
|
+
SCHEDULER_HINT_THIN_RULE,
|
|
38
|
+
USER_TODO_FINAL_MESSAGE_RULE,
|
|
39
|
+
)
|
|
40
|
+
from .control_plane.heartbeat.visible_goal import (
|
|
41
|
+
VISIBLE_GOAL_HEARTBEAT_ONLY_POLICY_PATTERNS,
|
|
42
|
+
VISIBLE_GOAL_HOST_CONTROL_CAPABILITIES,
|
|
43
|
+
VISIBLE_GOAL_INITIAL_RUNTIME_CAPABILITY_LIMIT,
|
|
44
|
+
VISIBLE_GOAL_INITIAL_RUNTIME_CAPABILITY_PROJECTION_SCHEMA_VERSION,
|
|
45
|
+
build_visible_goal_initial_runtime_capability_projection,
|
|
46
|
+
validate_visible_goal_policy_rule,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
__all__ = [
|
|
50
|
+
"CODEX_NATIVE_GOAL_UNCHANGED_WAIT_RULE",
|
|
51
|
+
"DEFAULT_MATERIAL_QUEUE_RULE",
|
|
52
|
+
"DEFAULT_PERMISSION_RULE",
|
|
53
|
+
"HEARTBEAT_NOTIFICATION_RULE_SHORT",
|
|
54
|
+
"HEARTBEAT_VISION_WRITEBACK_RULE_SHORT",
|
|
55
|
+
"INTERFACE_BUDGET_CHARS",
|
|
56
|
+
"NATIVE_GOAL_HOST_MAX_CHARS",
|
|
57
|
+
"RUNTIME_CAPABILITY_PROJECTION_THIN_RULE",
|
|
58
|
+
"RUNTIME_EXECUTION_ROUTING_RULE",
|
|
59
|
+
"SCHEDULER_HINT_APPLICATION_RULE",
|
|
60
|
+
"SCHEDULER_HINT_COMPACT_RULE",
|
|
61
|
+
"SCHEDULER_HINT_THIN_RULE",
|
|
62
|
+
"USER_TODO_FINAL_MESSAGE_RULE",
|
|
63
|
+
"VISIBLE_GOAL_HEARTBEAT_ONLY_POLICY_PATTERNS",
|
|
64
|
+
"VISIBLE_GOAL_HOST_CONTROL_CAPABILITIES",
|
|
65
|
+
"VISIBLE_GOAL_INITIAL_RUNTIME_CAPABILITY_LIMIT",
|
|
66
|
+
"VISIBLE_GOAL_INITIAL_RUNTIME_CAPABILITY_PROJECTION_SCHEMA_VERSION",
|
|
67
|
+
"_render_goal_task_body",
|
|
68
|
+
"agent_prompt_command_args",
|
|
69
|
+
"agent_profile_prompt_projection",
|
|
70
|
+
"agent_profile_scopes",
|
|
71
|
+
"build_heartbeat_prompt",
|
|
72
|
+
"build_heartbeat_prompt_error_payload",
|
|
73
|
+
"build_interface_budget",
|
|
74
|
+
"build_peer_identity_required_error",
|
|
75
|
+
"build_visible_goal_initial_runtime_capability_projection",
|
|
76
|
+
"heartbeat_prompt_mode",
|
|
77
|
+
"normalize_agent_scope",
|
|
78
|
+
"normalize_agent_scopes",
|
|
79
|
+
"prompt_budget_text",
|
|
80
|
+
"render_ark_managed_agent_goal_task_body",
|
|
81
|
+
"render_brief_heartbeat_task_body",
|
|
82
|
+
"render_compact_heartbeat_task_body",
|
|
83
|
+
"render_heartbeat_generator_inputs_markdown",
|
|
84
|
+
"render_heartbeat_prompt_error_markdown",
|
|
85
|
+
"render_heartbeat_prompt_markdown",
|
|
86
|
+
"render_heartbeat_task_body",
|
|
87
|
+
"render_peer_agent_scope_instruction",
|
|
88
|
+
"render_thin_heartbeat_task_body",
|
|
89
|
+
"render_traex_visible_goal_task_body",
|
|
90
|
+
"render_visible_goal_task_body",
|
|
91
|
+
"uses_ark_managed_agent_goal_host",
|
|
92
|
+
"uses_native_goal_host_loop",
|
|
93
|
+
"validate_visible_goal_policy_rule",
|
|
94
|
+
]
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def build_heartbeat_prompt(**kwargs):
|
|
98
|
+
from .control_plane.heartbeat.builder import build_heartbeat_prompt as _impl
|
|
99
|
+
return _impl(**kwargs)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def build_heartbeat_prompt_error_payload(**kwargs):
|
|
103
|
+
from .control_plane.heartbeat.builder import build_heartbeat_prompt_error_payload as _impl
|
|
104
|
+
return _impl(**kwargs)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def render_heartbeat_task_body(**kwargs):
|
|
108
|
+
from .control_plane.heartbeat.task_body import render_heartbeat_task_body as _impl
|
|
109
|
+
return _impl(**kwargs)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def render_brief_heartbeat_task_body(**kwargs):
|
|
113
|
+
from .control_plane.heartbeat.task_body import render_brief_heartbeat_task_body as _impl
|
|
114
|
+
return _impl(**kwargs)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def render_compact_heartbeat_task_body(**kwargs):
|
|
118
|
+
from .control_plane.heartbeat.task_body import render_compact_heartbeat_task_body as _impl
|
|
119
|
+
return _impl(**kwargs)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def render_visible_goal_task_body(**kwargs):
|
|
123
|
+
from .control_plane.heartbeat.task_body import render_visible_goal_task_body as _impl
|
|
124
|
+
return _impl(**kwargs)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def render_traex_visible_goal_task_body(**kwargs):
|
|
128
|
+
from .control_plane.heartbeat.task_body import render_traex_visible_goal_task_body as _impl
|
|
129
|
+
return _impl(**kwargs)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def _render_goal_task_body(**kwargs):
|
|
133
|
+
from .control_plane.heartbeat.task_body import _render_goal_task_body as _impl
|
|
134
|
+
return _impl(**kwargs)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def render_ark_managed_agent_goal_task_body(**kwargs):
|
|
138
|
+
from .control_plane.heartbeat.task_body import render_ark_managed_agent_goal_task_body as _impl
|
|
139
|
+
return _impl(**kwargs)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def render_thin_heartbeat_task_body(**kwargs):
|
|
143
|
+
from .control_plane.heartbeat.task_body import render_thin_heartbeat_task_body as _impl
|
|
144
|
+
return _impl(**kwargs)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def render_heartbeat_generator_inputs_markdown(payload: dict[str, Any]):
|
|
148
|
+
from .control_plane.heartbeat.task_body import render_heartbeat_generator_inputs_markdown as _impl
|
|
149
|
+
return _impl(payload)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def render_heartbeat_prompt_error_markdown(payload: dict[str, Any]):
|
|
153
|
+
from .control_plane.heartbeat.task_body import render_heartbeat_prompt_error_markdown as _impl
|
|
154
|
+
return _impl(payload)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def render_heartbeat_prompt_markdown(payload: dict[str, Any]):
|
|
158
|
+
from .control_plane.heartbeat.task_body import render_heartbeat_prompt_markdown as _impl
|
|
159
|
+
return _impl(payload)
|
loopx/help_surface.py
ADDED
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from . import __version__
|
|
7
|
+
|
|
8
|
+
GLOBAL_OPTIONS_WITH_VALUE = {"--registry", "--runtime-root", "--format"}
|
|
9
|
+
GLOBAL_OPTIONS_WITH_EQUALS = tuple(f"{option}=" for option in sorted(GLOBAL_OPTIONS_WITH_VALUE))
|
|
10
|
+
HELP_FLAGS = {"-h", "--help"}
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
COMMAND_GROUPS: list[dict[str, object]] = [
|
|
14
|
+
{
|
|
15
|
+
"title": "Start here",
|
|
16
|
+
"commands": [
|
|
17
|
+
{
|
|
18
|
+
"command": "/loopx",
|
|
19
|
+
"purpose": "Ask the agent to inspect LoopX status, gates, todos, and next action.",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"command": "/loopx <goal text>",
|
|
23
|
+
"purpose": "Start or continue one concrete long-running goal through the agent.",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"command": "loopx doctor",
|
|
27
|
+
"purpose": "Check install, PATH, release snapshot, skills, and import health.",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"command": "loopx first-run-report",
|
|
31
|
+
"purpose": "Print a local first-run receipt and an optional public feedback issue link.",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"command": "loopx slash-commands --install",
|
|
35
|
+
"purpose": "Refresh host slash-command prompt and skill files.",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"command": "loopx preset list",
|
|
39
|
+
"purpose": "Show beginner-safe and opt-in advanced loop start packets.",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"command": "loopx ready-score --goal-id <goal-id>",
|
|
43
|
+
"purpose": "Score install, status, quota, scheduler, todo, and evidence readiness without writing badges.",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"command": 'loopx start-goal --guided --project . --goal-text "<goal>"',
|
|
47
|
+
"purpose": "Preview the shell fallback for the same agent-safe `/loopx <goal>` path.",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"command": "loopx agent-onboard --agent-type codex-cli --project .",
|
|
51
|
+
"purpose": "Generate the exact host-loop activation packet for one agent runtime.",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"command": "loopx agent-onboard --agent-type codex-app-ssh --project .",
|
|
55
|
+
"purpose": "Use visible /goal when Codex App runs over SSH without automation tools.",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"command": "loopx bootstrap-command-pack --project .",
|
|
59
|
+
"purpose": "Generate the lower-level host handoff packet.",
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"title": "Daily operator commands",
|
|
65
|
+
"commands": [
|
|
66
|
+
{"command": "loopx status", "purpose": "Show goals, gates, attention queue, and next action."},
|
|
67
|
+
{
|
|
68
|
+
"command": "loopx diagnose --goal-id <goal-id>",
|
|
69
|
+
"purpose": "Build a compact evidence packet when behavior is surprising.",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"command": "loopx review-packet --goal-id <goal-id>",
|
|
73
|
+
"purpose": "Render a handoff or review packet with any required evidence-log reads.",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"command": "loopx goal-channel --help",
|
|
77
|
+
"purpose": "Set up, inspect, sync, or notify the provider channel bound to one goal.",
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"command": "loopx evidence-log --goal-id <goal-id> --agent-id <agent-id> --thin",
|
|
81
|
+
"purpose": "Read the current agent's thin public-safe ledger before replan or handoff.",
|
|
82
|
+
},
|
|
83
|
+
{"command": "loopx todo --help", "purpose": "Show todo lifecycle commands."},
|
|
84
|
+
{
|
|
85
|
+
"command": "loopx task-lease --help",
|
|
86
|
+
"purpose": "Acquire, renew, transfer, release, or inspect a hard per-todo lease.",
|
|
87
|
+
},
|
|
88
|
+
{"command": "loopx quota should-run", "purpose": "Decide whether the next agent turn should run."},
|
|
89
|
+
{"command": "loopx history --goal-id <goal-id>", "purpose": "Read compact run history."},
|
|
90
|
+
{
|
|
91
|
+
"command": "loopx history trajectory-hygiene --goal-id <goal-id> --limit 100",
|
|
92
|
+
"purpose": "Measure controller density and attribution gaps from compact history without reading raw sessions.",
|
|
93
|
+
},
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"title": "Loop driver hints",
|
|
98
|
+
"commands": [
|
|
99
|
+
{
|
|
100
|
+
"command": "Codex App automation",
|
|
101
|
+
"purpose": "Use `/loopx <goal>` and let the app create or refresh the heartbeat automation.",
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"command": "Codex CLI visible goal",
|
|
105
|
+
"purpose": "Stay in the visible TUI; use `loopx codex-cli-bootstrap-message` for setup when needed.",
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"command": "Claude Code /loop",
|
|
109
|
+
"purpose": "Use installed slash skills for `/loopx`; enable the adapter only when native `/loop` should be gated by LoopX.",
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"command": "OpenCode goal bridge",
|
|
113
|
+
"purpose": "Opt into `--with-goal-bridge`, then use `loopx_goal_activate` to bind the quota-gated bridge.",
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"command": "Other agent or shell",
|
|
117
|
+
"purpose": "Use a CLI, task, automation, heartbeat, or scheduler hook; otherwise drive LoopX manually.",
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"command": "loopx turn plan --goal-id <goal-id> --agent-id <agent-id>",
|
|
121
|
+
"purpose": "Plan one governed external-host turn from live LoopX state without launching an agent or writing state.",
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"command": "loopx host-mode-plan --goal-id <goal-id> --intent <intent> --host-capability <capability>",
|
|
125
|
+
"purpose": "Select a safe host mode (visible, isolated headless Turn, gateway, timer, hybrid) and show the matching Turn/quota preview commands.",
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"title": "Setup and automation commands",
|
|
131
|
+
"commands": [
|
|
132
|
+
{"command": "loopx bootstrap / loopx connect", "purpose": "Create or connect project-local state."},
|
|
133
|
+
{
|
|
134
|
+
"command": "loopx project --help",
|
|
135
|
+
"purpose": "Register a durable Project and bind, unbind, or resolve its foreground Goal.",
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"command": "loopx new-project-prompt",
|
|
139
|
+
"purpose": "Generate a copy-paste project connection prompt for an agent.",
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"command": "loopx bind-agent-thread",
|
|
143
|
+
"purpose": "Persist one stable host thread binding to an already registered LoopX agent.",
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"command": "loopx unbind-agent-thread",
|
|
147
|
+
"purpose": "Remove one exact host thread binding without unregistering its agent or peer sessions.",
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"command": "loopx codex-cli-bootstrap-message",
|
|
151
|
+
"purpose": "Generate the visible Codex CLI TUI setup message.",
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"command": "loopx codex-cli-tui-bootstrap-smoke-bundle",
|
|
155
|
+
"purpose": "Generate a transcript-free Codex CLI first-run smoke bundle.",
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"command": "loopx codex-cli-visible-attach-acceptance",
|
|
159
|
+
"purpose": "Check public-safe visible Codex CLI attach evidence.",
|
|
160
|
+
},
|
|
161
|
+
{"command": "loopx heartbeat-prompt", "purpose": "Generate a guarded heartbeat automation body."},
|
|
162
|
+
{
|
|
163
|
+
"command": "loopx supervisor-prompt",
|
|
164
|
+
"purpose": "Generate the dedicated task body for an opt-in proposal-only peer supervisor.",
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"command": "loopx supervisor-observe",
|
|
168
|
+
"purpose": "Read one public-safe supervisor packet over peer status and evidence.",
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"command": "loopx supervisor-event",
|
|
172
|
+
"purpose": "Preview, append, or read supervisor proposals and host execution receipts.",
|
|
173
|
+
},
|
|
174
|
+
{"command": "loopx upgrade-plan", "purpose": "Plan default heartbeat upgrade propagation."},
|
|
175
|
+
{"command": "loopx update", "purpose": "Check, dry-run, or execute the no-clone update path."},
|
|
176
|
+
{
|
|
177
|
+
"command": "loopx project-skill --help",
|
|
178
|
+
"purpose": "Install, inspect, or remove release-owned skills in selected project agent hosts.",
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"title": "Maintainer and adapter commands",
|
|
184
|
+
"commands": [
|
|
185
|
+
{"command": "loopx check", "purpose": "Run contract and public/private boundary checks."},
|
|
186
|
+
{
|
|
187
|
+
"command": "loopx change-quality --help",
|
|
188
|
+
"purpose": "Qualify one exact final diff against an enabled project policy and receipt contract.",
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"command": "loopx integration-branch --help",
|
|
192
|
+
"purpose": "Detect reviewed source-branch drift and rebuild one local integration branch.",
|
|
193
|
+
},
|
|
194
|
+
{"command": "loopx registry", "purpose": "Inspect registered goals and adapters."},
|
|
195
|
+
{"command": "loopx sync-global", "purpose": "Merge project state into the shared registry."},
|
|
196
|
+
{
|
|
197
|
+
"command": "loopx retire-global-goal",
|
|
198
|
+
"purpose": "Safely retire explicitly named orphaned global goal routes.",
|
|
199
|
+
},
|
|
200
|
+
{"command": "loopx register-agent", "purpose": "Register an automation agent."},
|
|
201
|
+
{"command": "loopx lark-kanban", "purpose": "Project LoopX state into a Feishu/Lark Base board."},
|
|
202
|
+
{
|
|
203
|
+
"command": "loopx presentation",
|
|
204
|
+
"purpose": "Package, roll back, and verify provider-neutral static presentation artifacts.",
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"command": "loopx explore",
|
|
208
|
+
"purpose": "Record the exploration topology (nodes, edges, findings) and project it to a Feishu/Lark result board.",
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"command": "loopx extension",
|
|
212
|
+
"purpose": "Inspect and manage doctor-verified subprocess extension activations.",
|
|
213
|
+
},
|
|
214
|
+
{"command": "loopx issue-fix", "purpose": "Build public-safe issue or PR fix workflow packets."},
|
|
215
|
+
{
|
|
216
|
+
"command": "loopx review-batch",
|
|
217
|
+
"purpose": "Compose provider-neutral bounded review packets and bind exact decisions.",
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"command": "loopx periodic-report",
|
|
221
|
+
"purpose": "Resolve a portable weekly profile, evaluate report triggers, and compose provider-neutral run receipts.",
|
|
222
|
+
},
|
|
223
|
+
{"command": "loopx auto-research", "purpose": "Project public-safe research frontiers."},
|
|
224
|
+
{
|
|
225
|
+
"command": "loopx agent-turn-recall",
|
|
226
|
+
"purpose": "Prepare goal-scoped memory guidance for one admitted autonomous agent turn.",
|
|
227
|
+
},
|
|
228
|
+
{"command": "loopx multi-agent", "purpose": "Launch visible role-scoped Codex TUI agents."},
|
|
229
|
+
{"command": "loopx canary", "purpose": "Plan or run catalog-informed smoke profiles."},
|
|
230
|
+
{
|
|
231
|
+
"command": "loopx promotion-readiness",
|
|
232
|
+
"purpose": "Record release-scoped canary readiness evidence in the shared runtime ledger.",
|
|
233
|
+
},
|
|
234
|
+
{"command": "loopx benchmark", "purpose": "Use fixture-only benchmark runner skeletons by default."},
|
|
235
|
+
],
|
|
236
|
+
},
|
|
237
|
+
]
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
# Every top-level parser command must either be represented in COMMAND_GROUPS
|
|
241
|
+
# or be explicitly kept on its command-specific help surface. This makes a new
|
|
242
|
+
# command an intentional manual-visibility decision instead of a silent omission.
|
|
243
|
+
MANPAGE_COMMAND_HELP_ONLY = frozenset(
|
|
244
|
+
{
|
|
245
|
+
"archive-runtime",
|
|
246
|
+
"backup-state",
|
|
247
|
+
"capability",
|
|
248
|
+
"codex-cli-bounded-visible-pilot-adapter",
|
|
249
|
+
"codex-cli-exec-handoff",
|
|
250
|
+
"codex-cli-local-driver-plan",
|
|
251
|
+
"codex-cli-local-scheduler-exec",
|
|
252
|
+
"codex-cli-local-scheduler-tick",
|
|
253
|
+
"codex-cli-one-message-loop-pilot",
|
|
254
|
+
"codex-cli-runtime-idle-detector",
|
|
255
|
+
"codex-cli-session-probe",
|
|
256
|
+
"codex-cli-visible-driver-plan",
|
|
257
|
+
"codex-cli-visible-driver-run",
|
|
258
|
+
"codex-cli-visible-first-response-capture-plan",
|
|
259
|
+
"codex-cli-visible-local-driver-pilot",
|
|
260
|
+
"codex-cli-visible-session-proof",
|
|
261
|
+
"configure-goal",
|
|
262
|
+
"content-ops",
|
|
263
|
+
"decision-context",
|
|
264
|
+
"material-lifecycle",
|
|
265
|
+
"demo",
|
|
266
|
+
"dreaming",
|
|
267
|
+
"global-gates",
|
|
268
|
+
"global-risks",
|
|
269
|
+
"global-summary",
|
|
270
|
+
"global-todos",
|
|
271
|
+
"handoff-mode",
|
|
272
|
+
"heartbeat-prequota",
|
|
273
|
+
"import-doc-registry-authority",
|
|
274
|
+
"lark-inbox",
|
|
275
|
+
"migrate-state",
|
|
276
|
+
"ml-experiment",
|
|
277
|
+
"opencode2-goal-worker",
|
|
278
|
+
"operator-gate",
|
|
279
|
+
"pr-review",
|
|
280
|
+
"promotion-gate",
|
|
281
|
+
"read-only-map",
|
|
282
|
+
"refresh-state",
|
|
283
|
+
"register-authority-source",
|
|
284
|
+
"registry-boundary",
|
|
285
|
+
"reward",
|
|
286
|
+
"reward-memory",
|
|
287
|
+
"semantic-preference",
|
|
288
|
+
"serve-status",
|
|
289
|
+
"uninstall-project",
|
|
290
|
+
"value-connectors",
|
|
291
|
+
"version",
|
|
292
|
+
"worker-bridge",
|
|
293
|
+
}
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
def manpage_top_level_commands() -> frozenset[str]:
|
|
298
|
+
commands = {"commands"}
|
|
299
|
+
for group in COMMAND_GROUPS:
|
|
300
|
+
entries = group.get("commands")
|
|
301
|
+
if not isinstance(entries, list):
|
|
302
|
+
continue
|
|
303
|
+
for entry in entries:
|
|
304
|
+
if not isinstance(entry, dict):
|
|
305
|
+
continue
|
|
306
|
+
command = str(entry.get("command") or "")
|
|
307
|
+
commands.update(
|
|
308
|
+
re.findall(r"(?:^| / )loopx ([a-z0-9][a-z0-9-]*)", command)
|
|
309
|
+
)
|
|
310
|
+
return frozenset(commands)
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
def _program_name(program: str) -> str:
|
|
314
|
+
name = program.rsplit("/", 1)[-1]
|
|
315
|
+
if name in {"loopx", "cli.py", "__main__.py"}:
|
|
316
|
+
return "loopx"
|
|
317
|
+
if program.endswith("loopx.cli") or " -m loopx.cli" in program:
|
|
318
|
+
return "loopx"
|
|
319
|
+
return program or "loopx"
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
def top_level_help_requested(argv: list[str]) -> bool:
|
|
323
|
+
if not argv:
|
|
324
|
+
return True
|
|
325
|
+
help_positions = [index for index, value in enumerate(argv) if value in HELP_FLAGS]
|
|
326
|
+
if not help_positions:
|
|
327
|
+
return False
|
|
328
|
+
help_index = help_positions[0]
|
|
329
|
+
index = 0
|
|
330
|
+
while index < help_index:
|
|
331
|
+
value = argv[index]
|
|
332
|
+
if value in GLOBAL_OPTIONS_WITH_VALUE:
|
|
333
|
+
index += 2
|
|
334
|
+
continue
|
|
335
|
+
if value.startswith(GLOBAL_OPTIONS_WITH_EQUALS):
|
|
336
|
+
index += 1
|
|
337
|
+
continue
|
|
338
|
+
return False
|
|
339
|
+
return True
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
def render_concise_help(program: str = "loopx") -> str:
|
|
343
|
+
program = _program_name(program)
|
|
344
|
+
return "\n".join(
|
|
345
|
+
[
|
|
346
|
+
"LoopX keeps long-running agent work moving by preserving goals, todos, gates, quota,",
|
|
347
|
+
"and evidence between agent turns.",
|
|
348
|
+
"",
|
|
349
|
+
"Usage:",
|
|
350
|
+
f" {program} [global options] <command> [command options]",
|
|
351
|
+
f" {program} <command> --help",
|
|
352
|
+
"",
|
|
353
|
+
"Start here:",
|
|
354
|
+
" /loopx Ask the agent to inspect LoopX state.",
|
|
355
|
+
" /loopx <goal text> Start or continue a concrete long-running goal.",
|
|
356
|
+
" loopx doctor Check install, PATH, release snapshot, and skills.",
|
|
357
|
+
" loopx slash-commands --install Refresh host slash-command skill files.",
|
|
358
|
+
" loopx preset list Show safe preset start packets.",
|
|
359
|
+
" loopx ready-score --goal-id ID Score install/status/quota readiness.",
|
|
360
|
+
" loopx start-goal --guided --project . --goal-text \"<goal>\"",
|
|
361
|
+
" Preview the shell fallback for /loopx <goal>.",
|
|
362
|
+
"",
|
|
363
|
+
"Daily operator commands:",
|
|
364
|
+
" loopx status Show current goals, gates, and next action.",
|
|
365
|
+
" loopx diagnose --goal-id ID Build a compact evidence packet.",
|
|
366
|
+
" loopx evidence-log --goal-id ID --agent-id AGENT --thin",
|
|
367
|
+
" Read this agent's thin ledger before replan.",
|
|
368
|
+
" loopx todo --help Add, claim, complete, update, or archive todos.",
|
|
369
|
+
" loopx task-lease --help Manage a hard per-todo lease.",
|
|
370
|
+
" loopx quota should-run Decide whether the next agent turn should run.",
|
|
371
|
+
"",
|
|
372
|
+
"Run the loop:",
|
|
373
|
+
" Codex App use /loopx <goal>; let the app set the heartbeat automation.",
|
|
374
|
+
" Codex CLI keep visible TUI; run loopx codex-cli-bootstrap-message.",
|
|
375
|
+
" Claude Code use installed /loopx skills; adapter only for gated native /loop.",
|
|
376
|
+
" OpenCode opt into the goal bridge, then use loopx_goal_activate.",
|
|
377
|
+
" Other agents need a CLI/task/automation/loop hook, or run LoopX manually.",
|
|
378
|
+
"",
|
|
379
|
+
"Global options: --registry PATH --runtime-root PATH --format markdown|json",
|
|
380
|
+
"More:",
|
|
381
|
+
" loopx commands Show grouped command reference.",
|
|
382
|
+
" loopx <command> --help Show flags for one command.",
|
|
383
|
+
" man loopx Open the installed manual page.",
|
|
384
|
+
"",
|
|
385
|
+
]
|
|
386
|
+
)
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
def build_command_reference_payload() -> dict[str, Any]:
|
|
390
|
+
return {
|
|
391
|
+
"ok": True,
|
|
392
|
+
"schema_version": "loopx_command_reference_v0",
|
|
393
|
+
"summary": "Grouped LoopX command reference for operators and contributors.",
|
|
394
|
+
"groups": COMMAND_GROUPS,
|
|
395
|
+
"more": [
|
|
396
|
+
"loopx <command> --help",
|
|
397
|
+
"man loopx",
|
|
398
|
+
"docs/guides/getting-started.md#command-reference",
|
|
399
|
+
],
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
def render_command_reference_markdown(payload: dict[str, Any]) -> str:
|
|
404
|
+
lines = [
|
|
405
|
+
"# LoopX command reference",
|
|
406
|
+
"",
|
|
407
|
+
str(payload.get("summary") or ""),
|
|
408
|
+
"",
|
|
409
|
+
]
|
|
410
|
+
groups = payload.get("groups") if isinstance(payload.get("groups"), list) else []
|
|
411
|
+
for group in groups:
|
|
412
|
+
if not isinstance(group, dict):
|
|
413
|
+
continue
|
|
414
|
+
title = str(group.get("title") or "Commands")
|
|
415
|
+
lines.extend([f"## {title}", ""])
|
|
416
|
+
commands = group.get("commands") if isinstance(group.get("commands"), list) else []
|
|
417
|
+
for command in commands:
|
|
418
|
+
if not isinstance(command, dict):
|
|
419
|
+
continue
|
|
420
|
+
name = str(command.get("command") or "").strip()
|
|
421
|
+
purpose = str(command.get("purpose") or "").strip()
|
|
422
|
+
if name and purpose:
|
|
423
|
+
lines.append(f"- `{name}` - {purpose}")
|
|
424
|
+
lines.append("")
|
|
425
|
+
lines.extend(
|
|
426
|
+
[
|
|
427
|
+
"For command-specific flags, run `loopx <command> --help`.",
|
|
428
|
+
"For the manual page, run `man loopx` after installing LoopX.",
|
|
429
|
+
"",
|
|
430
|
+
]
|
|
431
|
+
)
|
|
432
|
+
return "\n".join(lines)
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
def _roff_text(value: object) -> str:
|
|
436
|
+
text = str(value).replace("\\", r"\e").replace("-", r"\-")
|
|
437
|
+
if text.startswith((".", "'")):
|
|
438
|
+
return rf"\&{text}"
|
|
439
|
+
return text
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
def render_manpage(*, version: str = __version__) -> str:
|
|
443
|
+
"""Render the CLI manual from the canonical command catalog."""
|
|
444
|
+
|
|
445
|
+
lines = [
|
|
446
|
+
f'.TH LOOPX 1 "" "LoopX {_roff_text(version)}" "User Commands"',
|
|
447
|
+
".SH NAME",
|
|
448
|
+
r"loopx \- control-plane helper for long-running agent work",
|
|
449
|
+
".SH SYNOPSIS",
|
|
450
|
+
".B loopx",
|
|
451
|
+
r"[\fB\-\-registry\fR \fIPATH\fR]",
|
|
452
|
+
r"[\fB\-\-runtime\-root\fR \fIPATH\fR]",
|
|
453
|
+
r"[\fB\-\-format\fR \fImarkdown|json\fR]",
|
|
454
|
+
r"\fICOMMAND\fR",
|
|
455
|
+
r"[\fIARGS\fR]",
|
|
456
|
+
".br",
|
|
457
|
+
".B loopx",
|
|
458
|
+
r"\fICOMMAND\fR",
|
|
459
|
+
r"\fB\-\-help\fR",
|
|
460
|
+
".br",
|
|
461
|
+
".B loopx commands",
|
|
462
|
+
".SH DESCRIPTION",
|
|
463
|
+
"LoopX keeps long-running agent work moving by preserving goals, todos, gates,",
|
|
464
|
+
"quota, and evidence between agent turns.",
|
|
465
|
+
".PP",
|
|
466
|
+
"The command sections below are generated from the same canonical catalog used by",
|
|
467
|
+
r"\fBloopx commands\fR. Command-specific flags remain available through",
|
|
468
|
+
r"\fBloopx COMMAND \-\-help\fR.",
|
|
469
|
+
]
|
|
470
|
+
|
|
471
|
+
for group in COMMAND_GROUPS:
|
|
472
|
+
title = _roff_text(str(group.get("title") or "Commands").upper())
|
|
473
|
+
lines.append(f".SH {title}")
|
|
474
|
+
commands = group.get("commands")
|
|
475
|
+
if not isinstance(commands, list):
|
|
476
|
+
continue
|
|
477
|
+
for entry in commands:
|
|
478
|
+
if not isinstance(entry, dict):
|
|
479
|
+
continue
|
|
480
|
+
command = str(entry.get("command") or "").strip()
|
|
481
|
+
purpose = str(entry.get("purpose") or "").strip()
|
|
482
|
+
if not command or not purpose:
|
|
483
|
+
continue
|
|
484
|
+
lines.extend(
|
|
485
|
+
[
|
|
486
|
+
".TP",
|
|
487
|
+
rf"\fB{_roff_text(command)}\fR",
|
|
488
|
+
_roff_text(purpose),
|
|
489
|
+
]
|
|
490
|
+
)
|
|
491
|
+
|
|
492
|
+
lines.extend(
|
|
493
|
+
[
|
|
494
|
+
".SH MORE",
|
|
495
|
+
".TP",
|
|
496
|
+
r"\fBloopx COMMAND \-\-help\fR",
|
|
497
|
+
"Show flags for one command.",
|
|
498
|
+
".TP",
|
|
499
|
+
r"\fBman loopx\fR",
|
|
500
|
+
"Open this installed manual page.",
|
|
501
|
+
".TP",
|
|
502
|
+
r"\fBdocs/guides/getting\-started.md#command\-reference\fR",
|
|
503
|
+
"Read the longer operator and contributor guide.",
|
|
504
|
+
".SH INSTALL NOTES",
|
|
505
|
+
"The LoopX local installer writes this manual to",
|
|
506
|
+
r"\fI$HOME/.local/share/man/man1/loopx.1.gz\fR by default and adds",
|
|
507
|
+
r"\fI$HOME/.local/share/man\fR to MANPATH in the selected shell profile.",
|
|
508
|
+
"If the current shell has not reloaded that profile, run:",
|
|
509
|
+
".PP",
|
|
510
|
+
r"\fBMANPATH=\"$HOME/.local/share/man:${MANPATH:\-}\" man loopx\fR",
|
|
511
|
+
".SH SEE ALSO",
|
|
512
|
+
".BR man (1)",
|
|
513
|
+
"",
|
|
514
|
+
]
|
|
515
|
+
)
|
|
516
|
+
return "\n".join(lines)
|