phronomy 0.27.0 → 0.29.0
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.
- checksums.yaml +4 -4
- data/.mutant.yml +9 -9
- data/CHANGELOG.md +52 -0
- data/CONTRIBUTING.md +8 -8
- data/README.md +28 -7
- data/benchmark/bench_agent_invoke.rb +25 -50
- data/benchmark/bench_context_assembler.rb +14 -11
- data/benchmark/bench_regression.rb +1 -1
- data/benchmark/bench_tool_schema.rb +1 -1
- data/docs/application-recipes.md +229 -0
- data/docs/architecture/agent-chat-and-state-ownership.md +7 -1
- data/docs/architecture/agent-transition-ownership.md +13 -89
- data/docs/architecture/backend-groups.md +152 -0
- data/docs/architecture/before-llm-input.md +3 -3
- data/docs/architecture/context-management.md +1 -1
- data/docs/architecture/dx05-agent-scope.md +119 -0
- data/docs/architecture/dx05-workflow-task-state.md +134 -0
- data/docs/architecture/error-api-review.md +245 -0
- data/docs/architecture/execution-abstraction-review.md +88 -0
- data/docs/architecture/execution-boundaries.md +28 -0
- data/docs/architecture/execution-metadata-and-values.md +6 -0
- data/docs/architecture/multi-agent-handoff.md +6 -5
- data/docs/architecture/persistence.md +27 -9
- data/docs/architecture/r8-unit1.md +104 -0
- data/docs/architecture/r8-unit10.md +72 -0
- data/docs/architecture/r8-unit11.md +71 -0
- data/docs/architecture/r8-unit12.md +67 -0
- data/docs/architecture/r8-unit13.md +61 -0
- data/docs/architecture/r8-unit14.md +72 -0
- data/docs/architecture/r8-unit15.md +65 -0
- data/docs/architecture/r8-unit16.md +54 -0
- data/docs/architecture/r8-unit17.md +73 -0
- data/docs/architecture/r8-unit18.md +92 -0
- data/docs/architecture/r8-unit19.md +61 -0
- data/docs/architecture/r8-unit2.md +55 -0
- data/docs/architecture/r8-unit20.md +51 -0
- data/docs/architecture/r8-unit21.md +79 -0
- data/docs/architecture/r8-unit22.md +74 -0
- data/docs/architecture/r8-unit23.md +81 -0
- data/docs/architecture/r8-unit3.md +130 -0
- data/docs/architecture/r8-unit4.md +79 -0
- data/docs/architecture/r8-unit5.md +115 -0
- data/docs/architecture/r8-unit6.md +71 -0
- data/docs/architecture/r8-unit7.md +70 -0
- data/docs/architecture/r8-unit8.md +78 -0
- data/docs/architecture/r8-unit9.md +73 -0
- data/docs/architecture/refactoring-closure.md +10 -1
- data/docs/architecture/remaining-refactoring-plan.md +16 -0
- data/docs/architecture/storage-execution-boundaries.md +54 -0
- data/docs/architecture/tool-schema-recording-gap.md +6 -0
- data/docs/architecture/tracing.md +1 -1
- data/docs/architecture/workflow-terminal-ownership-design.md +2 -2
- data/docs/architecture.md +24 -11
- data/docs/decisions/015-tool-public-facade-and-rbs-boundary.md +3 -3
- data/docs/decisions/027-llm-adapter-provider-boundary.md +2 -0
- data/docs/decisions/030-agent-handoff-domain-and-durable-responsibility.md +2 -0
- data/docs/decisions/031-durable-multi-agent-coordination.md +2 -0
- data/docs/decisions/032-storage-backend-composition.md +5 -0
- data/docs/decisions/034-handoff-runner-coordination-ownership.md +2 -0
- data/docs/decisions/035-tool-executor-capability-ownership.md +1 -1
- data/docs/decisions/038-responsibility-based-source-layout.md +14 -0
- data/docs/decisions/039-runtime-configuration-lifecycle-ownership.md +8 -0
- data/docs/decisions/040-configuration-default-composition.md +12 -1
- data/docs/decisions/045-worker-input-restriction-ownership.md +4 -0
- data/docs/decisions/051-execution-outcome-worker-ownership.md +2 -0
- data/docs/decisions/056-workflow-terminal-policy-ownership.md +1 -1
- data/docs/decisions/058-neutral-storage-primitives.md +5 -0
- data/docs/decisions/059-backend-contracts-and-async-clients.md +74 -0
- data/docs/decisions/060-runtime-settings-and-application-configuration.md +86 -0
- data/docs/decisions/061-persistence-failure-contracts.md +89 -0
- data/docs/decisions/062-content-store-service.md +52 -0
- data/docs/decisions/063-execution-contracts-and-services.md +88 -0
- data/docs/decisions/064-agent-execution-and-multi-agent-responsibility.md +36 -0
- data/docs/decisions/065-vector-and-embeddings-common-operations.md +38 -0
- data/docs/decisions/066-llm-and-tool-operation-contracts.md +20 -0
- data/docs/decisions/067-agent-progress-and-engine-connection.md +29 -0
- data/docs/decisions/068-agent-tool-child-progress-and-tool-operation.md +36 -0
- data/docs/decisions/README.md +18 -1
- data/docs/execution-boundaries-preview.md +45 -0
- data/docs/failure-reason-codes.md +45 -0
- data/docs/features.md +12 -4
- data/docs/getting-started.md +52 -48
- data/docs/migrations/0.22.md +2 -2
- data/docs/migrations/durable-semantic-coordination-v2.md +2 -0
- data/docs/migrations/handoff-runner-multi-agent.md +2 -0
- data/docs/migrations/persistence-failure-contracts.md +67 -0
- data/docs/migrations/r8-unit10.md +36 -0
- data/docs/migrations/r8-unit11.md +33 -0
- data/docs/migrations/r8-unit12.md +31 -0
- data/docs/migrations/r8-unit13.md +36 -0
- data/docs/migrations/r8-unit14.md +31 -0
- data/docs/migrations/r8-unit15.md +31 -0
- data/docs/migrations/r8-unit16.md +26 -0
- data/docs/migrations/r8-unit17.md +28 -0
- data/docs/migrations/r8-unit18.md +29 -0
- data/docs/migrations/r8-unit19.md +28 -0
- data/docs/migrations/r8-unit20.md +24 -0
- data/docs/migrations/r8-unit21.md +28 -0
- data/docs/migrations/r8-unit22.md +29 -0
- data/docs/migrations/r8-unit23.md +20 -0
- data/docs/migrations/r8-unit4.md +67 -0
- data/docs/migrations/r8-unit5.md +75 -0
- data/docs/migrations/r8-unit6.md +109 -0
- data/docs/migrations/r8-unit7.md +31 -0
- data/docs/migrations/r8-unit8.md +33 -0
- data/docs/migrations/r8-unit9.md +28 -0
- data/docs/migrations/storage-async-client.md +103 -0
- data/docs/migrations/vector-async-clients.md +110 -0
- data/docs/ordered-event-delivery.md +54 -0
- data/docs/persistence-backends.md +38 -21
- data/docs/runtime-and-concurrency.md +26 -1
- data/docs/workflow-completion.md +92 -0
- data/gemfiles/http_minimum.gemfile +5 -0
- data/lib/phronomy/agent/admission.rb +78 -0
- data/lib/phronomy/agent/{lifecycle_contract/agent_already_exists_error.rb → agent_already_exists_error.rb} +1 -1
- data/lib/phronomy/agent/{lifecycle_contract/agent_busy_error.rb → agent_busy_error.rb} +1 -1
- data/lib/phronomy/agent/agent_not_found_error.rb +16 -0
- data/lib/phronomy/agent/{lifecycle_contract/agent_purged_error.rb → agent_purged_error.rb} +1 -1
- data/lib/phronomy/agent/agent_unloaded_error.rb +14 -0
- data/lib/phronomy/agent/api/agent.rb +13 -0
- data/lib/phronomy/{recovery → agent/api}/execution_rehydration_required_error.rb +1 -1
- data/lib/phronomy/agent/async_event_api.rb +132 -103
- data/lib/phronomy/agent/base.rb +146 -113
- data/lib/phronomy/agent/before_llm_input.rb +70 -0
- data/lib/phronomy/agent/composition/run_once.rb +1 -1
- data/lib/phronomy/agent/{context_assembly/context_candidate_resolver.rb → context_candidate_resolver.rb} +2 -2
- data/lib/phronomy/agent/{context_assembly/context_assembler.rb → context_preparation.rb} +35 -221
- data/lib/phronomy/agent/control_request.rb +21 -0
- data/lib/phronomy/agent/execution/agent_execution.rb +1 -1
- data/lib/phronomy/agent/execution/agent_invocation.rb +27 -53
- data/lib/phronomy/agent/execution/approval_resume_commit.rb +1 -1
- data/lib/phronomy/agent/execution/dispatch_preparation.rb +17 -127
- data/lib/phronomy/agent/execution/exact_execution.rb +55 -32
- data/lib/phronomy/agent/execution/execution_cancellation.rb +8 -4
- data/lib/phronomy/agent/execution/execution_coordinator.rb +229 -407
- data/lib/phronomy/agent/execution/execution_metadata.rb +1 -0
- data/lib/phronomy/agent/execution/execution_outcome_committer.rb +71 -127
- data/lib/phronomy/agent/execution/execution_registry.rb +6 -2
- data/lib/phronomy/agent/execution/execution_session_runner.rb +22 -27
- data/lib/phronomy/agent/execution/initial_preparation.rb +19 -120
- data/lib/phronomy/agent/execution/{agent_invocation_session_builder.rb → invocation_actions.rb} +54 -194
- data/lib/phronomy/agent/execution/invocation_transitions.rb +39 -1
- data/lib/phronomy/agent/execution/runtime_record_encoder.rb +8 -11
- data/lib/phronomy/agent/execution_change.rb +161 -0
- data/lib/phronomy/agent/execution_environment.rb +36 -0
- data/lib/phronomy/agent/execution_extension_state.rb +21 -0
- data/lib/phronomy/agent/execution_observation.rb +35 -0
- data/lib/phronomy/agent/filterable.rb +188 -0
- data/lib/phronomy/agent/handoff/{handoff_context.rb → transfer_context.rb} +4 -4
- data/lib/phronomy/agent/handoff/{handoff_projection.rb → transfer_projection.rb} +14 -33
- data/lib/phronomy/{llm_contract/transport_error.rb → agent/handoff_error.rb} +1 -1
- data/lib/phronomy/agent/journal/journal_projection.rb +1 -1
- data/lib/phronomy/agent/knowledge_item.rb +13 -0
- data/lib/phronomy/agent/lifecycle/agent_root.rb +1 -1
- data/lib/phronomy/agent/lifecycle/lifetime_api.rb +76 -0
- data/lib/phronomy/agent/lifecycle/operation_lease.rb +33 -0
- data/lib/phronomy/agent/lifecycle/operation_result.rb +53 -0
- data/lib/phronomy/agent/lifecycle/ownership_registry.rb +117 -31
- data/lib/phronomy/agent/lifecycle/scope.rb +198 -0
- data/lib/phronomy/agent/lifecycle/scope_cleanup_error.rb +19 -0
- data/lib/phronomy/agent/lifecycle/unload_transition.rb +78 -0
- data/lib/phronomy/agent/persistence/agent_repository.rb +29 -21
- data/lib/phronomy/agent/persistence/cancellation_repository.rb +51 -0
- data/lib/phronomy/agent/persistence/codec.rb +1 -21
- data/lib/phronomy/agent/persistence/execution_repository.rb +57 -41
- data/lib/phronomy/agent/persistence/journal_repository.rb +27 -18
- data/lib/phronomy/agent/persistence/records.rb +33 -0
- data/lib/phronomy/agent/persistence/retention_repository.rb +70 -0
- data/lib/phronomy/agent/persistence/storage_schema.rb +7 -2
- data/lib/phronomy/agent/persistence/watermark.rb +13 -11
- data/lib/phronomy/agent/recovery/invocation_restorer.rb +13 -21
- data/lib/phronomy/agent/recovery/recovery_coordinator/continuation.rb +13 -12
- data/lib/phronomy/agent/recovery/recovery_coordinator/installation.rb +34 -34
- data/lib/phronomy/agent/recovery/recovery_coordinator/resolution.rb +33 -39
- data/lib/phronomy/agent/recovery/recovery_coordinator.rb +28 -25
- data/lib/phronomy/agent/recovery/recovery_rules.rb +119 -0
- data/lib/phronomy/agent/recovery/recovery_support.rb +10 -19
- data/lib/phronomy/agent/reserved_execution.rb +16 -0
- data/lib/phronomy/agent/retention.rb +17 -0
- data/lib/phronomy/agent/runtime_binding/engine_environment.rb +60 -0
- data/lib/phronomy/agent/runtime_binding/engine_session_builder.rb +34 -0
- data/lib/phronomy/agent/runtime_binding/phase_machine_builder.rb +64 -0
- data/lib/phronomy/agent/runtime_binding/tool_session_builder.rb +34 -0
- data/lib/phronomy/agent/{context_assembly/ruby_llm_materializer.rb → runtime_input.rb} +18 -35
- data/lib/phronomy/agent/{context_assembly/saved_context_reader.rb → saved_context_reader.rb} +6 -4
- data/lib/phronomy/agent/settings.rb +47 -0
- data/lib/phronomy/agent/{context_assembly/state_writer.rb → state_writer.rb} +4 -3
- data/lib/phronomy/agent/store.rb +253 -0
- data/lib/phronomy/agent/{lifecycle_contract/stream_callback_error.rb → stream_callback_error.rb} +3 -3
- data/lib/phronomy/agent/tool_execution/tool_binding.rb +4 -64
- data/lib/phronomy/agent/tool_execution/tool_invocation.rb +50 -219
- data/lib/phronomy/agent/tool_execution/tool_invocation_actions.rb +107 -0
- data/lib/phronomy/agent/tool_execution/tool_invocation_transitions.rb +70 -0
- data/lib/phronomy/common/error.rb +65 -1
- data/lib/phronomy/configuration/runtime_settings.rb +49 -0
- data/lib/phronomy/content_store/base.rb +7 -2
- data/lib/phronomy/content_store/storage_schema.rb +1 -0
- data/lib/phronomy/content_store/stored_contents.rb +2 -1
- data/lib/phronomy/context/assembly.rb +195 -0
- data/lib/phronomy/{llm_contract/context_budget_exceeded_error.rb → context/budget_exceeded_error.rb} +3 -1
- data/lib/phronomy/context/candidate.rb +51 -0
- data/lib/phronomy/context/constraint.rb +47 -0
- data/lib/phronomy/{agent/context_contract → context}/context_plan.rb +1 -1
- data/lib/phronomy/{agent/context_contract → context}/context_plan_validator.rb +3 -3
- data/lib/phronomy/{agent/context_contract → context}/context_policy.rb +1 -1
- data/lib/phronomy/{agent/context_contract → context}/context_policy_input.rb +1 -1
- data/lib/phronomy/{agent/context_assembly → context}/context_policy_input_builder.rb +1 -1
- data/lib/phronomy/context/default_policy.rb +140 -0
- data/lib/phronomy/context/final_budget_validator.rb +33 -0
- data/lib/phronomy/{agent/context_contract → context}/llm_input_build_context.rb +1 -1
- data/lib/phronomy/{agent/context_contract → context}/llm_input_manifest.rb +19 -19
- data/lib/phronomy/{agent/context_contract → context}/llm_input_patch.rb +1 -1
- data/lib/phronomy/context/manifest_error.rb +10 -0
- data/lib/phronomy/context/prompt_template.rb +98 -0
- data/lib/phronomy/{vector_store → documents}/loader/base.rb +1 -1
- data/lib/phronomy/{vector_store → documents}/loader/csv_loader.rb +2 -2
- data/lib/phronomy/{vector_store → documents}/loader/markdown_loader.rb +3 -3
- data/lib/phronomy/{vector_store → documents}/loader/plain_text_loader.rb +2 -2
- data/lib/phronomy/{vector_store → documents}/splitter/base.rb +1 -1
- data/lib/phronomy/{vector_store → documents}/splitter/fixed_size_splitter.rb +2 -2
- data/lib/phronomy/{vector_store → documents}/splitter/recursive_splitter.rb +2 -2
- data/lib/phronomy/embeddings/async/async_client.rb +44 -0
- data/lib/phronomy/embeddings/authentication_error.rb +11 -0
- data/lib/phronomy/embeddings/backends/ruby_llm_embeddings.rb +52 -0
- data/lib/phronomy/embeddings/base.rb +43 -0
- data/lib/phronomy/embeddings/invalid_result_error.rb +11 -0
- data/lib/phronomy/embeddings/rate_limit_error.rb +11 -0
- data/lib/phronomy/embeddings/transport_error.rb +11 -0
- data/lib/phronomy/engine/concurrency/offload_pool.rb +36 -21
- data/lib/phronomy/engine/concurrency/pool_registry.rb +47 -12
- data/lib/phronomy/engine/diagnostics.rb +1 -1
- data/lib/phronomy/engine/event_loop.rb +7 -7
- data/lib/phronomy/engine/execution_binding.rb +23 -0
- data/lib/phronomy/engine/execution_receiver_binding.rb +43 -0
- data/lib/phronomy/engine/fsm_protocol.rb +1 -6
- data/lib/phronomy/engine/fsm_session.rb +3 -3
- data/lib/phronomy/engine/metrics.rb +16 -14
- data/lib/phronomy/engine/runtime/timer_queue.rb +1 -1
- data/lib/phronomy/engine/runtime.rb +25 -12
- data/lib/phronomy/engine/terminal_decision.rb +7 -0
- data/lib/phronomy/execution/async_operation.rb +41 -0
- data/lib/phronomy/{engine → execution}/blocking.rb +2 -2
- data/lib/phronomy/{engine → execution}/concurrency/cancellation_token.rb +1 -1
- data/lib/phronomy/{engine → execution}/concurrency/deadline.rb +0 -17
- data/lib/phronomy/{engine → execution}/concurrency/physical_completion_task.rb +1 -1
- data/lib/phronomy/{engine → execution}/concurrency/result_collector.rb +1 -1
- data/lib/phronomy/{engine → execution}/concurrency/result_composition.rb +33 -12
- data/lib/phronomy/{engine/concurrency/subscriptions.rb → execution/concurrency/result_subscriptions.rb} +14 -18
- data/lib/phronomy/execution/concurrency/subscriptions.rb +25 -0
- data/lib/phronomy/{engine → execution}/execution.rb +61 -27
- data/lib/phronomy/{engine → execution}/execution_cancellation_error.rb +2 -2
- data/lib/phronomy/execution/execution_receiver.rb +78 -0
- data/lib/phronomy/execution/execution_scope_state.rb +35 -0
- data/lib/phronomy/{engine → execution}/execution_timeout_error.rb +2 -2
- data/lib/phronomy/{engine → execution}/invocation_context.rb +0 -15
- data/lib/phronomy/execution/invocation_controls.rb +73 -0
- data/lib/phronomy/execution/runnable.rb +24 -0
- data/lib/phronomy/{engine → execution}/task_result.rb +9 -4
- data/lib/phronomy/execution/wait_policy.rb +24 -0
- data/lib/phronomy/filter/{contract/filter_block_error.rb → filter_block_error.rb} +3 -3
- data/lib/phronomy/generation/generator_verifier/agent_operation.rb +65 -0
- data/lib/phronomy/generation/generator_verifier/default_parser.rb +27 -0
- data/lib/phronomy/generation/generator_verifier/workflow_builder.rb +2 -2
- data/lib/phronomy/generation/generator_verifier.rb +7 -7
- data/lib/phronomy/generation/low_confidence_error.rb +2 -2
- data/lib/phronomy/integrations/ordered_event_delivery.rb +208 -0
- data/lib/phronomy/llm_adapter/async/async_client.rb +47 -0
- data/lib/phronomy/{llm_contract → llm_adapter}/authentication_error.rb +3 -1
- data/lib/phronomy/llm_adapter/backends/ruby_llm.rb +183 -0
- data/lib/phronomy/llm_adapter/base.rb +49 -68
- data/lib/phronomy/{llm_contract → llm_adapter}/context_length_error.rb +3 -1
- data/lib/phronomy/llm_adapter/invalid_result_error.rb +10 -0
- data/lib/phronomy/llm_adapter/message.rb +62 -0
- data/lib/phronomy/{llm_contract → llm_adapter}/rate_limit_error.rb +3 -1
- data/lib/phronomy/llm_adapter/request.rb +79 -0
- data/lib/phronomy/llm_adapter/response.rb +36 -0
- data/lib/phronomy/llm_adapter/stream_chunk.rb +18 -0
- data/lib/phronomy/llm_adapter/token_usage.rb +64 -0
- data/lib/phronomy/llm_adapter/transport_error.rb +9 -0
- data/lib/phronomy/llm_adapter.rb +3 -16
- data/lib/phronomy/multi_agent/admission_registry.rb +1 -8
- data/lib/phronomy/multi_agent/durable_subagent_coordinator.rb +108 -84
- data/lib/phronomy/multi_agent/execution_environment.rb +29 -0
- data/lib/phronomy/{agent/handoff → multi_agent}/handoff.rb +2 -2
- data/lib/phronomy/{agent/handoff → multi_agent}/handoff_capability_factory.rb +21 -2
- data/lib/phronomy/multi_agent/handoff_participant.rb +79 -0
- data/lib/phronomy/{agent/handoff → multi_agent}/handoff_policy.rb +1 -1
- data/lib/phronomy/multi_agent/handoff_runner.rb +77 -100
- data/lib/phronomy/{agent/handoff → multi_agent}/handoff_state.rb +1 -1
- data/lib/phronomy/multi_agent/orchestrator.rb +61 -75
- data/lib/phronomy/multi_agent/persistence/codec.rb +20 -0
- data/lib/phronomy/multi_agent/persistence/handoff_state_repository.rb +77 -0
- data/lib/phronomy/multi_agent/persistence/records.rb +27 -0
- data/lib/phronomy/multi_agent/persistence/storage_schema.rb +21 -0
- data/lib/phronomy/multi_agent/persistence/team_execution_repository.rb +60 -44
- data/lib/phronomy/multi_agent/persistence/team_repository.rb +29 -21
- data/lib/phronomy/multi_agent/reserved_child_admission.rb +88 -0
- data/lib/phronomy/multi_agent/runtime_binding/engine_environment.rb +35 -0
- data/lib/phronomy/multi_agent/shared_state.rb +2 -2
- data/lib/phronomy/multi_agent/store.rb +156 -0
- data/lib/phronomy/multi_agent/team_busy_error.rb +18 -0
- data/lib/phronomy/multi_agent/team_coordinator.rb +99 -77
- data/lib/phronomy/multi_agent/team_not_found_error.rb +18 -0
- data/lib/phronomy/multi_agent/team_ownership_registry.rb +2 -12
- data/lib/phronomy/output_parser/parse_error.rb +7 -0
- data/lib/phronomy/persistence/content_repository.rb +26 -0
- data/lib/phronomy/persistence/errors.rb +16 -0
- data/lib/phronomy/persistence/migration/initial_format_migration.rb +2 -2
- data/lib/phronomy/persistence/persistence.rb +23 -0
- data/lib/phronomy/persistence/save_outcome.rb +24 -0
- data/lib/phronomy/persistence/snapshot_comparison.rb +81 -0
- data/lib/phronomy/persistence/storage_boundary.rb +32 -0
- data/lib/phronomy/persistence/transaction.rb +86 -0
- data/lib/phronomy/persistence_composition/storage_schema.rb +9 -4
- data/lib/phronomy/persistence_composition/stores.rb +34 -0
- data/lib/phronomy/persistence_composition/unit4_migration.rb +276 -0
- data/lib/phronomy/runtime_composition/agent_defaults.rb +5 -1
- data/lib/phronomy/runtime_composition/configuration.rb +146 -0
- data/lib/phronomy/runtime_composition/evaluation_defaults.rb +7 -0
- data/lib/phronomy/runtime_composition/execution_defaults.rb +5 -0
- data/lib/phronomy/runtime_composition/generation_defaults.rb +6 -0
- data/lib/phronomy/runtime_composition/global_configuration.rb +38 -0
- data/lib/phronomy/runtime_composition/multi_agent_defaults.rb +9 -0
- data/lib/phronomy/runtime_composition/workflow_defaults.rb +4 -0
- data/lib/phronomy/storage/async/async_client.rb +60 -0
- data/lib/phronomy/storage/backend.rb +8 -2
- data/lib/phronomy/storage/condition_failed_error.rb +2 -2
- data/lib/phronomy/storage/unique_constraint_error.rb +2 -2
- data/lib/phronomy/testing/eval/metrics.rb +1 -1
- data/lib/phronomy/testing/eval/scorer/llm_judge.rb +19 -3
- data/lib/phronomy/testing/persistence_contract/a_content_store.rb +2 -2
- data/lib/phronomy/testing/persistence_contract/a_journal_repository.rb +6 -6
- data/lib/phronomy/testing/persistence_contract/a_persistence_backend.rb +55 -52
- data/lib/phronomy/testing/persistence_contract/a_workflow_state_repository.rb +3 -3
- data/lib/phronomy/testing/persistence_contract/an_agent_repository.rb +7 -7
- data/lib/phronomy/testing/persistence_contract/an_execution_repository.rb +11 -11
- data/lib/phronomy/testing/persistence_contract/coordination_repositories.rb +57 -51
- data/lib/phronomy/testing/persistence_contract/neutral_storage_primitives.rb +1 -1
- data/lib/phronomy/testing/persistence_contract/storage_transaction_boundaries.rb +23 -22
- data/lib/phronomy/tool/authorization.rb +77 -0
- data/lib/phronomy/tool/base.rb +551 -9
- data/lib/phronomy/tool/call_request.rb +40 -0
- data/lib/phronomy/{agent/tool_execution/tool_definition_set.rb → tool/definition_set.rb} +7 -8
- data/lib/phronomy/tool/operation.rb +88 -0
- data/lib/phronomy/tool/schema.rb +214 -0
- data/lib/phronomy/tool/settings.rb +31 -0
- data/lib/phronomy/tool/tool_error.rb +7 -0
- data/lib/phronomy/tool/tool_executor.rb +58 -0
- data/lib/phronomy/tools/agent.rb +22 -90
- data/lib/phronomy/tools/mcp.rb +21 -14
- data/lib/phronomy/tools/vector_search.rb +4 -4
- data/lib/phronomy/tracing/automatic.rb +11 -6
- data/lib/phronomy/tracing/base.rb +36 -7
- data/lib/phronomy/tracing/observation.rb +37 -0
- data/lib/phronomy/tracing/open_telemetry_tracer.rb +4 -29
- data/lib/phronomy/tracing/settings.rb +36 -0
- data/lib/phronomy/vector_store/{async_backend.rb → async/async_client.rb} +35 -29
- data/lib/phronomy/vector_store/{in_memory.rb → backends/in_memory.rb} +12 -10
- data/lib/phronomy/vector_store/{pgvector.rb → backends/pgvector.rb} +44 -16
- data/lib/phronomy/vector_store/{redis_search.rb → backends/redis_search.rb} +74 -37
- data/lib/phronomy/vector_store/base.rb +118 -49
- data/lib/phronomy/vector_store/invalid_result_error.rb +12 -0
- data/lib/phronomy/vector_store.rb +2 -17
- data/lib/phronomy/version.rb +1 -1
- data/lib/phronomy/workflow/completion.rb +11 -0
- data/lib/phronomy/workflow/execution/workflow.rb +37 -9
- data/lib/phronomy/workflow/execution/workflow_action_rules.rb +67 -0
- data/lib/phronomy/workflow/execution/workflow_context.rb +2 -2
- data/lib/phronomy/workflow/execution/workflow_execution_environment.rb +28 -0
- data/lib/phronomy/workflow/execution/workflow_execution_registry.rb +77 -8
- data/lib/phronomy/workflow/execution/workflow_runner.rb +105 -92
- data/lib/phronomy/workflow/execution/workflow_settings.rb +28 -0
- data/lib/phronomy/workflow/execution/workflow_task_execution.rb +153 -0
- data/lib/phronomy/workflow/execution/workflow_task_reception.rb +72 -0
- data/lib/phronomy/workflow/execution/workflow_task_resume_error.rb +14 -0
- data/lib/phronomy/workflow/persistence/state_repository.rb +28 -22
- data/lib/phronomy/workflow/persistence/storage_schema.rb +13 -0
- data/lib/phronomy/workflow/runtime_binding/workflow_engine_environment.rb +61 -0
- data/lib/phronomy/workflow/runtime_binding/workflow_phase_machine_builder.rb +158 -0
- data/lib/phronomy/workflow/runtime_binding/workflow_task_session.rb +76 -0
- data/lib/phronomy/workflow/{execution → runtime_binding}/workflow_terminal_policy.rb +4 -4
- data/lib/phronomy.rb +63 -16
- data/scripts/api_snapshot.rb +47 -15
- data/scripts/check_readme_ruby.rb +24 -29
- data/scripts/check_readme_runnable.rb +92 -81
- data/sig/_private/phronomy/agent/settings.rbs +19 -0
- data/sig/_private/phronomy/configuration/runtime_settings.rbs +20 -0
- data/sig/_private/phronomy/llm_adapter/async/async_client.rbs +10 -0
- data/sig/_private/phronomy/multi_agent/store.rbs +8 -0
- data/sig/_private/phronomy/persistence/storage_boundary.rbs +7 -0
- data/sig/_private/phronomy/tool/settings.rbs +13 -0
- data/sig/_private/phronomy/tracing/settings.rbs +15 -0
- data/sig/_private/phronomy/workflow/execution/workflow_settings.rbs +13 -0
- data/sig/phronomy/agent/admission.rbs +19 -0
- data/sig/phronomy/agent/agent_not_found_error.rbs +6 -0
- data/sig/phronomy/agent/agent_unloaded_error.rbs +6 -0
- data/sig/phronomy/agent/execution_contract.rbs +132 -0
- data/sig/phronomy/agent/execution_environment.rbs +20 -0
- data/sig/phronomy/agent/store.rbs +73 -0
- data/sig/phronomy/agent/stream_callback_error.rbs +8 -0
- data/sig/phronomy/agent.rbs +29 -135
- data/sig/phronomy/common.rbs +7 -0
- data/sig/phronomy/content_store/contracts.rbs +13 -0
- data/sig/phronomy/context.rbs +152 -0
- data/sig/phronomy/embeddings/async/async_client.rbs +9 -0
- data/sig/phronomy/embeddings/base.rbs +23 -0
- data/sig/phronomy/engine/concurrency/timer_bindings.rbs +22 -0
- data/sig/phronomy/engine/control_bindings.rbs +11 -0
- data/sig/phronomy/engine/control_protocols.rbs +23 -0
- data/sig/phronomy/engine/execution_binding.rbs +6 -0
- data/sig/phronomy/engine/execution_receiver.rbs +15 -0
- data/sig/phronomy/engine/observability.rbs +13 -0
- data/sig/phronomy/execution/async_operation.rbs +7 -0
- data/sig/phronomy/execution/blocking.rbs +5 -0
- data/sig/phronomy/execution/concurrency/cancellation_token.rbs +13 -0
- data/sig/phronomy/execution/concurrency/deadline.rbs +10 -0
- data/sig/phronomy/execution/concurrency/result_composition.rbs +7 -0
- data/sig/phronomy/execution/control_protocols.rbs +18 -0
- data/sig/phronomy/execution/errors.rbs +7 -0
- data/sig/phronomy/execution/execution.rbs +41 -0
- data/sig/phronomy/execution/execution_receiver.rbs +40 -0
- data/sig/phronomy/execution/execution_scope_state.rbs +9 -0
- data/sig/phronomy/execution/invocation_context.rbs +18 -0
- data/sig/phronomy/execution/invocation_controls.rbs +13 -0
- data/sig/phronomy/execution/task_result.rbs +29 -0
- data/sig/phronomy/extensions.rbs +1 -21
- data/sig/phronomy/filter/filter_block_error.rbs +6 -0
- data/sig/phronomy/generation/low_confidence_error.rbs +6 -0
- data/sig/phronomy/handoff.rbs +10 -4
- data/sig/phronomy/integrations.rbs +14 -0
- data/sig/phronomy/llm_adapter/backends/ruby_llm.rbs +6 -0
- data/sig/phronomy/llm_adapter/base.rbs +14 -0
- data/sig/phronomy/llm_adapter/usage.rbs +14 -0
- data/sig/phronomy/llm_adapter/values.rbs +43 -0
- data/sig/phronomy/llm_context_window.rbs +10 -0
- data/sig/phronomy/multi_agent/reserved_child_admission.rbs +8 -0
- data/sig/phronomy/multi_agent/store.rbs +54 -0
- data/sig/phronomy/multi_agent/team_busy_error.rbs +8 -0
- data/sig/phronomy/multi_agent/team_not_found_error.rbs +8 -0
- data/sig/phronomy/multi_agent.rbs +6 -3
- data/sig/phronomy/persistence/errors.rbs +18 -0
- data/sig/phronomy/persistence/migration.rbs +13 -0
- data/sig/phronomy/persistence/transaction.rbs +19 -0
- data/sig/phronomy/persistence.rbs +1 -99
- data/sig/phronomy/persistence_composition.rbs +19 -0
- data/sig/phronomy/runtime_composition/configuration.rbs +36 -0
- data/sig/phronomy/storage/async/async_client.rbs +8 -0
- data/sig/phronomy/storage/backends/in_memory.rbs +9 -0
- data/sig/phronomy/{storage.rbs → storage/contracts.rbs} +4 -18
- data/sig/phronomy/tool.rbs +48 -4
- data/sig/phronomy/tracing/observation.rbs +7 -0
- data/sig/phronomy/vector_store/async/async_client.rbs +13 -0
- data/sig/phronomy/vector_store/base.rbs +23 -0
- data/sig/phronomy/workflow/execution/workflow_execution_environment.rbs +15 -0
- data/sig/phronomy/workflow/runtime_binding/workflow_terminal_policy.rbs +7 -0
- data/sig/phronomy/workflow/store.rbs +8 -0
- data/sig/phronomy/workflow.rbs +5 -1
- data/sig/phronomy.rbs +4 -49
- metadata +365 -117
- data/lib/phronomy/agent/concerns/before_llm_input.rb +0 -66
- data/lib/phronomy/agent/concerns/error_translation.rb +0 -45
- data/lib/phronomy/agent/concerns/filterable.rb +0 -184
- data/lib/phronomy/agent/context/capability/base.rb +0 -548
- data/lib/phronomy/agent/context/capability/tool_executor.rb +0 -62
- data/lib/phronomy/agent/context/instruction/prompt_template.rb +0 -102
- data/lib/phronomy/agent/context_assembly/runtime_chat_builder.rb +0 -36
- data/lib/phronomy/agent/context_assembly/token_budget_resolver.rb +0 -22
- data/lib/phronomy/agent/context_parts/validators/final_budget_validator.rb +0 -37
- data/lib/phronomy/agent/context_policies/default.rb +0 -142
- data/lib/phronomy/agent/execution/phase_machine_builder.rb +0 -101
- data/lib/phronomy/agent/execution/provider_call_outcome.rb +0 -106
- data/lib/phronomy/agent/handoff/handoff_execution_coordinator.rb +0 -15
- data/lib/phronomy/agent/handoff/handoff_outcome_committer.rb +0 -131
- data/lib/phronomy/agent/handoff/handoff_request.rb +0 -45
- data/lib/phronomy/agent/lifecycle_contract/handoff_error.rb +0 -7
- data/lib/phronomy/agent/persistence/handoff_state_repository.rb +0 -58
- data/lib/phronomy/agent/persistence/queries.rb +0 -61
- data/lib/phronomy/agent/selection/candidate.rb +0 -53
- data/lib/phronomy/agent/selection/constraint.rb +0 -49
- data/lib/phronomy/agent/tool_execution/tool_call_intercepted.rb +0 -29
- data/lib/phronomy/agent/tool_execution/tool_invocation_session_builder.rb +0 -276
- data/lib/phronomy/configuration/configuration.rb +0 -68
- data/lib/phronomy/configuration/global_configuration.rb +0 -26
- data/lib/phronomy/engine/concurrency/cancellation_scope.rb +0 -124
- data/lib/phronomy/engine/concurrency/operation_binding.rb +0 -43
- data/lib/phronomy/engine/execution_receiver.rb +0 -65
- data/lib/phronomy/engine/runnable.rb +0 -54
- data/lib/phronomy/llm_adapter/ruby_llm.rb +0 -47
- data/lib/phronomy/llm_contract/token_usage.rb +0 -85
- data/lib/phronomy/multi_agent/persistence/queries.rb +0 -30
- data/lib/phronomy/multi_agent/storage_contract/team_storage_schema.rb +0 -15
- data/lib/phronomy/output_parser/contract/parse_error.rb +0 -7
- data/lib/phronomy/persistence/api/persistence.rb +0 -140
- data/lib/phronomy/persistence_composition/repositories.rb +0 -77
- data/lib/phronomy/recovery/recovery.rb +0 -186
- data/lib/phronomy/tool/contract/tool_error.rb +0 -7
- data/lib/phronomy/vector_store/embeddings/base.rb +0 -44
- data/lib/phronomy/vector_store/embeddings/ruby_llm_embeddings.rb +0 -47
- data/lib/phronomy/workflow/phase_machine_builder.rb +0 -205
- data/lib/phronomy/workflow/storage_contract/workflow_storage_schema.rb +0 -9
- data/sig/phronomy/execution_receiver.rbs +0 -34
- data/sig/phronomy/llm_adapter.rbs +0 -11
- data/sig/phronomy/runtime.rbs +0 -76
- /data/lib/phronomy/agent/{context_assembly/context_importer.rb → context_importer.rb} +0 -0
- /data/lib/phronomy/{engine → execution}/backpressure_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/cancellation_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/concurrency/worker_input_restricted.rb +0 -0
- /data/lib/phronomy/{engine → execution}/event_loop_reentrancy_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/invalid_async_entry_action_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/invalid_async_transition_action_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/invalid_async_workflow_action_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/pool_shutdown_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/recursion_limit_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/runtime_shutdown_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/runtime_shutdown_reentrancy_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/scheduler_reentrancy_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/timeout_error.rb +0 -0
|
@@ -19,6 +19,9 @@ module Phronomy
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
class Orchestrator < ::Phronomy::Agent::Base
|
|
22
|
+
attr_reader coordination_store: Store?
|
|
23
|
+
def self.create: (?coordination_store: Store?, **Object options) ?{ (Object) -> void } -> instance
|
|
24
|
+
def self.load: (String agent_id, persistence: Agent::Store, coordination_store: Store, **Object options) ?{ (Object) -> void } -> instance
|
|
22
25
|
def self.subagent: (Symbol | String name, singleton(::Phronomy::Agent::Base) agent_class, ?on_error: Symbol, ?inherit_knowledge: bool) -> untyped
|
|
23
26
|
def self.registered_subagents: () -> Hash[Symbol | String, untyped]
|
|
24
27
|
def resume: (String execution_id, ?config: Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
|
|
@@ -28,7 +31,7 @@ module Phronomy
|
|
|
28
31
|
|
|
29
32
|
class TeamCoordinator
|
|
30
33
|
attr_reader team_id: String
|
|
31
|
-
attr_reader persistence:
|
|
34
|
+
attr_reader persistence: Store
|
|
32
35
|
def self.team_definition: (?id: String?, ?version: Integer?) -> Hash[Symbol, String | Integer]
|
|
33
36
|
def self.coordinator_model: (?String? value) -> String?
|
|
34
37
|
def self.coordinator_instructions: (?String? value) -> String?
|
|
@@ -36,9 +39,9 @@ module Phronomy
|
|
|
36
39
|
def self.pool: (size: Integer, agent: singleton(::Phronomy::Agent::Base), ?on_error: Symbol) -> untyped
|
|
37
40
|
def self.schedule: () { (Array[untyped]) -> untyped } -> untyped
|
|
38
41
|
def self.aggregate: () { (Array[Hash[Symbol, untyped]]) -> untyped } -> untyped
|
|
39
|
-
def self.new: (?team_id: String, ?persistence:
|
|
42
|
+
def self.new: (?team_id: String, ?persistence: Store?, ?metadata: Hash[String, untyped], ?on_event: ^(untyped) -> untyped) -> instance
|
|
40
43
|
def self.create: (**untyped options) -> instance
|
|
41
|
-
def self.load: (String team_id, persistence:
|
|
44
|
+
def self.load: (String team_id, persistence: Store, ?on_event: ^(untyped) -> untyped) -> instance
|
|
42
45
|
def self.get: (String team_id) -> instance?
|
|
43
46
|
def invoke: (untyped input, ?config: Hash[Symbol, untyped]) -> untyped
|
|
44
47
|
def stream: (untyped input, ?config: Hash[Symbol, untyped]) ?{ (Hash[Symbol, untyped]) -> untyped } -> untyped
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
class Persistence
|
|
3
|
+
class TransactionError < Error
|
|
4
|
+
end
|
|
5
|
+
class Error < Phronomy::Error
|
|
6
|
+
end
|
|
7
|
+
class ConflictError < Error
|
|
8
|
+
end
|
|
9
|
+
class StateConflictError < ConflictError
|
|
10
|
+
end
|
|
11
|
+
class NotFoundError < Error
|
|
12
|
+
end
|
|
13
|
+
class SerializationError < Error
|
|
14
|
+
end
|
|
15
|
+
class UnsupportedBackendError < Error
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
class Persistence
|
|
3
|
+
module Migration
|
|
4
|
+
module InitialFormatMigration
|
|
5
|
+
def self.agent_root: (Hash[untyped, untyped] hash) -> Storage::DurableRecord
|
|
6
|
+
def self.agent_execution: (Hash[untyped, untyped] hash) -> Storage::DurableRecord
|
|
7
|
+
def self.journal_record: (Hash[untyped, untyped] hash) -> Storage::DurableRecord
|
|
8
|
+
def self.workflow_state: (workflow_instance_id: String, revision: Integer, snapshot: Hash[untyped, untyped]) -> Storage::DurableRecord
|
|
9
|
+
def self.llm_input_manifest: (Hash[untyped, untyped] hash) -> Hash[String, untyped]
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
class Persistence
|
|
3
|
+
interface _Participant[T]
|
|
4
|
+
def new: (Storage::View view) -> T
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
class Transaction
|
|
8
|
+
def initialize: (Persistence persistence, Storage::View view, ?parent: Transaction?) -> void
|
|
9
|
+
def participate: [T, R] (persistence: Persistence, adapter: _Participant[T]) { (T) -> R } -> R
|
|
10
|
+
def outermost?: () -> bool
|
|
11
|
+
def committed?: () -> bool
|
|
12
|
+
def validate!: () -> bool
|
|
13
|
+
def close!: () -> bool
|
|
14
|
+
def confirm!: () -> bool
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def atomic: [R] () { (Transaction) -> R } -> R
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -1,105 +1,7 @@
|
|
|
1
1
|
module Phronomy
|
|
2
|
-
# Runtime/domain-facing repository interfaces.
|
|
3
|
-
interface _AgentRepository
|
|
4
|
-
def create: (untyped root) -> untyped
|
|
5
|
-
def load: (String agent_id) -> untyped
|
|
6
|
-
def save: (String agent_id, expected_revision: Integer, root: untyped) -> untyped
|
|
7
|
-
def delete: (String agent_id) -> untyped
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
interface _JournalRepository
|
|
11
|
-
def append: (String agent_id, expected_position: Integer, records: Array[untyped]) -> Array[untyped]
|
|
12
|
-
def read: (String agent_id, ?after: Integer?, ?limit: Integer?) -> Array[untyped]
|
|
13
|
-
def head: (String agent_id) -> Integer
|
|
14
|
-
def delete: (String agent_id) -> untyped
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
interface _ExecutionRepository
|
|
18
|
-
def create_active: (untyped execution) -> untyped
|
|
19
|
-
def load: (String execution_id) -> untyped
|
|
20
|
-
def save: (String execution_id, expected_revision: Integer, execution: untyped) -> untyped
|
|
21
|
-
def list_active: (String agent_id) -> Array[untyped]
|
|
22
|
-
def list: (String agent_id, ?after: String?, ?limit: Integer) -> Array[untyped]
|
|
23
|
-
def delete: (String execution_id) -> untyped
|
|
24
|
-
def delete_for_agent: (String agent_id) -> untyped
|
|
25
|
-
def assert_idle!: (String agent_id) -> untyped
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
interface _WorkflowStateRepository
|
|
29
|
-
def load: (String workflow_instance_id) -> Hash[untyped, untyped]?
|
|
30
|
-
def save: (String workflow_instance_id, expected_revision: Integer?, snapshot: Hash[untyped, untyped]) -> Integer
|
|
31
|
-
def delete: (String workflow_instance_id, expected_revision: Integer) -> untyped
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# Backend-side record repository interfaces. DurableRecord is the opaque data
|
|
35
|
-
# carrier. Identity/revision/index metadata is passed separately so backends do
|
|
36
|
-
# not need to interpret DurableRecord#payload.
|
|
37
|
-
interface _HandoffStateRepository
|
|
38
|
-
def load: (String main_agent_id) -> untyped
|
|
39
|
-
def save: (String main_agent_id, expected_revision: Integer?, state: untyped) -> untyped
|
|
40
|
-
def delete: (String main_agent_id, expected_revision: Integer) -> untyped
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
interface _TeamRepository
|
|
44
|
-
def create: (untyped root) -> untyped
|
|
45
|
-
def load: (String team_id) -> untyped
|
|
46
|
-
def save: (String team_id, expected_revision: Integer, root: untyped) -> untyped
|
|
47
|
-
def delete: (String team_id) -> untyped
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
interface _TeamExecutionRepository
|
|
51
|
-
def create_active: (untyped execution) -> untyped
|
|
52
|
-
def load: (String team_execution_id) -> untyped
|
|
53
|
-
def save: (String team_execution_id, expected_revision: Integer, execution: untyped) -> untyped
|
|
54
|
-
def list_active: (String team_id) -> Array[untyped]
|
|
55
|
-
def list: (String team_id, ?after: String?, ?limit: Integer) -> Array[untyped]
|
|
56
|
-
def delete: (String team_execution_id) -> untyped
|
|
57
|
-
def delete_for_team: (String team_id) -> untyped
|
|
58
|
-
def assert_idle!: (String team_id) -> untyped
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
interface _PersistenceTransactionView
|
|
62
|
-
def contents: () -> _ContentRepository
|
|
63
|
-
def agents: () -> _AgentRepository
|
|
64
|
-
def journals: () -> _JournalRepository
|
|
65
|
-
def executions: () -> _ExecutionRepository
|
|
66
|
-
def workflow_states: () -> _WorkflowStateRepository
|
|
67
|
-
def handoff_states: () -> _HandoffStateRepository
|
|
68
|
-
def teams: () -> _TeamRepository
|
|
69
|
-
def team_executions: () -> _TeamExecutionRepository
|
|
70
|
-
def assert_agent_watermark!: (agent_id: String, agent_revision: Integer, journal_position: Integer) -> true
|
|
71
|
-
end
|
|
72
|
-
|
|
73
2
|
class Persistence
|
|
74
|
-
module Migration
|
|
75
|
-
module InitialFormatMigration
|
|
76
|
-
def self.agent_root: (Hash[untyped, untyped] hash) -> Storage::DurableRecord
|
|
77
|
-
def self.agent_execution: (Hash[untyped, untyped] hash) -> Storage::DurableRecord
|
|
78
|
-
def self.journal_record: (Hash[untyped, untyped] hash) -> Storage::DurableRecord
|
|
79
|
-
def self.workflow_state: (workflow_instance_id: String, revision: Integer, snapshot: Hash[untyped, untyped]) -> Storage::DurableRecord
|
|
80
|
-
def self.llm_input_manifest: (Hash[untyped, untyped] hash) -> Hash[String, untyped]
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
attr_reader contents: _ContentRepository
|
|
85
|
-
attr_reader agents: _AgentRepository
|
|
86
|
-
attr_reader journals: _JournalRepository
|
|
87
|
-
attr_reader executions: _ExecutionRepository
|
|
88
|
-
attr_reader workflow_states: _WorkflowStateRepository
|
|
89
|
-
attr_reader handoff_states: _HandoffStateRepository
|
|
90
|
-
attr_reader teams: _TeamRepository
|
|
91
|
-
attr_reader team_executions: _TeamExecutionRepository
|
|
92
|
-
def handoff_result: (String execution_id, ?main_agent_id: String?) -> Hash[Symbol, untyped]
|
|
93
|
-
def execution_result: (String execution_id) -> Hash[Symbol, untyped]
|
|
94
|
-
def list_executions: (String agent_id, ?after: String?, ?limit: Integer) -> Array[untyped]
|
|
95
|
-
def team_execution_result: (String team_execution_id) -> Hash[Symbol, untyped]
|
|
96
|
-
def list_team_executions: (String team_id, ?after: String?, ?limit: Integer) -> Array[untyped]
|
|
97
|
-
|
|
98
3
|
attr_reader backend: _StorageBackend
|
|
99
4
|
def initialize: (backend: _StorageBackend) -> void
|
|
100
|
-
def
|
|
101
|
-
def capabilities: () -> Hash[Symbol, bool]
|
|
102
|
-
def transaction: () { (_PersistenceTransactionView) -> untyped } -> untyped
|
|
103
|
-
def assert_agent_watermark!: (agent_id: String, agent_revision: Integer, journal_position: Integer) -> true
|
|
5
|
+
def bind: [T] (_Participant[T] adapter) -> T
|
|
104
6
|
end
|
|
105
7
|
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module PersistenceComposition
|
|
3
|
+
class Stores < Data
|
|
4
|
+
attr_reader coordinator: ::Phronomy::Persistence
|
|
5
|
+
attr_reader agent: Agent::Store
|
|
6
|
+
attr_reader multi_agent: MultiAgent::Store
|
|
7
|
+
attr_reader workflow: _WorkflowStateRepository
|
|
8
|
+
def self.new: (coordinator: ::Phronomy::Persistence, agent: Agent::Store, multi_agent: MultiAgent::Store, workflow: _WorkflowStateRepository) -> instance
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Unit4Migration
|
|
12
|
+
def self.convert: (Hash[String, json_value] snapshot, quiescent: bool) -> Hash[String, json_value]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.agent: (?backend: _StorageBackend?) -> Agent::Store
|
|
16
|
+
def self.build: (backend: _StorageBackend) -> Stores
|
|
17
|
+
def self.in_memory: () -> Stores
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
class ConfigurationError < Error
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
class HandoffError < Error
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class CancellationError < Error
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class EventLoopReentrancyError < Error
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class AgentAlreadyExistsError < Error
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class AgentPurgedError < Error
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class PoolShutdownError < Error
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class BackpressureError < Error
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class Configuration
|
|
27
|
+
attr_accessor agent_store: Agent::Store?
|
|
28
|
+
attr_accessor multi_agent_store: MultiAgent::Store?
|
|
29
|
+
attr_accessor workflow_store: _WorkflowStateRepository?
|
|
30
|
+
attr_accessor llm_adapter: LLMAdapter::Base
|
|
31
|
+
attr_accessor before_llm_input: Agent::_BeforeLLMInputHook?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def self.configuration: () -> Configuration
|
|
35
|
+
def self.configure: () { (Configuration) -> void } -> void
|
|
36
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module Storage
|
|
3
|
+
class AsyncClient
|
|
4
|
+
def initialize: (backend: _StorageBackend, ?pool: untyped) -> void
|
|
5
|
+
def transaction_async: [T] (?cancellation_token: Concurrency::CancellationToken?, ?timeout: Numeric?) { (View) -> T } -> TaskResult[T]
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
end
|
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
module Phronomy
|
|
2
|
-
interface _ContentRepository
|
|
3
|
-
def put: (String bytes, canonicalization_version: untyped) -> String
|
|
4
|
-
def fetch: (String content_id) -> String
|
|
5
|
-
def exist?: (String content_id) -> bool
|
|
6
|
-
def put_text: (String text) -> String
|
|
7
|
-
def put_json: (untyped value) -> String
|
|
8
|
-
def fetch_text: (String content_id) -> String
|
|
9
|
-
def fetch_json: (String content_id) -> untyped
|
|
10
|
-
def fetch_many: (Array[String] content_ids) -> Hash[String, String]
|
|
11
|
-
end
|
|
12
|
-
|
|
13
2
|
interface _StorageBackend
|
|
14
3
|
def view: () -> Storage::View
|
|
15
4
|
def capabilities: () -> Hash[Symbol, bool | Integer]
|
|
5
|
+
def transaction_open?: () -> bool
|
|
16
6
|
def transaction: [T] () { (Storage::View) -> T } -> T
|
|
17
7
|
end
|
|
18
8
|
|
|
@@ -26,11 +16,11 @@ module Phronomy
|
|
|
26
16
|
class UniqueConstraintError < ConflictError
|
|
27
17
|
attr_reader resource: String
|
|
28
18
|
attr_reader constraint: Symbol
|
|
29
|
-
def initialize: (resource: Resource, constraint: Symbol) -> void
|
|
19
|
+
def initialize: (resource: Resource, constraint: Symbol, ?code: String?) -> void
|
|
30
20
|
end
|
|
31
21
|
class ConditionFailedError < ConflictError
|
|
32
22
|
attr_reader condition: condition
|
|
33
|
-
def initialize: (condition) -> void
|
|
23
|
+
def initialize: (condition, ?code: String?) -> void
|
|
34
24
|
end
|
|
35
25
|
class BlobConflictError < ConflictError
|
|
36
26
|
end
|
|
@@ -163,12 +153,8 @@ module Phronomy
|
|
|
163
153
|
def initialize: (resources: Array[Resource]) -> void
|
|
164
154
|
def self.validate_capabilities!: (_StorageBackend backend) -> void
|
|
165
155
|
def capabilities: () -> Hash[Symbol, bool | Integer]
|
|
156
|
+
def transaction_open?: () -> bool
|
|
166
157
|
def transaction: [T] () { (View) -> T } -> T
|
|
167
158
|
end
|
|
168
|
-
module Backends
|
|
169
|
-
class InMemory < Backend
|
|
170
|
-
def initialize: (?resources: Array[Resource]) -> void
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
159
|
end
|
|
174
160
|
end
|
data/sig/phronomy/tool.rbs
CHANGED
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
module Phronomy
|
|
2
2
|
module Tool
|
|
3
|
+
module Operation
|
|
4
|
+
def self.call_async: (tool: Base, args: Hash[untyped, untyped], ?cancellation_token: Concurrency::CancellationToken?, ?config: Hash[untyped, untyped], ?submitter: _ExecutionSubmitter, ?on_full: Symbol) -> _CompletionHandle[untyped]
|
|
5
|
+
def self.with_result_transform: (singleton(Base) tool_class) { (untyped, String, Hash[untyped, untyped]) -> untyped } -> singleton(Base)
|
|
6
|
+
end
|
|
7
|
+
class Schema
|
|
8
|
+
def initialize: (?untyped schema) ?{ () -> untyped } -> void
|
|
9
|
+
def json_schema: () -> Hash[String, untyped]
|
|
10
|
+
def validate: (Hash[String | Symbol, untyped] arguments, ?coerce: bool) -> [Hash[Symbol, untyped]?, String?]
|
|
11
|
+
end
|
|
12
|
+
class CallRequest
|
|
13
|
+
attr_reader id: String
|
|
14
|
+
attr_reader name: String
|
|
15
|
+
attr_reader arguments: Hash[String, json_value]
|
|
16
|
+
attr_reader metadata: Hash[String, json_value]
|
|
17
|
+
def initialize: (id: String, name: String, arguments: Hash[String | Symbol, untyped], ?metadata: Hash[String | Symbol, untyped]) -> void
|
|
18
|
+
def self.from_h: (Hash[String | Symbol, untyped] value) -> CallRequest
|
|
19
|
+
def to_h: () -> Hash[String, untyped]
|
|
20
|
+
end
|
|
3
21
|
class Base
|
|
22
|
+
def self.parameter: (String | Symbol name, ?type: String | Symbol, ?description: String?, ?required: bool) -> untyped
|
|
4
23
|
def self.tool_name: (?untyped value) -> String?
|
|
5
24
|
def self.description: (?String text) -> String?
|
|
6
25
|
def self.desc: (?String text) -> String?
|
|
@@ -23,26 +42,51 @@ module Phronomy
|
|
|
23
42
|
def self.redact_params: (*untyped names) -> Array[Symbol]
|
|
24
43
|
def self.max_result_size: (?untyped value) -> untyped
|
|
25
44
|
|
|
45
|
+
def description: () -> String?
|
|
26
46
|
def name: () -> String
|
|
27
47
|
def parameters_schema: () -> untyped
|
|
28
48
|
def parameters: () -> Hash[untyped, untyped]
|
|
29
49
|
def provider_options: () -> Hash[untyped, untyped]
|
|
30
50
|
def provider_params: () -> Hash[untyped, untyped]
|
|
31
51
|
def params_schema: () -> untyped
|
|
52
|
+
def validate_arguments: (Hash[String | Symbol, untyped]? args) -> [Hash[Symbol, untyped]?, String?]
|
|
32
53
|
def call: (Hash[untyped, untyped] args, ?cancellation_token: Concurrency::CancellationToken?) -> untyped
|
|
33
54
|
def call_async: (Hash[untyped, untyped] args, ?cancellation_token: Concurrency::CancellationToken?, ?config: Hash[untyped, untyped]) -> TaskResult[untyped]
|
|
34
55
|
def requires_approval?: () -> untyped
|
|
35
56
|
def tool_origin: () -> Symbol
|
|
36
57
|
def approval_metadata: () -> Hash[untyped, untyped]
|
|
37
58
|
def execute: (**untyped args) -> untyped
|
|
59
|
+
|
|
60
|
+
private
|
|
61
|
+
|
|
62
|
+
def call_async_operation: (Hash[untyped, untyped]? args, cancellation_token: Concurrency::CancellationToken?, operation_name: String) { (Hash[Symbol, untyped]) -> _CompletionHandle[untyped] } -> _CompletionHandle[untyped]
|
|
63
|
+
def async_error_value: (Exception error) -> untyped
|
|
38
64
|
end
|
|
39
65
|
end
|
|
40
66
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
module Phronomy
|
|
70
|
+
module Tool
|
|
71
|
+
interface _AuthorizationRequest
|
|
72
|
+
def origin: () -> Symbol
|
|
73
|
+
def with: (?facts: Hash[untyped, untyped], ?default_decision: Symbol?) -> _AuthorizationRequest
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
module Authorization
|
|
77
|
+
class Decision
|
|
78
|
+
attr_reader decision: Symbol
|
|
79
|
+
attr_reader facts: Hash[untyped, untyped]
|
|
80
|
+
attr_reader reason: String?
|
|
45
81
|
end
|
|
82
|
+
def self.call: (request: _AuthorizationRequest, arguments: Hash[untyped, untyped], context: Hash[untyped, untyped], ?facts: (^(Hash[untyped, untyped], Hash[untyped, untyped]) -> Hash[untyped, untyped]?)?, ?requirement: bool? | (^(_AuthorizationRequest) -> bool?), ?policy: (^(_AuthorizationRequest) -> Symbol)?) -> Decision
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
class DefinitionSet
|
|
86
|
+
attr_reader runtime_tools: Array[untyped]
|
|
87
|
+
attr_reader definitions: Array[Hash[String, untyped]]
|
|
88
|
+
def self.build: (tools: Array[untyped], ?runtime_tools: Array[untyped]) -> DefinitionSet
|
|
89
|
+
def select_definitions: (Array[Hash[String, untyped]] expected_definitions) -> DefinitionSet
|
|
46
90
|
end
|
|
47
91
|
end
|
|
48
92
|
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module VectorStore
|
|
3
|
+
class AsyncClient
|
|
4
|
+
# pool is an optional internal execution-pool injection; ordinary callers omit it.
|
|
5
|
+
def initialize: (backend: Base, ?pool: untyped) -> void
|
|
6
|
+
def add_async: (id: String, embedding: Array[Float], ?metadata: Hash[untyped, untyped], ?cancellation_token: Concurrency::CancellationToken?, ?timeout: Numeric?) -> TaskResult[untyped]
|
|
7
|
+
def search_async: (query_embedding: Array[Float], ?k: Integer, ?cancellation_token: Concurrency::CancellationToken?, ?timeout: Numeric?) -> TaskResult[Array[Hash[Symbol, untyped]]]
|
|
8
|
+
def remove_async: (id: String, ?cancellation_token: Concurrency::CancellationToken?, ?timeout: Numeric?) -> TaskResult[untyped]
|
|
9
|
+
def clear_async: (?cancellation_token: Concurrency::CancellationToken?, ?timeout: Numeric?) -> TaskResult[untyped]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module VectorStore
|
|
3
|
+
class InvalidResultError < Phronomy::Error
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
class Base
|
|
7
|
+
def add: (id: String, embedding: Array[Numeric], ?metadata: Hash[untyped, untyped], ?cancellation_token: _CancellationSignal?) -> self
|
|
8
|
+
def search: (query_embedding: Array[Numeric], ?k: Integer | String, ?cancellation_token: _CancellationSignal?) -> Array[Hash[Symbol, untyped]]
|
|
9
|
+
def remove: (id: String) -> self
|
|
10
|
+
def clear: () -> self
|
|
11
|
+
def size: () -> Integer
|
|
12
|
+
|
|
13
|
+
# Protected extension SPI at runtime; RBS has no protected visibility.
|
|
14
|
+
private
|
|
15
|
+
def embedding_dimension: () -> Integer?
|
|
16
|
+
def perform_add: (id: String, embedding: Array[Float], metadata: Hash[untyped, untyped], cancellation_token: _CancellationSignal?) -> untyped
|
|
17
|
+
def perform_search: (query_embedding: Array[Float], k: Integer, cancellation_token: _CancellationSignal?) -> Array[Hash[Symbol, untyped]]
|
|
18
|
+
def perform_remove: (id: String) -> untyped
|
|
19
|
+
def perform_clear: () -> untyped
|
|
20
|
+
def perform_size: () -> Integer
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
# Private connection selected by composition, not a public application API.
|
|
3
|
+
class WorkflowExecutionEnvironment
|
|
4
|
+
def self.install_provider: (^() -> WorkflowExecutionEnvironment provider) -> untyped
|
|
5
|
+
def self.current: () -> WorkflowExecutionEnvironment
|
|
6
|
+
def registry: () -> untyped
|
|
7
|
+
def existing_registry: () -> untyped
|
|
8
|
+
def executing?: () -> bool
|
|
9
|
+
def submit: [V] (**untyped options) { () -> V } -> TaskResult[V]
|
|
10
|
+
def compile_transitions: (**untyped definition) -> untyped
|
|
11
|
+
def build_session: (**untyped options) -> untyped
|
|
12
|
+
def register_session: (untyped session, completion: TaskResult[untyped]) -> untyped
|
|
13
|
+
def subscribe_cancellation: (Concurrency::CancellationToken token) { () -> void } -> untyped
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
interface _WorkflowStateRepository
|
|
3
|
+
def load: (String workflow_instance_id) -> Hash[untyped, untyped]?
|
|
4
|
+
def save: (String workflow_instance_id, expected_revision: Integer?, snapshot: Hash[untyped, untyped]) -> Integer
|
|
5
|
+
def delete: (String workflow_instance_id, expected_revision: Integer) -> untyped
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
end
|
data/sig/phronomy/workflow.rbs
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
module Phronomy
|
|
2
|
+
class WorkflowTaskResumeError < Error
|
|
3
|
+
def initialize: (?String message, ?code: String?) -> void
|
|
4
|
+
end
|
|
2
5
|
module WorkflowContext
|
|
3
6
|
def phase: () -> Symbol
|
|
4
7
|
def halted?: () -> bool
|
|
@@ -8,7 +11,7 @@ module Phronomy
|
|
|
8
11
|
end
|
|
9
12
|
|
|
10
13
|
class Workflow
|
|
11
|
-
def self.define: (Class context_class, ?persistence:
|
|
14
|
+
def self.define: (Class context_class, ?persistence: _WorkflowStateRepository?) { () -> void } -> Workflow
|
|
12
15
|
|
|
13
16
|
def invoke: (untyped input, ?config: Hash[untyped, untyped], ?invocation_context: untyped) -> untyped
|
|
14
17
|
def invoke_async: (untyped input, ?config: Hash[untyped, untyped], ?invocation_context: untyped) -> TaskResult[untyped]
|
|
@@ -20,6 +23,7 @@ module Phronomy
|
|
|
20
23
|
class Builder
|
|
21
24
|
def initial: (Symbol state_name) -> untyped
|
|
22
25
|
def state: (Symbol name, ?action: untyped) -> untyped
|
|
26
|
+
def task_state: (Symbol name, start: ^(untyped) -> TaskResult[untyped], apply: ^(untyped, untyped) -> untyped) -> void
|
|
23
27
|
def entry: (Symbol name, untyped callable) -> untyped
|
|
24
28
|
def exit: (Symbol name, untyped callable) -> untyped
|
|
25
29
|
def wait_state: (Symbol name) -> untyped
|
data/sig/phronomy.rbs
CHANGED
|
@@ -2,61 +2,16 @@ module Phronomy
|
|
|
2
2
|
VERSION: String
|
|
3
3
|
|
|
4
4
|
class Error < StandardError
|
|
5
|
+
attr_reader code: String?
|
|
6
|
+
def initialize: (?untyped message, ?code: String?) -> void
|
|
7
|
+
def self.diagnostic: (Exception) -> Hash[String, untyped]
|
|
8
|
+
def self.from_diagnostic: (Hash[untyped, untyped], ?remaining: Integer) -> Error
|
|
5
9
|
end
|
|
6
10
|
|
|
7
11
|
class ParseError < Error
|
|
8
12
|
end
|
|
9
13
|
|
|
10
|
-
class RecursionLimitError < Error
|
|
11
|
-
end
|
|
12
|
-
|
|
13
14
|
class ToolError < Error
|
|
14
15
|
end
|
|
15
16
|
|
|
16
|
-
class TimeoutError < Error
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
class ConfigurationError < Error
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
class HandoffError < Error
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
class TransportError < Error
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
class RateLimitError < TransportError
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
class AuthenticationError < TransportError
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
class ContextLengthError < Error
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
class CancellationError < Error
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
class EventLoopReentrancyError < Error
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
class AgentAlreadyExistsError < Error
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
class AgentPurgedError < Error
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
class PoolShutdownError < Error
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
class BackpressureError < Error
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
class Configuration
|
|
56
|
-
attr_accessor llm_adapter: LLMAdapter::Base
|
|
57
|
-
attr_accessor before_llm_input: Agent::_BeforeLLMInputHook?
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def self.configuration: () -> Configuration
|
|
61
|
-
def self.configure: () { (Configuration) -> void } -> void
|
|
62
17
|
end
|