loopx 0.4.9__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {loopx-0.4.9/loopx.egg-info → loopx-0.5.0}/PKG-INFO +43 -2
- {loopx-0.4.9 → loopx-0.5.0}/README.md +41 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/__init__.py +1 -1
- {loopx-0.4.9 → loopx-0.5.0}/loopx/bootstrap.py +21 -2
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/benchmark_toolkit/README.md +61 -8
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/benchmark_toolkit/__init__.py +24 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/benchmark_toolkit/catalog_entry.py +75 -4
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/benchmark_toolkit/environment_access.py +62 -0
- loopx-0.5.0/loopx/capabilities/benchmark_toolkit/experiment_board.py +826 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/catalog.py +18 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/repository_context.py +5 -2
- loopx-0.5.0/loopx/capabilities/repository_change_window/README.md +199 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/repository_change_window/__init__.py +6 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/repository_change_window/catalog_entry.py +10 -5
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/repository_change_window/cli.py +68 -2
- loopx-0.5.0/loopx/capabilities/repository_change_window/git_hook.py +976 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/repository_change_window/ledger.py +240 -27
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/repository_change_window/repository.py +82 -6
- loopx-0.5.0/loopx/chat.py +402 -0
- loopx-0.5.0/loopx/chat_acp.py +451 -0
- loopx-0.5.0/loopx/chat_action_store.py +535 -0
- loopx-0.5.0/loopx/chat_actions.py +1586 -0
- loopx-0.5.0/loopx/chat_agent.py +504 -0
- loopx-0.5.0/loopx/chat_attachments.py +74 -0
- loopx-0.5.0/loopx/chat_endpoints.py +265 -0
- loopx-0.5.0/loopx/chat_goal_lifecycle_actions.py +98 -0
- loopx-0.5.0/loopx/chat_lark_api.py +409 -0
- loopx-0.5.0/loopx/chat_monitor_actions.py +220 -0
- loopx-0.5.0/loopx/chat_providers.py +420 -0
- loopx-0.5.0/loopx/chat_runtime.py +776 -0
- loopx-0.5.0/loopx/chat_server.py +1477 -0
- loopx-0.5.0/loopx/chat_store.py +505 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli.py +15 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/__init__.py +3 -0
- loopx-0.5.0/loopx/cli_commands/benchmark_dispatch.py +109 -0
- loopx-0.5.0/loopx/cli_commands/benchmark_experiment_board.py +150 -0
- loopx-0.5.0/loopx/cli_commands/capability.py +288 -0
- loopx-0.5.0/loopx/cli_commands/dash.py +282 -0
- loopx-0.5.0/loopx/cli_commands/goal_lifecycle.py +72 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/quota.py +26 -63
- loopx-0.5.0/loopx/cli_commands/quota_host_poll.py +67 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/registry_admin.py +10 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/support_control.py +230 -76
- loopx-0.5.0/loopx/cli_commands/support_control_backup.py +107 -0
- loopx-0.5.0/loopx/cli_commands/support_control_chat_endpoint.py +94 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/todo.py +28 -13
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/todo_argument_validation.py +12 -10
- {loopx-0.4.9 → loopx-0.5.0}/loopx/contract.py +39 -24
- loopx-0.5.0/loopx/control_plane/goals/activation.py +66 -0
- loopx-0.5.0/loopx/control_plane/goals/activation_service.py +254 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/goal_frontier/__init__.py +30 -11
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/heartbeat_receipt.py +11 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/live_decision.py +2 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/settlement_cli.py +5 -2
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/should_run.py +31 -10
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/should_run_packet.py +23 -4
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/should_run_prepare.py +30 -1
- loopx-0.5.0/loopx/control_plane/quota/states.py +53 -0
- loopx-0.5.0/loopx/control_plane/quota/usage_collector.py +83 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/usage_summary.py +83 -1
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/public_safety.py +97 -5
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/run_history.py +2 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/time.py +1 -1
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/automation_liveness.py +14 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/scheduler_hint.py +27 -8
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/state_transition_rules.py +4 -1
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/status/collection.py +30 -1
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/cli_output_budget.py +37 -1
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/cli_output_differential.py +17 -1
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/list_projection.py +75 -10
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/monitor_metadata.py +15 -12
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/succession_warning.py +1 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/attention_queue.py +5 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/autonomous_replan_ack.py +19 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/autonomous_replan_obligation.py +79 -7
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/interaction_contract.py +8 -1
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/primary_action.py +10 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/progress_observation.py +6 -1
- loopx-0.5.0/loopx/dash_server.py +215 -0
- loopx-0.5.0/loopx/dashboard_launcher.py +65 -0
- loopx-0.5.0/loopx/extensions/capability_admission.py +613 -0
- loopx-0.5.0/loopx/extensions/lark/app_setup.py +185 -0
- loopx-0.5.0/loopx/extensions/lark/cli_resolution.py +286 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/event_collector.py +2 -1
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/event_collector_runtime.py +89 -3
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/event_inbox.py +26 -0
- loopx-0.5.0/loopx/extensions/lark/goal_channel_notification.py +176 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/goal_channel_transport.py +58 -4
- loopx-0.5.0/loopx/extensions/lark/goal_topic_connections.py +820 -0
- loopx-0.5.0/loopx/extensions/lark/goal_topic_runtime.py +741 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/manifest.py +172 -3
- {loopx-0.4.9 → loopx-0.5.0}/loopx/help_surface.py +14 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/history.py +32 -3
- {loopx-0.4.9 → loopx-0.5.0}/loopx/kunluncode_goal_mode/README.md +2 -2
- {loopx-0.4.9 → loopx-0.5.0}/loopx/kunluncode_goal_mode/cli.py +3 -3
- loopx-0.5.0/loopx/presentation/projections/__init__.py +11 -0
- loopx-0.5.0/loopx/presentation/projections/session_dash.py +360 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/public_safety.py +31 -0
- loopx-0.5.0/loopx/presentation/renderers/session_dash_html.py +405 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/static_site.py +5 -14
- {loopx-0.4.9 → loopx-0.5.0}/loopx/quota.py +32 -5
- {loopx-0.4.9 → loopx-0.5.0}/loopx/status.py +6 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/status_server.py +1 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/todos.py +47 -11
- loopx-0.5.0/loopx/web/chat/assets/index-BOUhd8w2.js +107 -0
- loopx-0.5.0/loopx/web/chat/assets/index-C_e30CWC.css +1 -0
- loopx-0.5.0/loopx/web/chat/index.html +27 -0
- loopx-0.5.0/loopx/web/chat/manifest.webmanifest +22 -0
- loopx-0.5.0/loopx/web/chat/pwa/icon-192.png +0 -0
- loopx-0.5.0/loopx/web/chat/pwa/icon-512.png +0 -0
- {loopx-0.4.9 → loopx-0.5.0/loopx.egg-info}/PKG-INFO +43 -2
- {loopx-0.4.9 → loopx-0.5.0}/loopx.egg-info/SOURCES.txt +47 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx.egg-info/requires.txt +1 -1
- {loopx-0.4.9 → loopx-0.5.0}/pyproject.toml +3 -2
- {loopx-0.4.9 → loopx-0.5.0}/skills/loopx-self-repair/references/repair-patterns.md +4 -1
- loopx-0.5.0/tests/test_chat_image_attachments.py +72 -0
- loopx-0.5.0/tests/test_chat_lark_api_contract.py +427 -0
- loopx-0.5.0/tests/test_chat_server_cors.py +103 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_cli_argument_diagnostics.py +4 -2
- loopx-0.5.0/tests/test_dashboard_command.py +380 -0
- loopx-0.5.0/tests/test_history_chronology.py +148 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_license_metadata.py +2 -2
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_state_file_containment.py +17 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_status_server_cors.py +48 -0
- loopx-0.5.0/tests/test_status_server_fast_path.py +69 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_worker_command_validation.py +17 -0
- loopx-0.4.9/loopx/capabilities/repository_change_window/README.md +0 -133
- loopx-0.4.9/loopx/capabilities/repository_change_window/git_hook.py +0 -458
- loopx-0.4.9/loopx/cli_commands/benchmark_dispatch.py +0 -43
- loopx-0.4.9/loopx/cli_commands/capability.py +0 -96
- loopx-0.4.9/loopx/control_plane/quota/states.py +0 -29
- {loopx-0.4.9 → loopx-0.5.0}/LICENSE +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/LICENSE-MIT +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/NOTICE +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/agent_onboarding.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/agent_registry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/ark_managed_agent_host.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/authority.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/bootstrap_command_pack.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/boundary_authority.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/canary/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/canary/maintainability_ratchet.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/canary/planner.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/canary/premerge.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/canary/qualification_profiles.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/canary/quality_surface_catalog.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/canary/release_profiles.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/canary/runner.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/canary/smoke_health.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/canary/smoke_profiles.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/agent_turn_recall/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/agent_turn_recall/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/agent_turn_recall/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/agent_turn_recall/cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/agent_turn_recall/core.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/bootstrap_contract.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/core.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/defaults.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/demo_e2e.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/demo_supervisor.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/evidence_packet.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/human_view.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/kernel.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/knn_demo_workspace.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/live_evidence.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/preset.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/research_state.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/role_profiles.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/rollout_append.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/terminal_result_contract.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/terminal_result_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/terminal_result_query.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/terminal_results.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/user_contract.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/worker_loop.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/worker_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/auto_research/worker_skill/SKILL.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/benchmark_toolkit/artifacts.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/benchmark_toolkit/container_binding.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/benchmark_toolkit/integrity.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/benchmark_toolkit/native_codex_goal.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/benchmark_toolkit/native_codex_isolation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/benchmark_toolkit/native_codex_profile.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/benchmark_toolkit/public_trajectory.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/benchmark_toolkit/run_permissions.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/change_quality/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/change_quality/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/change_quality/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/change_quality/cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/change_quality/context.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/change_quality/oracles.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/change_quality/policy.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/change_quality/receipt.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/change_quality/result.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/change_quality/scope.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/change_quality/shadow.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/content_ops/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/content_ops/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/content_ops/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/content_ops/cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/content_ops/connector_packets.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/content_ops/item_lifecycle.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/content_ops/layout.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/content_ops/markdown.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/content_ops/schemas.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/content_ops/social_browser_x.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/content_ops/surface.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/content_ops/templates/layout-catalog-v0.json +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/context_providers/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/context_providers/base.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/context_providers/factory.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/context_providers/openviking.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/context_providers/service_ownership.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/README.zh-CN.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/architecture.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/assembler.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/cursor_commit.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/outcome_feedback.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/packets.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/private_state.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/profile.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/providers.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/review_settlement.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/decision_context/sources.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/documentation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/README.zh-CN.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/activation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/adaptive_replay_planner.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/child_replay_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/composition_frontier.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/counterfactual_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/episode_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/harness_checkpoint.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/harness_gate.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/harness_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/replay_metrics.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/replay_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/resource_portfolio.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/result_log.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/router_state.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/source_history_reconcile.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/speculative_scheduler.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/todo_branch_plan.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/todo_evidence.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/trace_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/explore/worker_branch_plan.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/integration_branch/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/integration_branch/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/integration_branch/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/integration_branch/cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/integration_branch/core.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/README.zh-CN.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/acceptance_loop.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/candidate_evidence.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/candidate_preflight.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/cli_input.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/content_ops_cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/discovered_issue_promotion.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/docs/openviking-pilot-handoff.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-acceptance-loop-v0.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-discovered-issue-promotion-v0.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-metrics-projection-v0.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-reviewer-notification-sinks-v0.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-reviewer-recommendation-v0.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-reviewer-request-v0.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-workflow-contract-v0.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/docs/state-kernel-domain-state-case-study.zh-CN.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/explore_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/feasibility.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/github_public.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/intake_surface.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/metadata_preview.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/metrics_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/metrics_supplement.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/metrics_supplement_cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/outcome_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/periodic_report.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/pr_description.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/pr_gate_reconcile.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/pr_gate_reconcile_cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/pr_lifecycle.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/pr_lifecycle_rollout.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/pr_monitor_materialization.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/pr_review_ack.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/provider_hooks.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/repository_commit_evidence.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/repository_memory.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/repository_memory_provider.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/repository_snapshot.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/reviewer_cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/reviewer_notification.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/reviewer_notification_drain.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/reviewer_recommendation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/reviewer_request.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/reward_memory.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/issue_fix/workflow_plan.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/README.zh-CN.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/_validation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/apply.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/architecture.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/decision_planning.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/explore_execution.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/intake.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/inventory.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/lifecycle.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/preparation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/project_skill.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/ranking.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/readable_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/rebuild.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/material_lifecycle/settlement.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/periodic_report/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/periodic_report/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/periodic_report/adapters.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/periodic_report/archive.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/periodic_report/bindings.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/periodic_report/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/periodic_report/cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/periodic_report/core.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/periodic_report/extension_envelope.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/periodic_report/presets.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/periodic_report/profile.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/periodic_report/project_progress.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/periodic_report/triggers.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/pr_review_queue/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/pr_review_queue/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/pr_review_queue/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/pr_review_queue/core.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/pr_review_queue/review_contract.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/project_skill_delivery/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/project_skill_delivery/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/project_skill_delivery/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/project_skill_delivery/cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/project_skill_delivery/core.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/registry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/repository_change_window/policy.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/README.zh-CN.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/application.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/architecture.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/candidate_review.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/dogfood.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/evaluation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/evaluation_fixtures.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/experiment.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/health.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/ingestion.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/memory_utility.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/registry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/runtime_hooks.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/reward_memory/scoped_feedback.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/semantic_preference/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/semantic_preference/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/semantic_preference/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/semantic_preference/cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/semantic_preference/contract.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/semantic_preference/docs/openviking-project-peer.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/semantic_preference/reward_memory.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/value_connectors/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/value_connectors/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/value_connectors/catalog_entry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/value_connectors/cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/value_connectors/docs/agent-reach-ops-source-map.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/value_connectors/docs/finance-market-snapshot-probe.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/value_connectors/finance_extension_migration.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/value_connectors/install_check.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/value_connectors/planner.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/capabilities/value_connectors/source_map.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/claude_goal_mode/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/claude_goal_mode/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/claude_goal_mode/hooks/goal_policy.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/claude_goal_mode/hooks/goal_state.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/claude_goal_mode/mcp/loopx_mcp.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/claude_goal_mode/scripts/connect.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/claude_goal_mode/scripts/goalmode_cmd.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/claude_goal_mode/scripts/install.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/claude_goal_mode/statusline/goal_status.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/_host_thread.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/benchmark_boundary.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/bootstrap_connect.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/canary.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/canary_release_qualification.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/doctor.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/dreaming.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/evidence_log.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/explore.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/explore_feishu_commands.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/explore_planning_commands.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/extension.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/first_run_report.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/goal_channel.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/handoff_mode.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/history.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/host_mode_plan.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/lark_inbox.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/lark_kanban.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/ml_experiment.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/multi_agent.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/opencode2_goal_worker.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/pr_review.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/presentation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/preset.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/project.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/project_lifecycle.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/quota_monitor_poll.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/quota_registration.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/quota_request.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/ready_score.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/registry_admin_configure.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/registry_admin_peer.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/registry_authority.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/review_batch.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/slash_commands.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/start_goal.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/starter.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/starter_bootstrap.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/starter_bootstrap_registration.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/starter_runtime_idle.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/starter_scheduler.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/starter_session_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/starter_visible_common.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/starter_visible_driver.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/starter_visible_pilot.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/status.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/status_registration.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/summary_all.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/support_control_registry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/support_control_supervisor.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/task_lease.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/todo_event.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/turn.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/version.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/worker_bridge.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_commands/workflow_skills.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/cli_rollout.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/codex_cli_probe.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/codex_cli_probe_markdown.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/codex_cli_runtime_probe.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/codex_cli_scheduler.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/command_invocation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/configuration_catalog.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/configure_goal.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/agent_lane_recommendation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/agent_scope.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/agent_scope_frontier.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/capability_gate.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/identity.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/legacy_migration.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/management_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/material_frontier.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/material_handoff.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/multi_agent/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/multi_agent/codex_executable.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/multi_agent/collective_round_ledger.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/multi_agent/contract.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/multi_agent/recipe.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/multi_agent/role_successor.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/multi_agent/runtime_scripts.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/multi_agent/visible_launch_policy.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/multi_agent/visible_wake_scheduler.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/profile.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/runtime_model.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/subagent_activity.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/supervisor.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/supervisor_events.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/supervisor_inject.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/work_mode.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/agents/workspace_guard.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/effect_program.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/active_state_event_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/active_state_metadata.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/active_state_sections.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/configure_goal_service.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/contract_health.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/dreaming.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/global_registry_health.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/global_registry_shadow.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/goal_channel.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/goal_channel_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/goal_frontier/ack_policy.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/goal_frontier/outcome_continuity.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/goal_frontier/replan_rules.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/goal_frontier/semantic_history.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/goal_frontier/terminal.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/goal_vision.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/goal_vision_policy.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/goal_vision_state.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/goal_vision_wait.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/path_resolution.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/start_contract.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/goals/vision_checkpoint.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/handoff/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/handoff/cross_runtime_impl_review.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/handoff/delivery_contract.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/handoff/handoff_runs.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/handoff/project_handoff.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/handoff/review_batch.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/handoff/review_packet_context.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/heartbeat/agent.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/heartbeat/budget.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/heartbeat/builder.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/heartbeat/host.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/heartbeat/rules.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/heartbeat/task_body.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/heartbeat/visible_goal.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/projects/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/projects/contract.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/projects/registry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/cli_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/decision_summary.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/effect_program.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/error_codes.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/goal_boundary.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/heartbeat_recommendation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/host_poll_receipts.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/monitor_poll.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/policy_constants.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/projection_repair.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/recent_runs.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/scheduler_ack.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/selected_todo_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/settlement.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/settlement_validation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/settlement_workspace_causality.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/slot_accounting.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/spend_sources.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/stall_repair.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/task_orchestration.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/task_orchestration_admission.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/quota/turn_envelope.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/reward_memory.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/agent_scoped_evidence_log.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/decision_freshness.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/event_ledger.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/event_store_migration_bridge.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/goal_project_route.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/local_state_write_correctness.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/promotion_readiness.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/run_artifacts.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/run_compaction.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/run_context_retention.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/run_index_duplicates.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/run_index_rebuild.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/runtime_projection_route.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/runtime_projection_writer.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/session_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/shared_runtime_material_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/shared_runtime_refresh_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/stale_latest_run.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/status_classifications.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/status_projection_cache.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/stride_observation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/trajectory_hygiene.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/runtime/validation_command.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/ack.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/arbitration.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/execution_context.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/external_evidence_observation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/monitor_display.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/monitor_poll_policy.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/monitor_poll_writeback.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/monitor_target.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/monitor_todo.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/monitor_wait.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/state.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/scheduler/time.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/settlement_driver.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/status/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/status/active_state_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/status/agent_lane_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/status/attention_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/status/autonomous_replan_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/status/contract_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/status/dreaming_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/status/goal_attention_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/status/lifecycle_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/status/monitor_display_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/status/registry_health_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/status/run_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/status/runtime_summaries.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/actual_default_model_behavior_portfolio.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/canary_harness.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/capability_monitor_repair_tool_behavior.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/cli_output_semantics.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/control_plane_composition_scenarios.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/decision_replay.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/doubao_model_behavior_actor.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/model_behavior_corpus.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/model_behavior_qualification.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/model_behavior_retained_cases.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/model_tool_behavior.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/onboarding_model_behavior_qualification.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/quota_fixtures.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/quota_should_run_parity.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/release_commit_qualification.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/replan_semantic_action_behavior.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/scoped_gate_successor_tool_behavior.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/selected_todo_tool_behavior.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/testing/terminal_settlement_tool_behavior.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/active_state_editing.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/active_state_todo_parser.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/active_state_todos.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/addition.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/claim_visibility.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/completed_archive.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/completion_fence.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/completion_policy.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/completion_state.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/completion_validation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/completion_validation_accountability.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/completion_validation_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/contract.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/decision_scope.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/deferred_resume.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/durable_completion.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/event_writeback.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/frontier_deadline.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/handoff_gate.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/handoff_mode.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/handoff_note.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/line_update.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/markdown.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/mutation_authority.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/quota_summary.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/route_continuation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/summary_item.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/text.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/todo_index.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/todo_summary.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/unblock_resume.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/user_gate.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/write_hint.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/todos/write_policy.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/turn_driver/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/turn_driver/codex_cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/turn_driver/driver.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/turn_driver/executor.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/turn_driver/loop_controller.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/turn_driver/session_recovery.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/turn_driver/settlement.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/turn_driver/transaction.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/attention_fields.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/attention_item.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/attention_routing.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/autonomous_candidates.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/backlog_hygiene.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/capability_monitor_fallback.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/delivery_batch_scale.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/delivery_outcome.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/delivery_signals.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/execution_obligation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/goal_route_hint.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/issue_meta_surface.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/lifecycle.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/operator_inbox.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/outcome_followthrough.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/project_asset.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/repair_delta.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/runtime_capability_reentry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/semantic_replan_writeback.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/status_contract.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/task_graph.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/task_lease.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/task_lease_settlement.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/work_lane.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/control_plane/work_items/work_lane_context.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/demo.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/diagnose.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/doctor.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/domain_packs/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/domain_packs/issue_fix.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/domain_packs/ml_experiment.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/domain_state.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/dreaming.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/entrypoint.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/event_sourced_state.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/execution_profile.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/experiments/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/experiments/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/experiments/planner_worker/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/experiments/planner_worker/contract.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/experiments/planner_worker/runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/experiments/planner_worker/traex.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/explore_graph.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/bundled.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/execution_envelope.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/docs/lark-event-inbox.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/extension.toml +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/goal_channel.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/goal_channel_contracts.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/goal_channel_lifecycle.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/goal_channel_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/goal_channel_setup.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/goal_channel_targets.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/inbox_reactions.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/inbox_reply.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/explore_results.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/explore_singleflight.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/explore_source_guard.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/explore_stage_document.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/explore_visual_integrity.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/explore_visual_readback.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/explore_visual_styles.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/issue_fix_surface.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/kanban.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/message_card.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/periodic_report.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/projection_rows.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/record_io.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/presentation/sync_receipt.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/private_json.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/provider.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/lark/reviewer_notification.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/openviking_periodic_report/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/openviking_periodic_report/activation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/openviking_periodic_report/extension.toml +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/openviking_periodic_report/provider.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/openviking_periodic_report/sink.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/openviking_semantic_preference/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/openviking_semantic_preference/extension.toml +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/openviking_semantic_preference/history_export.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/openviking_semantic_preference/project_peer.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/openviking_semantic_preference/provider.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/presentation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/process_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/readiness.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/extensions/scaffold.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/feedback.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/file_lock.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/global_registry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/global_risks.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/global_todos.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/goal_mode_context.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/goal_mode_mcp.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/handoff_budget.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/heartbeat_prequota.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/heartbeat_prompt.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/host_loop_activation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/host_mode_planner.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/install_contract.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/interface_budget.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/kunluncode_goal_mode/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/kunluncode_goal_mode/app_server.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/kunluncode_goal_mode/context.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/kunluncode_goal_mode/control_plane.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/kunluncode_goal_mode/guards.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/kunluncode_goal_mode/runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/kunluncode_goal_mode/server.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/long_task_cadence.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/materials.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/ml_experiment.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/onboarding.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/opencode2_goal_mode/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/opencode2_goal_mode/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/opencode2_goal_mode/opencode2-goal-worker.mjs +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/opencode_goal_mode/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/opencode_goal_mode/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/opencode_goal_mode/goal-bridge-runtime.mjs +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/opencode_goal_mode/loopx-goal.js +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/operator_gate.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/orchestration.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/paths.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/pi_goal_mode/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/pi_goal_mode/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/pi_goal_mode/loopx-goal.ts +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/pi_goal_mode/pi-goal-loop-runtime.mjs +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/pr_review.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/README.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/explore_views.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/markdown.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/projection_source_reconcile.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/renderers/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/renderers/goal_channel_html.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/renderers/periodic_report_html.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/renderers/periodic_report_markdown.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/renderers/quota_event_markdown.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/renderers/quota_markdown.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/renderers/status_markdown.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/renderers/trajectory_hygiene_markdown.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/renderers/turn_envelope_markdown.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/sinks/__init__.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presentation/sinks/openviking_periodic_report.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/presets.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/project_alias.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/project_map.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/project_prompt.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/project_uninstall.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/promotion_gate.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/ready_score.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/registry.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/registry_writability.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/release_candidate.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/release_manifest.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/repository_identity.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/review_packet.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/rollout_event_log.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/self_update.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/session_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/skill_install_readback.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/slash_command_install.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/slash_commands.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/state_backup.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/state_migration.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/state_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/state_refresh.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/summary_all.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/thread_agent_binding.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/todo_followups.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/todo_suggestion_prompt.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/turn_identity.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/upgrade.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/visible_governance.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/visible_multi_agent_launcher.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/visible_multi_agent_tmux.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/windows_install.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/worker_bridge.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx/workflow_skill_install.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx.egg-info/dependency_links.txt +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx.egg-info/entry_points.txt +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/loopx.egg-info/top_level.txt +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/setup.cfg +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/skills/loopx-doc-registry/SKILL.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/skills/loopx-doc-registry/agents/openai.yaml +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/skills/loopx-pr-program/SKILL.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/skills/loopx-pr-program/agents/openai.yaml +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/skills/loopx-pr-program/references/snapshot-contract.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/skills/loopx-pr-program/scripts/diff_snapshot.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/skills/loopx-pr-review/SKILL.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/skills/loopx-pr-review/agents/openai.yaml +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/skills/loopx-project/SKILL.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/skills/loopx-project/agents/openai.yaml +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/skills/loopx-self-repair/SKILL.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/skills/loopx-self-repair/agents/openai.yaml +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/skills/loopx-self-repair/references/upstream-issue-escalation.md +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_agent_onboarding_pi_host.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_agent_onboarding_unconnected_project.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_ark_managed_agent_host.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_ark_managed_agent_issue_fix_matrix.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_auto_research_control.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_cli_entrypoint.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_codex_app_apply_rrule.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_command_invocation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_content_ops_item_lifecycle.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_content_ops_lifecycle.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_content_ops_queue_status.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_contract_credential_pattern_precision.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_contract_scan_unreadable_files.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_decision_context_material.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_dependency_security_boundaries.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_doctor_install_freshness.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_explore_counterfactual_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_explore_episode_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_explore_monitor_lane_budget.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_explore_owner_board_views.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_explore_presentation_views.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_explore_replay_compatibility.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_explore_replay_runtime.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_explore_resource_portfolio.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_explore_router_acceptance.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_explore_source_history_reconcile.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_explore_worker_topic_affinity.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_external_scheduler_worker.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_feedback_goal_id_validation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_file_lock.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_file_lock_cross_process.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_gemini_cursor_host_surfaces.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_global_registry_write_serialization.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_global_risks.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_global_todos.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_host_loop_activation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_host_mode_planner.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_host_parity_smoke.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_host_poll_receipts.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_kunluncode_goal_mode.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_loop_turn_loop_controller.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_loopx_turn_codex_cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_loopx_turn_driver.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_loopx_turn_executor.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_loopx_turn_journal_inspection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_loopx_turn_settlement_parity.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_loopx_turn_transaction.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_ml_experiment_volc_packet.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_nokv_shadow_provider_probes.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_opencode2_goal_worker.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_opencode2_goal_worker_cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_opencode_goal_bridge.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_operator_markdown_renderers.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_packaged_skill_metadata.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_pi_goal_mode.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_pr_program_snapshot.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_pr_program_snapshot_diff.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_pr_review_github_scan.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_project_skill_cli.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_register_agent_fresh_identity.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_release_smoke_archive_helpers.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_reward_memory_pipeline.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_self_update_runtime_activation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_skill_delivery_parity.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_slash_command_install.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_smoke_suite.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_state_refresh_projections.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_static_site_presentation.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_status_server_extension_projection.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_summary_all.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_thread_agent_binding.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_trajectory_hygiene.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_turn_envelope.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_turn_loop_disposition.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_visible_goal_terminal_settlement.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_windows_install.py +0 -0
- {loopx-0.4.9 → loopx-0.5.0}/tests/test_workflow_skill_install.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: loopx
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: A lightweight Loop Engineering control plane for long-running agent goals.
|
|
5
5
|
Author: LoopX contributors
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -18,7 +18,7 @@ Provides-Extra: deepseek-harness
|
|
|
18
18
|
Requires-Dist: deepseek-harness-sdk>=0.1.0rc5; extra == "deepseek-harness"
|
|
19
19
|
Provides-Extra: test
|
|
20
20
|
Requires-Dist: jsonschema<5,>=4.23; extra == "test"
|
|
21
|
-
Requires-Dist: mcp==1.
|
|
21
|
+
Requires-Dist: mcp==1.28.1; extra == "test"
|
|
22
22
|
Requires-Dist: types-jsonschema<5,>=4.23; extra == "test"
|
|
23
23
|
Requires-Dist: pytest<9,>=8; extra == "test"
|
|
24
24
|
Requires-Dist: pytest-cov<7,>=5; extra == "test"
|
|
@@ -66,6 +66,46 @@ to hand off across turns, tools, and agents.
|
|
|
66
66
|
- **Getting started** - install, connect a project, and run your first governed loop. [Guide](docs/guides/getting-started.md)
|
|
67
67
|
- **Docs** - the full reference and operations site. [LoopX Docs](https://huangruiteng.github.io/loopx/docs/)
|
|
68
68
|
|
|
69
|
+
## Meet the Personal Agent Workspace
|
|
70
|
+
|
|
71
|
+
Turn scattered agent sessions into one local-first workspace for Goals,
|
|
72
|
+
attention, conversations, tasks, files, schedules, and recovery.
|
|
73
|
+
|
|
74
|
+
<a href="docs/assets/personal-workspace/loopx-dashboard-launch.mp4">
|
|
75
|
+
<img src="docs/assets/personal-workspace/loopx-dashboard-tour.webp" alt="Animated tour of the LoopX personal Agent workspace, from one-command launch to Manager overview, Goal task board, protected action preview, and Goal details" width="960">
|
|
76
|
+
</a>
|
|
77
|
+
|
|
78
|
+
The workspace gives you one place to:
|
|
79
|
+
|
|
80
|
+
- see what needs you, what is running, what is being watched, and what is
|
|
81
|
+
scheduled or stopped;
|
|
82
|
+
- continue across Codex, Claude Code, direct-model, and other registered Agent
|
|
83
|
+
sessions without losing Goal state or evidence;
|
|
84
|
+
- review protected changes through typed preview, explicit confirmation, and
|
|
85
|
+
receipts while LoopX state—not the browser—remains authoritative.
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
loopx dashboard
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
`loopx dashboard` is the supported browser/PWA launch path. For a native
|
|
92
|
+
window, the experimental source-built Tauri shell reuses the same loopback
|
|
93
|
+
status and Chat services without becoming another state authority:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
cd apps/desktop/loopx-control-plane
|
|
97
|
+
npm install
|
|
98
|
+
npm run dev
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
[Read the desktop shell guide](apps/desktop/loopx-control-plane/README.md).
|
|
102
|
+
Closing the window stops only the service processes that the shell started;
|
|
103
|
+
existing LoopX services and durable Goal state remain intact.
|
|
104
|
+
|
|
105
|
+
[Watch the full 32-second walkthrough](docs/assets/personal-workspace/loopx-dashboard-launch.mp4)
|
|
106
|
+
· [Read the workspace guide](docs/guides/personal-workspace-user-guide.md)
|
|
107
|
+
· [Try the five-minute tour](docs/guides/personal-workspace-trial-guide.md)
|
|
108
|
+
|
|
69
109
|
<a id="how-it-works"></a>
|
|
70
110
|
|
|
71
111
|
## Why LoopX
|
|
@@ -370,6 +410,7 @@ evidence → recovery; continuation → governance.
|
|
|
370
410
|
| Quota and interaction contract | Decides whether a turn should deliver, ask, wait, self-repair, or stay quiet. | `loopx quota should-run`, [quota allocation](docs/quota-allocation.md) |
|
|
371
411
|
| Agent runtime bridges | Keeps Codex App, Codex CLI, Claude Code, and generic workers aligned with the same guard. | `loopx heartbeat-prompt`, `loopx codex-cli-bootstrap-message`, `loopx worker-bridge` |
|
|
372
412
|
| Operator surfaces | Renders compact status without making the browser the state authority. | `loopx serve-status`, [dashboard](apps/presentation/dashboard/README.md) |
|
|
413
|
+
| Session dash | Starts a live single-page panel that tracks fleet progress: sessions, their goals, and each goal's status/todo progress, with result statistics; auto-refreshes in place. | `loopx dash`, [session dash design](docs/product/surfaces/session-dash-panel-design.md) |
|
|
373
414
|
| External projections | Projects todos and gates into collaboration surfaces while LoopX remains authoritative. | `loopx lark-kanban`, [Lark Kanban adapter](docs/integrations/lark-kanban-control-plane-adapter.md) |
|
|
374
415
|
| Domain capabilities | Packages repeatable work lanes such as issue fixing, content operations, value connector planning, ML experiment advice, benchmark evidence, and Explore. | `loopx issue-fix`, `loopx content-ops`, `loopx value-connectors`, `loopx ml-experiment`, `loopx benchmark`, [Explore](loopx/capabilities/explore/README.md) |
|
|
375
416
|
| Experimental context learning | Lets named registered agents trial provider-neutral Reward Memory through ignored, default-off project configuration. OpenViking is one provider option, not a global dependency. | `loopx reward-memory experiment-status`, [Reward Memory architecture](loopx/capabilities/reward_memory/README.md) |
|
|
@@ -37,6 +37,46 @@ to hand off across turns, tools, and agents.
|
|
|
37
37
|
- **Getting started** - install, connect a project, and run your first governed loop. [Guide](docs/guides/getting-started.md)
|
|
38
38
|
- **Docs** - the full reference and operations site. [LoopX Docs](https://huangruiteng.github.io/loopx/docs/)
|
|
39
39
|
|
|
40
|
+
## Meet the Personal Agent Workspace
|
|
41
|
+
|
|
42
|
+
Turn scattered agent sessions into one local-first workspace for Goals,
|
|
43
|
+
attention, conversations, tasks, files, schedules, and recovery.
|
|
44
|
+
|
|
45
|
+
<a href="docs/assets/personal-workspace/loopx-dashboard-launch.mp4">
|
|
46
|
+
<img src="docs/assets/personal-workspace/loopx-dashboard-tour.webp" alt="Animated tour of the LoopX personal Agent workspace, from one-command launch to Manager overview, Goal task board, protected action preview, and Goal details" width="960">
|
|
47
|
+
</a>
|
|
48
|
+
|
|
49
|
+
The workspace gives you one place to:
|
|
50
|
+
|
|
51
|
+
- see what needs you, what is running, what is being watched, and what is
|
|
52
|
+
scheduled or stopped;
|
|
53
|
+
- continue across Codex, Claude Code, direct-model, and other registered Agent
|
|
54
|
+
sessions without losing Goal state or evidence;
|
|
55
|
+
- review protected changes through typed preview, explicit confirmation, and
|
|
56
|
+
receipts while LoopX state—not the browser—remains authoritative.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
loopx dashboard
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
`loopx dashboard` is the supported browser/PWA launch path. For a native
|
|
63
|
+
window, the experimental source-built Tauri shell reuses the same loopback
|
|
64
|
+
status and Chat services without becoming another state authority:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
cd apps/desktop/loopx-control-plane
|
|
68
|
+
npm install
|
|
69
|
+
npm run dev
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
[Read the desktop shell guide](apps/desktop/loopx-control-plane/README.md).
|
|
73
|
+
Closing the window stops only the service processes that the shell started;
|
|
74
|
+
existing LoopX services and durable Goal state remain intact.
|
|
75
|
+
|
|
76
|
+
[Watch the full 32-second walkthrough](docs/assets/personal-workspace/loopx-dashboard-launch.mp4)
|
|
77
|
+
· [Read the workspace guide](docs/guides/personal-workspace-user-guide.md)
|
|
78
|
+
· [Try the five-minute tour](docs/guides/personal-workspace-trial-guide.md)
|
|
79
|
+
|
|
40
80
|
<a id="how-it-works"></a>
|
|
41
81
|
|
|
42
82
|
## Why LoopX
|
|
@@ -341,6 +381,7 @@ evidence → recovery; continuation → governance.
|
|
|
341
381
|
| Quota and interaction contract | Decides whether a turn should deliver, ask, wait, self-repair, or stay quiet. | `loopx quota should-run`, [quota allocation](docs/quota-allocation.md) |
|
|
342
382
|
| Agent runtime bridges | Keeps Codex App, Codex CLI, Claude Code, and generic workers aligned with the same guard. | `loopx heartbeat-prompt`, `loopx codex-cli-bootstrap-message`, `loopx worker-bridge` |
|
|
343
383
|
| Operator surfaces | Renders compact status without making the browser the state authority. | `loopx serve-status`, [dashboard](apps/presentation/dashboard/README.md) |
|
|
384
|
+
| Session dash | Starts a live single-page panel that tracks fleet progress: sessions, their goals, and each goal's status/todo progress, with result statistics; auto-refreshes in place. | `loopx dash`, [session dash design](docs/product/surfaces/session-dash-panel-design.md) |
|
|
344
385
|
| External projections | Projects todos and gates into collaboration surfaces while LoopX remains authoritative. | `loopx lark-kanban`, [Lark Kanban adapter](docs/integrations/lark-kanban-control-plane-adapter.md) |
|
|
345
386
|
| Domain capabilities | Packages repeatable work lanes such as issue fixing, content operations, value connector planning, ML experiment advice, benchmark evidence, and Explore. | `loopx issue-fix`, `loopx content-ops`, `loopx value-connectors`, `loopx ml-experiment`, `loopx benchmark`, [Explore](loopx/capabilities/explore/README.md) |
|
|
346
387
|
| Experimental context learning | Lets named registered agents trial provider-neutral Reward Memory through ignored, default-off project configuration. OpenViking is one provider option, not a global dependency. | `loopx reward-memory experiment-status`, [Reward Memory architecture](loopx/capabilities/reward_memory/README.md) |
|
|
@@ -307,9 +307,14 @@ def onboarding_next_action(
|
|
|
307
307
|
accept_onboarding_agent_todos: bool,
|
|
308
308
|
begin_autonomous_advance: bool,
|
|
309
309
|
codex_app_heartbeat: str,
|
|
310
|
+
include_connection_validation: bool = True,
|
|
310
311
|
) -> str:
|
|
311
312
|
if not onboarding_scan:
|
|
312
|
-
validation_action =
|
|
313
|
+
validation_action = (
|
|
314
|
+
onboarding_connection_validation_action(adapter_kind)
|
|
315
|
+
if include_connection_validation
|
|
316
|
+
else None
|
|
317
|
+
)
|
|
313
318
|
if validation_action:
|
|
314
319
|
return validation_action["text"]
|
|
315
320
|
return "Initial routing is owned by the connected domain adapter."
|
|
@@ -361,10 +366,15 @@ def apply_onboarding_todos_to_state(
|
|
|
361
366
|
accept_onboarding_agent_todos: bool,
|
|
362
367
|
begin_autonomous_advance: bool,
|
|
363
368
|
codex_app_heartbeat: str,
|
|
369
|
+
include_connection_validation: bool = True,
|
|
364
370
|
) -> str:
|
|
365
371
|
if not onboarding_scan:
|
|
366
372
|
lines = text.splitlines()
|
|
367
|
-
action =
|
|
373
|
+
action = (
|
|
374
|
+
onboarding_connection_validation_action(adapter_kind)
|
|
375
|
+
if include_connection_validation
|
|
376
|
+
else None
|
|
377
|
+
)
|
|
368
378
|
if action:
|
|
369
379
|
add_todo_to_lines(
|
|
370
380
|
lines,
|
|
@@ -437,6 +447,7 @@ def render_state_markdown(
|
|
|
437
447
|
accept_onboarding_agent_todos: bool = False,
|
|
438
448
|
begin_autonomous_advance: bool = False,
|
|
439
449
|
codex_app_heartbeat: str = "ask",
|
|
450
|
+
include_connection_validation: bool = True,
|
|
440
451
|
handoff_mode: str = HANDOFF_MODE_LEGACY,
|
|
441
452
|
) -> str:
|
|
442
453
|
safe_objective = objective.replace('"', '\\"')
|
|
@@ -454,6 +465,7 @@ def render_state_markdown(
|
|
|
454
465
|
accept_onboarding_agent_todos=accept_onboarding_agent_todos,
|
|
455
466
|
begin_autonomous_advance=begin_autonomous_advance,
|
|
456
467
|
codex_app_heartbeat=codex_app_heartbeat,
|
|
468
|
+
include_connection_validation=include_connection_validation,
|
|
457
469
|
)
|
|
458
470
|
# ``handoff_mode`` travels in the state front matter (RFC shared-goal
|
|
459
471
|
# authority, Appendix B). Legacy is the absent default and is never
|
|
@@ -524,6 +536,7 @@ adapter_id: {goal_id}
|
|
|
524
536
|
accept_onboarding_agent_todos=accept_onboarding_agent_todos,
|
|
525
537
|
begin_autonomous_advance=begin_autonomous_advance,
|
|
526
538
|
codex_app_heartbeat=codex_app_heartbeat,
|
|
539
|
+
include_connection_validation=include_connection_validation,
|
|
527
540
|
)
|
|
528
541
|
|
|
529
542
|
|
|
@@ -565,6 +578,7 @@ def build_goal_entry(
|
|
|
565
578
|
allowed_domains: list[str],
|
|
566
579
|
write_scope: list[str],
|
|
567
580
|
execution_profile: dict[str, Any] | None,
|
|
581
|
+
display_name: str | None = None,
|
|
568
582
|
) -> dict[str, Any]:
|
|
569
583
|
authority_sources = []
|
|
570
584
|
if goal_doc:
|
|
@@ -577,6 +591,7 @@ def build_goal_entry(
|
|
|
577
591
|
)
|
|
578
592
|
return {
|
|
579
593
|
"id": goal_id,
|
|
594
|
+
**({"display_name": display_name} if display_name else {}),
|
|
580
595
|
"domain": domain,
|
|
581
596
|
"status": "active",
|
|
582
597
|
"role": role,
|
|
@@ -676,6 +691,8 @@ def bootstrap_project(
|
|
|
676
691
|
onboarding_max_status_paths: int = 12,
|
|
677
692
|
onboarding_max_top_level_files: int = 24,
|
|
678
693
|
preserve_todos: bool = False,
|
|
694
|
+
display_name: str | None = None,
|
|
695
|
+
include_connection_validation: bool = True,
|
|
679
696
|
force: bool,
|
|
680
697
|
dry_run: bool,
|
|
681
698
|
sync_global: bool,
|
|
@@ -738,6 +755,7 @@ def bootstrap_project(
|
|
|
738
755
|
allowed_domains=allowed_domains or [],
|
|
739
756
|
write_scope=write_scope or [],
|
|
740
757
|
execution_profile=execution_profile,
|
|
758
|
+
display_name=display_name,
|
|
741
759
|
)
|
|
742
760
|
registry, registry_goal_action = merge_goal(registry, goal_entry, force=force)
|
|
743
761
|
|
|
@@ -914,6 +932,7 @@ def bootstrap_project(
|
|
|
914
932
|
accept_onboarding_agent_todos=accept_onboarding_agent_todos,
|
|
915
933
|
begin_autonomous_advance=begin_autonomous_advance,
|
|
916
934
|
codex_app_heartbeat=codex_app_heartbeat,
|
|
935
|
+
include_connection_validation=include_connection_validation,
|
|
917
936
|
handoff_mode=declared_handoff_mode,
|
|
918
937
|
),
|
|
919
938
|
encoding="utf-8",
|
|
@@ -309,14 +309,18 @@ receipt.
|
|
|
309
309
|
|
|
310
310
|
A countable experiment uses the toolkit in this order:
|
|
311
311
|
|
|
312
|
-
1.
|
|
313
|
-
2.
|
|
314
|
-
3.
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
312
|
+
1. Read the project experiment board before selecting or launching another case.
|
|
313
|
+
2. Declare a `run_permission_policy_v0` and preflight the runner boundary.
|
|
314
|
+
3. Upsert the planned or running row, then launch one frozen case/arm; do not expose
|
|
315
|
+
evaluator sources or official feedback.
|
|
316
|
+
4. Capture ATIF tool evidence and a runner-owned runtime attestation.
|
|
317
|
+
5. Run `integrity-qualification`; stop on any blocker.
|
|
318
|
+
6. Run the independent verifier only after the agent phase.
|
|
319
|
+
7. Reduce the official result through the benchmark-owned scoring path.
|
|
320
|
+
8. Upsert terminal score, countability, effort, treatment fidelity, and insight
|
|
321
|
+
status, then read the matched-comparison projection.
|
|
322
|
+
9. Apply attempt-countability, treatment-fidelity, and matched-pair gates before any
|
|
323
|
+
comparison claim.
|
|
320
324
|
|
|
321
325
|
Integrity qualification is necessary but not sufficient for a score claim. It does
|
|
322
326
|
not establish task correctness, official score authority, experiment parity, or a
|
|
@@ -324,6 +328,55 @@ LoopX advantage. `score_claim_eligible=true` only permits the official score and
|
|
|
324
328
|
matched-pair gates to run; `score_claim_countable` and `matched_pair_countable` stay
|
|
325
329
|
false in this receipt. Those remain separate verifier and comparison contracts.
|
|
326
330
|
|
|
331
|
+
## Experiment board
|
|
332
|
+
|
|
333
|
+
The project-local experiment board keeps baseline, standard control or treatment,
|
|
334
|
+
and diagnostic explore runs in one compact projection. It is not a second score
|
|
335
|
+
authority and never stores raw task text, trajectories, logs, hidden evaluation,
|
|
336
|
+
verifier output, credentials, or local paths.
|
|
337
|
+
|
|
338
|
+
An agent using this capability should start or resume a study by reading the board:
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
loopx benchmark experiment-board-show \
|
|
342
|
+
--goal-id <goal-id> \
|
|
343
|
+
--format json
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
Preview and then execute an idempotent row update when a run starts or reaches a
|
|
347
|
+
terminal state:
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
loopx benchmark experiment-board-upsert \
|
|
351
|
+
--goal-id <goal-id> \
|
|
352
|
+
--row-json <compact-row.json> \
|
|
353
|
+
--format json
|
|
354
|
+
|
|
355
|
+
loopx benchmark experiment-board-upsert \
|
|
356
|
+
--goal-id <goal-id> \
|
|
357
|
+
--row-json <compact-row.json> \
|
|
358
|
+
--execute \
|
|
359
|
+
--format json
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
The default ledger is locked, atomically updated, and keyed by benchmark, study,
|
|
363
|
+
case, and run identity. A compact row carries arm role, exact and comparison
|
|
364
|
+
protocol ids, model, score metrics, countability, treatment fidelity, bounded
|
|
365
|
+
effort, and an optional insight status or public-safe handle. Unknown fields and
|
|
366
|
+
path-like references fail closed.
|
|
367
|
+
|
|
368
|
+
Every non-baseline row names an exact `comparison_anchor_run_id`. Standard control
|
|
369
|
+
or treatment rows anchor to a baseline. Explore rows use `diagnostic_only` claim
|
|
370
|
+
scope and may anchor to the baseline or fixed standard arm they are examining.
|
|
371
|
+
Matched comparisons require compatible benchmark, study, case, model, primary
|
|
372
|
+
metric, comparison protocol, score countability, and treatment fidelity. Exact
|
|
373
|
+
protocol revisions remain visible as a warning even when a declared comparison
|
|
374
|
+
protocol says an older credible score remains semantically comparable.
|
|
375
|
+
|
|
376
|
+
Full post-run analysis stays in private `benchmark_case_insight_v0` storage. The
|
|
377
|
+
board records only its compact status or handle, so reading the board cannot widen
|
|
378
|
+
the solving agent's evidence boundary.
|
|
379
|
+
|
|
327
380
|
## Post-run case insight monitor
|
|
328
381
|
|
|
329
382
|
Benchmark startup should create one `continuous_monitor` todo. Whenever a case
|
|
@@ -15,6 +15,19 @@ from .container_binding import (
|
|
|
15
15
|
compact_docker_container_binding_receipt,
|
|
16
16
|
select_exact_docker_container,
|
|
17
17
|
)
|
|
18
|
+
from .experiment_board import (
|
|
19
|
+
BENCHMARK_EXPERIMENT_BOARD_LEDGER_FILENAME,
|
|
20
|
+
BENCHMARK_EXPERIMENT_BOARD_ROW_SCHEMA_VERSION,
|
|
21
|
+
BENCHMARK_EXPERIMENT_BOARD_SCHEMA_VERSION,
|
|
22
|
+
benchmark_experiment_board_row_key,
|
|
23
|
+
build_benchmark_experiment_board,
|
|
24
|
+
default_benchmark_experiment_board_path,
|
|
25
|
+
normalize_benchmark_experiment_board_row,
|
|
26
|
+
preview_benchmark_experiment_board_upsert,
|
|
27
|
+
read_benchmark_experiment_board_rows,
|
|
28
|
+
render_benchmark_experiment_board_markdown,
|
|
29
|
+
upsert_benchmark_experiment_board_row,
|
|
30
|
+
)
|
|
18
31
|
from .integrity import (
|
|
19
32
|
BENCHMARK_INTEGRITY_POLICY_SCHEMA_VERSION,
|
|
20
33
|
BENCHMARK_INTEGRITY_QUALIFICATION_SCHEMA_VERSION,
|
|
@@ -86,6 +99,9 @@ from .run_permissions import (
|
|
|
86
99
|
__all__ = [
|
|
87
100
|
"BENCHMARK_CANDIDATE_SOURCE_BOUNDARY_SCHEMA_VERSION",
|
|
88
101
|
"BENCHMARK_EXACT_CONTAINER_BINDING_SCHEMA_VERSION",
|
|
102
|
+
"BENCHMARK_EXPERIMENT_BOARD_LEDGER_FILENAME",
|
|
103
|
+
"BENCHMARK_EXPERIMENT_BOARD_ROW_SCHEMA_VERSION",
|
|
104
|
+
"BENCHMARK_EXPERIMENT_BOARD_SCHEMA_VERSION",
|
|
89
105
|
"BENCHMARK_INTEGRITY_POLICY_SCHEMA_VERSION",
|
|
90
106
|
"BENCHMARK_INTEGRITY_QUALIFICATION_SCHEMA_VERSION",
|
|
91
107
|
"BENCHMARK_RUNTIME_INTEGRITY_ATTESTATION_SCHEMA_VERSION",
|
|
@@ -119,7 +135,9 @@ __all__ = [
|
|
|
119
135
|
"PublicTrajectorySummaryError",
|
|
120
136
|
"StdioNativeGoalTransport",
|
|
121
137
|
"attach_native_goal",
|
|
138
|
+
"benchmark_experiment_board_row_key",
|
|
122
139
|
"build_benchmark_candidate_source_boundary",
|
|
140
|
+
"build_benchmark_experiment_board",
|
|
123
141
|
"build_benchmark_integrity_qualification",
|
|
124
142
|
"build_native_codex_isolation_envelope",
|
|
125
143
|
"build_native_goal_public_trajectory_summary",
|
|
@@ -131,16 +149,21 @@ __all__ = [
|
|
|
131
149
|
"compact_native_codex_profile_receipt",
|
|
132
150
|
"compact_native_goal_receipt",
|
|
133
151
|
"compact_run_permission_policy_for_quota",
|
|
152
|
+
"default_benchmark_experiment_board_path",
|
|
134
153
|
"filter_public_benchmark_artifact_paths",
|
|
135
154
|
"inspect_native_codex_profile",
|
|
136
155
|
"install_native_codex_profile",
|
|
137
156
|
"materialize_public_benchmark_artifacts",
|
|
138
157
|
"native_codex_app_server_environment",
|
|
139
158
|
"native_codex_profile_environment",
|
|
159
|
+
"normalize_benchmark_experiment_board_row",
|
|
140
160
|
"observe_native_goal_event",
|
|
161
|
+
"preview_benchmark_experiment_board_upsert",
|
|
141
162
|
"probe_native_goal_process",
|
|
163
|
+
"read_benchmark_experiment_board_rows",
|
|
142
164
|
"rebase_native_codex_loopx_workspace_state",
|
|
143
165
|
"refresh_native_goal_status",
|
|
166
|
+
"render_benchmark_experiment_board_markdown",
|
|
144
167
|
"render_native_codex_goal_prompt",
|
|
145
168
|
"run_native_goal_process",
|
|
146
169
|
"run_native_goal_process_until_terminal",
|
|
@@ -148,6 +171,7 @@ __all__ = [
|
|
|
148
171
|
"run_native_goal_until_terminal",
|
|
149
172
|
"select_exact_docker_container",
|
|
150
173
|
"start_native_goal_turn",
|
|
174
|
+
"upsert_benchmark_experiment_board_row",
|
|
151
175
|
"validate_run_permission_policy",
|
|
152
176
|
"wait_native_goal_turn",
|
|
153
177
|
]
|
|
@@ -24,6 +24,31 @@ BENCHMARK_TOOLKIT_CATALOG_ENTRY: dict[str, Any] = {
|
|
|
24
24
|
),
|
|
25
25
|
"entry_command": "loopx benchmark --help",
|
|
26
26
|
"commands": [
|
|
27
|
+
{
|
|
28
|
+
"command": (
|
|
29
|
+
"loopx benchmark experiment-board-show --goal-id <goal-id> "
|
|
30
|
+
"--format json"
|
|
31
|
+
),
|
|
32
|
+
"purpose": (
|
|
33
|
+
"Read baseline, treatment, explore, countability, effort, and "
|
|
34
|
+
"insight status before selecting or launching another arm."
|
|
35
|
+
),
|
|
36
|
+
"write_boundary": "read-only project-local public-safe domain state",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"command": (
|
|
40
|
+
"loopx benchmark experiment-board-upsert --goal-id <goal-id> "
|
|
41
|
+
"--row-json <compact-row.json> --execute --format json"
|
|
42
|
+
),
|
|
43
|
+
"purpose": (
|
|
44
|
+
"Idempotently record one planned, running, or terminal compact run "
|
|
45
|
+
"row; omit --execute for a no-write preview."
|
|
46
|
+
),
|
|
47
|
+
"write_boundary": (
|
|
48
|
+
"explicit project-local domain-state write; rejects raw paths, "
|
|
49
|
+
"logs, trajectories, hidden evaluation, credentials, and unknown fields"
|
|
50
|
+
),
|
|
51
|
+
},
|
|
27
52
|
{
|
|
28
53
|
"command": (
|
|
29
54
|
"loopx benchmark integrity-qualification "
|
|
@@ -57,6 +82,37 @@ BENCHMARK_TOOLKIT_CATALOG_ENTRY: dict[str, Any] = {
|
|
|
57
82
|
),
|
|
58
83
|
},
|
|
59
84
|
],
|
|
85
|
+
"agent_usage": {
|
|
86
|
+
"benchmark_start_hint": (
|
|
87
|
+
"At benchmark start, read the experiment board before selecting or "
|
|
88
|
+
"launching a case; update the same stable row at every material run "
|
|
89
|
+
"transition."
|
|
90
|
+
),
|
|
91
|
+
"required_sequence": [
|
|
92
|
+
"read_experiment_board_before_launch_or_case_selection",
|
|
93
|
+
"upsert_preregistered_or_running_row_when_a_run_starts",
|
|
94
|
+
"upsert_terminal_score_countability_effort_and_insight_status",
|
|
95
|
+
"read_matched_comparisons_before_selecting_the_next_arm",
|
|
96
|
+
],
|
|
97
|
+
"board_commands": {
|
|
98
|
+
"read": (
|
|
99
|
+
"loopx benchmark experiment-board-show --goal-id <goal-id> "
|
|
100
|
+
"--format json"
|
|
101
|
+
),
|
|
102
|
+
"preview": (
|
|
103
|
+
"loopx benchmark experiment-board-upsert --goal-id <goal-id> "
|
|
104
|
+
"--row-json <compact-row.json> --format json"
|
|
105
|
+
),
|
|
106
|
+
"write": (
|
|
107
|
+
"loopx benchmark experiment-board-upsert --goal-id <goal-id> "
|
|
108
|
+
"--row-json <compact-row.json> --execute --format json"
|
|
109
|
+
),
|
|
110
|
+
},
|
|
111
|
+
"selection_rule": (
|
|
112
|
+
"Keep diagnostic-only explore rows separate and make paired claims "
|
|
113
|
+
"only from matched_pair_countable comparisons."
|
|
114
|
+
),
|
|
115
|
+
},
|
|
60
116
|
"post_run_case_analysis": {
|
|
61
117
|
"benchmark_start_hint": (
|
|
62
118
|
"When starting a benchmark, add one continuous_monitor todo that runs "
|
|
@@ -125,6 +181,16 @@ BENCHMARK_TOOLKIT_CATALOG_ENTRY: dict[str, Any] = {
|
|
|
125
181
|
},
|
|
126
182
|
},
|
|
127
183
|
"implemented_protocols": [
|
|
184
|
+
{
|
|
185
|
+
"schema_version": "benchmark_experiment_board_row_v0",
|
|
186
|
+
"module": "loopx.capabilities.benchmark_toolkit.experiment_board",
|
|
187
|
+
"doc": "loopx/capabilities/benchmark_toolkit/README.md",
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"schema_version": "benchmark_experiment_board_v0",
|
|
191
|
+
"module": "loopx.capabilities.benchmark_toolkit.experiment_board",
|
|
192
|
+
"doc": "loopx/capabilities/benchmark_toolkit/README.md",
|
|
193
|
+
},
|
|
128
194
|
{
|
|
129
195
|
"schema_version": "benchmark_integrity_qualification_v0",
|
|
130
196
|
"module": "loopx.capabilities.benchmark_toolkit.integrity",
|
|
@@ -151,7 +217,12 @@ BENCHMARK_TOOLKIT_CATALOG_ENTRY: dict[str, Any] = {
|
|
|
151
217
|
"doc": "loopx/capabilities/benchmark_toolkit/README.md",
|
|
152
218
|
},
|
|
153
219
|
],
|
|
154
|
-
"smokes": [
|
|
220
|
+
"smokes": [
|
|
221
|
+
(
|
|
222
|
+
"python -m pytest tests/capabilities/test_benchmark_toolkit.py "
|
|
223
|
+
"tests/capabilities/test_benchmark_experiment_board.py -q"
|
|
224
|
+
)
|
|
225
|
+
],
|
|
155
226
|
"docs": ["loopx/capabilities/benchmark_toolkit/README.md"],
|
|
156
227
|
"boundaries": [
|
|
157
228
|
"The toolkit never grants runner, Docker, model, upload, submission, or publication authority; each effect remains separately gated.",
|
|
@@ -160,10 +231,10 @@ BENCHMARK_TOOLKIT_CATALOG_ENTRY: dict[str, Any] = {
|
|
|
160
231
|
"Concurrent Docker runs must bind runtime evidence to one exact job-owned container; image-only discovery is not sufficient.",
|
|
161
232
|
"Integrity qualification establishes countability eligibility only; an independent official result and matched experiment contract are still required.",
|
|
162
233
|
"Post-run analyst access never widens the solving agent's evidence boundary or grants feedback reuse in another scored run.",
|
|
163
|
-
"
|
|
234
|
+
"The experiment board is a compact projection, not a score authority: benchmark-family runners and scoring adapters remain outside the active capability.",
|
|
164
235
|
],
|
|
165
236
|
"next_real_step": (
|
|
166
|
-
"
|
|
167
|
-
"
|
|
237
|
+
"Use the board before launch and after each scored case while keeping "
|
|
238
|
+
"solver integrity separate from private benchmark_case_insight_v0 analysis."
|
|
168
239
|
),
|
|
169
240
|
}
|
|
@@ -238,6 +238,7 @@ def _command_strings(function_name: str, raw_arguments: object) -> tuple[str, ..
|
|
|
238
238
|
|
|
239
239
|
|
|
240
240
|
def _shell_segments(command: str) -> tuple[tuple[str, ...], ...]:
|
|
241
|
+
command = _without_shell_heredoc_bodies(command)
|
|
241
242
|
try:
|
|
242
243
|
lexer = shlex.shlex(command, posix=True, punctuation_chars=";&|\n")
|
|
243
244
|
lexer.whitespace = " \t\r"
|
|
@@ -260,6 +261,67 @@ def _shell_segments(command: str) -> tuple[tuple[str, ...], ...]:
|
|
|
260
261
|
return tuple(segments)
|
|
261
262
|
|
|
262
263
|
|
|
264
|
+
def _heredoc_delimiters(command_line: str) -> tuple[tuple[str, bool], ...]:
|
|
265
|
+
"""Return quoted-normalized heredoc delimiters declared by one shell line."""
|
|
266
|
+
|
|
267
|
+
try:
|
|
268
|
+
lexer = shlex.shlex(command_line, posix=True, punctuation_chars=";&|\n<>")
|
|
269
|
+
lexer.whitespace = " \t\r"
|
|
270
|
+
lexer.whitespace_split = True
|
|
271
|
+
lexer.commenters = ""
|
|
272
|
+
tokens = list(lexer)
|
|
273
|
+
except ValueError:
|
|
274
|
+
return ()
|
|
275
|
+
|
|
276
|
+
delimiters: list[tuple[str, bool]] = []
|
|
277
|
+
index = 0
|
|
278
|
+
while index < len(tokens):
|
|
279
|
+
if tokens[index] != "<<":
|
|
280
|
+
index += 1
|
|
281
|
+
continue
|
|
282
|
+
index += 1
|
|
283
|
+
strip_tabs = index < len(tokens) and tokens[index] == "-"
|
|
284
|
+
if strip_tabs:
|
|
285
|
+
index += 1
|
|
286
|
+
if index >= len(tokens):
|
|
287
|
+
break
|
|
288
|
+
delimiter = tokens[index]
|
|
289
|
+
if not strip_tabs and delimiter.startswith("-") and len(delimiter) > 1:
|
|
290
|
+
# ``shlex`` returns ``-EOF`` for the ordinary ``<<-EOF`` spelling.
|
|
291
|
+
strip_tabs = True
|
|
292
|
+
delimiter = delimiter[1:]
|
|
293
|
+
if delimiter and all(character not in ";&|\n<>" for character in delimiter):
|
|
294
|
+
delimiters.append((delimiter, strip_tabs))
|
|
295
|
+
index += 1
|
|
296
|
+
return tuple(delimiters)
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
def _without_shell_heredoc_bodies(command: str) -> str:
|
|
300
|
+
"""Exclude stdin payloads from shell-command classification.
|
|
301
|
+
|
|
302
|
+
Patch and file-generation tools commonly receive source text through a
|
|
303
|
+
heredoc. That payload is data, not a sequence of shell commands, so a
|
|
304
|
+
source line such as ``env := value`` must not be classified as an executed
|
|
305
|
+
``env`` credential probe. Command lines before and after the payload stay
|
|
306
|
+
visible to the classifier.
|
|
307
|
+
"""
|
|
308
|
+
|
|
309
|
+
visible_lines: list[str] = []
|
|
310
|
+
pending: list[tuple[str, bool]] = []
|
|
311
|
+
for raw_line in command.splitlines(keepends=True):
|
|
312
|
+
if pending:
|
|
313
|
+
delimiter, strip_tabs = pending[0]
|
|
314
|
+
candidate = raw_line.rstrip("\r\n")
|
|
315
|
+
if strip_tabs:
|
|
316
|
+
candidate = candidate.lstrip("\t")
|
|
317
|
+
if candidate == delimiter:
|
|
318
|
+
pending.pop(0)
|
|
319
|
+
continue
|
|
320
|
+
visible_lines.append(raw_line)
|
|
321
|
+
pending.extend(_heredoc_delimiters(raw_line))
|
|
322
|
+
return "".join(visible_lines)
|
|
323
|
+
|
|
324
|
+
|
|
263
325
|
def _shell_executable(tokens: tuple[str, ...]) -> tuple[str, tuple[str, ...]]:
|
|
264
326
|
remaining = list(tokens)
|
|
265
327
|
while remaining and re.fullmatch(r"[A-Za-z_][A-Za-z0-9_]*=.*", remaining[0]):
|