phronomy 0.27.0 → 0.28.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 +9 -3
- 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/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/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/features.md +8 -3
- data/docs/getting-started.md +9 -6
- 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/persistence-backends.md +38 -21
- data/docs/runtime-and-concurrency.md +26 -1
- 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/{lifecycle_contract/agent_purged_error.rb → agent_purged_error.rb} +1 -1
- data/lib/phronomy/{recovery → agent/api}/execution_rehydration_required_error.rb +1 -1
- data/lib/phronomy/agent/async_event_api.rb +37 -32
- data/lib/phronomy/agent/base.rb +74 -72
- data/lib/phronomy/agent/before_llm_input.rb +64 -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 +44 -23
- data/lib/phronomy/agent/execution/execution_cancellation.rb +8 -4
- data/lib/phronomy/agent/execution/execution_coordinator.rb +214 -395
- data/lib/phronomy/agent/execution/execution_metadata.rb +1 -0
- data/lib/phronomy/agent/execution/execution_outcome_committer.rb +70 -126
- 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 +18 -116
- 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 +7 -7
- 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 +182 -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/ownership_registry.rb +18 -23
- 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 +10 -9
- data/lib/phronomy/agent/recovery/recovery_coordinator/installation.rb +27 -27
- data/lib/phronomy/agent/recovery/recovery_coordinator/resolution.rb +19 -21
- data/lib/phronomy/agent/recovery/recovery_coordinator.rb +23 -16
- data/lib/phronomy/agent/recovery/recovery_rules.rb +119 -0
- data/lib/phronomy/agent/recovery/recovery_support.rb +8 -11
- 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} +1 -1
- 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/configuration/runtime_settings.rb +49 -0
- 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 +202 -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/backends/ruby_llm_embeddings.rb +48 -0
- data/lib/phronomy/embeddings/base.rb +43 -0
- data/lib/phronomy/embeddings/invalid_result_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/execution/execution_receiver.rb +78 -0
- data/lib/phronomy/execution/execution_scope_state.rb +35 -0
- 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 +3 -3
- data/lib/phronomy/execution/wait_policy.rb +24 -0
- data/lib/phronomy/filter/{contract/filter_block_error.rb → filter_block_error.rb} +1 -1
- 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/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 +58 -42
- 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_coordinator.rb +83 -74
- 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/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 +549 -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 +1 -1
- data/lib/phronomy/tracing/observation.rb +37 -0
- 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 +7 -7
- 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 +27 -0
- data/lib/phronomy/workflow/execution/workflow_execution_registry.rb +3 -5
- data/lib/phronomy/workflow/execution/workflow_runner.rb +58 -79
- data/lib/phronomy/workflow/execution/workflow_settings.rb +28 -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 +38 -0
- data/lib/phronomy/workflow/runtime_binding/workflow_phase_machine_builder.rb +156 -0
- data/lib/phronomy/workflow/{execution → runtime_binding}/workflow_terminal_policy.rb +4 -4
- data/lib/phronomy.rb +57 -16
- data/scripts/api_snapshot.rb +35 -15
- 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/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.rbs +14 -138
- 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 +17 -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 +0 -21
- data/sig/phronomy/handoff.rbs +10 -4
- 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.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} +2 -16
- 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 +14 -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 +1 -1
- data/sig/phronomy.rbs +0 -49
- metadata +318 -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}/execution_cancellation_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/execution_timeout_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
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
interface _ExecutionSubmitter
|
|
3
|
+
def submit: [V] (?cancellation_token: Concurrency::CancellationToken?, ?on_full: Symbol) { () -> V } -> TaskResult[V]
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
interface _ExecutionPool
|
|
7
|
+
def submit: [V] (?timeout: Numeric?, ?cancellation_token: Concurrency::CancellationToken?, ?on_full: Symbol) { () -> V } -> TaskResult[V]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
interface _ExecutionRuntime
|
|
11
|
+
def offload: () -> _ExecutionPool
|
|
12
|
+
def pool: (Symbol name, size: Integer, queue_size: Integer) -> _ExecutionPool
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
interface _ExecutionBackend
|
|
16
|
+
def submit: [V] (?pool: _ExecutionPool?, ?runtime: _ExecutionRuntime?, ?pool_name: Symbol?, ?size: Integer, ?queue_size: Integer, ?timeout: Numeric?, ?cancellation_token: Concurrency::CancellationToken?, ?on_full: Symbol) { () -> V } -> TaskResult[V]
|
|
17
|
+
def after: (Numeric seconds) { () -> void } -> ^() -> untyped
|
|
18
|
+
end
|
|
19
|
+
class Execution
|
|
20
|
+
def self.backend_provider=: (^() -> _ExecutionBackend provider) -> ^() -> _ExecutionBackend
|
|
21
|
+
def self.submit: [V] (?pool: _ExecutionPool?, ?runtime: _ExecutionRuntime?, ?pool_name: Symbol?, ?size: Integer, ?queue_size: Integer, ?timeout: Numeric?, ?cancellation_token: Concurrency::CancellationToken?, ?on_full: Symbol) { () -> V } -> TaskResult[V]
|
|
22
|
+
def self.after: (Numeric seconds) { () -> void } -> ^() -> untyped
|
|
23
|
+
attr_reader invocation_context: InvocationContext
|
|
24
|
+
|
|
25
|
+
def self.run_async: [I, V] (Array[I] inputs, ?timeout: Numeric?, ?cancellation_token: Concurrency::CancellationToken?, ?invocation_context: InvocationContext?, ?max_concurrency: Integer?) { (I, Execution) -> TaskResult[V] } -> TaskResult[Array[TaskResult::Outcome[V]]]
|
|
26
|
+
def self.run: [I, V] (Array[I] inputs, ?timeout: Numeric?, ?cancellation_token: Concurrency::CancellationToken?, ?invocation_context: InvocationContext?, ?max_concurrency: Integer?) { (I, Execution) -> TaskResult[V] } -> Array[TaskResult::Outcome[V]]
|
|
27
|
+
def start_child: [V] (?invocation_context: InvocationContext?, ?cancellation_token: Concurrency::CancellationToken?, ?parent_task_id: String?) { (InvocationContext, Concurrency::CancellationToken) -> TaskResult[V] } -> TaskResult[V]
|
|
28
|
+
def observe: [V] (TaskResult[V] source_result) -> TaskResult[V]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class ExecutionTimeoutError < TimeoutError
|
|
32
|
+
attr_reader outcomes: Array[TaskResult::Outcome[untyped]]
|
|
33
|
+
def initialize: (?String message, outcomes: Array[TaskResult::Outcome[untyped]]) -> void
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class ExecutionCancellationError < CancellationError
|
|
37
|
+
attr_reader outcomes: Array[TaskResult::Outcome[untyped]]
|
|
38
|
+
def initialize: (?String message, outcomes: Array[TaskResult::Outcome[untyped]]) -> void
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
interface _ExecutionReceiver
|
|
3
|
+
def idle?: () -> bool
|
|
4
|
+
def deliver: (untyped message) -> untyped
|
|
5
|
+
def shutdown: (error: Exception?) -> untyped
|
|
6
|
+
def session_retired: (String session_id, reason: Symbol) -> untyped
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
interface _ExecutionChannel
|
|
10
|
+
def bound_to?: (untyped owner) -> bool
|
|
11
|
+
def current?: () -> bool
|
|
12
|
+
def synchronize: [V] () { () -> V } -> V
|
|
13
|
+
def admit: [V] (ExecutionReceiver receiver) { () -> V } -> V
|
|
14
|
+
def post: (ExecutionReceiver receiver, untyped message, admission: bool, completion: TaskResult[untyped]?) -> bool
|
|
15
|
+
def route: (ExecutionReceiver receiver, type: Symbol, payload: untyped) { () -> String? } -> bool
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Internal serial-owner contract; composition supplies the transport.
|
|
19
|
+
class ExecutionReceiver
|
|
20
|
+
def self.install_binding: (^() -> untyped provider) -> untyped
|
|
21
|
+
def self.binding: () -> untyped
|
|
22
|
+
def self.for: (untyped owner) -> instance
|
|
23
|
+
def self.existing_for: (untyped owner) -> instance?
|
|
24
|
+
def initialize: (channel: _ExecutionChannel) -> void
|
|
25
|
+
def __bound_to?: (untyped owner) -> bool
|
|
26
|
+
def idle?: () -> bool
|
|
27
|
+
def deliver: (untyped message) -> untyped
|
|
28
|
+
def shutdown: (error: Exception?) -> untyped
|
|
29
|
+
def session_retired: (String fsm_session_id, reason: Symbol) -> untyped
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def synchronize: [V] () { () -> V } -> V
|
|
34
|
+
def admit: [V] () { () -> V } -> V
|
|
35
|
+
def post_message: (untyped message, ?admission: bool, ?completion: TaskResult[untyped]?) -> bool
|
|
36
|
+
def route_event: (type: Symbol, ?payload: untyped) { () -> String? } -> bool
|
|
37
|
+
def assert_event_loop_thread!: () -> void
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
class ExecutionScopeState
|
|
3
|
+
def __while_open: [V] () { () -> V } -> V?
|
|
4
|
+
def __open?: () -> bool
|
|
5
|
+
def __cancellation_token: () -> Concurrency::CancellationToken
|
|
6
|
+
def __cancellation_error: () -> Exception
|
|
7
|
+
def __set_cancellation_error: (Exception error) -> Exception
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
class InvocationContext
|
|
3
|
+
@execution_scope: _ExecutionScope?
|
|
4
|
+
def __bind_execution: (_ExecutionScope? scope) -> self
|
|
5
|
+
def __execution_scope: () -> _ExecutionScope?
|
|
6
|
+
|
|
7
|
+
attr_reader user_id: String?
|
|
8
|
+
attr_reader cancellation_token: Concurrency::CancellationToken?
|
|
9
|
+
attr_reader deadline: Concurrency::Deadline?
|
|
10
|
+
attr_reader token_budget: Integer?
|
|
11
|
+
attr_reader approval_policy: untyped
|
|
12
|
+
attr_reader redaction_policy: untyped
|
|
13
|
+
attr_reader task_id: String?
|
|
14
|
+
attr_reader parent_task_id: String?
|
|
15
|
+
|
|
16
|
+
def initialize: (?user_id: String?, ?cancellation_token: Concurrency::CancellationToken?, ?deadline: Concurrency::Deadline?, ?token_budget: Integer?, ?approval_policy: untyped, ?redaction_policy: untyped, ?task_id: String?, ?parent_task_id: String?) -> void
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
class InvocationControls
|
|
3
|
+
@scope: _ExecutionScope?
|
|
4
|
+
attr_reader token: Concurrency::CancellationToken?
|
|
5
|
+
def self.attach: [V] (TaskResult[V] result, invocation_context: InvocationContext?, cancellation_token: Concurrency::CancellationToken?) -> instance
|
|
6
|
+
def initialize: (invocation_context: InvocationContext?, cancellation_token: Concurrency::CancellationToken?) -> void
|
|
7
|
+
def check_start!: () -> nil
|
|
8
|
+
def bind: [V] (TaskResult[V] result) -> TaskResult[V]
|
|
9
|
+
def track: [V] (TaskResult[V] result) -> TaskResult[V]
|
|
10
|
+
def close: () -> untyped
|
|
11
|
+
def self.effective_timeout_token: (InvocationContext context) -> Concurrency::CancellationToken?
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
class TaskResult[A]
|
|
3
|
+
@execution_scope: _ExecutionScope?
|
|
4
|
+
def __bind_execution: (_ExecutionScope? scope) -> self
|
|
5
|
+
def __execution_scope: () -> _ExecutionScope?
|
|
6
|
+
class Outcome[V]
|
|
7
|
+
attr_reader index: Integer
|
|
8
|
+
attr_reader status: (:completed | :failed | :cancelled | :unfinished)
|
|
9
|
+
attr_reader value: V?
|
|
10
|
+
attr_reader error: Exception?
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.completed: [V] (V value, ?name: String?) -> TaskResult[V]
|
|
14
|
+
| (?name: String?) -> TaskResult[nil]
|
|
15
|
+
def self.failed: (Exception error, ?name: String?) -> TaskResult[untyped]
|
|
16
|
+
def self.all_settled: [V] (Array[TaskResult[V]] results) -> TaskResult[Array[Outcome[V]]]
|
|
17
|
+
attr_reader name: String?
|
|
18
|
+
attr_reader parent: TaskResult[untyped]?
|
|
19
|
+
|
|
20
|
+
def status: () -> (:pending | :completed | :failed | :cancelled)
|
|
21
|
+
def done?: () -> bool
|
|
22
|
+
def alive?: () -> bool
|
|
23
|
+
def wait_result: (?timeout: Numeric?) -> A
|
|
24
|
+
def on_complete: () { (A?, Exception?) -> void } -> self
|
|
25
|
+
def map: [B] () { (A) -> B } -> TaskResult[B]
|
|
26
|
+
def flat_map: [B] () { (A) -> TaskResult[B] } -> TaskResult[B]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
data/sig/phronomy/extensions.rbs
CHANGED
|
@@ -20,27 +20,6 @@ module Phronomy
|
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
module VectorStore
|
|
24
|
-
class Base
|
|
25
|
-
def add: (id: String, embedding: Array[Float], ?metadata: Hash[untyped, untyped], ?cancellation_token: Concurrency::CancellationToken?) -> untyped
|
|
26
|
-
def search: (query_embedding: Array[Float], ?k: Integer, ?cancellation_token: Concurrency::CancellationToken?) -> Array[Hash[Symbol, untyped]]
|
|
27
|
-
def remove: (id: String) -> untyped
|
|
28
|
-
def clear: () -> untyped
|
|
29
|
-
def size: () -> Integer
|
|
30
|
-
|
|
31
|
-
def add_async: (id: String, embedding: Array[Float], ?metadata: Hash[untyped, untyped], ?cancellation_token: Concurrency::CancellationToken?, ?timeout: Numeric?) -> TaskResult[untyped]
|
|
32
|
-
def search_async: (query_embedding: Array[Float], ?k: Integer, ?cancellation_token: Concurrency::CancellationToken?, ?timeout: Numeric?) -> TaskResult[Array[Hash[Symbol, untyped]]]
|
|
33
|
-
def remove_async: (id: String, ?cancellation_token: Concurrency::CancellationToken?, ?timeout: Numeric?) -> TaskResult[untyped]
|
|
34
|
-
def clear_async: (?cancellation_token: Concurrency::CancellationToken?, ?timeout: Numeric?) -> TaskResult[untyped]
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
module Embeddings
|
|
38
|
-
class Base
|
|
39
|
-
def embed: (String text, ?Concurrency::CancellationToken? cancellation_token) -> Array[Float]
|
|
40
|
-
def embed_async: (String text, ?Concurrency::CancellationToken? cancellation_token, ?timeout: Numeric?) -> TaskResult[Array[Float]]
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
23
|
module Testing
|
|
45
24
|
module PersistenceContract
|
|
46
25
|
SHARED_EXAMPLES: Array[String]
|
data/sig/phronomy/handoff.rbs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module Phronomy
|
|
2
|
-
module
|
|
2
|
+
module MultiAgent
|
|
3
3
|
class Handoff
|
|
4
4
|
attr_reader source_agent: ::Phronomy::Agent::Base
|
|
5
5
|
attr_reader target_agent: ::Phronomy::Agent::Base
|
|
@@ -10,6 +10,12 @@ module Phronomy
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
class HandoffPolicy
|
|
13
|
+
class Rule < Data
|
|
14
|
+
attr_reader category: Symbol
|
|
15
|
+
attr_reader mode: Symbol
|
|
16
|
+
attr_reader default: Symbol?
|
|
17
|
+
end
|
|
18
|
+
|
|
13
19
|
CATEGORIES: Array[Symbol]
|
|
14
20
|
MODES: Array[Symbol]
|
|
15
21
|
DEFAULTS: Array[Symbol]
|
|
@@ -17,7 +23,7 @@ module Phronomy
|
|
|
17
23
|
def self.define: () { () -> void } -> HandoffPolicy
|
|
18
24
|
def self.default: () -> HandoffPolicy
|
|
19
25
|
|
|
20
|
-
def rule: (Symbol | String) ->
|
|
26
|
+
def rule: (Symbol | String) -> Rule
|
|
21
27
|
def required?: (Symbol | String) -> bool
|
|
22
28
|
def forbidden?: (Symbol | String) -> bool
|
|
23
29
|
def selectable?: (Symbol | String) -> bool
|
|
@@ -32,9 +38,9 @@ module Phronomy
|
|
|
32
38
|
MAX_HANDOFFS: Integer
|
|
33
39
|
|
|
34
40
|
attr_reader main_agent: ::Phronomy::Agent::Base
|
|
35
|
-
attr_reader handoffs: Array[::Phronomy::
|
|
41
|
+
attr_reader handoffs: Array[::Phronomy::MultiAgent::Handoff]
|
|
36
42
|
|
|
37
|
-
def initialize: (main_agent: ::Phronomy::Agent::Base, ?handoffs: Array[::Phronomy::
|
|
43
|
+
def initialize: (main_agent: ::Phronomy::Agent::Base, ?handoffs: Array[::Phronomy::MultiAgent::Handoff], persistence: Store) -> void
|
|
38
44
|
def invoke: (untyped input, ?config: Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
|
|
39
45
|
def result: (String execution_id) -> Hash[Symbol, untyped]
|
|
40
46
|
def cancel: (String execution_id) -> Hash[Symbol, untyped]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module LLMAdapter
|
|
3
|
+
class Base
|
|
4
|
+
def identity: () -> Hash[String, String?]
|
|
5
|
+
def input_budget: (Hash[String, untyped] model_config) -> LlmContextWindow::TokenBudget?
|
|
6
|
+
def complete: (Request request, ?cancellation_token: _CancellationSignal?) -> Response
|
|
7
|
+
def stream: (Request request, ?cancellation_token: _CancellationSignal?) { (StreamChunk chunk) -> void } -> Response
|
|
8
|
+
# Protected extension SPI at runtime; RBS has no protected visibility.
|
|
9
|
+
private
|
|
10
|
+
def perform_complete: (Request request, cancellation_token: _CancellationSignal?) -> Response
|
|
11
|
+
def perform_stream: (Request request, cancellation_token: _CancellationSignal?) { (StreamChunk chunk) -> void } -> Response
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module LLMAdapter
|
|
3
|
+
class TokenUsage
|
|
4
|
+
attr_reader input: Integer?
|
|
5
|
+
attr_reader output: Integer?
|
|
6
|
+
attr_reader cached: Integer?
|
|
7
|
+
attr_reader cache_creation: Integer?
|
|
8
|
+
def initialize: (?input: Integer?, ?output: Integer?, ?cached: Integer?, ?cache_creation: Integer?) -> void
|
|
9
|
+
def self.zero: () -> TokenUsage
|
|
10
|
+
def +: (TokenUsage? other) -> TokenUsage
|
|
11
|
+
def to_h: () -> Hash[Symbol, Integer?]
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module LLMAdapter
|
|
3
|
+
class Request
|
|
4
|
+
attr_reader model_config: Hash[String, untyped]
|
|
5
|
+
attr_reader system: String?
|
|
6
|
+
attr_reader messages: Array[Message]
|
|
7
|
+
attr_reader tools: Array[Hash[String, untyped]]
|
|
8
|
+
attr_reader message: String?
|
|
9
|
+
def initialize: (?model_config: Hash[String | Symbol, untyped], ?system: String?, ?messages: Array[Message], ?tools: Array[Hash[String, untyped]], ?message: String?) -> void
|
|
10
|
+
end
|
|
11
|
+
class Message
|
|
12
|
+
attr_reader role: Symbol
|
|
13
|
+
attr_reader content: json_value
|
|
14
|
+
attr_reader tool_calls: Array[Tool::CallRequest]
|
|
15
|
+
attr_reader tool_call_id: String?
|
|
16
|
+
attr_reader metadata: Hash[String, json_value]
|
|
17
|
+
def initialize: (role: String | Symbol, ?content: json_value, ?tool_calls: Array[Tool::CallRequest], ?tool_call_id: String?, ?metadata: Hash[String, json_value]) -> void
|
|
18
|
+
def tool_call?: () -> bool
|
|
19
|
+
def content_present?: () -> bool
|
|
20
|
+
def to_h: () -> Hash[String, untyped]
|
|
21
|
+
end
|
|
22
|
+
class Response < Message
|
|
23
|
+
attr_reader usage: TokenUsage
|
|
24
|
+
def initialize: (?content: json_value, ?tool_calls: Array[Tool::CallRequest], ?usage: TokenUsage, ?metadata: Hash[String, json_value], ?role: String | Symbol) -> void
|
|
25
|
+
def self.from_h: (Hash[String | Symbol, untyped] value) -> Response
|
|
26
|
+
def to_h: () -> Hash[String, untyped]
|
|
27
|
+
end
|
|
28
|
+
class StreamChunk
|
|
29
|
+
attr_reader content: String?
|
|
30
|
+
def initialize: (content: String?) -> void
|
|
31
|
+
end
|
|
32
|
+
class InvalidResultError < Error
|
|
33
|
+
end
|
|
34
|
+
class TransportError < Error
|
|
35
|
+
end
|
|
36
|
+
class RateLimitError < TransportError
|
|
37
|
+
end
|
|
38
|
+
class AuthenticationError < TransportError
|
|
39
|
+
end
|
|
40
|
+
class ContextLengthError < Error
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module LlmContextWindow
|
|
3
|
+
class TokenBudget
|
|
4
|
+
attr_reader max_input_tokens: Integer
|
|
5
|
+
def initialize: (max_input_tokens: Integer) -> void
|
|
6
|
+
def effective_input_limit: () -> Integer
|
|
7
|
+
def available: (?used: Integer) -> Integer
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
interface _HandoffStateRepository
|
|
3
|
+
def load: (String main_agent_id) -> untyped
|
|
4
|
+
def load_locked: (String main_agent_id) -> untyped
|
|
5
|
+
def save: (String main_agent_id, expected_revision: Integer?, state: untyped) -> untyped
|
|
6
|
+
def delete: (String main_agent_id, expected_revision: Integer) -> untyped
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
interface _TeamRepository
|
|
10
|
+
def create: (untyped root) -> untyped
|
|
11
|
+
def load: (String team_id) -> untyped
|
|
12
|
+
def save: (String team_id, expected_revision: Integer, root: untyped) -> untyped
|
|
13
|
+
def delete: (String team_id) -> untyped
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
interface _TeamExecutionRepository
|
|
17
|
+
def create_active: (untyped execution) -> untyped
|
|
18
|
+
def load: (String team_execution_id) -> untyped
|
|
19
|
+
def save: (String team_execution_id, expected_revision: Integer, execution: untyped) -> untyped
|
|
20
|
+
def list_active: (String team_id) -> Array[untyped]
|
|
21
|
+
def list: (String team_id, ?after: String?, ?limit: Integer) -> Array[untyped]
|
|
22
|
+
def delete: (String team_execution_id) -> untyped
|
|
23
|
+
def delete_for_team: (String team_id) -> untyped
|
|
24
|
+
def assert_idle!: (String team_id) -> untyped
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
module MultiAgent
|
|
28
|
+
interface _Records
|
|
29
|
+
def contents: () -> _ContentRepository
|
|
30
|
+
def handoff_states: () -> _HandoffStateRepository
|
|
31
|
+
def teams: () -> _TeamRepository
|
|
32
|
+
def team_executions: () -> _TeamExecutionRepository
|
|
33
|
+
def guard_team!: (String team_id) -> untyped
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class Store
|
|
37
|
+
attr_reader coordinator: ::Phronomy::Persistence
|
|
38
|
+
attr_reader contents: _ContentRepository
|
|
39
|
+
attr_reader handoff_states: _HandoffStateRepository
|
|
40
|
+
attr_reader teams: _TeamRepository
|
|
41
|
+
attr_reader team_executions: _TeamExecutionRepository
|
|
42
|
+
attr_reader agent_store: Agent::Store
|
|
43
|
+
def initialize: (coordinator: ::Phronomy::Persistence, records: ::Phronomy::Persistence::_Participant[_Records], agent_store: Agent::Store) -> void
|
|
44
|
+
def transaction: [R] () { (_Records, ::Phronomy::Persistence::Transaction) -> R } -> R
|
|
45
|
+
def participate: [R] (::Phronomy::Persistence::Transaction scope) { (_Records) -> R } -> R
|
|
46
|
+
def handoff_leaf: (String execution_id, main_agent_id: String, ?scope: ::Phronomy::Persistence::Transaction?) -> Agent::ExecutionObservation
|
|
47
|
+
def handoff_result: (String execution_id, main_agent_id: String) -> Agent::execution_result
|
|
48
|
+
def forget_handoff: (String main_agent_id) -> bool
|
|
49
|
+
def forget_subagents: (agent_id: String, execution_id: String) -> bool
|
|
50
|
+
def result: (String execution_id) -> Hash[Symbol, untyped]
|
|
51
|
+
def runs: (String owner_id, ?after: String?, ?limit: Integer) -> Array[untyped]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -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
|