phronomy 0.26.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 +92 -0
- data/CONTRIBUTING.md +8 -8
- data/README.md +13 -3
- data/VERIFY.sh +27 -27
- data/benchmark/bench_agent_invoke.rb +26 -47
- data/benchmark/bench_context_assembler.rb +17 -15
- data/benchmark/bench_regression.rb +1 -1
- data/benchmark/bench_tool_schema.rb +1 -1
- data/docs/architecture/agent-chat-and-state-ownership.md +153 -0
- data/docs/architecture/agent-configuration-and-tool-binding.md +139 -0
- data/docs/architecture/agent-context.md +4 -2
- data/docs/architecture/agent-transition-ownership.md +13 -0
- data/docs/architecture/backend-groups.md +152 -0
- data/docs/architecture/before-llm-input.md +9 -3
- data/docs/architecture/context-management.md +31 -1
- data/docs/architecture/context-preparation-steps.md +90 -0
- data/docs/architecture/entry-action-and-team-wording.md +72 -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 +86 -0
- data/docs/architecture/generator-verifier-ownership.md +111 -0
- data/docs/architecture/multi-agent-handoff.md +11 -4
- data/docs/architecture/persistence-refactoring-plan.md +50 -0
- data/docs/architecture/persistence.md +45 -4
- 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 +343 -0
- data/docs/architecture/remaining-refactoring-plan.md +390 -0
- data/docs/architecture/rubyllm-2-token-ownership.md +82 -0
- data/docs/architecture/storage-execution-boundaries.md +54 -0
- data/docs/architecture/tool-schema-recording-gap.md +56 -0
- data/docs/architecture/tracing.md +2 -2
- data/docs/architecture/workflow-terminal-ownership-design.md +104 -0
- data/docs/architecture.md +222 -0
- data/docs/decisions/014-unified-persistence-durable-state.md +11 -0
- data/docs/decisions/015-tool-public-facade-and-rbs-boundary.md +3 -3
- data/docs/decisions/024-event-loop-single-writer-agent-runtime.md +5 -1
- data/docs/decisions/025-process-local-agent-ownership-and-runtime-admission.md +13 -3
- data/docs/decisions/026-workflow-runtime-admission-and-durable-terminal-barrier.md +5 -1
- data/docs/decisions/027-llm-adapter-provider-boundary.md +2 -0
- data/docs/decisions/030-agent-handoff-domain-and-durable-responsibility.md +7 -0
- data/docs/decisions/031-durable-multi-agent-coordination.md +7 -0
- data/docs/decisions/032-storage-backend-composition.md +85 -0
- data/docs/decisions/033-domain-persistence-ownership.md +79 -0
- data/docs/decisions/034-handoff-runner-coordination-ownership.md +78 -0
- data/docs/decisions/035-tool-executor-capability-ownership.md +68 -0
- data/docs/decisions/036-context-contract-ownership.md +86 -0
- data/docs/decisions/037-common-definition-ownership.md +62 -0
- data/docs/decisions/038-responsibility-based-source-layout.md +145 -0
- data/docs/decisions/039-runtime-configuration-lifecycle-ownership.md +82 -0
- data/docs/decisions/040-configuration-default-composition.md +105 -0
- data/docs/decisions/041-feature-owned-identity-registries.md +100 -0
- data/docs/decisions/042-feature-owned-execution-state.md +106 -0
- data/docs/decisions/043-storage-execution-constraint-notifications.md +75 -0
- data/docs/decisions/044-agent-default-and-one-shot-composition.md +106 -0
- data/docs/decisions/045-worker-input-restriction-ownership.md +104 -0
- data/docs/decisions/046-agent-responsibility-layout-and-shared-records.md +110 -0
- data/docs/decisions/047-recovered-execution-continuation-contract.md +116 -0
- data/docs/decisions/048-dispatch-preparation-worker-ownership.md +120 -0
- data/docs/decisions/049-initial-preparation-worker-ownership.md +111 -0
- data/docs/decisions/050-approval-resume-snapshot-and-commit-ownership.md +98 -0
- data/docs/decisions/051-execution-outcome-worker-ownership.md +153 -0
- data/docs/decisions/052-tool-invocation-restoration-ownership.md +92 -0
- data/docs/decisions/053-shared-state-coordination-ownership.md +71 -0
- data/docs/decisions/054-workflow-terminal-save-single-owner.md +76 -0
- data/docs/decisions/055-terminal-observer-failure-settlement.md +60 -0
- data/docs/decisions/056-workflow-terminal-policy-ownership.md +87 -0
- data/docs/decisions/057-storage-transaction-boundaries.md +73 -0
- data/docs/decisions/058-neutral-storage-primitives.md +83 -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 +52 -6
- data/docs/design/durable-semantic-coordination/IMPLEMENTATION_DESIGN_V2.md +6 -0
- data/docs/design/durable-semantic-coordination/IMPLEMENTATION_REPORT.md +6 -0
- data/docs/execution-boundaries-preview.md +45 -0
- data/docs/features.md +16 -5
- data/docs/getting-started.md +11 -8
- data/docs/migrations/0.15.md +5 -0
- data/docs/migrations/0.22.md +2 -2
- data/docs/migrations/durable-semantic-coordination-v2.md +8 -0
- data/docs/migrations/handoff-runner-multi-agent.md +37 -0
- data/docs/migrations/neutral-storage-spi.md +43 -0
- data/docs/migrations/parallel-tool-chat-removal.md +49 -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/shared-state-multi-agent.md +44 -0
- data/docs/migrations/storage-async-client.md +103 -0
- data/docs/migrations/storage-backend-composition.md +117 -0
- data/docs/migrations/storage-transaction-boundaries.md +74 -0
- data/docs/migrations/vector-async-clients.md +110 -0
- data/docs/persistence-backends.md +190 -215
- data/docs/runtime-and-concurrency.md +142 -32
- data/lib/phronomy/agent/admission.rb +78 -0
- data/lib/phronomy/{agent_already_exists_error.rb → agent/agent_already_exists_error.rb} +2 -0
- data/lib/phronomy/{agent_busy_error.rb → agent/agent_busy_error.rb} +2 -0
- data/lib/phronomy/{agent_purged_error.rb → agent/agent_purged_error.rb} +2 -0
- data/lib/phronomy/agent/api/agent.rb +17 -0
- data/lib/phronomy/{execution_rehydration_required_error.rb → agent/api/execution_rehydration_required_error.rb} +2 -0
- data/lib/phronomy/agent/async_event_api.rb +38 -33
- data/lib/phronomy/agent/base.rb +106 -294
- data/lib/phronomy/agent/before_llm_input.rb +64 -0
- data/lib/phronomy/{agent.rb → agent/composition/run_once.rb} +4 -13
- data/lib/phronomy/agent/context_candidate_resolver.rb +2 -2
- data/lib/phronomy/agent/context_importer.rb +2 -2
- data/lib/phronomy/agent/{context_assembler.rb → context_preparation.rb} +157 -288
- data/lib/phronomy/agent/control_request.rb +21 -0
- data/lib/phronomy/agent/{agent_execution.rb → execution/agent_execution.rb} +8 -4
- data/lib/phronomy/agent/{agent_invocation.rb → execution/agent_invocation.rb} +32 -63
- data/lib/phronomy/agent/execution/approval_resume_commit.rb +108 -0
- data/lib/phronomy/agent/execution/dispatch_preparation.rb +195 -0
- data/lib/phronomy/agent/{exact_execution.rb → execution/exact_execution.rb} +43 -23
- data/lib/phronomy/agent/{execution_cancellation.rb → execution/execution_cancellation.rb} +8 -5
- data/lib/phronomy/agent/execution/execution_coordinator.rb +1744 -0
- data/lib/phronomy/agent/execution/execution_failure.rb +30 -0
- data/lib/phronomy/agent/execution/execution_metadata.rb +54 -0
- data/lib/phronomy/agent/execution/execution_outcome_committer.rb +288 -0
- data/lib/phronomy/agent/execution/execution_registry.rb +463 -0
- data/lib/phronomy/agent/execution/execution_session_runner.rb +113 -0
- data/lib/phronomy/agent/execution/initial_preparation.rb +323 -0
- data/lib/phronomy/agent/execution/invocation_actions.rb +368 -0
- data/lib/phronomy/agent/execution/invocation_transitions.rb +124 -0
- data/lib/phronomy/agent/execution/runtime_record_encoder.rb +210 -0
- 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_context.rb → handoff/transfer_context.rb} +6 -6
- data/lib/phronomy/agent/{handoff_projection.rb → handoff/transfer_projection.rb} +14 -33
- data/lib/phronomy/agent/handoff_error.rb +7 -0
- data/lib/phronomy/agent/{journal_projection.rb → journal/journal_projection.rb} +4 -0
- data/lib/phronomy/agent/{journal_record.rb → journal/journal_record.rb} +3 -3
- data/lib/phronomy/agent/{llm_call_record.rb → journal/llm_call_record.rb} +2 -2
- data/lib/phronomy/agent/knowledge_item.rb +13 -0
- data/lib/phronomy/agent/{agent_root.rb → lifecycle/agent_root.rb} +6 -2
- data/lib/phronomy/agent/lifecycle/default_persistence.rb +29 -0
- data/lib/phronomy/{engine/runtime/agent_ownership_registry.rb → agent/lifecycle/ownership_registry.rb} +24 -15
- data/lib/phronomy/agent/persistence/agent_repository.rb +69 -0
- data/lib/phronomy/agent/persistence/cancellation_repository.rb +51 -0
- data/lib/phronomy/agent/persistence/codec.rb +338 -0
- data/lib/phronomy/agent/persistence/execution_repository.rb +124 -0
- data/lib/phronomy/agent/persistence/journal_repository.rb +63 -0
- 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 +29 -0
- data/lib/phronomy/agent/persistence/watermark.rb +29 -0
- data/lib/phronomy/agent/recovery/invocation_restorer.rb +124 -0
- data/lib/phronomy/agent/{recovery_coordinator → recovery/recovery_coordinator}/continuation.rb +28 -51
- data/lib/phronomy/agent/{recovery_coordinator → recovery/recovery_coordinator}/installation.rb +50 -55
- data/lib/phronomy/agent/{recovery_coordinator → recovery/recovery_coordinator}/resolution.rb +38 -43
- data/lib/phronomy/agent/{recovery_coordinator.rb → recovery/recovery_coordinator.rb} +26 -23
- data/lib/phronomy/agent/recovery/recovery_rules.rb +119 -0
- data/lib/phronomy/agent/recovery/recovery_support.rb +224 -0
- 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/{ruby_llm_materializer.rb → runtime_input.rb} +19 -39
- data/lib/phronomy/agent/saved_context_reader.rb +55 -0
- data/lib/phronomy/agent/settings.rb +47 -0
- data/lib/phronomy/agent/state_writer.rb +166 -0
- data/lib/phronomy/agent/store.rb +253 -0
- data/lib/phronomy/{stream_callback_error.rb → agent/stream_callback_error.rb} +2 -0
- data/lib/phronomy/agent/{approval_evaluation_request.rb → tool_execution/approval_evaluation_request.rb} +1 -12
- data/lib/phronomy/agent/{tool_approval_request.rb → tool_execution/tool_approval_request.rb} +1 -10
- data/lib/phronomy/agent/tool_execution/tool_binding.rb +30 -0
- data/lib/phronomy/agent/{tool_invocation.rb → tool_execution/tool_invocation.rb} +114 -248
- 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/configuration_error.rb +7 -0
- data/lib/phronomy/common/error.rb +5 -0
- data/lib/phronomy/{agent → common/values}/immutable.rb +9 -1
- data/lib/phronomy/common/values/serializable.rb +32 -0
- data/lib/phronomy/configuration/runtime_settings.rb +49 -0
- data/lib/phronomy/content_store/storage_schema.rb +12 -0
- data/lib/phronomy/content_store/stored_contents.rb +44 -0
- data/lib/phronomy/context/assembly.rb +202 -0
- data/lib/phronomy/{context_budget_exceeded_error.rb → context/budget_exceeded_error.rb} +5 -1
- data/lib/phronomy/context/candidate.rb +51 -0
- data/lib/phronomy/context/constraint.rb +47 -0
- data/lib/phronomy/{agent → context}/context_plan.rb +2 -2
- data/lib/phronomy/{agent → context}/context_plan_validator.rb +3 -3
- data/lib/phronomy/{agent → context}/context_policy.rb +1 -1
- data/lib/phronomy/{agent → context}/context_policy_input.rb +7 -7
- data/lib/phronomy/{agent → 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}/llm_input_build_context.rb +2 -2
- data/lib/phronomy/{agent → context}/llm_input_manifest.rb +21 -21
- data/lib/phronomy/{agent → context}/llm_input_patch.rb +3 -3
- 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 +39 -20
- data/lib/phronomy/engine/concurrency/pool_registry.rb +47 -12
- data/lib/phronomy/{diagnostics.rb → engine/diagnostics.rb} +1 -1
- data/lib/phronomy/engine/event_loop.rb +164 -630
- 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 +9 -0
- data/lib/phronomy/engine/fsm_session.rb +37 -30
- data/lib/phronomy/engine/metrics.rb +28 -0
- data/lib/phronomy/engine/runtime/timer_queue.rb +1 -1
- data/lib/phronomy/engine/runtime.rb +104 -95
- data/lib/phronomy/engine/terminal_decision.rb +7 -0
- data/lib/phronomy/execution/async_operation.rb +41 -0
- data/lib/phronomy/execution/backpressure_error.rb +7 -0
- data/lib/phronomy/{blocking.rb → execution/blocking.rb} +2 -2
- data/lib/phronomy/execution/cancellation_error.rb +7 -0
- data/lib/phronomy/{engine → execution}/concurrency/cancellation_token.rb +5 -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/execution/concurrency/worker_input_restricted.rb +14 -0
- data/lib/phronomy/execution/event_loop_reentrancy_error.rb +8 -0
- data/lib/phronomy/{execution.rb → execution/execution.rb} +57 -30
- data/lib/phronomy/{execution_cancellation_error.rb → execution/execution_cancellation_error.rb} +2 -0
- data/lib/phronomy/execution/execution_receiver.rb +78 -0
- data/lib/phronomy/execution/execution_scope_state.rb +35 -0
- data/lib/phronomy/{execution_timeout_error.rb → execution/execution_timeout_error.rb} +2 -0
- data/lib/phronomy/{invalid_async_entry_action_error.rb → execution/invalid_async_entry_action_error.rb} +2 -0
- data/lib/phronomy/{invalid_async_transition_action_error.rb → execution/invalid_async_transition_action_error.rb} +2 -0
- data/lib/phronomy/{invalid_async_workflow_action_error.rb → execution/invalid_async_workflow_action_error.rb} +2 -0
- data/lib/phronomy/{invocation_context.rb → execution/invocation_context.rb} +0 -15
- data/lib/phronomy/execution/invocation_controls.rb +73 -0
- data/lib/phronomy/execution/pool_shutdown_error.rb +7 -0
- data/lib/phronomy/execution/recursion_limit_error.rb +7 -0
- data/lib/phronomy/execution/runnable.rb +24 -0
- data/lib/phronomy/execution/runtime_shutdown_error.rb +7 -0
- data/lib/phronomy/execution/runtime_shutdown_reentrancy_error.rb +7 -0
- data/lib/phronomy/execution/scheduler_reentrancy_error.rb +9 -0
- data/lib/phronomy/{engine → execution}/task_result.rb +7 -3
- data/lib/phronomy/execution/timeout_error.rb +7 -0
- data/lib/phronomy/execution/wait_policy.rb +24 -0
- data/lib/phronomy/filter/filter_block_error.rb +14 -0
- data/lib/phronomy/generation/generator_verifier/agent_operation.rb +65 -0
- data/lib/phronomy/generation/generator_verifier/agent_result_receiver.rb +89 -0
- data/lib/phronomy/generation/generator_verifier/default_parser.rb +27 -0
- data/lib/phronomy/generation/generator_verifier/pipeline_state.rb +57 -0
- data/lib/phronomy/generation/generator_verifier/workflow_builder.rb +112 -0
- data/lib/phronomy/generation/generator_verifier.rb +118 -0
- data/lib/phronomy/generation/low_confidence_error.rb +14 -0
- data/lib/phronomy/llm_adapter/async/async_client.rb +47 -0
- data/lib/phronomy/llm_adapter/authentication_error.rb +9 -0
- data/lib/phronomy/llm_adapter/backends/ruby_llm.rb +183 -0
- data/lib/phronomy/llm_adapter/base.rb +49 -68
- data/lib/phronomy/llm_adapter/context_length_error.rb +9 -0
- data/lib/phronomy/llm_adapter/invalid_result_error.rb +10 -0
- data/lib/phronomy/llm_adapter/message.rb +62 -0
- data/lib/phronomy/llm_adapter/rate_limit_error.rb +9 -0
- 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/llm_context_window/token_budget.rb +6 -7
- data/lib/phronomy/multi_agent/admission_registry.rb +15 -2
- 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 → multi_agent}/handoff.rb +2 -2
- data/lib/phronomy/{agent → multi_agent}/handoff_capability_factory.rb +21 -2
- data/lib/phronomy/multi_agent/handoff_participant.rb +79 -0
- data/lib/phronomy/{agent → multi_agent}/handoff_policy.rb +1 -1
- data/lib/phronomy/multi_agent/handoff_runner.rb +156 -0
- data/lib/phronomy/{agent → multi_agent}/handoff_state.rb +2 -2
- data/lib/phronomy/multi_agent/orchestrator.rb +61 -75
- data/lib/phronomy/multi_agent/persistence/codec.rb +75 -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 +124 -0
- data/lib/phronomy/multi_agent/persistence/team_repository.rb +69 -0
- 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/{agent → multi_agent}/shared_state.rb +56 -39
- data/lib/phronomy/multi_agent/store.rb +156 -0
- data/lib/phronomy/multi_agent/team_coordinator.rb +87 -75
- data/lib/phronomy/multi_agent/team_execution.rb +1 -1
- data/lib/phronomy/{engine/runtime → multi_agent}/team_ownership_registry.rb +5 -5
- data/lib/phronomy/multi_agent/team_root.rb +1 -1
- 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 +21 -21
- 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 +29 -0
- 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 +11 -0
- data/lib/phronomy/runtime_composition/configuration.rb +146 -0
- data/lib/phronomy/runtime_composition/configuration_defaults.rb +9 -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/global_runtime.rb +19 -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 +107 -0
- data/lib/phronomy/storage/backends/in_memory.rb +157 -0
- data/lib/phronomy/storage/blob_conflict_error.rb +10 -0
- data/lib/phronomy/storage/blobs.rb +31 -0
- data/lib/phronomy/storage/condition.rb +25 -0
- data/lib/phronomy/storage/condition_failed_error.rb +16 -0
- data/lib/phronomy/storage/conflict_error.rb +9 -0
- data/lib/phronomy/{persistence → storage}/durable_record.rb +12 -12
- data/lib/phronomy/storage/entry.rb +33 -0
- data/lib/phronomy/storage/guard_ref.rb +13 -0
- data/lib/phronomy/storage/not_found_error.rb +9 -0
- data/lib/phronomy/storage/record_codec.rb +177 -0
- data/lib/phronomy/storage/records.rb +61 -0
- data/lib/phronomy/storage/resource.rb +126 -0
- data/lib/phronomy/storage/scope.rb +25 -0
- data/lib/phronomy/storage/serialization_error.rb +9 -0
- data/lib/phronomy/storage/streams.rb +44 -0
- data/lib/phronomy/storage/transaction_error.rb +10 -0
- data/lib/phronomy/storage/unique_constraint_error.rb +17 -0
- data/lib/phronomy/storage/unsupported_backend_error.rb +9 -0
- data/lib/phronomy/storage/validation.rb +53 -0
- data/lib/phronomy/storage/view.rb +131 -0
- 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 +1 -1
- data/lib/phronomy/testing/persistence_contract/a_journal_repository.rb +2 -2
- data/lib/phronomy/testing/persistence_contract/a_persistence_backend.rb +54 -48
- data/lib/phronomy/testing/persistence_contract/a_workflow_state_repository.rb +1 -1
- data/lib/phronomy/testing/persistence_contract/an_agent_repository.rb +1 -1
- data/lib/phronomy/testing/persistence_contract/an_execution_repository.rb +5 -5
- data/lib/phronomy/testing/persistence_contract/coordination_repositories.rb +52 -46
- data/lib/phronomy/testing/persistence_contract/neutral_storage_primitives.rb +263 -0
- data/lib/phronomy/testing/persistence_contract/storage_transaction_boundaries.rb +124 -0
- data/lib/phronomy/testing/persistence_contract.rb +4 -0
- 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_definition_set.rb → tool/definition_set.rb} +16 -12
- 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/{agent → tool}/tool_executor.rb +10 -7
- 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.rb → workflow/execution/workflow.rb} +10 -8
- data/lib/phronomy/workflow/execution/workflow_action_rules.rb +67 -0
- data/lib/phronomy/{workflow_context.rb → workflow/execution/workflow_context.rb} +5 -1
- data/lib/phronomy/workflow/execution/workflow_context_ownership_error.rb +7 -0
- data/lib/phronomy/workflow/execution/workflow_execution_environment.rb +27 -0
- data/lib/phronomy/workflow/execution/workflow_execution_registry.rb +186 -0
- data/lib/phronomy/{workflow_runner.rb → workflow/execution/workflow_runner.rb} +145 -115
- data/lib/phronomy/workflow/execution/workflow_settings.rb +28 -0
- data/lib/phronomy/workflow/persistence/codec.rb +153 -0
- data/lib/phronomy/workflow/persistence/state_repository.rb +63 -0
- 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/runtime_binding/workflow_terminal_policy.rb +40 -0
- data/lib/phronomy.rb +97 -98
- data/scripts/api_snapshot.rb +36 -16
- data/scripts/storage_spi_snapshot.rb +36 -0
- 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 -139
- 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 +12 -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 +24 -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 +3 -185
- 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/contracts.rbs +160 -0
- data/sig/phronomy/tool.rbs +58 -5
- 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 +462 -130
- data/lib/phronomy/agent/agent_invocation_session_builder.rb +0 -584
- 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 -507
- data/lib/phronomy/agent/context/instruction/prompt_template.rb +0 -102
- 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_coordinator.rb +0 -3151
- data/lib/phronomy/agent/handoff_execution_coordinator.rb +0 -143
- data/lib/phronomy/agent/handoff_request.rb +0 -45
- data/lib/phronomy/agent/handoff_runner.rb +0 -178
- data/lib/phronomy/agent/phase_machine_builder.rb +0 -152
- data/lib/phronomy/agent/provider_call_outcome.rb +0 -106
- data/lib/phronomy/agent/recovery_support.rb +0 -504
- data/lib/phronomy/agent/selection/candidate.rb +0 -53
- data/lib/phronomy/agent/selection/constraint.rb +0 -49
- data/lib/phronomy/agent/token_budget_resolver.rb +0 -70
- data/lib/phronomy/agent/tool_call_intercepted.rb +0 -29
- data/lib/phronomy/agent/tool_invocation_session_builder.rb +0 -276
- data/lib/phronomy/configuration.rb +0 -59
- data/lib/phronomy/engine/concurrency/cancellation_scope.rb +0 -124
- data/lib/phronomy/engine/concurrency/operation_binding.rb +0 -43
- data/lib/phronomy/generator_verifier.rb +0 -369
- data/lib/phronomy/invalid_context_budget_configuration_error.rb +0 -8
- data/lib/phronomy/llm_adapter/ruby_llm.rb +0 -47
- data/lib/phronomy/metrics.rb +0 -26
- data/lib/phronomy/multi_agent/parallel_tool_chat.rb +0 -116
- data/lib/phronomy/persistence/durable_codec.rb +0 -706
- data/lib/phronomy/persistence/in_memory.rb +0 -690
- data/lib/phronomy/persistence/repository_facades.rb +0 -535
- data/lib/phronomy/persistence.rb +0 -276
- data/lib/phronomy/recovery.rb +0 -186
- data/lib/phronomy/ruby_llm_patches.rb +0 -24
- data/lib/phronomy/runnable.rb +0 -54
- data/lib/phronomy/token_usage.rb +0 -85
- 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_recovery.rb +0 -123
- data/sig/phronomy/llm_adapter.rbs +0 -11
- data/sig/phronomy/runtime.rbs +0 -76
- /data/lib/phronomy/agent/{llm_operation_result.rb → execution/llm_operation_result.rb} +0 -0
- /data/lib/phronomy/{canonical_json.rb → common/canonical_json.rb} +0 -0
- /data/lib/phronomy/{event.rb → engine/event.rb} +0 -0
|
@@ -1,189 +1,7 @@
|
|
|
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
|
-
end
|
|
7
|
-
|
|
8
|
-
# Runtime/domain-facing repository interfaces.
|
|
9
|
-
interface _AgentRepository
|
|
10
|
-
def create: (untyped root) -> untyped
|
|
11
|
-
def load: (String agent_id) -> untyped
|
|
12
|
-
def save: (String agent_id, expected_revision: Integer, root: untyped) -> untyped
|
|
13
|
-
def delete: (String agent_id) -> untyped
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
interface _JournalRepository
|
|
17
|
-
def append: (String agent_id, expected_position: Integer, records: Array[untyped]) -> Array[untyped]
|
|
18
|
-
def read: (String agent_id, ?after: Integer?, ?limit: Integer?) -> Array[untyped]
|
|
19
|
-
def head: (String agent_id) -> Integer
|
|
20
|
-
def delete: (String agent_id) -> untyped
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
interface _ExecutionRepository
|
|
24
|
-
def create_active: (untyped execution) -> untyped
|
|
25
|
-
def load: (String execution_id) -> untyped
|
|
26
|
-
def save: (String execution_id, expected_revision: Integer, execution: untyped) -> untyped
|
|
27
|
-
def list_active: (String agent_id) -> Array[untyped]
|
|
28
|
-
def list: (String agent_id, ?after: String?, ?limit: Integer) -> Array[untyped]
|
|
29
|
-
def delete: (String execution_id) -> untyped
|
|
30
|
-
def delete_for_agent: (String agent_id) -> untyped
|
|
31
|
-
def assert_idle!: (String agent_id) -> untyped
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
interface _WorkflowStateRepository
|
|
35
|
-
def load: (String workflow_instance_id) -> Hash[untyped, untyped]?
|
|
36
|
-
def save: (String workflow_instance_id, expected_revision: Integer?, snapshot: Hash[untyped, untyped]) -> Integer
|
|
37
|
-
def delete: (String workflow_instance_id, expected_revision: Integer) -> untyped
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Backend-side record repository interfaces. DurableRecord is the opaque data
|
|
41
|
-
# carrier. Identity/revision/index metadata is passed separately so backends do
|
|
42
|
-
# not need to interpret DurableRecord#payload.
|
|
43
|
-
interface _BackendAgentRecordRepository
|
|
44
|
-
def create: (agent_id: String, agent_revision: Integer, record: Persistence::DurableRecord) -> Persistence::DurableRecord
|
|
45
|
-
def load: (String agent_id) -> Persistence::DurableRecord
|
|
46
|
-
def save: (String agent_id, expected_revision: Integer, next_revision: Integer, record: Persistence::DurableRecord) -> Persistence::DurableRecord
|
|
47
|
-
def delete: (String agent_id) -> untyped
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
interface _BackendJournalRecordRepository
|
|
51
|
-
def append: (String agent_id, expected_position: Integer, records: Array[Persistence::DurableRecord], record_ids: Array[String]) -> Array[Persistence::DurableRecord]
|
|
52
|
-
def read: (String agent_id, ?after: Integer?, ?limit: Integer?) -> Array[Persistence::DurableRecord]
|
|
53
|
-
def head: (String agent_id) -> Integer
|
|
54
|
-
def delete: (String agent_id) -> untyped
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
interface _BackendExecutionRecordRepository
|
|
58
|
-
def create_active: (execution_id: String, agent_id: String, execution_revision: Integer, record: Persistence::DurableRecord) -> Persistence::DurableRecord
|
|
59
|
-
def load: (String execution_id) -> Persistence::DurableRecord
|
|
60
|
-
def save: (String execution_id, expected_revision: Integer, next_revision: Integer, agent_id: String, active: bool, record: Persistence::DurableRecord) -> Persistence::DurableRecord
|
|
61
|
-
def list_active: (String agent_id) -> Array[Persistence::DurableRecord]
|
|
62
|
-
def list: (String agent_id, ?after: String?, ?limit: Integer) -> Array[Persistence::DurableRecord]
|
|
63
|
-
def delete: (String execution_id) -> untyped
|
|
64
|
-
def delete_for_agent: (String agent_id) -> untyped
|
|
65
|
-
def assert_idle!: (String agent_id) -> untyped
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
interface _BackendWorkflowStateRecordRepository
|
|
69
|
-
def load: (String workflow_instance_id) -> Persistence::DurableRecord?
|
|
70
|
-
def save: (String workflow_instance_id, expected_revision: Integer?, next_revision: Integer, record: Persistence::DurableRecord) -> Persistence::DurableRecord
|
|
71
|
-
def delete: (String workflow_instance_id, expected_revision: Integer) -> untyped
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
interface _HandoffStateRepository
|
|
75
|
-
def load: (String main_agent_id) -> untyped
|
|
76
|
-
def save: (String main_agent_id, expected_revision: Integer?, state: untyped) -> untyped
|
|
77
|
-
def delete: (String main_agent_id, expected_revision: Integer) -> untyped
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
interface _TeamRepository
|
|
81
|
-
def create: (untyped root) -> untyped
|
|
82
|
-
def load: (String team_id) -> untyped
|
|
83
|
-
def save: (String team_id, expected_revision: Integer, root: untyped) -> untyped
|
|
84
|
-
def delete: (String team_id) -> untyped
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
interface _TeamExecutionRepository
|
|
88
|
-
def create_active: (untyped execution) -> untyped
|
|
89
|
-
def load: (String team_execution_id) -> untyped
|
|
90
|
-
def save: (String team_execution_id, expected_revision: Integer, execution: untyped) -> untyped
|
|
91
|
-
def list_active: (String team_id) -> Array[untyped]
|
|
92
|
-
def list: (String team_id, ?after: String?, ?limit: Integer) -> Array[untyped]
|
|
93
|
-
def delete: (String team_execution_id) -> untyped
|
|
94
|
-
def delete_for_team: (String team_id) -> untyped
|
|
95
|
-
def assert_idle!: (String team_id) -> untyped
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
interface _BackendHandoffStateRecordRepository
|
|
99
|
-
def load: (String main_agent_id) -> Persistence::DurableRecord?
|
|
100
|
-
def save: (String main_agent_id, expected_revision: Integer?, next_revision: Integer, active_agent_id: String, record: Persistence::DurableRecord) -> Persistence::DurableRecord
|
|
101
|
-
def delete: (String main_agent_id, expected_revision: Integer) -> untyped
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
interface _BackendTeamRecordRepository
|
|
105
|
-
def create: (team_id: String, team_revision: Integer, record: Persistence::DurableRecord) -> Persistence::DurableRecord
|
|
106
|
-
def load: (String team_id) -> Persistence::DurableRecord
|
|
107
|
-
def save: (String team_id, expected_revision: Integer, next_revision: Integer, record: Persistence::DurableRecord) -> Persistence::DurableRecord
|
|
108
|
-
def delete: (String team_id) -> untyped
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
interface _BackendTeamExecutionRecordRepository
|
|
112
|
-
def create_active: (team_execution_id: String, team_id: String, execution_revision: Integer, record: Persistence::DurableRecord) -> Persistence::DurableRecord
|
|
113
|
-
def load: (String team_execution_id) -> Persistence::DurableRecord
|
|
114
|
-
def save: (String team_execution_id, expected_revision: Integer, next_revision: Integer, team_id: String, active: bool, record: Persistence::DurableRecord) -> Persistence::DurableRecord
|
|
115
|
-
def list_active: (String team_id) -> Array[Persistence::DurableRecord]
|
|
116
|
-
def list: (String team_id, ?after: String?, ?limit: Integer) -> Array[Persistence::DurableRecord]
|
|
117
|
-
def delete: (String team_execution_id) -> untyped
|
|
118
|
-
def delete_for_team: (String team_id) -> untyped
|
|
119
|
-
def assert_idle!: (String team_id) -> untyped
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
interface _BackendWatermark
|
|
123
|
-
def assert_agent_watermark!: (agent_id: String, agent_revision: Integer, journal_position: Integer) -> true
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
interface _PersistenceTransactionView
|
|
127
|
-
def contents: () -> _ContentRepository
|
|
128
|
-
def agents: () -> _AgentRepository
|
|
129
|
-
def journals: () -> _JournalRepository
|
|
130
|
-
def executions: () -> _ExecutionRepository
|
|
131
|
-
def workflow_states: () -> _WorkflowStateRepository
|
|
132
|
-
def handoff_states: () -> _HandoffStateRepository
|
|
133
|
-
def teams: () -> _TeamRepository
|
|
134
|
-
def team_executions: () -> _TeamExecutionRepository
|
|
135
|
-
def assert_agent_watermark!: (agent_id: String, agent_revision: Integer, journal_position: Integer) -> true
|
|
136
|
-
end
|
|
137
|
-
|
|
138
2
|
class Persistence
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
end
|
|
143
|
-
class UnsupportedBackendError < Phronomy::Error
|
|
144
|
-
end
|
|
145
|
-
class SerializationError < Phronomy::Error
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
class DurableRecord
|
|
149
|
-
FORMAT_VERSION_PATTERN: Regexp
|
|
150
|
-
attr_reader record_type: String
|
|
151
|
-
attr_reader format_version: String
|
|
152
|
-
attr_reader payload: Hash[String, untyped]
|
|
153
|
-
def initialize: (record_type: String, format_version: String, payload: Hash[String, untyped]) -> void
|
|
154
|
-
def copy: () -> DurableRecord
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
module Migration
|
|
158
|
-
module InitialFormatMigration
|
|
159
|
-
def self.agent_root: (Hash[untyped, untyped] hash) -> DurableRecord
|
|
160
|
-
def self.agent_execution: (Hash[untyped, untyped] hash) -> DurableRecord
|
|
161
|
-
def self.journal_record: (Hash[untyped, untyped] hash) -> DurableRecord
|
|
162
|
-
def self.workflow_state: (workflow_instance_id: String, revision: Integer, snapshot: Hash[untyped, untyped]) -> DurableRecord
|
|
163
|
-
def self.llm_input_manifest: (Hash[untyped, untyped] hash) -> Hash[String, untyped]
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
REQUIRED_CAPABILITIES: Hash[Symbol, bool]
|
|
168
|
-
|
|
169
|
-
attr_reader contents: _ContentRepository
|
|
170
|
-
attr_reader agents: _AgentRepository
|
|
171
|
-
attr_reader journals: _JournalRepository
|
|
172
|
-
attr_reader executions: _ExecutionRepository
|
|
173
|
-
attr_reader workflow_states: _WorkflowStateRepository
|
|
174
|
-
attr_reader handoff_states: _HandoffStateRepository
|
|
175
|
-
attr_reader teams: _TeamRepository
|
|
176
|
-
attr_reader team_executions: _TeamExecutionRepository
|
|
177
|
-
def handoff_result: (String execution_id, ?main_agent_id: String?) -> Hash[Symbol, untyped]
|
|
178
|
-
def execution_result: (String execution_id) -> Hash[Symbol, untyped]
|
|
179
|
-
def list_executions: (String agent_id, ?after: String?, ?limit: Integer) -> Array[untyped]
|
|
180
|
-
def team_execution_result: (String team_execution_id) -> Hash[Symbol, untyped]
|
|
181
|
-
def list_team_executions: (String team_id, ?after: String?, ?limit: Integer) -> Array[untyped]
|
|
182
|
-
|
|
183
|
-
def initialize: (contents: _ContentRepository, agents: _BackendAgentRecordRepository, journals: _BackendJournalRecordRepository, executions: _BackendExecutionRecordRepository, workflow_states: _BackendWorkflowStateRecordRepository, handoff_states: _BackendHandoffStateRecordRepository, teams: _BackendTeamRecordRepository, team_executions: _BackendTeamExecutionRecordRepository) -> void
|
|
184
|
-
def capabilities: () -> Hash[Symbol, bool]
|
|
185
|
-
def transaction: () { (_PersistenceTransactionView) -> untyped } -> untyped
|
|
186
|
-
def build_transaction_view: (contents: _ContentRepository, agents: _BackendAgentRecordRepository, journals: _BackendJournalRecordRepository, executions: _BackendExecutionRecordRepository, workflow_states: _BackendWorkflowStateRecordRepository, handoff_states: _BackendHandoffStateRecordRepository, teams: _BackendTeamRecordRepository, team_executions: _BackendTeamExecutionRecordRepository, watermark: _BackendWatermark) -> _PersistenceTransactionView
|
|
187
|
-
def assert_agent_watermark!: (agent_id: String, agent_revision: Integer, journal_position: Integer) -> true
|
|
3
|
+
attr_reader backend: _StorageBackend
|
|
4
|
+
def initialize: (backend: _StorageBackend) -> void
|
|
5
|
+
def bind: [T] (_Participant[T] adapter) -> T
|
|
188
6
|
end
|
|
189
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
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
interface _StorageBackend
|
|
3
|
+
def view: () -> Storage::View
|
|
4
|
+
def capabilities: () -> Hash[Symbol, bool | Integer]
|
|
5
|
+
def transaction_open?: () -> bool
|
|
6
|
+
def transaction: [T] () { (Storage::View) -> T } -> T
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
module Storage
|
|
10
|
+
type attributes = Hash[Symbol, String | Integer | bool | nil]
|
|
11
|
+
type resource_ref = Resource | String
|
|
12
|
+
type condition = Condition::RevisionIs | Condition::StreamHeadIs | Condition::NoRows
|
|
13
|
+
|
|
14
|
+
class ConflictError < Phronomy::Error
|
|
15
|
+
end
|
|
16
|
+
class UniqueConstraintError < ConflictError
|
|
17
|
+
attr_reader resource: String
|
|
18
|
+
attr_reader constraint: Symbol
|
|
19
|
+
def initialize: (resource: Resource, constraint: Symbol) -> void
|
|
20
|
+
end
|
|
21
|
+
class ConditionFailedError < ConflictError
|
|
22
|
+
attr_reader condition: condition
|
|
23
|
+
def initialize: (condition) -> void
|
|
24
|
+
end
|
|
25
|
+
class BlobConflictError < ConflictError
|
|
26
|
+
end
|
|
27
|
+
class TransactionError < Phronomy::Error
|
|
28
|
+
end
|
|
29
|
+
class NotFoundError < Phronomy::Error
|
|
30
|
+
end
|
|
31
|
+
class UnsupportedBackendError < Phronomy::Error
|
|
32
|
+
end
|
|
33
|
+
class SerializationError < Phronomy::Error
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class DurableRecord
|
|
37
|
+
FORMAT_VERSION_PATTERN: Regexp
|
|
38
|
+
attr_reader record_type: String
|
|
39
|
+
attr_reader format_version: String
|
|
40
|
+
attr_reader payload: Hash[String, untyped]
|
|
41
|
+
def initialize: (record_type: String, format_version: String, payload: Hash[String, untyped]) -> void
|
|
42
|
+
def copy: () -> DurableRecord
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
class Resource
|
|
46
|
+
attr_reader id: String
|
|
47
|
+
attr_reader kind: Symbol
|
|
48
|
+
attr_reader attributes: Hash[Symbol, Symbol]
|
|
49
|
+
attr_reader immutable_attributes: Array[Symbol]
|
|
50
|
+
attr_reader indexes: Hash[Symbol, Array[Symbol]]
|
|
51
|
+
attr_reader unique: Array[Hash[Symbol, untyped]]
|
|
52
|
+
attr_reader guard: Hash[Symbol, untyped]?
|
|
53
|
+
def initialize: (id: String, kind: Symbol, ?attributes: Hash[Symbol, Symbol], ?immutable_attributes: Array[Symbol], ?indexes: Hash[Symbol, Array[Symbol]], ?unique: Array[Hash[Symbol, untyped]], ?guard: Hash[Symbol, untyped]?) -> void
|
|
54
|
+
def validate_attributes: (attributes, ?partial: bool) -> attributes
|
|
55
|
+
def index_values: (Symbol, attributes) -> attributes
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
module Entry
|
|
59
|
+
class Record
|
|
60
|
+
attr_reader key: String
|
|
61
|
+
attr_reader revision: Integer
|
|
62
|
+
attr_reader attributes: attributes
|
|
63
|
+
attr_reader record: DurableRecord
|
|
64
|
+
def initialize: (key: String, revision: Integer, attributes: attributes, record: DurableRecord) -> void
|
|
65
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
66
|
+
end
|
|
67
|
+
class Append
|
|
68
|
+
attr_reader id: String
|
|
69
|
+
attr_reader record: DurableRecord
|
|
70
|
+
def initialize: (id: String, record: DurableRecord) -> void
|
|
71
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
72
|
+
end
|
|
73
|
+
class Stream
|
|
74
|
+
attr_reader position: Integer
|
|
75
|
+
attr_reader id: String
|
|
76
|
+
attr_reader record: DurableRecord
|
|
77
|
+
def initialize: (position: Integer, id: String, record: DurableRecord) -> void
|
|
78
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
79
|
+
end
|
|
80
|
+
class Blob
|
|
81
|
+
attr_reader key: String
|
|
82
|
+
attr_reader bytes: String
|
|
83
|
+
attr_reader attributes: attributes
|
|
84
|
+
def initialize: (key: String, bytes: String, attributes: attributes) -> void
|
|
85
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
class GuardRef
|
|
90
|
+
attr_reader resource: resource_ref
|
|
91
|
+
attr_reader key: String
|
|
92
|
+
def initialize: (resource: resource_ref, key: String) -> void
|
|
93
|
+
end
|
|
94
|
+
module Condition
|
|
95
|
+
class RevisionIs
|
|
96
|
+
attr_reader resource: resource_ref
|
|
97
|
+
attr_reader key: String
|
|
98
|
+
attr_reader expected: Integer
|
|
99
|
+
def initialize: (resource: resource_ref, key: String, expected: Integer) -> void
|
|
100
|
+
end
|
|
101
|
+
class StreamHeadIs
|
|
102
|
+
attr_reader resource: resource_ref
|
|
103
|
+
attr_reader stream: String
|
|
104
|
+
attr_reader expected: Integer
|
|
105
|
+
def initialize: (resource: resource_ref, stream: String, expected: Integer) -> void
|
|
106
|
+
end
|
|
107
|
+
class NoRows
|
|
108
|
+
attr_reader resource: resource_ref
|
|
109
|
+
attr_reader index: Symbol
|
|
110
|
+
attr_reader equals: attributes
|
|
111
|
+
def initialize: (resource: resource_ref, index: Symbol, equals: attributes) -> void
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
class Records
|
|
116
|
+
UNCHECKED: Object
|
|
117
|
+
attr_reader resource: Resource
|
|
118
|
+
def initialize: (View, Resource) -> void
|
|
119
|
+
def insert: (key: String, revision: Integer, attributes: attributes, record: DurableRecord) -> Entry::Record
|
|
120
|
+
def read: (String) -> Entry::Record?
|
|
121
|
+
def fetch: (String) -> Entry::Record
|
|
122
|
+
def replace: (key: String, expected_revision: Integer, next_revision: Integer, attributes: attributes, record: DurableRecord, ?expected_attributes: attributes) -> Entry::Record
|
|
123
|
+
def delete: (key: String, ?expected_revision: Integer | Object) -> nil
|
|
124
|
+
def scan: (index: Symbol, equals: attributes, ?after: String?, ?limit: Integer?) -> Array[Entry::Record]
|
|
125
|
+
def delete_matching: (index: Symbol, equals: attributes) -> nil
|
|
126
|
+
end
|
|
127
|
+
class Streams
|
|
128
|
+
attr_reader resource: Resource
|
|
129
|
+
def initialize: (View, Resource) -> void
|
|
130
|
+
def append: (stream: String, expected_head: Integer, entries: Array[Entry::Append]) -> Array[Entry::Stream]
|
|
131
|
+
def read: (stream: String, ?after: Integer, ?limit: Integer?) -> Array[Entry::Stream]
|
|
132
|
+
def head: (stream: String) -> Integer
|
|
133
|
+
def delete: (stream: String) -> nil
|
|
134
|
+
end
|
|
135
|
+
class Blobs
|
|
136
|
+
attr_reader resource: Resource
|
|
137
|
+
def initialize: (View, Resource) -> void
|
|
138
|
+
def put_if_absent: (key: String, bytes: String, attributes: attributes) -> Entry::Blob
|
|
139
|
+
def fetch: (String) -> Entry::Blob
|
|
140
|
+
def exist?: (String) -> bool
|
|
141
|
+
end
|
|
142
|
+
class View
|
|
143
|
+
def records: (resource_ref) -> Records
|
|
144
|
+
def streams: (resource_ref) -> Streams
|
|
145
|
+
def blobs: (resource_ref) -> Blobs
|
|
146
|
+
def check!: (guards: Array[GuardRef], conditions: Array[condition]) -> true
|
|
147
|
+
def atomic: [T] () { (View) -> T } -> T
|
|
148
|
+
end
|
|
149
|
+
class Backend
|
|
150
|
+
REQUIRED_CAPABILITIES: Hash[Symbol, bool | Integer]
|
|
151
|
+
attr_reader resources: Hash[String, Resource]
|
|
152
|
+
attr_reader view: View
|
|
153
|
+
def initialize: (resources: Array[Resource]) -> void
|
|
154
|
+
def self.validate_capabilities!: (_StorageBackend backend) -> void
|
|
155
|
+
def capabilities: () -> Hash[Symbol, bool | Integer]
|
|
156
|
+
def transaction_open?: () -> bool
|
|
157
|
+
def transaction: [T] () { (View) -> T } -> T
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
data/sig/phronomy/tool.rbs
CHANGED
|
@@ -1,10 +1,34 @@
|
|
|
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?
|
|
7
|
-
def self.parameters: () ->
|
|
26
|
+
def self.parameters: (?untyped schema) ?{ () -> untyped } -> untyped
|
|
27
|
+
def self.declared_parameters: () -> Hash[untyped, untyped]
|
|
28
|
+
def self.parameters_schema_definition: () -> untyped
|
|
29
|
+
def self.params: (?untyped schema) ?{ () -> untyped } -> untyped
|
|
30
|
+
def self.provider_options: (?untyped options) -> Hash[untyped, untyped]
|
|
31
|
+
def self.with_params: (**untyped options) -> untyped
|
|
8
32
|
def self.params_schema_definition: () -> untyped
|
|
9
33
|
def self.provider_params: () -> Hash[untyped, untyped]
|
|
10
34
|
def self.param: (untyped name, ?enum: untyped, ?properties: untyped, **untyped options) -> untyped
|
|
@@ -18,22 +42,51 @@ module Phronomy
|
|
|
18
42
|
def self.redact_params: (*untyped names) -> Array[Symbol]
|
|
19
43
|
def self.max_result_size: (?untyped value) -> untyped
|
|
20
44
|
|
|
45
|
+
def description: () -> String?
|
|
21
46
|
def name: () -> String
|
|
47
|
+
def parameters_schema: () -> untyped
|
|
48
|
+
def parameters: () -> Hash[untyped, untyped]
|
|
49
|
+
def provider_options: () -> Hash[untyped, untyped]
|
|
50
|
+
def provider_params: () -> Hash[untyped, untyped]
|
|
22
51
|
def params_schema: () -> untyped
|
|
52
|
+
def validate_arguments: (Hash[String | Symbol, untyped]? args) -> [Hash[Symbol, untyped]?, String?]
|
|
23
53
|
def call: (Hash[untyped, untyped] args, ?cancellation_token: Concurrency::CancellationToken?) -> untyped
|
|
24
54
|
def call_async: (Hash[untyped, untyped] args, ?cancellation_token: Concurrency::CancellationToken?, ?config: Hash[untyped, untyped]) -> TaskResult[untyped]
|
|
25
55
|
def requires_approval?: () -> untyped
|
|
26
56
|
def tool_origin: () -> Symbol
|
|
27
57
|
def approval_metadata: () -> Hash[untyped, untyped]
|
|
28
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
|
|
29
64
|
end
|
|
30
65
|
end
|
|
31
66
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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?
|
|
36
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
|
|
37
90
|
end
|
|
38
91
|
end
|
|
39
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,14 @@
|
|
|
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
|
+
end
|
|
14
|
+
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
|
@@ -8,7 +8,7 @@ module Phronomy
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
class Workflow
|
|
11
|
-
def self.define: (Class context_class, ?persistence:
|
|
11
|
+
def self.define: (Class context_class, ?persistence: _WorkflowStateRepository?) { () -> void } -> Workflow
|
|
12
12
|
|
|
13
13
|
def invoke: (untyped input, ?config: Hash[untyped, untyped], ?invocation_context: untyped) -> untyped
|
|
14
14
|
def invoke_async: (untyped input, ?config: Hash[untyped, untyped], ?invocation_context: untyped) -> TaskResult[untyped]
|
data/sig/phronomy.rbs
CHANGED
|
@@ -7,56 +7,7 @@ module Phronomy
|
|
|
7
7
|
class ParseError < Error
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
class RecursionLimitError < Error
|
|
11
|
-
end
|
|
12
|
-
|
|
13
10
|
class ToolError < Error
|
|
14
11
|
end
|
|
15
12
|
|
|
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
13
|
end
|