loopx 0.4.9__tar.gz → 0.5.0__tar.gz

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