Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
from typing import Any
from urllib.parse import parse_qs, urlparse

from .control_plane.effect_runtime import (
from ..control_plane.effect_runtime import (
EffectRuntimeConflict,
EffectRuntimeRejected,
effect_runtime_result,
)
from .control_plane.quota.automation_cadence_readback import (
from ..control_plane.quota.automation_cadence_readback import (
automation_cadence_readback,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,26 @@
from typing import Any, Protocol
from urllib.parse import parse_qs, urlparse

from .capabilities.configuration_inspection import (
from ..capabilities.configuration_inspection import (
GOAL_CONFIGURATION_INSPECTION_SCHEMA,
inspect_machine_namespaces,
project_goal_configuration as _public_goal_configuration,
)
from .capabilities.multi_subagent import (
from ..capabilities.multi_subagent import (
apply_codex_subagent_capacity,
plan_codex_subagent_capacity,
public_codex_host_capacity,
)
from .configuration_transaction import (
from ..configuration_transaction import (
build_configuration_update_plan,
configuration_payload_revision,
require_expected_configuration_plan_revision,
)
from .control_plane.goals.configure_goal_service import (
from ..control_plane.goals.configure_goal_service import (
configure_goal_with_global_sync,
read_goal_configuration_with_source_route,
)
from .orchestration import subagent_model_configuration_options
from ..orchestration import subagent_model_configuration_options

CHAT_GOAL_CONFIGURATION_PATH = "/api/chat/goal-configuration"
CHAT_GOAL_CONFIGURATION_PREVIEW_PATH = f"{CHAT_GOAL_CONFIGURATION_PATH}/preview"
Expand Down Expand Up @@ -145,7 +145,7 @@ def _change_quality_options(config: Mapping[str, Any]) -> dict[str, Any]:


def _progress_review_options(config: Mapping[str, Any]) -> dict[str, Any]:
from .capabilities.progress_review.policy import (
from ..capabilities.progress_review.policy import (
normalize_progress_review_contract_revision,
normalize_progress_review_drift_threshold,
normalize_progress_review_mode,
Expand Down Expand Up @@ -248,8 +248,8 @@ def _goal_capability_options(
if capability_id == "goal_capability_organization":
return {"capability_improvement_configuration": config}
if capability_id == "todo_replan_cadence":
from .capabilities.todo_replan_cadence.machine_defaults import normalize_replan_cadence_configuration
from .control_plane.work_items.stride_policy_codec import normalize_stride_strategy
from ..capabilities.todo_replan_cadence.machine_defaults import normalize_replan_cadence_configuration
from ..control_plane.work_items.stride_policy_codec import normalize_stride_strategy
horizon = {"clear_execution_planning_horizon_goal": True}
if "planning_horizon_goal" in config:
if not isinstance(config["planning_horizon_goal"], bool):
Expand All @@ -272,7 +272,7 @@ def _goal_capability_options(
return {option: cadence["count"], **horizon, **({"execution_stride_strategy": cadence["stride_strategy"]}
if "stride_strategy" in cadence else {})}
if capability_id == "periodic_report":
from .capabilities.periodic_report.goal_configuration import normalize_configuration
from ..capabilities.periodic_report.goal_configuration import normalize_configuration
# Validate the payload before the Session guard reads native sources.
return {"periodic_report_configuration": normalize_configuration(config)}
if capability_id == "reward_memory":
Expand Down Expand Up @@ -314,7 +314,7 @@ def _goal_capability_options(
if capability_id == "explore_harness":
return _explore_harness_options(config)
if capability_id == "pull_request_review":
from .capabilities.pr_review_queue.goal_configuration import normalize_configuration
from ..capabilities.pr_review_queue.goal_configuration import normalize_configuration
return {"pull_request_review_configuration": normalize_configuration(config)}
if capability_id == "change_quality_qualification":
return _change_quality_options(config)
Expand Down Expand Up @@ -445,7 +445,7 @@ def _goal_configuration_readback_matches(
capability_id: str, actual: object, desired: object, applied: Mapping[str, Any]
) -> bool:
if capability_id == "reward_memory" and isinstance(actual, Mapping) and isinstance(desired, Mapping):
from .capabilities.reward_memory.configuration import reward_memory_configuration_readback_matches
from ..capabilities.reward_memory.configuration import reward_memory_configuration_readback_matches
return reward_memory_configuration_readback_matches(actual, desired, applied)
return actual == desired

Expand All @@ -472,8 +472,8 @@ def _goal_configuration_inspect(self) -> None:
result,
machine_namespaces=self._goal_configuration_machine_namespaces(),
)
from .agent_registry import load_goal_from_registry
from .capabilities.progress_review.context import external_progress_review_context
from ..agent_registry import load_goal_from_registry
from ..capabilities.progress_review.context import external_progress_review_context
goal = load_goal_from_registry(self.server.registry_path, goal_ids[0].strip())
observation = external_progress_review_context(goal or {}, getattr(self.server, "runtime_root", None))
if observation is not None:
Expand Down Expand Up @@ -681,7 +681,7 @@ def _goal_configuration_update(self, *, execute: bool) -> None:
options = _goal_capability_options(capability_id, configuration)
machine_namespaces = self._goal_configuration_machine_namespaces()
from contextlib import nullcontext
from .capabilities.native_chat.steward_reports import session_report_configuration_guard
from ..capabilities.native_chat.steward_reports import session_report_configuration_guard
controller = getattr(self.server, "runtime_controller", None)
guard = (session_report_configuration_guard(controller, goal_id, configuration)
if capability_id == "periodic_report" and controller is not None else nullcontext())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,20 @@
from pathlib import Path
from typing import Any, Protocol, cast

from .capabilities.configuration_ui import build_capability_configuration_catalog
from .configuration_catalog import build_configuration_capability_descriptors
from .capabilities.machine_configuration.builtins import (
from ..capabilities.configuration_ui import build_capability_configuration_catalog
from ..configuration_catalog import build_configuration_capability_descriptors
from ..capabilities.machine_configuration.builtins import (
build_builtin_machine_configuration_registry,
)
from .capabilities.machine_configuration.contract import (
from ..capabilities.machine_configuration.contract import (
MACHINE_CONFIGURATION_SCHEMA,
MachineConfigurationRegistry,
machine_configuration_revision,
merge_machine_configuration_namespace,
normalize_machine_configuration,
remove_machine_configuration_namespace,
)
from .capabilities.machine_configuration.store import (
from ..capabilities.machine_configuration.store import (
configure_machine_configuration,
inspect_machine_configuration,
read_stored_machine_configuration,
Expand Down
2 changes: 1 addition & 1 deletion loopx/chat_session_open.py → loopx/chat/session_open.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from pathlib import Path
from typing import Any

from .chat_manager import open_manager_session
from ..chat_manager import open_manager_session

# The executor a Goal-scoped session runs on when the caller makes no explicit
# pick. The steward channel does not use this: it resolves its own default.
Expand Down
6 changes: 3 additions & 3 deletions loopx/chat_ssh_source_api.py → loopx/chat/ssh_source_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
from collections.abc import Callable
from typing import Any

from .control_plane.goals.ssh_lifecycle_transport import (
from ..control_plane.goals.ssh_lifecycle_transport import (
apply_ssh_goal_lifecycle,
)
from .control_plane.status.ssh_tunnel import ensure_ssh_source
from .status_server import is_loopback_host
from ..control_plane.status.ssh_tunnel import ensure_ssh_source
from ..status_server import is_loopback_host


SSH_SOURCE_ENSURE_PATH = "/api/ssh-source/ensure"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import subprocess
from typing import Any

from .usage_ping import UsageSettingsInputError, control
from ..usage_ping import UsageSettingsInputError, control

CHAT_USAGE_STATISTICS_PATH = "/api/chat/usage-statistics"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
import hashlib
import json

from .chat import redact_local_paths
from .control_plane.goals.activation import goal_activation_state
from .control_plane.status.collection import registry_activation_revision
from .registry import registry_goals
from .control_plane.presentation.goal_metadata import goal_parent_fields
from ..chat import redact_local_paths
from ..control_plane.goals.activation import goal_activation_state
from ..control_plane.status.collection import registry_activation_revision
from ..registry import registry_goals
from ..control_plane.presentation.goal_metadata import goal_parent_fields


def workspace_goal_directory(
Expand All @@ -35,7 +35,7 @@ def workspace_goal_directory(
)
links = registry.get("goal_source_links", [])
if links:
from .control_plane.status.goal_source import linked_source_goals
from ..control_plane.status.goal_source import linked_source_goals
goals.extend(goal for goal in linked_source_goals(registry)
if not selected_goal_id or goal["id"] == selected_goal_id)
revision = registry_activation_revision(registry)
Expand Down
4 changes: 2 additions & 2 deletions loopx/chat_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@
MANAGER_AGENT_GOAL_ID, MANAGER_AGENT_OBJECTIVE, is_manager_channel,
manager_capabilities_projection, manager_workspace,
)
from .chat_session_open import open_chat_session
from .chat_ssh_source_api import SshSourceRequestMixin
from .chat.session_open import open_chat_session
from .chat.ssh_source_api import SshSourceRequestMixin
from .chat_store import ChatSessionStore, TERMINAL_TURN_STATES
from .capabilities.native_chat.model_settings import normalize_agent_reasoning_effort, normalize_agent_model_id
from .extensions.lark.private_conversation_api import PrivateConversationRequestMixin, PRIVATE_CONVERSATIONS_PATH
Expand Down
2 changes: 1 addition & 1 deletion loopx/chat_status_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

from .chat import redact_local_paths
from .chat_goal_subagent_api import goal_subagent_configuration_enabled
from .chat_workspace_directory import workspace_goal_directory
from .chat.workspace_directory import workspace_goal_directory
from .codex_app_thread_activity import (
codex_delivery_expectations,
codex_thread_observers,
Expand Down
8 changes: 4 additions & 4 deletions loopx/presentation/configuration_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
from . import goal_amendment_api as amendment_api
from . import request_control_api as request_api
from . import goal_storage_api as storage_api
from .. import chat_usage_statistics_api as usage_api
from .. import chat_goal_configuration_api as goal_api
from ..chat import usage_statistics_api as usage_api
from ..chat import goal_configuration_api as goal_api
from . import goal_direction_api as direction_api
from . import decision_context_api as context_api
from . import content_media_api as media_api
from .. import chat_machine_configuration_api as machine_api
from ..chat import machine_configuration_api as machine_api
from .. import chat_operator_provider_api as operator_api
from .. import chat_automation_cadence_api as cadence_api
from ..chat import automation_cadence_api as cadence_api


class ChatConfigurationRequestMixin(
Expand Down
2 changes: 1 addition & 1 deletion loopx/presentation/goal_source_routing.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def _todo_detail(self):
self._send_error("The original Task is unavailable; retry after reconnecting.", status=503)

def _goal_source_links(self):
from ..chat_workspace_directory import workspace_goal_directory
from ..chat.workspace_directory import workspace_goal_directory
from ..registry import load_registry
from urllib.parse import parse_qs, urlparse
import subprocess
Expand Down
2 changes: 1 addition & 1 deletion tests/architecture/top_level_module_budget.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"schema": "loopx_top_level_module_budget_v0",
"baseline_commit": "a4483aaece5bc74ec3f969fd067229487022401b",
"max_top_level_modules": 141,
"max_top_level_modules": 134,
"allowlist": ["__init__.py", "entrypoint.py", "cli.py"]
}
2 changes: 1 addition & 1 deletion tests/capabilities/test_capability_improvement.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import pytest

from loopx.capabilities.goal_capability_organization.goal_configuration import configuration_summary
from loopx.chat_goal_configuration_api import (
from loopx.chat.goal_configuration_api import (
CHAT_GOAL_CONFIGURATION_PREVIEW_PATH, GoalConfigurationRequestMixin,
)
from loopx.configure_goal import configure_goal
Expand Down
2 changes: 1 addition & 1 deletion tests/capabilities/test_explore_machine_defaults.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
from loopx.capabilities.configuration_inspection import inspect_machine_namespaces, project_goal_configuration
from loopx.capabilities.machine_configuration.builtins import build_builtin_machine_configuration_registry
from loopx.capabilities.machine_configuration.store import configure_machine_configuration
from loopx.chat_goal_configuration_api import _goal_capability_options
from loopx.chat.goal_configuration_api import _goal_capability_options
from loopx.configure_goal import configure_goal
from loopx.control_plane.coordination.goal_storage_initialization import initialize_goal_storage_target
from loopx.history import collect_history
Expand Down
2 changes: 1 addition & 1 deletion tests/capabilities/test_explore_turn_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
explore_result_log_path,
)
from loopx.configure_goal import configure_goal
from loopx.chat_goal_configuration_api import _goal_capability_options
from loopx.chat.goal_configuration_api import _goal_capability_options
from loopx.control_plane.effect_runtime import (
effect_runtime_result,
EffectRuntimeRejected,
Expand Down
2 changes: 1 addition & 1 deletion tests/capabilities/test_goal_capability_inspection.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
inspect_goal_capabilities,
render_goal_capabilities,
)
from loopx.chat_goal_configuration_api import GoalConfigurationRequestMixin
from loopx.chat.goal_configuration_api import GoalConfigurationRequestMixin
from loopx.cli import main


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ def test_goal_overrides_win_and_clearing_restores_live_machine_defaults(

def test_effective_turn_machine_default_migration_and_override_readback(tmp_path: Path) -> None:
"""An explicit unit switch preserves v0 storage until apply and is reversible."""
from loopx.chat_goal_configuration_api import _goal_capability_options
from loopx.chat.goal_configuration_api import _goal_capability_options
from loopx.capabilities.goal_inspection import inspect_goal_capabilities

_repo, registry_path, runtime_root = _fixture(tmp_path)
Expand Down Expand Up @@ -354,7 +354,7 @@ def test_product_default_and_namespace_removal_use_six_settled_turns(tmp_path, m


def test_stride_version_inherits_and_rolls_back(tmp_path: Path) -> None:
from loopx.chat_goal_configuration_api import _goal_capability_options
from loopx.chat.goal_configuration_api import _goal_capability_options
from loopx.capabilities.goal_inspection import inspect_goal_capabilities

_repo, registry_path, runtime_root = _fixture(tmp_path)
Expand Down Expand Up @@ -414,7 +414,7 @@ def test_stride_version_inherits_and_rolls_back(tmp_path: Path) -> None:


def test_goal_stride_only_uses_live_review_interval(tmp_path: Path) -> None:
from loopx.chat_goal_configuration_api import _goal_capability_options
from loopx.chat.goal_configuration_api import _goal_capability_options
from loopx.capabilities.goal_inspection import inspect_goal_capabilities

_repo, registry_path, runtime_root = _fixture(tmp_path)
Expand Down Expand Up @@ -509,7 +509,7 @@ def test_stride_configuration_rejects_unsupported_or_ambiguous_versions(schema_v


def test_horizon_goal_defaults_on_with_explicit_overrides_and_clear(tmp_path):
from loopx.chat_goal_configuration_api import _goal_capability_options
from loopx.chat.goal_configuration_api import _goal_capability_options
from loopx.capabilities.goal_inspection import inspect_goal_capabilities

_repo, registry_path, runtime_root = _fixture(tmp_path)
Expand Down
2 changes: 1 addition & 1 deletion tests/capabilities/test_periodic_report_cadence.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ def test_timezone_conflict_is_not_silently_reinterpreted():
def test_configure_goal_persists_and_clears_schedule(tmp_path):
import json
from loopx.configure_goal import configure_goal
from loopx.chat_goal_configuration_api import _goal_capability_options
from loopx.chat.goal_configuration_api import _goal_capability_options
from loopx.capabilities.periodic_report.machine_defaults import resolve_goal_periodic_report_subscription
registry = tmp_path / "registry.json"
registry.write_text(json.dumps({"goals": [{"id": "example", "repo": str(tmp_path),
Expand Down
2 changes: 1 addition & 1 deletion tests/capabilities/test_pr_review_configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

from loopx.cli import main
from loopx.configure_goal import configure_goal
from loopx.chat_goal_configuration_api import _goal_capability_options
from loopx.chat.goal_configuration_api import _goal_capability_options
from loopx.capabilities.pr_review_queue.goal_configuration import (
apply_change,
configuration_summary,
Expand Down
2 changes: 1 addition & 1 deletion tests/capabilities/test_progress_review.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ def test_catalog_registers_the_default_off_capability() -> None:
import io # noqa: E402
from contextlib import redirect_stdout # noqa: E402

from loopx.chat_goal_configuration_api import _goal_capability_options # noqa: E402
from loopx.chat.goal_configuration_api import _goal_capability_options # noqa: E402
from loopx.cli import main as cli_main # noqa: E402
from loopx.configure_goal import configure_goal # noqa: E402
from loopx.configuration_catalog import build_goal_configuration_catalog # noqa: E402
Expand Down
6 changes: 3 additions & 3 deletions tests/capabilities/test_reward_memory_agent_bindings.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ def test_wrong_target_mixed_scope_and_failed_preflight_cannot_commit(independent


def test_editor_api_preserves_target_and_rejects_ambiguous_off_requests():
from loopx.chat_goal_configuration_api import _goal_capability_options
from loopx.chat.goal_configuration_api import _goal_capability_options
assert _goal_capability_options("reward_memory", {"agent_id": "writer", "enabled": False}) == {
"reward_memory_agent_id": "writer", "clear_reward_memory_config": True}
enabled = _goal_capability_options("reward_memory", {"agent_id": "writer", "enabled": True, "config_path": ".loopx/config/writer.json"})
Expand Down Expand Up @@ -259,7 +259,7 @@ def test_pending_settlement_cannot_follow_a_replacement_binding(independent):


def test_editor_readback_accepts_verified_activation_and_keeps_partial_write_fact(independent):
from loopx.chat_goal_configuration_api import GoalConfigurationRequestMixin
from loopx.chat.goal_configuration_api import GoalConfigurationRequestMixin
registry, _, _ = independent
preview = enable_writer(registry, execute=False)
desired = preview["feature_summary"]["reward_memory"]
Expand Down Expand Up @@ -321,7 +321,7 @@ def test_app_stage_resolves_the_registered_file_when_projection_omits_private_pa


def test_committed_binding_with_unavailable_readback_is_partial_not_rollback(independent):
from loopx.chat_goal_configuration_api import GoalConfigurationRequestMixin
from loopx.chat.goal_configuration_api import GoalConfigurationRequestMixin
registry, _, _ = independent
applied = enable_writer(registry)
class Unavailable(GoalConfigurationRequestMixin):
Expand Down
Loading
Loading