Commit Graph

845 Commits

Author SHA1 Message Date
freemo 8ea00f5185 fix: restore CI quality tests to passing state (#4175)
Co-authored-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
Co-committed-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
2026-04-08 11:02:14 +00:00
freemo 225eab25b1 fix(cli): change agents validation attach extra args to use --key value named option format (#3837)
Co-authored-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
Co-committed-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
2026-04-06 07:55:09 +00:00
freemo 36fb867830 fix(acms): invoke SkeletonCompressor in ContextAssembler.assemble() to propagate skeleton context to child plans
Reviewed and APPROVED. Critical bug fix. Closes #3563.
2026-04-05 21:31:14 +00:00
freemo ca3399e177 fix(acms): invoke SkeletonCompressor in ContextAssembler.assemble() to propagate skeleton context to child plans
Added skeleton_fragments: tuple[ContextFragment, ...] field to ContextPayload in context_fragment.py
- Enables carrying compressed skeleton fragments along with normal context.

Extended ACMSPipeline.assemble() in acms_service.py
- Introduced skeleton_ratio: float = 0.15 (default matching spec) and parent_fragments: tuple[ContextFragment, ...] | None = None parameters.
- These same parameters are also added to ContextAssemblyPipeline.assemble() in acms_pipeline.py for consistency.

Skeleton compression integration
- In Phase 3 of both assemble() methods, computed skeleton_budget = int(budget.available_tokens * skeleton_ratio) and invoked self._skeleton_compressor.compress(parent_fragments, skeleton_budget).
- Compressed skeleton fragments are included in the returned ContextPayload.skeleton_fragments, enabling propagation of skeleton context to child plans.

Tests and behavior coverage
- Added a TDD issue-capture Behave scenario (@tdd_issue @tdd_issue_3563) to demonstrate the fix.
- Added four Behave unit test scenarios asserting: compressor invocation, correct arguments, skeleton presence in output, and skeleton_ratio budget enforcement.
- Added a Robot Framework integration test: parent plan accumulates context → child plan spawned → child plan context contains non-empty skeleton.
- Added skeleton-context-inheritance command to helper_acms_pipeline.py to support testing and manual verification.

Key design decisions
- skeleton_ratio defaults to 0.15 to align with the spec's --skeleton-ratio default.
- parent_fragments is None by default to maintain backward compatibility (no skeleton compression when no parent context).
- skeleton_budget is computed as skeleton_budget = int(budget.available_tokens * skeleton_ratio), deriving the skeleton budget from the total token budget.
- Both ACMSPipeline and ContextAssemblyPipeline are fixed to maintain consistency across the codepath.

ISSUES CLOSED: #3563
2026-04-05 21:26:33 +00:00
freemo 201868afd8 fix(cli): route 'agents actor add' through ActorRegistry YAML-first path with all CLI flags preserved
Reviewed and APPROVED. All blocking issues addressed. Closes #3426.
2026-04-05 21:20:20 +00:00
freemo 99b4067ec2 fix(cli): extend agents diagnostics to check all 9 supported providers
Reviewed and APPROVED. All blocking issues addressed. Closes #3422.
2026-04-05 21:19:43 +00:00
freemo 62ded31c24 fix(cli): route 'agents actor add' through ActorRegistry.add() YAML-first path
Route the 'agents actor add' CLI command through ActorRegistry.add() instead
of the legacy registry.upsert_actor() path. This ensures the original YAML
text, schema_version, and compiled_metadata are preserved in the database.

Changes:
- src/cleveragents/cli/commands/actor.py: Add _load_config_text() helper that
  returns both raw text and parsed dict. Refactor add() to call registry.add()
  with the raw yaml_text and update=update_existing flag when a registry is
  available. The service fallback path (no registry) is unchanged.
- features/steps/actor_cli_steps.py: Update add command step definitions to
  mock registry.add() instead of registry.upsert_actor(). Update 'the actor
  add should pass the loaded config' assertion to verify registry.add() is
  called with a non-empty yaml_text string.
- features/steps/actor_cli_yaml_steps.py: Update add command steps to mock
  registry.add() instead of registry.upsert_actor().
- features/steps/actor_add_rich_output_steps.py: Update add command steps to
  mock registry.add() instead of registry.upsert_actor().
- robot/helper_actor_add_rich_output.py: Update helper to mock registry.add()
  instead of registry.upsert_actor().
- features/actor_add_yaml_first_path.feature: New Behave feature verifying
  the YAML-first persistence path is used by actor add.
- features/steps/actor_add_yaml_first_path_steps.py: Step definitions for
  the new YAML-first path feature.
- robot/actor_add_yaml_first_path.robot: New Robot integration tests verifying
  yaml_text is preserved and upsert_actor is not called.
- robot/helper_actor_add_yaml_first_path.py: Helper script for Robot tests.

Fixes #3426

ISSUES CLOSED: #3426
2026-04-05 21:19:40 +00:00
freemo 234d71560d fix(executor): implement automatic per-tool-write and event-based checkpoint triggers
Reviewed and APPROVED. All blocking issues addressed. Closes #3439.
2026-04-05 21:19:18 +00:00
freemo 461adcdb2a fix(cli): correct automation-profile list output structure and rich table rendering
Reviewed and APPROVED. Closes #2064.
2026-04-05 21:16:24 +00:00
freemo fa0dd3594f fix(mcp): correct MCPToolResult.data type annotation for MCP 1.4.0 content list format
Reviewed and APPROVED. Closes #2743.
2026-04-05 21:16:21 +00:00
freemo fdb3787fe3 feat(cli): add --container-id flag to agents resource add for container-instance
Reviewed and APPROVED. Closes #2598.
2026-04-05 21:16:18 +00:00
freemo 97a90e59c4 fix(domain): add missing execute hook to ToolLifecycle model to satisfy spec four-stage lifecycle
Reviewed and APPROVED. Closes #2820.
2026-04-05 21:16:05 +00:00
freemo 098955693d fix(tool-registry): reject plain Tools in attach_validation type-discriminator check
Reviewed and APPROVED. Closes #2826.
2026-04-05 21:14:58 +00:00
freemo ce4dbdb53f fix(domain): add repository protocol interfaces to domain layer
Reviewed and APPROVED. Closes #2873.
2026-04-05 21:14:56 +00:00
freemo 181ec4d2c2 fix(concurrency): protect CostTracker._daily_costs with a threading.Lock
Reviewed and APPROVED. Closes #1919.
2026-04-05 21:14:08 +00:00
freemo b565d86847 fix(cli): raise on subcommand registration failure instead of silently returning
Reviewed and APPROVED. Closes #2604.
2026-04-05 21:13:58 +00:00
freemo c92a65bc92 fix(resource): use namespace column instead of name heuristic in db_to_spec() for built_in field
Reviewed and APPROVED. Closes #3013.
2026-04-05 21:13:56 +00:00
freemo c3b2f59772 fix(sandbox): remove type: ignore in SandboxManager strategy assignment
Reviewed and APPROVED. Closes #2828.
2026-04-05 21:13:07 +00:00
freemo 78e146d169 fix(executor): implement automatic per-tool-write and event-based checkpoint triggers
Implements all four automatic checkpoint triggers defined in the specification
for the Execute phase of the plan lifecycle:

- before_tool_execute: Checkpoint created before any tool with writes=True runs
- after_tool_execute: Checkpoint created after a write tool completes successfully
- on_subplan_spawn: Checkpoint created immediately after a child plan is spawned
- on_error: Checkpoint created after any unrecoverable error in the Execute phase

Changes:
- tool/runner.py: Added optional CheckpointService and auto_checkpoint_triggers
  parameters to ToolRunner. Checkpoint hooks fire around write-tool execution
  when a CheckpointService is wired. Exported DEFAULT_AUTO_TRIGGERS as a public
  constant (single source of truth). Made is_trigger_active() public so callers
  can query the active trigger set without accessing private attributes.
- application/services/subplan_execution_service.py: Added optional
  CheckpointService, auto_checkpoint_triggers, and parent_plan_id parameters.
  on_subplan_spawn checkpoint fires in _execute_one_with_retry before the
  first execution attempt. Now imports DEFAULT_AUTO_TRIGGERS from runner.py
  (DRY fix).
- application/services/plan_executor.py: Added _is_auto_trigger_active() helper
  and on_error checkpoint hooks in both _run_execute_with_stub() and
  _run_execute_with_runtime() error paths. Delegates to
  ToolRunner.is_trigger_active() instead of accessing private attributes
  (module boundary fix).
- application/services/config_service.py: Registered new config key
  core.checkpoints.auto_create_on (default: all four triggers enabled) with
  env var CLEVERAGENTS_CHECKPOINT_AUTO_CREATE_ON.
- application/services/llm_actors.py: Replaced Any type for lifecycle_service
  with PlanLifecycleProtocol (typed Protocol) and tool_runner with ToolRunner
  type annotation. Eliminates Any usage for injected dependencies.

Tests:
- features/checkpoint_auto_triggers.feature: 15 Behave scenarios covering all
  four triggers, disable-trigger behavior, no-checkpoint-service fallback, and
  config key registration.
- features/steps/checkpoint_auto_triggers_tool_steps.py: Step definitions for
  ToolRunner and config service scenarios (split from original 519-line file).
- features/steps/checkpoint_auto_triggers_executor_steps.py: Step definitions
  for SubplanExecutionService and PlanExecutor scenarios (split from original).

Closes #3439

ISSUES CLOSED: #3439
2026-04-05 21:13:07 +00:00
freemo a3eb9ea9d1 fix(cli): add missing _log.debug call to session export/import/tell DatabaseError handlers
Reviewed and APPROVED. Closes #2788.
2026-04-05 21:13:04 +00:00
freemo 188ea031eb fix(resources): register fs-mount built-in resource type at startup
Reviewed and APPROVED. Closes #2911.
2026-04-05 21:13:02 +00:00
freemo b9c3ccee37 fix(robot): correct dedent logic for try...except...finally in indentation_library
Reviewed and APPROVED. Closes #2845.
2026-04-05 21:13:01 +00:00
freemo 8f43352723 fix(resource-type): require letter-start for namespace/name in _NAMESPACED_RE
Reviewed and APPROVED. Closes #2983.
2026-04-05 21:12:17 +00:00
freemo 54285e0f33 fix(cli): correct session show rich output Session Summary panel field labels and fields
Reviewed and APPROVED. Closes #3040.
2026-04-05 21:12:13 +00:00
freemo 0b8152b9d0 fix(tui): show command descriptions in SlashCommandOverlay alongside command names
Reviewed and APPROVED. Closes #3437.
2026-04-05 21:12:09 +00:00
freemo b6959aeffe fix(actors): enforce --update flag in agents actor add to prevent silent overwrites
Reviewed and APPROVED. Closes #2609.
2026-04-05 21:11:55 +00:00
freemo c8b66c8294 fix(config): align Settings and alembic/env.py database_url defaults to spec-required ~/.cleveragents/cleveragents.db
Reviewed and APPROVED. Closes #2871.
2026-04-05 21:11:53 +00:00
freemo 6be538bd5c fix(resources): add overlay to ResourceTypeConfigSchema sandbox strategy validation
Reviewed and APPROVED. Closes #2827.
2026-04-05 21:11:50 +00:00
freemo 31b8294f2d fix(tool): wire 6-level execution environment precedence chain in ToolRunner
Reviewed and APPROVED. Closes #2592.
2026-04-05 21:11:38 +00:00
freemo 2a541bb1e1 fix(cli): add Name and Updated columns to agents plan list table output
Reviewed and APPROVED. Closes #2611.
2026-04-05 21:11:36 +00:00
freemo 4aaf865420 fix(acms): implement real retrieval logic in all 6 spec-required context strategies
Reviewed and APPROVED. Priority/Critical fix. Closes #3500.
2026-04-05 21:11:34 +00:00
freemo 869777bb86 fix(tui): add plain text format support to session export command
Reviewed and APPROVED. Closes #3036.
2026-04-05 21:10:16 +00:00
freemo ef557a31a9 fix(a2a): change A2aErrorDetail.code to int and map error constants to JSON-RPC 2.0 integer codes
Reviewed and APPROVED. Closes #2746.
2026-04-05 21:10:14 +00:00
freemo e749513704 fix(persistence): persist reversion_count, last_completed_step, and last_checkpoint_id on LifecyclePlanModel
Reviewed and APPROVED. Closes #2864.
2026-04-05 21:10:10 +00:00
freemo 86999ea959 fix(config): add server_url, server_token, format, and default_estimation_actor fields to Settings
Reviewed and APPROVED. Closes #2870.
2026-04-05 21:09:46 +00:00
freemo 920faa0dd8 fix(a2a): add A2A Python SDK as project dependency
Reviewed and APPROVED. Closes #2858.
2026-04-05 21:09:44 +00:00
freemo f4233fb3bd fix(config): correct Settings.data_dir default from Path("data") to Path.home() / ".cleveragents"
Reviewed and APPROVED. Closes #2851.
2026-04-05 21:09:36 +00:00
freemo eb4ccc819c fix(cli): add NAME positional argument to agents actor add command per spec
Reviewed and APPROVED. Closes #2905.
2026-04-05 21:09:13 +00:00
freemo e5380eabdf fix(acms): align DEFAULT_SKELETON_RATIO default value with spec
Reviewed and APPROVED.
2026-04-05 21:09:10 +00:00
freemo a145986df6 fix(cli): promote --format to global CLI callback option per spec
Reviewed and APPROVED.
2026-04-05 21:09:07 +00:00
freemo e1fbcf6345 fix(sandbox): use spec-required cleveragents/plan- branch naming in git worktree
Reviewed and APPROVED. Closes #2601.
2026-04-05 21:09:04 +00:00
freemo 5824e7c0aa fix(database): move get_all_for_project call outside loop in LegacyDataMigrator
Reviewed and APPROVED. Closes #3047.
2026-04-05 21:08:47 +00:00
freemo db61d66d80 fix(cli): remove --namespace/-n option from agents plan list command
Reviewed and APPROVED. Closes #2986.
2026-04-05 21:08:40 +00:00
freemo 62f90d4db2 fix(a2a): rename A2aErrorDetail.details to data per JSON-RPC 2.0 spec
Reviewed and APPROVED. Closes #2745.
2026-04-05 21:08:36 +00:00
freemo 6e168fe300 fix(skills): replace get_tool() calls with get() in SkillRegistry
Reviewed and APPROVED. Closes #2914.
2026-04-05 21:08:35 +00:00
freemo acb90b812c fix(exceptions): replace Any with str | os.PathLike | None for FileSystemError.path
Reviewed and APPROVED. Closes #3034.
2026-04-05 21:08:31 +00:00
freemo 5cc50f5ca1 fix(cli): build spec-required execute output dict with sandbox, worker, and progress fields
Reviewed and APPROVED. Closes #3435.
2026-04-05 21:08:27 +00:00
freemo cdc93dc3cd fix(resources): support multiple named devcontainer configurations
Reviewed and APPROVED. Closes #2615.
2026-04-05 21:07:42 +00:00
freemo 367a272b60 feat(cli): add devcontainer lifecycle state column to agents resource list output
Reviewed and APPROVED. Closes #2596.
2026-04-05 21:07:40 +00:00
freemo 6c4bea1ba1 fix(tool): implement tool_type filter in ToolRegistry.list_tools()
Reviewed and APPROVED. Closes #2974.
2026-04-05 21:07:33 +00:00