loopx 1.0.1__tar.gz → 1.0.2__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-1.0.1/loopx.egg-info → loopx-1.0.2}/PKG-INFO +13 -1
- {loopx-1.0.1 → loopx-1.0.2}/README.md +12 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/__init__.py +1 -1
- {loopx-1.0.1 → loopx-1.0.2}/loopx/authority.py +9 -17
- {loopx-1.0.1 → loopx-1.0.2}/loopx/boundary_authority.py +9 -18
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/README.md +52 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/catalog_entry.py +59 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/native_codex_profile.py +21 -6
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/pr_review_queue/README.md +17 -1
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/pr_review_queue/result_check.py +7 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/pr_review_queue/review_contract.py +29 -1
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_server.py +2 -2
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_store.py +4 -3
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/quota.py +11 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/quota_context.py +12 -1
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/todo_event.py +1 -1
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/turn.py +4 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/authority_core.py +199 -309
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/coordination_state_contract.generated.ts +1 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/coordination_state_contract_generated.py +1 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/coordination_state_contract_v0.json +1 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/executor.py +5 -1
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority.py +6 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_runtime.ts +173 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/runtime_shadow.py +7 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/runtime_shadow.ts +8 -1
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/todo_agents.ts +6 -2
- loopx-1.0.2/loopx/control_plane/coordination/todo_archive_selection.ts +132 -0
- loopx-1.0.2/loopx/control_plane/coordination/todo_lifecycle_decision.ts +565 -0
- loopx-1.0.2/loopx/control_plane/coordination/todo_successor_derivation.ts +412 -0
- loopx-1.0.2/loopx/control_plane/coordination/todo_terminal_lifecycle.ts +1256 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/effect_runtime_handlers.ts +20 -2
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/__init__.py +16 -92
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/ack_policy.py +3 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/fallback_disposition.py +5 -25
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/long_todo_chain.py +28 -86
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/semantic_history.py +2 -46
- loopx-1.0.2/loopx/control_plane/goals/goal_vision_read_model.py +176 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_vision_wait.py +122 -93
- loopx-1.0.2/loopx/control_plane/goals/goal_vision_wait_projection.py +57 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/vision_checkpoint.ts +9 -1
- loopx-1.0.2/loopx/control_plane/goals/vision_wait_coverage.ts +46 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement.py +69 -3
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/should_run_prepare.py +5 -1
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/active_state_todo_parser.py +1 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/active_state_todos.py +27 -6
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completed_archive.py +33 -25
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_policy.py +18 -30
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_transaction.py +52 -10
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_transaction.ts +68 -10
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_validation.py +180 -36
- loopx-1.0.2/loopx/control_plane/todos/completion_validation_projection.py +137 -0
- loopx-1.0.2/loopx/control_plane/todos/completion_validation_store.py +129 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/durable_completion.py +38 -1
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/event_writeback.py +51 -62
- loopx-1.0.2/loopx/control_plane/todos/frontier_revision.py +208 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/machine_section_projection.py +135 -24
- loopx-1.0.2/loopx/control_plane/todos/path_resolution.py +29 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/provider_create.py +77 -8
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/provider_projection.py +39 -9
- loopx-1.0.2/loopx/control_plane/todos/provider_terminal_lifecycle.py +564 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/quota_summary.py +19 -4
- loopx-1.0.2/loopx/control_plane/todos/successor_derivation.py +135 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/todo_summary.py +8 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/semantic_replan_writeback.py +7 -3
- {loopx-1.0.1 → loopx-1.0.2}/loopx/dsh_goal_mode/turn_host_adapter.py +14 -10
- {loopx-1.0.1 → loopx-1.0.2}/loopx/event_sourced_state.py +2 -4
- {loopx-1.0.1 → loopx-1.0.2}/loopx/feedback.py +12 -20
- {loopx-1.0.1 → loopx-1.0.2}/loopx/history.py +19 -7
- {loopx-1.0.1 → loopx-1.0.2}/loopx/orchestration.py +6 -2
- loopx-1.0.2/loopx/public_safe_text.py +64 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/skill_install_readback.py +143 -27
- {loopx-1.0.1 → loopx-1.0.2}/loopx/slash_command_install.py +1 -1
- {loopx-1.0.1 → loopx-1.0.2}/loopx/state_refresh.py +2 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/status_server.py +37 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/todos.py +69 -181
- loopx-1.0.2/loopx/web/chat/assets/index-BtQNwJj6.js +129 -0
- loopx-1.0.2/loopx/web/chat/assets/index-DiCXWPfR.css +1 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/index.html +2 -2
- {loopx-1.0.1 → loopx-1.0.2}/loopx/workflow_skill_install.py +12 -1
- {loopx-1.0.1 → loopx-1.0.2/loopx.egg-info}/PKG-INFO +13 -1
- {loopx-1.0.1 → loopx-1.0.2}/loopx.egg-info/SOURCES.txt +15 -0
- {loopx-1.0.1 → loopx-1.0.2}/pyproject.toml +1 -1
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-pr-review/SKILL.md +11 -11
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-self-repair/references/repair-patterns.md +1 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_session_active_turn.py +46 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_startup_isolation.py +8 -3
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_dsh_goal_mode.py +93 -3
- loopx-1.0.2/tests/test_event_sourced_state_store.py +50 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_history_chronology.py +36 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_loopx_turn_driver.py +127 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_skill_delivery_parity.py +97 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_slash_command_install.py +6 -2
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_sonarcloud_workflow.py +37 -1
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_status_server_fast_path.py +68 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_workflow_skill_install.py +115 -1
- loopx-1.0.1/loopx/control_plane/todos/completion_validation_projection.py +0 -59
- loopx-1.0.1/tests/test_event_sourced_state_store.py +0 -27
- {loopx-1.0.1 → loopx-1.0.2}/LICENSE +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/LICENSE-MIT +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/NOTICE +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/agent_onboarding.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/agent_registry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/agy_goal_mode/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/agy_goal_mode/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/ark_managed_agent_host.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/attached_session.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/attached_session_api.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/bootstrap.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/bootstrap_command_pack.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/maintainability_ratchet.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/package_profiles.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/planner.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/premerge.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/qualification_profiles.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/quality_surface_catalog.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/release_profiles.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/runner.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/smoke_health.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/canary/smoke_profiles.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/agent_turn_recall/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/agent_turn_recall/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/agent_turn_recall/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/agent_turn_recall/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/agent_turn_recall/core.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/adaptive_concurrency.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/artifacts.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/behavior_finding.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/concurrency_envelope.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/container_binding.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/continuation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/environment_access.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/experiment_board.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/factorial_contrast.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/four_arm_contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/integrity.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/native_codex_goal.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/native_codex_isolation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/provider_gateway.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/public_trajectory.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/reward_contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/run_permissions.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/runtime_continuity.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/runtime_observation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/source_revision_fence.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/study_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/traex_evidence.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/benchmark_toolkit/treatment_continuation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/catalog.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/context.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/oracles.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/policy.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/receipt.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/result.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/scope.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/change_quality/shadow.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/configuration_ui.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/connector_registry/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/connector_registry/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/connector_registry/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/connector_registry/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/connector_registry/core.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/connector_registry/tests/test_connector_registry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/connector_packets.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/item_lifecycle.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/layout.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/markdown.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/schemas.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/social_browser_x.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/surface.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/content_ops/templates/layout-catalog-v0.json +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/context_providers/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/context_providers/base.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/context_providers/factory.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/context_providers/openviking.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/context_providers/service_ownership.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/README.zh-CN.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/architecture.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/assembler.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/capture.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/cursor_commit.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/extension_provider.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/outcome_feedback.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/packets.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/private_state.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/profile.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/providers.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/review_settlement.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/decision_context/sources.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/deep_research/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/deep_research/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/deep_research/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/deep_research/runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/documentation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/README.zh-CN.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/activation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/adaptive_replay_planner.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/child_replay_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/composition_frontier.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/counterfactual_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/episode_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/harness_checkpoint.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/harness_gate.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/harness_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/replay_metrics.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/replay_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/resource_portfolio.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/result_log.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/router_state.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/source_history_reconcile.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/speculative_scheduler.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/todo_branch_plan.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/todo_evidence.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/trace_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/explore/worker_branch_plan.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/integration_branch/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/integration_branch/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/integration_branch/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/integration_branch/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/integration_branch/core.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/README.zh-CN.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/acceptance_loop.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/candidate_evidence.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/candidate_preflight.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/cli_input.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/content_ops_cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/discovered_issue_promotion.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/openviking-pilot-handoff.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-acceptance-loop-v0.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-discovered-issue-promotion-v0.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-metrics-projection-v0.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-reviewer-notification-sinks-v0.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-reviewer-recommendation-v0.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-reviewer-request-v0.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/protocols/issue-fix-workflow-contract-v0.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/docs/state-kernel-domain-state-case-study.zh-CN.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/explore_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/feasibility.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/github_public.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/intake_surface.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/metadata_preview.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/metrics_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/metrics_supplement.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/metrics_supplement_cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/outcome_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/periodic_report.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/pr_description.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/pr_gate_reconcile.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/pr_gate_reconcile_cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/pr_lifecycle.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/pr_lifecycle_rollout.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/pr_monitor_materialization.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/pr_review_ack.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/provider_hooks.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/repository_commit_evidence.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/repository_context.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/repository_memory.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/repository_memory_provider.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/repository_snapshot.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/reviewer_cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/reviewer_notification.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/reviewer_notification_drain.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/reviewer_recommendation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/reviewer_request.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/reward_memory.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/issue_fix/workflow_plan.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/machine_configuration/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/machine_configuration/builtins.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/machine_configuration/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/machine_configuration/contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/machine_configuration/store.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/README.zh-CN.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/_validation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/apply.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/architecture.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/decision_planning.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/explore_execution.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/intake.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/inventory.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/lifecycle.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/preparation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/project_skill.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/ranking.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/readable_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/rebuild.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/material_lifecycle/settlement.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/adapters.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/archive.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/audience.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/bindings.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/core.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/extension_envelope.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/goal_configuration.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/incremental.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/machine_defaults.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/machine_store.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/pending_intent.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/post_writeback_hook.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/presets.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/profile.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/project_progress.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/project_progress_snapshot.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/request_action.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/runtime_producer.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/stage_completion.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/triggers.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/periodic_report/workspace.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/pr_review_queue/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/pr_review_queue/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/pr_review_queue/core.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/project_skill_delivery/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/project_skill_delivery/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/project_skill_delivery/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/project_skill_delivery/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/project_skill_delivery/core.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/public_safe_outbound/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/public_safe_outbound/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/public_safe_outbound/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/public_safe_outbound/scan_cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/public_safe_outbound/scanner.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/public_safe_outbound/tests/test_scanner.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/registry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/README.zh-CN.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/envelope.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/fixture.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/intake.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/ledger.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reliability_diagnostics/receipt.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/git_hook.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/interaction_hook.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/ledger.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/policy.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/repository_change_window/repository.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/README.zh-CN.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/application.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/architecture.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/candidate_review.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/dogfood.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/evaluation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/evaluation_fixtures.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/experiment.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/feedback_hint.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/health.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/ingestion.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/memory_utility.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/outbound.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/registry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/runtime_hooks.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/reward_memory/scoped_feedback.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/semantic_preference/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/semantic_preference/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/semantic_preference/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/semantic_preference/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/semantic_preference/contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/semantic_preference/docs/openviking-project-peer.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/semantic_preference/reward_memory.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/catalog_entry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/docs/agent-reach-ops-source-map.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/docs/finance-market-snapshot-probe.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/finance_extension_migration.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/install_check.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/planner.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/capabilities/value_connectors/source_map.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_acp.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_action_store.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_actions.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_agent.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_attachments.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_completed_todos.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_configuration_api.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_endpoints.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_goal_configuration_api.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_goal_lifecycle_actions.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_goal_subagent_api.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_lark_api.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_machine_configuration_api.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_monitor_actions.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_providers.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_ssh_source_api.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_status_api.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_todo_actions.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/chat_workspace_directory.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/hooks/goal_policy.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/hooks/goal_state.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/mcp/loopx_mcp.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/scripts/connect.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/scripts/goalmode_cmd.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/scripts/install.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/claude_goal_mode/statusline/goal_status.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/_host_thread.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/authority_shadow.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/benchmark_boundary.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/benchmark_concurrency.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/benchmark_continuation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/benchmark_dispatch.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/benchmark_experiment_board.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/benchmark_study.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/bootstrap_connect.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/canary.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/canary_release_qualification.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/capability.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/coordination_shadow.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/dash.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/deepresearch.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/doctor.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/dreaming.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/evidence_log.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/explore.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/explore_feishu_commands.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/explore_planning_commands.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/extension.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/first_run_report.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/goal_amendment_proposal.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/goal_channel.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/goal_lifecycle.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/handoff_mode.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/history.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/host_mode_plan.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/lark_inbox.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/lark_kanban.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/ml_experiment.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/opencode2_goal_worker.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/post_writeback.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/pr_review.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/presentation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/preset.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/project.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/project_lifecycle.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/project_lifecycle_sinks.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/quota_host_poll.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/quota_monitor_poll.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/quota_registration.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/quota_request.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/quota_scheduler_followup.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/ready_score.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/registry_admin.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/registry_admin_configure.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/registry_admin_lifecycle.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/registry_admin_peer.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/registry_admin_thread_resolution.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/registry_authority.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/reliability_diagnostics.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/review_batch.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/shared_goal_alignment.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/slash_commands.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/start_goal.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_bootstrap.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_bootstrap_registration.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_runtime_idle.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_scheduler.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_session_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_visible_common.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_visible_driver.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/starter_visible_pilot.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/status.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/status_registration.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/summary_all.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/support_control.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/support_control_backup.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/support_control_chat_endpoint.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/support_control_heartbeat_registration.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/support_control_registry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/support_control_supervisor.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/task_lease.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/todo.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/todo_argument_validation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/todo_registration.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/turn_dsh_host.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/turn_inspection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/turn_registration.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/turn_rendering.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/turn_selection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/turn_todo_writeback.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/version.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/worker_bridge.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_commands/workflow_skills.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_rollout.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/cli_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/codex_cli_probe.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/codex_cli_probe_markdown.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/codex_cli_runtime_probe.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/codex_cli_scheduler.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/command_invocation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/configuration_catalog.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/configuration_transaction.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/configure_goal.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/agent_lane_recommendation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/agent_scope.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/agent_scope_frontier.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/capability_gate.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/delivery_workspace.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/delivery_workspace.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/identity.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/legacy_migration.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/management_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/material_frontier.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/material_handoff.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/profile.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/runtime_model.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/subagent_activity.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/supervisor.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/supervisor_events.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/supervisor_inject.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/work_mode.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/agents/workspace_guard.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/capability_hooks.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/capability_hooks.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/authority_store.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/authority_store_codec.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/configuration.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/coordination_projection.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/coordination_state_contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/coordination_state_contract.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/file_authority_store.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/file_provider.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/goal_state_shadow.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/head.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/legacy_writer_fence.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/legacy_writer_fence.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/legacy_writer_lock_paths.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_shadow.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_shadow_adapter.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_shadow_identity.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_shadow_observation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_shadow_outbox.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_shadow_outbox.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_authority_shadow_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/local_snapshot.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/nokv_authority_store.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/nokv_jsonl_helper.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/nokv_jsonl_transport.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/postgresql_authority_store.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/runtime_shadow_writer_adapter.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/shadow_management.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/shadow_management.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/todo_claim.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/todo_compatibility_edit.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/todo_create.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/coordination/todo_update.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/effect_program.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/effect_program.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/effect_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/effect_runtime_errors.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/effect_runtime_io.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/effect_runtime_server.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/activation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/activation_service.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/active_state_event_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/active_state_metadata.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/active_state_sections.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/botmux_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/configure_goal_service.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/contract_health.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/deletion_service.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/dreaming.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/global_registry_health.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/global_registry_shadow.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_amendment_proposal.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_amendment_proposal.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_channel.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_channel_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/outcome_continuity.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/replan_rules.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_frontier/terminal.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_vision.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_vision_policy.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/goal_vision_state.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/path_resolution.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/shared_goal_alignment.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/shared_goal_alignment.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/start_contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/start_goal_todo_delta.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/goals/vision_checkpoint.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/governed_capability.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/handoff/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/handoff/cross_runtime_impl_review.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/handoff/delivery_contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/handoff/handoff_runs.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/handoff/project_handoff.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/handoff/review_batch.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/handoff/review_packet_context.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/heartbeat/agent.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/heartbeat/budget.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/heartbeat/builder.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/heartbeat/host.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/heartbeat/rules.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/heartbeat/task_body.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/heartbeat/visible_goal.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/host_adapter_settlement.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/operator_inbox_binding.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/post_writeback_composition_retry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/post_writeback_hook_transaction.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/projects/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/projects/contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/projects/registry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/accounting_artifact_transaction.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/cli_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/codex_session_usage.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/decision_summary.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/effect_program.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/error_codes.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/goal_boundary.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/heartbeat_receipt.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/heartbeat_recommendation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/host_poll_receipts.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/live_decision.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/monitor_poll.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/monitor_poll_commit.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/policy_constants.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/projection_repair.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/recent_runs.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/refresh_recovery.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/scheduler_ack.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/selected_todo_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement_cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement_phase.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement_precedence.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement_readback.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement_validation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement_workspace_causality.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/settlement_workspace_causality.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/should_run.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/should_run_packet.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/slot_accounting.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/spend_commit.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/spend_commit.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/spend_sources.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/stall_repair.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/states.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/task_orchestration.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/task_orchestration_admission.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/turn_envelope.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/turn_envelope.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/usage_collector.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/usage_summary.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/void_commit.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/quota/void_commit.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/reward_memory.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/agent_scoped_evidence_log.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/decision_freshness.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/event_ledger.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/event_store_migration_bridge.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/goal_project_route.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/local_state_write_correctness.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/promotion_readiness.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/public_safety.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/run_artifacts.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/run_compaction.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/run_context_retention.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/run_history.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/run_index_duplicates.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/run_index_rebuild.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/runtime_projection_route.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/runtime_projection_writer.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/session_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/shared_runtime_material_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/shared_runtime_refresh_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/stale_latest_run.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/status_classifications.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/status_projection_cache.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/stride_observation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/time.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/trajectory_hygiene.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime/validation_command.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/runtime_decode.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/arbitration.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/automation_liveness.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/execution_context.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/external_evidence_observation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/heartbeat_commit.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/heartbeat_commit_cli.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/heartbeat_followup.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/heartbeat_followup_cli.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/monitor_display.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/monitor_poll_writeback.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/monitor_todo.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/monitor_wait.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/scheduler_hint.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/state.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/state_store.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/state_transition_rules.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/state_transition_rules.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/scheduler/time.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/settlement_driver.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/active_state_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/agent_lane_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/attention_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/autonomous_replan_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/collection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/contract_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/dreaming_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/goal_attention_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/lifecycle_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/monitor_display_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/registry_health_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/run_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/runtime_summaries.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/ssh_host_catalog.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/status/ssh_tunnel.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/action_portfolio_scenarios.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/actual_default_model_behavior_portfolio.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/authority_e2e_fixtures.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/authority_e2e_ladder.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/authority_e2e_row_support.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/authority_e2e_rows_stage2c.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/canary_harness.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/capability_monitor_repair_tool_behavior.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/cli_output_budget.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/cli_output_differential.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/cli_output_semantics.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/control_plane_composition_scenarios.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/decision_replay.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/doubao_model_behavior_actor.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/model_behavior_action_oracles.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/model_behavior_corpus.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/model_behavior_qualification.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/model_behavior_retained_cases.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/model_tool_behavior.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/onboarding_model_behavior_qualification.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/quota_fixtures.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/quota_should_run_parity.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/release_commit_qualification.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/replan_semantic_action_behavior.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/scoped_gate_successor_tool_behavior.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/selected_todo_tool_behavior.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/terminal_settlement_tool_behavior.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/testing/turn_journal_characterization.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/active_state_editing.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/addition.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/claim_visibility.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_fence.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_fence.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_policy.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_state.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_state.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_validation_accountability.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/completion_validation_plan.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/decision_scope.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/deferred_resume.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/external_wait_contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/external_wait_writeback.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/frontier_deadline.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/goal_todo_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/handoff_gate.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/handoff_mode.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/handoff_note.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/line_update.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/list_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/machine_region.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/markdown.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/monitor_metadata.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/mutation_authority.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/next_action.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/next_action_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/provider_compatibility_edit.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/resume_condition.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/resume_condition.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/route_continuation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/succession_warning.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/summary_item.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/text.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/todo_index.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/unblock_resume.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/user_gate.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/write_correctness.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/write_hint.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/todos/write_policy.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/codex_cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/delivery_continuity.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/delivery_continuity.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/driver.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/executor.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/host_failure.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/host_todo_completion.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/journal_store.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/loop_controller.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/recovery.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/session_recovery.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/settlement.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/settlement.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/subagent_execution_topology.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/subagent_host_adapter.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/transaction.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/turn_journal.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/turn_journal_effects.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_driver/turn_journal_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/turn_transaction_contract.json +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/accountable_settlement.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/action_portfolio.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/action_portfolio.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/action_selection_contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/attention_fields.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/attention_item.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/attention_queue.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/attention_routing.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/autonomous_candidates.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/autonomous_replan_ack.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/autonomous_replan_obligation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/backlog_hygiene.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/capability_monitor_fallback.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/delivery_batch_scale.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/delivery_outcome.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/delivery_outcome.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/delivery_signals.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/execution_obligation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/goal_route_hint.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/governed_transition_proposal.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/interaction_contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/interaction_contract.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/issue_meta_surface.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/lifecycle.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/local_lease_record.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/operator_inbox.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/outcome_followthrough.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/pending_capability_intent.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/planning_horizon.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/planning_inventory.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/planning_inventory.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/primary_action.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/progress_observation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/progress_result.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/project_asset.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/refresh_recommendation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/refresh_recommendation.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/repair_delta.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/replan_settlement.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/replan_settlement.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/repository_delivery.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/runtime_capability_reentry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/status_contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/task_graph.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/task_lease.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/task_lease_acquire.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/task_lease_acquire_adapter.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/task_lease_acquire_cli.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/task_lease_lifecycle.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/task_lease_lifecycle_decision.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/user_action_frontier.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/work_lane.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/control_plane/work_items/work_lane_context.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/dash_server.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/dashboard_launcher.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/demo.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/diagnose.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/doctor.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/domain_packs/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/domain_packs/issue_fix.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/domain_packs/ml_experiment.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/domain_state.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/dreaming.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/dsh_goal_mode/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/dsh_goal_mode/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/dsh_goal_mode/__main__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/dsh_goal_mode/host_failure_map.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/entrypoint.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/execution_profile.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/experiments/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/experiments/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/experiments/planner_worker/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/experiments/planner_worker/contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/experiments/planner_worker/runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/experiments/planner_worker/traex.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/explore_graph.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/bundled.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/capability_admission.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/execution_envelope.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/external_connector_provider.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/external_connector_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/governed_capability_execution.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/hook_adapters.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/app_setup.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/bot_scopes.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/cli_resolution.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/docs/lark-event-inbox.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/document_comment_provider.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/event_collector.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/event_collector_routes.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/event_collector_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/event_inbox.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/extension.toml +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel_contracts.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel_lifecycle.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel_notification.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel_setup.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel_targets.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_channel_transport.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_topic_batch.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_topic_connections.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_topic_routing.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/goal_topic_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/group_history.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/group_history_cursor.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/inbox_reactions.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/inbox_reply.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/miaoda_report.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/outbound.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/periodic_report_cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/periodic_report_delivery.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/periodic_report_request.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/explore_results.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/explore_singleflight.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/explore_source_guard.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/explore_stage_document.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/explore_visual_integrity.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/explore_visual_readback.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/explore_visual_styles.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/issue_fix_surface.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/kanban.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/message_card.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/periodic_report.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/projection_rows.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/record_io.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/presentation/sync_receipt.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/private_json.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/provider.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/reviewer_notification.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/routed_inbox.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/lark/turn_start_sync.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/manifest.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_periodic_report/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_periodic_report/activation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_periodic_report/extension.toml +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_periodic_report/provider.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_periodic_report/sink.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_semantic_preference/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_semantic_preference/extension.toml +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_semantic_preference/history_export.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_semantic_preference/project_peer.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/openviking_semantic_preference/provider.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/presentation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/process_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/readiness.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/extensions/scaffold.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/file_lock.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/global_registry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/global_risks.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/global_todos.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/goal_mode_context.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/goal_mode_mcp.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/handoff_budget.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/heartbeat_prequota.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/heartbeat_prompt.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/help_surface.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/host_loop_activation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/host_mode_planner.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/install_contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/interface_budget.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/app_server.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/context.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/control_plane.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/guards.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/kunluncode_goal_mode/server.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/long_task_cadence.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/materials.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/ml_experiment.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/onboarding.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/opencode2_goal_mode/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/opencode2_goal_mode/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/opencode2_goal_mode/opencode2-goal-worker.mjs +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/opencode_goal_mode/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/opencode_goal_mode/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/opencode_goal_mode/goal-bridge-runtime.mjs +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/opencode_goal_mode/loopx-goal.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/operator_gate.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/paths.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/pi_goal_mode/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/pi_goal_mode/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/pi_goal_mode/loopx-goal.ts +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/pi_goal_mode/pi-goal-loop-runtime.mjs +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/pr_review.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/explore_views.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/markdown.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/projection_source_reconcile.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/projections/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/projections/session_dash.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/public_safety.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/goal_channel_html.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/periodic_report_html.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/periodic_report_markdown.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/quota_event_markdown.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/quota_markdown.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/session_dash_html.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/status_markdown.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/trajectory_hygiene_markdown.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/renderers/turn_envelope_markdown.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/sinks/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/sinks/openviking_periodic_report.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presentation/static_site.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/presets.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/project_alias.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/project_map.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/project_prompt.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/project_uninstall.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/promotion_gate.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/python_install_owner.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/quota.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/ready_score.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/registry.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/registry_writability.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/release_candidate.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/release_manifest.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/repository_identity.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/review_packet.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/rollout_event_log.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/self_update.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/self_update_download.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/session_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/slash_command_files.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/slash_commands.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/state_backup.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/state_migration.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/state_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/status.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/summary_all.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/thread_agent_binding.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/todo_followups.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/todo_suggestion_prompt.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/turn_identity.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/upgrade.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/visible_governance.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-0bhIx5_M.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-4FpkdPZm.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-5XHJEBmR.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-6lOUUHx7.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-87n1zlNJ.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-9IiDicAv.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-9d1S9bUM.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-9wD_r5Rp.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-B1C2FwbO.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-B8L75LO_.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BEQmjl7v.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BGO6BJCs.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BGlIOe4t.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BP0RmPHX.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BP1QffUh.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BQbV8tqm.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BSxkq-RJ.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BUErjEJT.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BX4BmVJP.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BZ6v5kqr.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BZAVdCU1.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-BbFX7OqK.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Bbl2q4GJ.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Bh5uiZqS.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Bmspg3Jw.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Bx6T9PIc.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-C1OHhOOV.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-C2CmDc5R.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-C2EQGEVq.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-C4xwmI7d.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-C7_1lK3X.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CKyCniT-.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CLqMm9A9.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CSu-RA-2.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CThe5lVk.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CWBLcLBj.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CWu9Zb0m.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CYIgLUGs.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CaWp_NBN.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CbyH4L9F.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Ci7Bb-Hg.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CiiYGC4Q.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CnN4AJQ2.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Co9vSS-Z.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CreWNyY-.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CuaTN_p4.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CxRl9_vT.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-CyzsRtSq.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-D-ZLwkDk.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-D2CGbqTd.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-D9laKLBQ.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DC5HFDv1.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DI6Nc7FE.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DKJ5p2QF.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DKKSJxDm.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DLmo9pnP.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DODAzFAe.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DOLQXkmn.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DSyBT6Kt.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DaU9YYwh.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Db3HU1A2.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DfZWJsx8.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DgCU_eGn.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DlWGFd3A.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Do79u7RP.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DpJpoD0M.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DqUh5BjW.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Dqp1Ys3x.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-DuhTDceN.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Dv3QRK2m.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-HvFwA8w4.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-KX57MZ3S.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-O0nPVPnM.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Q7kkcYrR.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-RBq2pqOr.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-RaDXclvH.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-Z33f5-Wp.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-ceDA-lHU.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-czeYrGNG.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-hcH65Zv0.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-hmItHWz2.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-k0HHvCOH.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-kPzCW1DS.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-m_MgoO2m.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-mnVpUNXZ.css +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-qs7RHoKv.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-wKzSBw1w.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/assets/index-yQOik-72.js +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/manifest.webmanifest +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/pwa/icon-192.png +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/web/chat/pwa/icon-512.png +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/windows_install.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/worker_bridge.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/zcode_goal_mode/README.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx/zcode_goal_mode/__init__.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx.egg-info/dependency_links.txt +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx.egg-info/entry_points.txt +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx.egg-info/requires.txt +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/loopx.egg-info/top_level.txt +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/setup.cfg +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-benchmark/SKILL.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-benchmark/agents/openai.yaml +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-doc-registry/SKILL.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-doc-registry/agents/openai.yaml +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-pr-program/SKILL.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-pr-program/agents/openai.yaml +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-pr-program/references/snapshot-contract.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-pr-program/scripts/diff_snapshot.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-pr-review/agents/openai.yaml +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-project/SKILL.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-project/agents/openai.yaml +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-self-repair/SKILL.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-self-repair/agents/openai.yaml +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/skills/loopx-self-repair/references/upstream-issue-escalation.md +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_agent_onboarding_pi_host.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_agent_onboarding_unconnected_project.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_agy_host_surface.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_ark_managed_agent_host.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_ark_managed_agent_issue_fix_matrix.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_attached_session_broker.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_attached_session_cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_auto_research_artifact_receipt.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_auto_research_control.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_agent.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_completed_todos.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_goal_configuration_api.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_image_attachments.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_lark_api_contract.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_machine_configuration_api.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_server_cors.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_chat_store_input_validation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_cli_argument_diagnostics.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_cli_entrypoint.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_codex_app_apply_rrule.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_command_invocation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_content_ops_item_lifecycle.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_content_ops_lifecycle.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_content_ops_queue_status.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_contract_credential_pattern_precision.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_contract_scan_unreadable_files.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_dashboard_command.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_decision_context_material.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_deepresearch_command.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_default_public_scan_root.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_dependency_security_boundaries.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_doctor_install_freshness.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_doctor_installation_scope.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_counterfactual_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_episode_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_monitor_lane_budget.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_owner_board_views.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_presentation_views.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_replay_compatibility.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_replay_runtime.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_resource_portfolio.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_router_acceptance.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_source_history_reconcile.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_explore_worker_topic_affinity.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_external_scheduler_worker.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_feedback_goal_id_validation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_feedback_run_selection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_file_lock.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_file_lock_cross_process.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_gemini_cursor_host_surfaces.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_global_registry_write_serialization.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_global_risks.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_global_todos.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_goal_mode_mcp_completion_validation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_goal_mode_mcp_settlement.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_host_loop_activation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_host_loop_runtime_parity.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_host_mode_planner.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_host_parity_smoke.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_host_poll_receipts.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_kunluncode_goal_mode.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_license_metadata.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_loop_turn_loop_controller.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_loopx_turn_codex_cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_loopx_turn_executor.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_loopx_turn_host_failure.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_loopx_turn_journal_inspection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_loopx_turn_settlement_parity.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_loopx_turn_transaction.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_ml_experiment_volc_packet.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_nokv_jsonl_helper.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_nokv_shadow_provider_probes.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_opencode2_goal_worker.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_opencode2_goal_worker_cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_opencode_goal_bridge.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_operator_markdown_renderers.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_packaged_skill_metadata.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_pi_goal_mode.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_pr_program_snapshot.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_pr_program_snapshot_diff.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_pr_review_github_scan.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_project_skill_cli.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_public_package_lock_boundary.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_python_ci_workflow.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_register_agent_fresh_identity.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_registry_git_probe.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_release_candidate.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_release_smoke_archive_helpers.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_reward_memory_pipeline.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_scheduler_native_launcher.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_self_update_download.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_self_update_runtime_activation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_session_runtime_key_classification.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_smoke_suite.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_ssh_tunnel_source.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_state_file_containment.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_state_refresh_agent_lane_action.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_state_refresh_projections.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_static_site_presentation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_status_server_cors.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_status_server_extension_projection.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_status_server_periodic_report_workspace.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_status_server_ssh_hosts.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_subagent_host_adapter.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_summary_all.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_thread_agent_binding.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_todo_write_serialization.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_trajectory_hygiene.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_turn_envelope.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_turn_loop_disposition.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_visible_goal_terminal_settlement.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_windows_install.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_worker_command_validation.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_workspace_story_demo.py +0 -0
- {loopx-1.0.1 → loopx-1.0.2}/tests/test_zcode_host_surface.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: loopx
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2
|
|
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
|
|
@@ -250,6 +250,18 @@ These are the three strongest current cases, not the full inventory. Browse the
|
|
|
250
250
|
[complete Showcase catalog](docs/showcases/README.md) for contributor cases,
|
|
251
251
|
creator dogfooding, reproducible demos, and explicit evidence-strength labels.
|
|
252
252
|
|
|
253
|
+
### Exploratory Benchmark Studies
|
|
254
|
+
|
|
255
|
+
- **[SWE-Marathon](https://huangruiteng.github.io/loopx/benchmarks/swe-marathon/):**
|
|
256
|
+
Five execution modes on 15 matched tasks compare self-verification, scores,
|
|
257
|
+
and cost. More self-verification did not consistently yield higher scores.
|
|
258
|
+
- **[DeepSWE behavior analysis](https://huangruiteng.github.io/loopx/benchmarks/deepswe/behavior-discovery/)** (Chinese):
|
|
259
|
+
Selected cases examine how domain hints relate to requirement retention and
|
|
260
|
+
verification choices, offering mechanism hypotheses for further testing.
|
|
261
|
+
|
|
262
|
+
SWE-Marathon has one trial per task and mode; DeepSWE uses selected cases and
|
|
263
|
+
post-hoc analysis. Neither establishes a general performance gain.
|
|
264
|
+
|
|
253
265
|
More inspectable surfaces:
|
|
254
266
|
|
|
255
267
|
- the [public homepage](https://huangruiteng.github.io/loopx/) for the product
|
|
@@ -220,6 +220,18 @@ These are the three strongest current cases, not the full inventory. Browse the
|
|
|
220
220
|
[complete Showcase catalog](docs/showcases/README.md) for contributor cases,
|
|
221
221
|
creator dogfooding, reproducible demos, and explicit evidence-strength labels.
|
|
222
222
|
|
|
223
|
+
### Exploratory Benchmark Studies
|
|
224
|
+
|
|
225
|
+
- **[SWE-Marathon](https://huangruiteng.github.io/loopx/benchmarks/swe-marathon/):**
|
|
226
|
+
Five execution modes on 15 matched tasks compare self-verification, scores,
|
|
227
|
+
and cost. More self-verification did not consistently yield higher scores.
|
|
228
|
+
- **[DeepSWE behavior analysis](https://huangruiteng.github.io/loopx/benchmarks/deepswe/behavior-discovery/)** (Chinese):
|
|
229
|
+
Selected cases examine how domain hints relate to requirement retention and
|
|
230
|
+
verification choices, offering mechanism hypotheses for further testing.
|
|
231
|
+
|
|
232
|
+
SWE-Marathon has one trial per task and mode; DeepSWE uses selected cases and
|
|
233
|
+
post-hoc analysis. Neither establishes a general performance gain.
|
|
234
|
+
|
|
223
235
|
More inspectable surfaces:
|
|
224
236
|
|
|
225
237
|
- the [public homepage](https://huangruiteng.github.io/loopx/) for the product
|
|
@@ -10,24 +10,19 @@ from typing import Any
|
|
|
10
10
|
from urllib.parse import urlparse
|
|
11
11
|
|
|
12
12
|
from .control_plane.runtime.time import now_local_iso
|
|
13
|
+
from .public_safe_text import (
|
|
14
|
+
PRIVATE_TEXT_PATTERNS as SHARED_PRIVATE_TEXT_PATTERNS,
|
|
15
|
+
find_private_text_match,
|
|
16
|
+
)
|
|
13
17
|
|
|
14
18
|
|
|
15
19
|
AUTHORITY_SOURCE_REGISTRATION_VERSION = "authority_source_registration_v0"
|
|
16
20
|
DOC_REGISTRY_AUTHORITY_IMPORT_VERSION = "doc_registry_authority_import_v0"
|
|
17
21
|
AUTHORITY_SOURCE_ID_RE = re.compile(r"^[A-Za-z0-9][A-Za-z0-9_.-]{0,79}$")
|
|
18
22
|
AUTHORITY_SOURCE_BOUNDARIES = {"public", "local_private", "private_redacted"}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
re.compile("la" + "rk" + "office", re.I),
|
|
23
|
-
re.compile("docs" + r"\." + "internal", re.I),
|
|
24
|
-
re.compile(r"\bt-20\d{12}-[a-z0-9]+\b"),
|
|
25
|
-
re.compile(r"\b" + "Bear" + r"er\b", re.I),
|
|
26
|
-
re.compile(r"\b" + "Author" + r"ization\b", re.I),
|
|
27
|
-
re.compile(r"\b" + "tok" + r"en\s*=", re.I),
|
|
28
|
-
re.compile(r"\b" + "pass" + r"word\b", re.I),
|
|
29
|
-
re.compile(r"\b" + "sec" + r"ret\b", re.I),
|
|
30
|
-
)
|
|
23
|
+
# Owned by loopx.public_safe_text so every real validator owner shares one
|
|
24
|
+
# contract; re-exported here because callers already import this name.
|
|
25
|
+
PRIVATE_TEXT_PATTERNS = SHARED_PRIVATE_TEXT_PATTERNS
|
|
31
26
|
|
|
32
27
|
AUTHORITY_REGISTRY_SUMMARY_FIELDS = (
|
|
33
28
|
"declared",
|
|
@@ -115,11 +110,8 @@ def public_safe_optional(label: str, value: str | None) -> str | None:
|
|
|
115
110
|
|
|
116
111
|
|
|
117
112
|
def validate_public_safe_text(label: str, value: str | None) -> None:
|
|
118
|
-
if not
|
|
119
|
-
|
|
120
|
-
for pattern in PRIVATE_TEXT_PATTERNS:
|
|
121
|
-
if pattern.search(value):
|
|
122
|
-
raise ValueError(f"{label} contains a private-looking value; keep raw evidence in private payloads")
|
|
113
|
+
if find_private_text_match(value) is not None:
|
|
114
|
+
raise ValueError(f"{label} contains a private-looking value; keep raw evidence in private payloads")
|
|
123
115
|
|
|
124
116
|
|
|
125
117
|
def find_goal_index(registry: dict[str, Any], goal_id: str) -> int:
|
|
@@ -1,28 +1,22 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import re
|
|
4
3
|
from datetime import datetime, timezone
|
|
5
4
|
from typing import Any
|
|
6
5
|
|
|
7
6
|
from .control_plane.runtime.time import parse_timestamp as _parse_timestamp
|
|
8
7
|
from .control_plane.todos.contract import normalize_required_write_scopes
|
|
8
|
+
from .public_safe_text import (
|
|
9
|
+
PRIVATE_TEXT_PATTERNS as SHARED_PRIVATE_TEXT_PATTERNS,
|
|
10
|
+
find_private_text_match,
|
|
11
|
+
)
|
|
9
12
|
|
|
10
13
|
|
|
11
14
|
CHECKPOINTED_BOUNDARY_AUTHORITY_SCHEMA_VERSION = "checkpointed_boundary_authority_v0"
|
|
12
15
|
ACTIVE_BOUNDARY_AUTHORITY_STATUSES = {"active", "approved"}
|
|
13
16
|
BOUNDARY_AUTHORITY_DECISIONS = {"approve", "reject", "defer"}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
re.compile("la" + "rk" + "office", re.I),
|
|
18
|
-
re.compile("docs" + r"\." + "internal", re.I),
|
|
19
|
-
re.compile(r"\bt-20\d{12}-[a-z0-9]+\b"),
|
|
20
|
-
re.compile(r"\b" + "Bear" + r"er\b", re.I),
|
|
21
|
-
re.compile(r"\b" + "Author" + r"ization\b", re.I),
|
|
22
|
-
re.compile(r"\b" + "tok" + r"en\s*=", re.I),
|
|
23
|
-
re.compile(r"\b" + "pass" + r"word\b", re.I),
|
|
24
|
-
re.compile(r"\b" + "sec" + r"ret\b", re.I),
|
|
25
|
-
)
|
|
17
|
+
# Owned by loopx.public_safe_text so every real validator owner shares one
|
|
18
|
+
# contract; re-exported here because callers already import this name.
|
|
19
|
+
PRIVATE_TEXT_PATTERNS = SHARED_PRIVATE_TEXT_PATTERNS
|
|
26
20
|
|
|
27
21
|
|
|
28
22
|
def _now() -> datetime:
|
|
@@ -30,11 +24,8 @@ def _now() -> datetime:
|
|
|
30
24
|
|
|
31
25
|
|
|
32
26
|
def _validate_public_safe_text(label: str, value: str | None) -> None:
|
|
33
|
-
if not
|
|
34
|
-
|
|
35
|
-
for pattern in PRIVATE_TEXT_PATTERNS:
|
|
36
|
-
if pattern.search(value):
|
|
37
|
-
raise ValueError(f"{label} contains a private-looking value; keep raw evidence in private payloads")
|
|
27
|
+
if find_private_text_match(value) is not None:
|
|
28
|
+
raise ValueError(f"{label} contains a private-looking value; keep raw evidence in private payloads")
|
|
38
29
|
|
|
39
30
|
|
|
40
31
|
def _clean_text(value: Any, *, limit: int = 180) -> str | None:
|
|
@@ -1049,6 +1049,49 @@ solver-trajectory slice, even when no case became terminal. This readback is for
|
|
|
1049
1049
|
campaign supervision and insight discovery only; it must not expose hidden
|
|
1050
1050
|
evaluator evidence to the solving arm.
|
|
1051
1051
|
|
|
1052
|
+
When that readback produces a useful case-level runtime finding before terminal
|
|
1053
|
+
scoring, preserve it as a private provisional observation rather than waiting for
|
|
1054
|
+
the final grader or overstating it as a scored insight:
|
|
1055
|
+
|
|
1056
|
+
```json
|
|
1057
|
+
{
|
|
1058
|
+
"schema_version": "benchmark_case_observation_v0",
|
|
1059
|
+
"case": {
|
|
1060
|
+
"benchmark_id": "<public-id>",
|
|
1061
|
+
"case_id": "<public-id>",
|
|
1062
|
+
"arm": "<baseline-or-treatment>"
|
|
1063
|
+
},
|
|
1064
|
+
"run_status": "running",
|
|
1065
|
+
"runtime_outcome": "<ok-error-in_progress-or-unknown>",
|
|
1066
|
+
"duration_ms": null,
|
|
1067
|
+
"evidence_refs": [
|
|
1068
|
+
{
|
|
1069
|
+
"kind": "trace",
|
|
1070
|
+
"trace_id": "<opaque-id-or-null>",
|
|
1071
|
+
"span_id": "<opaque-id-or-null>",
|
|
1072
|
+
"env": "<environment-token-or-null>",
|
|
1073
|
+
"artifact_ref": "<private-pointer-or-null>"
|
|
1074
|
+
}
|
|
1075
|
+
],
|
|
1076
|
+
"hypothesis": "<provisional-causal-explanation>",
|
|
1077
|
+
"confidence": "medium",
|
|
1078
|
+
"promotion_state": "pending_terminal_score_review"
|
|
1079
|
+
}
|
|
1080
|
+
```
|
|
1081
|
+
|
|
1082
|
+
`trace_id`, `span_id`, and `env` are provider-neutral optional traceability fields.
|
|
1083
|
+
Provider-specific session identifiers belong in private provider extensions, not in
|
|
1084
|
+
this common contract. Raw evidence references can still disclose sensitive runtime
|
|
1085
|
+
topology, so the artifact stays in private benchmark storage. The public experiment
|
|
1086
|
+
board records only a compact classification or private artifact handle; it never
|
|
1087
|
+
copies trace IDs, spans, URLs, paths, or provider-specific session identifiers.
|
|
1088
|
+
|
|
1089
|
+
The provisional observation must not invent a score or treat request success,
|
|
1090
|
+
progress, or runtime status as case quality. Once the run is terminal and scoring
|
|
1091
|
+
is complete, the analyst re-reads the complete authorized evidence and writes a
|
|
1092
|
+
separate `benchmark_case_insight_v0`; it does not relabel the provisional artifact
|
|
1093
|
+
as final.
|
|
1094
|
+
|
|
1052
1095
|
This is a provider obligation, not an effect performed by the reducer: the
|
|
1053
1096
|
runtime-observation command only returns a typed classification and recommended
|
|
1054
1097
|
transition. The provider remains responsible for the monitor cycle, trajectory
|
|
@@ -1093,6 +1136,15 @@ Record the result in this compact shape:
|
|
|
1093
1136
|
"grader_or_verifier",
|
|
1094
1137
|
"failure_and_score_details"
|
|
1095
1138
|
],
|
|
1139
|
+
"evidence_refs": [
|
|
1140
|
+
{
|
|
1141
|
+
"kind": "<trace-log-artifact-report-or-other>",
|
|
1142
|
+
"trace_id": "<opaque-id-or-null>",
|
|
1143
|
+
"span_id": "<opaque-id-or-null>",
|
|
1144
|
+
"env": "<environment-token-or-null>",
|
|
1145
|
+
"artifact_ref": "<private-pointer-or-null>"
|
|
1146
|
+
}
|
|
1147
|
+
],
|
|
1096
1148
|
"insight": {
|
|
1097
1149
|
"approach_summary": "<what-the-solver-tried>",
|
|
1098
1150
|
"decisive_evidence": ["<specific-observation>"],
|
|
@@ -746,6 +746,51 @@ BENCHMARK_TOOLKIT_CATALOG_ENTRY: dict[str, Any] = {
|
|
|
746
746
|
"raw_log_error_count_alone",
|
|
747
747
|
],
|
|
748
748
|
},
|
|
749
|
+
"active_case_observation": {
|
|
750
|
+
"status": "provisional_only",
|
|
751
|
+
"purpose": (
|
|
752
|
+
"Preserve traceable runtime evidence while a case or campaign is "
|
|
753
|
+
"still active without presenting it as an official scored insight."
|
|
754
|
+
),
|
|
755
|
+
"artifact_template": {
|
|
756
|
+
"schema_version": "benchmark_case_observation_v0",
|
|
757
|
+
"case": {
|
|
758
|
+
"benchmark_id": "<public-id>",
|
|
759
|
+
"case_id": "<public-id>",
|
|
760
|
+
"arm": "<baseline-or-treatment>",
|
|
761
|
+
},
|
|
762
|
+
"run_status": "<planned-running-or-terminal>",
|
|
763
|
+
"runtime_outcome": "<ok-error-in_progress-or-unknown>",
|
|
764
|
+
"duration_ms": "<non-negative-integer-or-null>",
|
|
765
|
+
"evidence_refs": [
|
|
766
|
+
{
|
|
767
|
+
"kind": "<trace-log-artifact-report-or-other>",
|
|
768
|
+
"trace_id": "<opaque-id-or-null>",
|
|
769
|
+
"span_id": "<opaque-id-or-null>",
|
|
770
|
+
"env": "<environment-token-or-null>",
|
|
771
|
+
"artifact_ref": "<private-pointer-or-null>",
|
|
772
|
+
}
|
|
773
|
+
],
|
|
774
|
+
"hypothesis": "<provisional-causal-explanation>",
|
|
775
|
+
"confidence": "<high-medium-or-low>",
|
|
776
|
+
"promotion_state": "pending_terminal_score_review",
|
|
777
|
+
},
|
|
778
|
+
"score_boundary": (
|
|
779
|
+
"A provisional observation must not invent an official score or "
|
|
780
|
+
"treat request success, progress, or runtime status as case quality."
|
|
781
|
+
),
|
|
782
|
+
"promotion_rule": (
|
|
783
|
+
"After terminal scoring, re-read the complete authorized evidence "
|
|
784
|
+
"and write a separate benchmark_case_insight_v0; do not relabel the "
|
|
785
|
+
"provisional artifact as final."
|
|
786
|
+
),
|
|
787
|
+
"privacy_boundary": (
|
|
788
|
+
"Keep raw evidence references in private benchmark storage. The "
|
|
789
|
+
"public experiment board may expose only a compact classification "
|
|
790
|
+
"or private artifact handle, never trace IDs, spans, URLs, paths, "
|
|
791
|
+
"or provider-specific session identifiers."
|
|
792
|
+
),
|
|
793
|
+
},
|
|
749
794
|
"hint": (
|
|
750
795
|
"After the solver has stopped and scoring is complete, read the task, "
|
|
751
796
|
"real trajectory, final patch or workspace, hidden tests, grader or "
|
|
@@ -815,6 +860,15 @@ BENCHMARK_TOOLKIT_CATALOG_ENTRY: dict[str, Any] = {
|
|
|
815
860
|
"grader_or_verifier",
|
|
816
861
|
"failure_and_score_details",
|
|
817
862
|
],
|
|
863
|
+
"evidence_refs": [
|
|
864
|
+
{
|
|
865
|
+
"kind": "<trace-log-artifact-report-or-other>",
|
|
866
|
+
"trace_id": "<opaque-id-or-null>",
|
|
867
|
+
"span_id": "<opaque-id-or-null>",
|
|
868
|
+
"env": "<environment-token-or-null>",
|
|
869
|
+
"artifact_ref": "<private-pointer-or-null>",
|
|
870
|
+
}
|
|
871
|
+
],
|
|
818
872
|
"insight": {
|
|
819
873
|
"approach_summary": "<what-the-solver-tried>",
|
|
820
874
|
"decisive_evidence": ["<specific-observation>"],
|
|
@@ -940,6 +994,11 @@ BENCHMARK_TOOLKIT_CATALOG_ENTRY: dict[str, Any] = {
|
|
|
940
994
|
"module": "loopx.capabilities.benchmark_toolkit.run_permissions",
|
|
941
995
|
"doc": "loopx/capabilities/benchmark_toolkit/README.md",
|
|
942
996
|
},
|
|
997
|
+
{
|
|
998
|
+
"schema_version": "benchmark_case_observation_v0",
|
|
999
|
+
"module": "loopx.capabilities.benchmark_toolkit.catalog_entry",
|
|
1000
|
+
"doc": "loopx/capabilities/benchmark_toolkit/README.md",
|
|
1001
|
+
},
|
|
943
1002
|
{
|
|
944
1003
|
"schema_version": "benchmark_case_insight_v0",
|
|
945
1004
|
"module": "loopx.capabilities.benchmark_toolkit.catalog_entry",
|
|
@@ -463,11 +463,32 @@ def inspect_native_codex_profile(
|
|
|
463
463
|
if resolved_release not in resolved_cli.parents:
|
|
464
464
|
raise NativeCodexProfileError("profile_cli_not_release_snapshot")
|
|
465
465
|
|
|
466
|
+
env = _formal_install_environment(
|
|
467
|
+
paths=paths,
|
|
468
|
+
python_executable=_resolved_executable(None),
|
|
469
|
+
release_id=release_id,
|
|
470
|
+
base_env=base_env,
|
|
471
|
+
)
|
|
472
|
+
# The profile's CLI owns the loaded skills; the inspecting supervisor may
|
|
473
|
+
# run a different LoopX version.
|
|
474
|
+
try:
|
|
475
|
+
version_readback = subprocess.run(
|
|
476
|
+
[str(cli_bin), "--version"],
|
|
477
|
+
cwd=paths["root"], env=env, check=False, capture_output=True,
|
|
478
|
+
text=True, timeout=30,
|
|
479
|
+
)
|
|
480
|
+
except (OSError, subprocess.TimeoutExpired) as exc:
|
|
481
|
+
raise NativeCodexProfileError("profile_cli_version_unavailable") from exc
|
|
482
|
+
version_parts = version_readback.stdout.split()
|
|
483
|
+
if version_readback.returncode or len(version_parts) != 2 or version_parts[0] != "loopx":
|
|
484
|
+
raise NativeCodexProfileError("profile_cli_version_invalid")
|
|
485
|
+
|
|
466
486
|
expected_source = Path(source_root).expanduser().resolve() if source_root else None
|
|
467
487
|
skill_readback = inspect_skill_install_readback(
|
|
468
488
|
skills_dir=paths["skills_dir"],
|
|
469
489
|
required_skill_ids=required,
|
|
470
490
|
source_root=expected_source,
|
|
491
|
+
expected_loopx_version_override=version_parts[1],
|
|
471
492
|
)
|
|
472
493
|
if skill_readback.get("ready") is not True:
|
|
473
494
|
status = re.sub(r"[^A-Za-z0-9_.:-]", "_", str(skill_readback.get("status")))
|
|
@@ -484,12 +505,6 @@ def inspect_native_codex_profile(
|
|
|
484
505
|
if not isinstance(skills_digest, str) or not isinstance(source_revision, str):
|
|
485
506
|
raise NativeCodexProfileError("profile_identity_missing")
|
|
486
507
|
|
|
487
|
-
env = _formal_install_environment(
|
|
488
|
-
paths=paths,
|
|
489
|
-
python_executable=_resolved_executable(None),
|
|
490
|
-
release_id=release_id,
|
|
491
|
-
base_env=base_env,
|
|
492
|
-
)
|
|
493
508
|
doctor = _doctor_payload(cli_bin=cli_bin, paths=paths, env=env)
|
|
494
509
|
release_manifest = (doctor.get("release_manifest") or {}).get("manifest") or {}
|
|
495
510
|
release_source = release_manifest.get("source") or {}
|
|
@@ -543,7 +543,23 @@ blocking findings. A successful check is **not** proof of factual evidence, revi
|
|
|
543
543
|
quality, current remote head, or merge permission. Re-read the head and publish the
|
|
544
544
|
human-readable evidence separately. Existing queue/monitor behavior is unchanged;
|
|
545
545
|
omit these two flags to use normal queue discovery. An older saved packet may need
|
|
546
|
-
fresh review evidence when the installed contract has advanced.
|
|
546
|
+
fresh review evidence when the installed contract has advanced. The execution
|
|
547
|
+
contract now carries `policy_revision`, distinct from its stable wire schema;
|
|
548
|
+
results bind `review_policy_revision`. Missing or mismatched policy revisions
|
|
549
|
+
cannot certify approval. Regenerate the packet and perform the current plan,
|
|
550
|
+
not merely relabel old evidence. The skill rejects approval from incompatible
|
|
551
|
+
packets produced by expired development-runtime overrides. It may still publish
|
|
552
|
+
a conservative `REQUEST_CHANGES` only when that verdict explicitly identifies
|
|
553
|
+
the incompatible-policy evidence gap; a later approval requires regeneration.
|
|
554
|
+
|
|
555
|
+
For retained or parallel implementations, `repository_reuse.rule_ownership`
|
|
556
|
+
maps business rules across both reachable paths, including unchanged files.
|
|
557
|
+
Keeping a legacy storage writer does not justify keeping its independent
|
|
558
|
+
eligibility, retention, ordering or successor rules. Name actual retired rules
|
|
559
|
+
and justified compatibility/effect code, not a net-deletion quota. A positive
|
|
560
|
+
twin with shared decisions and necessary extra adapter code must remain
|
|
561
|
+
approvable. Verified evidence rows must fill their declared fields; the checker
|
|
562
|
+
validates this completeness only, never the truth of their contents.
|
|
547
563
|
|
|
548
564
|
Behavioral qualification lives in `tests/capabilities/test_pr_review_behavior.py`:
|
|
549
565
|
paired synthetic cases include valid designs as well as counterexamples. The optional
|
|
@@ -31,6 +31,9 @@ def check_review_result(
|
|
|
31
31
|
}
|
|
32
32
|
blockers: list[str] = []
|
|
33
33
|
errors: list[str] = []
|
|
34
|
+
revision = result.get("review_policy_revision")
|
|
35
|
+
if type(revision) is not int or revision != contract["policy_revision"]:
|
|
36
|
+
blockers.append("review_policy_revision:stale_or_missing")
|
|
34
37
|
if result.get("schema_version") != "pull_request_review_result_v1":
|
|
35
38
|
errors.append("unsupported_result_schema")
|
|
36
39
|
evidence = result.get("evidence")
|
|
@@ -50,6 +53,10 @@ def check_review_result(
|
|
|
50
53
|
detail = {k: v for k, v in row.items() if k not in {"status", "verdict"}}
|
|
51
54
|
if not any(v not in (None, "", [], {}) for v in detail.values()):
|
|
52
55
|
blockers.append(f"{key}:missing_evidence_detail")
|
|
56
|
+
if status == "verified":
|
|
57
|
+
for field in requirements[key].get("fields", []):
|
|
58
|
+
if row.get(field) in (None, "", [], {}):
|
|
59
|
+
blockers.append(f"{key}:missing_field:{field}")
|
|
53
60
|
allowed = requirements[key].get("verdict_values")
|
|
54
61
|
if allowed and row.get("verdict") not in allowed:
|
|
55
62
|
blockers.append(f"{key}:missing_or_invalid_verdict")
|
|
@@ -3,6 +3,9 @@ from __future__ import annotations
|
|
|
3
3
|
from collections.abc import Mapping, Sequence
|
|
4
4
|
from typing import Any
|
|
5
5
|
|
|
6
|
+
# Increment when review requirements change without changing the packet shape.
|
|
7
|
+
REVIEW_POLICY_REVISION = 1
|
|
8
|
+
|
|
6
9
|
REQUIRED_FINAL_SECTIONS = [
|
|
7
10
|
"动机",
|
|
8
11
|
"改动思路",
|
|
@@ -105,6 +108,7 @@ def build_review_template(item: Mapping[str, Any]) -> dict[str, Any]:
|
|
|
105
108
|
def build_review_execution_contract() -> dict[str, Any]:
|
|
106
109
|
return {
|
|
107
110
|
"schema_version": "pull_request_review_execution_contract_v2",
|
|
111
|
+
"policy_revision": REVIEW_POLICY_REVISION,
|
|
108
112
|
"purpose": (
|
|
109
113
|
"Define the evidence that must exist before a detailed review verdict; "
|
|
110
114
|
"host skills route this contract but must not reimplement it."
|
|
@@ -188,13 +192,36 @@ def build_review_execution_contract() -> dict[str, Any]:
|
|
|
188
192
|
"fields": [
|
|
189
193
|
"searched_revisions", "queries_and_paths", "existing_candidates",
|
|
190
194
|
"semantic_comparison", "reuse_or_separation_reason",
|
|
191
|
-
"state_model_assessment", "validation_evidence", "verdict",
|
|
195
|
+
"state_model_assessment", "rule_ownership", "validation_evidence", "verdict",
|
|
192
196
|
],
|
|
193
197
|
"comparison_dimensions": [
|
|
194
198
|
"resource_and_caller", "data_scope_and_filters",
|
|
195
199
|
"ordering_and_pagination", "authority_and_sanitization",
|
|
196
200
|
"state_retry_and_failure_owner",
|
|
197
201
|
],
|
|
202
|
+
"rule_ownership": {
|
|
203
|
+
"required_when": "retained_or_parallel_implementations",
|
|
204
|
+
"row_fields": [
|
|
205
|
+
"business_rule", "baseline_owner", "head_owner",
|
|
206
|
+
"retained_path_and_caller", "retention_reason",
|
|
207
|
+
"deleted_rule_or_exit_condition", "validation",
|
|
208
|
+
],
|
|
209
|
+
"rule": (
|
|
210
|
+
"For migrations, fallback paths, dual providers or old/new entrypoints, "
|
|
211
|
+
"map each touched business rule across BOTH reachable paths, including "
|
|
212
|
+
"unchanged files. Separate storage parsing/writing and host effects from "
|
|
213
|
+
"eligibility, ordering, retention and successor derivation. A required "
|
|
214
|
+
"legacy writer does not justify a second decision owner. Ask where the "
|
|
215
|
+
"next policy change must be edited: tests comparing two new providers "
|
|
216
|
+
"do not prove the old path shares their rule. Name a bounded shared "
|
|
217
|
+
"owner and actual deletion where appropriate; justify deliberate "
|
|
218
|
+
"independent semantics instead of forcing abstraction. Record no "
|
|
219
|
+
"parallel path with caller-search evidence when not applicable. "
|
|
220
|
+
"Moved lines are not retired knowledge, and net-negative LOC is not "
|
|
221
|
+
"an acceptance quota. Missing analysis is not_yet_proven; an unjustified "
|
|
222
|
+
"duplicate rule is unjustified_duplication under repository_reuse."
|
|
223
|
+
),
|
|
224
|
+
},
|
|
198
225
|
"state_model_assessment": {
|
|
199
226
|
"required_when": "introduced_or_newly_enforced_state",
|
|
200
227
|
"classification_values": [
|
|
@@ -896,6 +923,7 @@ def build_review_plan(item: Mapping[str, Any]) -> dict[str, Any]:
|
|
|
896
923
|
"required_evidence_ids": required_evidence,
|
|
897
924
|
"result_template": {
|
|
898
925
|
"schema_version": "pull_request_review_result_v1",
|
|
926
|
+
"review_policy_revision": REVIEW_POLICY_REVISION,
|
|
899
927
|
"target_exact_head": target_key,
|
|
900
928
|
"evidence": {
|
|
901
929
|
evidence_id: {"status": "unverified"}
|
|
@@ -1477,10 +1477,10 @@ def serve_chat(
|
|
|
1477
1477
|
)
|
|
1478
1478
|
server.action_service = ChatActionService(
|
|
1479
1479
|
store=server.action_store,
|
|
1480
|
-
registry_path=
|
|
1480
|
+
registry_path=resolved_registry_path,
|
|
1481
1481
|
chat_store=server.chat_store,
|
|
1482
1482
|
runtime_controller=server.runtime_controller,
|
|
1483
|
-
workspace_roots=
|
|
1483
|
+
workspace_roots=resolved_scan_roots,
|
|
1484
1484
|
)
|
|
1485
1485
|
server.lark_goal_topic_runtime = LarkGoalTopicRuntimeService(
|
|
1486
1486
|
snapshot_provider=lambda: build_lark_goal_topic_runtime_snapshot(
|
|
@@ -489,9 +489,10 @@ class ChatSessionStore:
|
|
|
489
489
|
"created_at": utc_now(),
|
|
490
490
|
}
|
|
491
491
|
with exclusive_file_lock(path, agent_id="loopx-chat", operation="append_chat_message"):
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
492
|
+
if message_id:
|
|
493
|
+
for existing in _read_jsonl(path):
|
|
494
|
+
if existing.get("message_id") == payload["message_id"]:
|
|
495
|
+
return existing
|
|
495
496
|
_append_jsonl(path, payload)
|
|
496
497
|
return payload
|
|
497
498
|
|
|
@@ -42,6 +42,9 @@ from ..control_plane.quota.settlement_cli import (
|
|
|
42
42
|
render_existing_heartbeat_receipt_payload,
|
|
43
43
|
)
|
|
44
44
|
from ..control_plane.quota.turn_envelope import build_turn_envelope
|
|
45
|
+
from ..control_plane.coordination.legacy_writer_fence import (
|
|
46
|
+
LegacyCoordinationWriterFenced,
|
|
47
|
+
)
|
|
45
48
|
from ..control_plane.effect_runtime import EffectRuntimeRejected
|
|
46
49
|
from ..control_plane.scheduler.execution_context import (
|
|
47
50
|
GUIDED_START_TURN_RUNTIME_PROFILES,
|
|
@@ -238,6 +241,14 @@ def _quota_failure_payload(
|
|
|
238
241
|
)
|
|
239
242
|
if error.agent_id is not None:
|
|
240
243
|
payload["agent_id"] = error.agent_id
|
|
244
|
+
elif isinstance(error, LegacyCoordinationWriterFenced):
|
|
245
|
+
payload.update(
|
|
246
|
+
{
|
|
247
|
+
"error_code": error.code,
|
|
248
|
+
"reason": str(error),
|
|
249
|
+
**error.payload,
|
|
250
|
+
}
|
|
251
|
+
)
|
|
241
252
|
if lock_timeout_fields:
|
|
242
253
|
payload["recommended_action"] = "inspect the lock holder before retrying"
|
|
243
254
|
if command == "monitor-poll":
|
|
@@ -5,6 +5,9 @@ from collections.abc import Callable, Mapping
|
|
|
5
5
|
from dataclasses import dataclass
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
|
|
8
|
+
from ..control_plane.coordination.legacy_writer_fence import (
|
|
9
|
+
require_legacy_coordination_write_allowed,
|
|
10
|
+
)
|
|
8
11
|
from ..control_plane.quota.error_codes import QuotaCommandValidationError
|
|
9
12
|
from ..control_plane.runtime.status_projection_cache import (
|
|
10
13
|
load_status_projection_cache,
|
|
@@ -175,7 +178,8 @@ def validate_quota_command_context_request(
|
|
|
175
178
|
if profile not in GUIDED_START_TURN_RUNTIME_PROFILES:
|
|
176
179
|
raise QuotaCommandValidationError(
|
|
177
180
|
"--begin-turn requires runtime-profile codex_app_heartbeat "
|
|
178
|
-
"or codex_app_ssh_goal"
|
|
181
|
+
"or codex_app_ssh_goal; every other host starts its turn by "
|
|
182
|
+
"passing its own --turn-instance-id"
|
|
179
183
|
)
|
|
180
184
|
if (
|
|
181
185
|
(heartbeat_turn_id or begin_turn)
|
|
@@ -220,6 +224,13 @@ def prepare_quota_command_context(
|
|
|
220
224
|
registry_path=registry_path,
|
|
221
225
|
runtime_root_override=runtime_root_arg,
|
|
222
226
|
)
|
|
227
|
+
if command == "monitor-poll" and args.execute and (args.todo_id or args.target_key):
|
|
228
|
+
# This command still uses the legacy Todo writer. Preserve its typed
|
|
229
|
+
# rejection before collecting a promoted read model (which may itself
|
|
230
|
+
# be unavailable). The writer repeats the check under its mutation lock.
|
|
231
|
+
require_legacy_coordination_write_allowed(
|
|
232
|
+
runtime_root=runtime_root, goal_id=args.goal_id,
|
|
233
|
+
)
|
|
223
234
|
status_goal_id = args.goal_id if command not in {"status", "plan"} else None
|
|
224
235
|
projection_cache_ttl_seconds = int(
|
|
225
236
|
getattr(args, "projection_cache_ttl_seconds", 120)
|
|
@@ -37,7 +37,7 @@ def todo_error_payload(args: argparse.Namespace, exc: Exception) -> dict[str, ob
|
|
|
37
37
|
"dry_run": True
|
|
38
38
|
if args.todo_command == "suggest"
|
|
39
39
|
else not bool(args.execute)
|
|
40
|
-
if args.todo_command
|
|
40
|
+
if args.todo_command in {"archive-completed", "project-markdown"}
|
|
41
41
|
else bool(args.dry_run),
|
|
42
42
|
"added": False,
|
|
43
43
|
"already_exists": False,
|
|
@@ -481,6 +481,7 @@ def handle_turn_command(
|
|
|
481
481
|
todo_id=todo_id,
|
|
482
482
|
registry_path=registry_path,
|
|
483
483
|
goal_id=args.goal_id,
|
|
484
|
+
runtime_root=runtime_root,
|
|
484
485
|
)
|
|
485
486
|
return project_durable_completion_intent(
|
|
486
487
|
todo=durable_todo,
|
|
@@ -531,6 +532,7 @@ def handle_turn_command(
|
|
|
531
532
|
todo_id=todo_id,
|
|
532
533
|
registry_path=registry_path,
|
|
533
534
|
goal_id=args.goal_id,
|
|
535
|
+
runtime_root=runtime_root,
|
|
534
536
|
)
|
|
535
537
|
completion_outcome = project_durable_completion_outcome(
|
|
536
538
|
todo=durable_todo,
|
|
@@ -675,6 +677,7 @@ def handle_turn_command(
|
|
|
675
677
|
todo_id=todo_id,
|
|
676
678
|
registry_path=registry_path,
|
|
677
679
|
goal_id=args.goal_id,
|
|
680
|
+
runtime_root=runtime_root,
|
|
678
681
|
)
|
|
679
682
|
return project_durable_completion_outcome(
|
|
680
683
|
todo=durable_todo,
|
|
@@ -703,6 +706,7 @@ def handle_turn_command(
|
|
|
703
706
|
todo_id=todo_id,
|
|
704
707
|
registry_path=registry_path,
|
|
705
708
|
goal_id=args.goal_id,
|
|
709
|
+
runtime_root=runtime_root,
|
|
706
710
|
)
|
|
707
711
|
readback = project_durable_terminal_completion_readback(
|
|
708
712
|
todo=durable_todo,
|