phronomy 0.27.0 → 0.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.mutant.yml +9 -9
- data/CHANGELOG.md +52 -0
- data/CONTRIBUTING.md +8 -8
- data/README.md +28 -7
- data/benchmark/bench_agent_invoke.rb +25 -50
- data/benchmark/bench_context_assembler.rb +14 -11
- data/benchmark/bench_regression.rb +1 -1
- data/benchmark/bench_tool_schema.rb +1 -1
- data/docs/application-recipes.md +229 -0
- data/docs/architecture/agent-chat-and-state-ownership.md +7 -1
- data/docs/architecture/agent-transition-ownership.md +13 -89
- data/docs/architecture/backend-groups.md +152 -0
- data/docs/architecture/before-llm-input.md +3 -3
- data/docs/architecture/context-management.md +1 -1
- data/docs/architecture/dx05-agent-scope.md +119 -0
- data/docs/architecture/dx05-workflow-task-state.md +134 -0
- data/docs/architecture/error-api-review.md +245 -0
- data/docs/architecture/execution-abstraction-review.md +88 -0
- data/docs/architecture/execution-boundaries.md +28 -0
- data/docs/architecture/execution-metadata-and-values.md +6 -0
- data/docs/architecture/multi-agent-handoff.md +6 -5
- data/docs/architecture/persistence.md +27 -9
- data/docs/architecture/r8-unit1.md +104 -0
- data/docs/architecture/r8-unit10.md +72 -0
- data/docs/architecture/r8-unit11.md +71 -0
- data/docs/architecture/r8-unit12.md +67 -0
- data/docs/architecture/r8-unit13.md +61 -0
- data/docs/architecture/r8-unit14.md +72 -0
- data/docs/architecture/r8-unit15.md +65 -0
- data/docs/architecture/r8-unit16.md +54 -0
- data/docs/architecture/r8-unit17.md +73 -0
- data/docs/architecture/r8-unit18.md +92 -0
- data/docs/architecture/r8-unit19.md +61 -0
- data/docs/architecture/r8-unit2.md +55 -0
- data/docs/architecture/r8-unit20.md +51 -0
- data/docs/architecture/r8-unit21.md +79 -0
- data/docs/architecture/r8-unit22.md +74 -0
- data/docs/architecture/r8-unit23.md +81 -0
- data/docs/architecture/r8-unit3.md +130 -0
- data/docs/architecture/r8-unit4.md +79 -0
- data/docs/architecture/r8-unit5.md +115 -0
- data/docs/architecture/r8-unit6.md +71 -0
- data/docs/architecture/r8-unit7.md +70 -0
- data/docs/architecture/r8-unit8.md +78 -0
- data/docs/architecture/r8-unit9.md +73 -0
- data/docs/architecture/refactoring-closure.md +10 -1
- data/docs/architecture/remaining-refactoring-plan.md +16 -0
- data/docs/architecture/storage-execution-boundaries.md +54 -0
- data/docs/architecture/tool-schema-recording-gap.md +6 -0
- data/docs/architecture/tracing.md +1 -1
- data/docs/architecture/workflow-terminal-ownership-design.md +2 -2
- data/docs/architecture.md +24 -11
- data/docs/decisions/015-tool-public-facade-and-rbs-boundary.md +3 -3
- data/docs/decisions/027-llm-adapter-provider-boundary.md +2 -0
- data/docs/decisions/030-agent-handoff-domain-and-durable-responsibility.md +2 -0
- data/docs/decisions/031-durable-multi-agent-coordination.md +2 -0
- data/docs/decisions/032-storage-backend-composition.md +5 -0
- data/docs/decisions/034-handoff-runner-coordination-ownership.md +2 -0
- data/docs/decisions/035-tool-executor-capability-ownership.md +1 -1
- data/docs/decisions/038-responsibility-based-source-layout.md +14 -0
- data/docs/decisions/039-runtime-configuration-lifecycle-ownership.md +8 -0
- data/docs/decisions/040-configuration-default-composition.md +12 -1
- data/docs/decisions/045-worker-input-restriction-ownership.md +4 -0
- data/docs/decisions/051-execution-outcome-worker-ownership.md +2 -0
- data/docs/decisions/056-workflow-terminal-policy-ownership.md +1 -1
- data/docs/decisions/058-neutral-storage-primitives.md +5 -0
- data/docs/decisions/059-backend-contracts-and-async-clients.md +74 -0
- data/docs/decisions/060-runtime-settings-and-application-configuration.md +86 -0
- data/docs/decisions/061-persistence-failure-contracts.md +89 -0
- data/docs/decisions/062-content-store-service.md +52 -0
- data/docs/decisions/063-execution-contracts-and-services.md +88 -0
- data/docs/decisions/064-agent-execution-and-multi-agent-responsibility.md +36 -0
- data/docs/decisions/065-vector-and-embeddings-common-operations.md +38 -0
- data/docs/decisions/066-llm-and-tool-operation-contracts.md +20 -0
- data/docs/decisions/067-agent-progress-and-engine-connection.md +29 -0
- data/docs/decisions/068-agent-tool-child-progress-and-tool-operation.md +36 -0
- data/docs/decisions/README.md +18 -1
- data/docs/execution-boundaries-preview.md +45 -0
- data/docs/failure-reason-codes.md +45 -0
- data/docs/features.md +12 -4
- data/docs/getting-started.md +52 -48
- data/docs/migrations/0.22.md +2 -2
- data/docs/migrations/durable-semantic-coordination-v2.md +2 -0
- data/docs/migrations/handoff-runner-multi-agent.md +2 -0
- data/docs/migrations/persistence-failure-contracts.md +67 -0
- data/docs/migrations/r8-unit10.md +36 -0
- data/docs/migrations/r8-unit11.md +33 -0
- data/docs/migrations/r8-unit12.md +31 -0
- data/docs/migrations/r8-unit13.md +36 -0
- data/docs/migrations/r8-unit14.md +31 -0
- data/docs/migrations/r8-unit15.md +31 -0
- data/docs/migrations/r8-unit16.md +26 -0
- data/docs/migrations/r8-unit17.md +28 -0
- data/docs/migrations/r8-unit18.md +29 -0
- data/docs/migrations/r8-unit19.md +28 -0
- data/docs/migrations/r8-unit20.md +24 -0
- data/docs/migrations/r8-unit21.md +28 -0
- data/docs/migrations/r8-unit22.md +29 -0
- data/docs/migrations/r8-unit23.md +20 -0
- data/docs/migrations/r8-unit4.md +67 -0
- data/docs/migrations/r8-unit5.md +75 -0
- data/docs/migrations/r8-unit6.md +109 -0
- data/docs/migrations/r8-unit7.md +31 -0
- data/docs/migrations/r8-unit8.md +33 -0
- data/docs/migrations/r8-unit9.md +28 -0
- data/docs/migrations/storage-async-client.md +103 -0
- data/docs/migrations/vector-async-clients.md +110 -0
- data/docs/ordered-event-delivery.md +54 -0
- data/docs/persistence-backends.md +38 -21
- data/docs/runtime-and-concurrency.md +26 -1
- data/docs/workflow-completion.md +92 -0
- data/gemfiles/http_minimum.gemfile +5 -0
- data/lib/phronomy/agent/admission.rb +78 -0
- data/lib/phronomy/agent/{lifecycle_contract/agent_already_exists_error.rb → agent_already_exists_error.rb} +1 -1
- data/lib/phronomy/agent/{lifecycle_contract/agent_busy_error.rb → agent_busy_error.rb} +1 -1
- data/lib/phronomy/agent/agent_not_found_error.rb +16 -0
- data/lib/phronomy/agent/{lifecycle_contract/agent_purged_error.rb → agent_purged_error.rb} +1 -1
- data/lib/phronomy/agent/agent_unloaded_error.rb +14 -0
- data/lib/phronomy/agent/api/agent.rb +13 -0
- data/lib/phronomy/{recovery → agent/api}/execution_rehydration_required_error.rb +1 -1
- data/lib/phronomy/agent/async_event_api.rb +132 -103
- data/lib/phronomy/agent/base.rb +146 -113
- data/lib/phronomy/agent/before_llm_input.rb +70 -0
- data/lib/phronomy/agent/composition/run_once.rb +1 -1
- data/lib/phronomy/agent/{context_assembly/context_candidate_resolver.rb → context_candidate_resolver.rb} +2 -2
- data/lib/phronomy/agent/{context_assembly/context_assembler.rb → context_preparation.rb} +35 -221
- data/lib/phronomy/agent/control_request.rb +21 -0
- data/lib/phronomy/agent/execution/agent_execution.rb +1 -1
- data/lib/phronomy/agent/execution/agent_invocation.rb +27 -53
- data/lib/phronomy/agent/execution/approval_resume_commit.rb +1 -1
- data/lib/phronomy/agent/execution/dispatch_preparation.rb +17 -127
- data/lib/phronomy/agent/execution/exact_execution.rb +55 -32
- data/lib/phronomy/agent/execution/execution_cancellation.rb +8 -4
- data/lib/phronomy/agent/execution/execution_coordinator.rb +229 -407
- data/lib/phronomy/agent/execution/execution_metadata.rb +1 -0
- data/lib/phronomy/agent/execution/execution_outcome_committer.rb +71 -127
- data/lib/phronomy/agent/execution/execution_registry.rb +6 -2
- data/lib/phronomy/agent/execution/execution_session_runner.rb +22 -27
- data/lib/phronomy/agent/execution/initial_preparation.rb +19 -120
- data/lib/phronomy/agent/execution/{agent_invocation_session_builder.rb → invocation_actions.rb} +54 -194
- data/lib/phronomy/agent/execution/invocation_transitions.rb +39 -1
- data/lib/phronomy/agent/execution/runtime_record_encoder.rb +8 -11
- data/lib/phronomy/agent/execution_change.rb +161 -0
- data/lib/phronomy/agent/execution_environment.rb +36 -0
- data/lib/phronomy/agent/execution_extension_state.rb +21 -0
- data/lib/phronomy/agent/execution_observation.rb +35 -0
- data/lib/phronomy/agent/filterable.rb +188 -0
- data/lib/phronomy/agent/handoff/{handoff_context.rb → transfer_context.rb} +4 -4
- data/lib/phronomy/agent/handoff/{handoff_projection.rb → transfer_projection.rb} +14 -33
- data/lib/phronomy/{llm_contract/transport_error.rb → agent/handoff_error.rb} +1 -1
- data/lib/phronomy/agent/journal/journal_projection.rb +1 -1
- data/lib/phronomy/agent/knowledge_item.rb +13 -0
- data/lib/phronomy/agent/lifecycle/agent_root.rb +1 -1
- data/lib/phronomy/agent/lifecycle/lifetime_api.rb +76 -0
- data/lib/phronomy/agent/lifecycle/operation_lease.rb +33 -0
- data/lib/phronomy/agent/lifecycle/operation_result.rb +53 -0
- data/lib/phronomy/agent/lifecycle/ownership_registry.rb +117 -31
- data/lib/phronomy/agent/lifecycle/scope.rb +198 -0
- data/lib/phronomy/agent/lifecycle/scope_cleanup_error.rb +19 -0
- data/lib/phronomy/agent/lifecycle/unload_transition.rb +78 -0
- data/lib/phronomy/agent/persistence/agent_repository.rb +29 -21
- data/lib/phronomy/agent/persistence/cancellation_repository.rb +51 -0
- data/lib/phronomy/agent/persistence/codec.rb +1 -21
- data/lib/phronomy/agent/persistence/execution_repository.rb +57 -41
- data/lib/phronomy/agent/persistence/journal_repository.rb +27 -18
- data/lib/phronomy/agent/persistence/records.rb +33 -0
- data/lib/phronomy/agent/persistence/retention_repository.rb +70 -0
- data/lib/phronomy/agent/persistence/storage_schema.rb +7 -2
- data/lib/phronomy/agent/persistence/watermark.rb +13 -11
- data/lib/phronomy/agent/recovery/invocation_restorer.rb +13 -21
- data/lib/phronomy/agent/recovery/recovery_coordinator/continuation.rb +13 -12
- data/lib/phronomy/agent/recovery/recovery_coordinator/installation.rb +34 -34
- data/lib/phronomy/agent/recovery/recovery_coordinator/resolution.rb +33 -39
- data/lib/phronomy/agent/recovery/recovery_coordinator.rb +28 -25
- data/lib/phronomy/agent/recovery/recovery_rules.rb +119 -0
- data/lib/phronomy/agent/recovery/recovery_support.rb +10 -19
- data/lib/phronomy/agent/reserved_execution.rb +16 -0
- data/lib/phronomy/agent/retention.rb +17 -0
- data/lib/phronomy/agent/runtime_binding/engine_environment.rb +60 -0
- data/lib/phronomy/agent/runtime_binding/engine_session_builder.rb +34 -0
- data/lib/phronomy/agent/runtime_binding/phase_machine_builder.rb +64 -0
- data/lib/phronomy/agent/runtime_binding/tool_session_builder.rb +34 -0
- data/lib/phronomy/agent/{context_assembly/ruby_llm_materializer.rb → runtime_input.rb} +18 -35
- data/lib/phronomy/agent/{context_assembly/saved_context_reader.rb → saved_context_reader.rb} +6 -4
- data/lib/phronomy/agent/settings.rb +47 -0
- data/lib/phronomy/agent/{context_assembly/state_writer.rb → state_writer.rb} +4 -3
- data/lib/phronomy/agent/store.rb +253 -0
- data/lib/phronomy/agent/{lifecycle_contract/stream_callback_error.rb → stream_callback_error.rb} +3 -3
- data/lib/phronomy/agent/tool_execution/tool_binding.rb +4 -64
- data/lib/phronomy/agent/tool_execution/tool_invocation.rb +50 -219
- data/lib/phronomy/agent/tool_execution/tool_invocation_actions.rb +107 -0
- data/lib/phronomy/agent/tool_execution/tool_invocation_transitions.rb +70 -0
- data/lib/phronomy/common/error.rb +65 -1
- data/lib/phronomy/configuration/runtime_settings.rb +49 -0
- data/lib/phronomy/content_store/base.rb +7 -2
- data/lib/phronomy/content_store/storage_schema.rb +1 -0
- data/lib/phronomy/content_store/stored_contents.rb +2 -1
- data/lib/phronomy/context/assembly.rb +195 -0
- data/lib/phronomy/{llm_contract/context_budget_exceeded_error.rb → context/budget_exceeded_error.rb} +3 -1
- data/lib/phronomy/context/candidate.rb +51 -0
- data/lib/phronomy/context/constraint.rb +47 -0
- data/lib/phronomy/{agent/context_contract → context}/context_plan.rb +1 -1
- data/lib/phronomy/{agent/context_contract → context}/context_plan_validator.rb +3 -3
- data/lib/phronomy/{agent/context_contract → context}/context_policy.rb +1 -1
- data/lib/phronomy/{agent/context_contract → context}/context_policy_input.rb +1 -1
- data/lib/phronomy/{agent/context_assembly → context}/context_policy_input_builder.rb +1 -1
- data/lib/phronomy/context/default_policy.rb +140 -0
- data/lib/phronomy/context/final_budget_validator.rb +33 -0
- data/lib/phronomy/{agent/context_contract → context}/llm_input_build_context.rb +1 -1
- data/lib/phronomy/{agent/context_contract → context}/llm_input_manifest.rb +19 -19
- data/lib/phronomy/{agent/context_contract → context}/llm_input_patch.rb +1 -1
- data/lib/phronomy/context/manifest_error.rb +10 -0
- data/lib/phronomy/context/prompt_template.rb +98 -0
- data/lib/phronomy/{vector_store → documents}/loader/base.rb +1 -1
- data/lib/phronomy/{vector_store → documents}/loader/csv_loader.rb +2 -2
- data/lib/phronomy/{vector_store → documents}/loader/markdown_loader.rb +3 -3
- data/lib/phronomy/{vector_store → documents}/loader/plain_text_loader.rb +2 -2
- data/lib/phronomy/{vector_store → documents}/splitter/base.rb +1 -1
- data/lib/phronomy/{vector_store → documents}/splitter/fixed_size_splitter.rb +2 -2
- data/lib/phronomy/{vector_store → documents}/splitter/recursive_splitter.rb +2 -2
- data/lib/phronomy/embeddings/async/async_client.rb +44 -0
- data/lib/phronomy/embeddings/authentication_error.rb +11 -0
- data/lib/phronomy/embeddings/backends/ruby_llm_embeddings.rb +52 -0
- data/lib/phronomy/embeddings/base.rb +43 -0
- data/lib/phronomy/embeddings/invalid_result_error.rb +11 -0
- data/lib/phronomy/embeddings/rate_limit_error.rb +11 -0
- data/lib/phronomy/embeddings/transport_error.rb +11 -0
- data/lib/phronomy/engine/concurrency/offload_pool.rb +36 -21
- data/lib/phronomy/engine/concurrency/pool_registry.rb +47 -12
- data/lib/phronomy/engine/diagnostics.rb +1 -1
- data/lib/phronomy/engine/event_loop.rb +7 -7
- data/lib/phronomy/engine/execution_binding.rb +23 -0
- data/lib/phronomy/engine/execution_receiver_binding.rb +43 -0
- data/lib/phronomy/engine/fsm_protocol.rb +1 -6
- data/lib/phronomy/engine/fsm_session.rb +3 -3
- data/lib/phronomy/engine/metrics.rb +16 -14
- data/lib/phronomy/engine/runtime/timer_queue.rb +1 -1
- data/lib/phronomy/engine/runtime.rb +25 -12
- data/lib/phronomy/engine/terminal_decision.rb +7 -0
- data/lib/phronomy/execution/async_operation.rb +41 -0
- data/lib/phronomy/{engine → execution}/blocking.rb +2 -2
- data/lib/phronomy/{engine → execution}/concurrency/cancellation_token.rb +1 -1
- data/lib/phronomy/{engine → execution}/concurrency/deadline.rb +0 -17
- data/lib/phronomy/{engine → execution}/concurrency/physical_completion_task.rb +1 -1
- data/lib/phronomy/{engine → execution}/concurrency/result_collector.rb +1 -1
- data/lib/phronomy/{engine → execution}/concurrency/result_composition.rb +33 -12
- data/lib/phronomy/{engine/concurrency/subscriptions.rb → execution/concurrency/result_subscriptions.rb} +14 -18
- data/lib/phronomy/execution/concurrency/subscriptions.rb +25 -0
- data/lib/phronomy/{engine → execution}/execution.rb +61 -27
- data/lib/phronomy/{engine → execution}/execution_cancellation_error.rb +2 -2
- data/lib/phronomy/execution/execution_receiver.rb +78 -0
- data/lib/phronomy/execution/execution_scope_state.rb +35 -0
- data/lib/phronomy/{engine → execution}/execution_timeout_error.rb +2 -2
- data/lib/phronomy/{engine → execution}/invocation_context.rb +0 -15
- data/lib/phronomy/execution/invocation_controls.rb +73 -0
- data/lib/phronomy/execution/runnable.rb +24 -0
- data/lib/phronomy/{engine → execution}/task_result.rb +9 -4
- data/lib/phronomy/execution/wait_policy.rb +24 -0
- data/lib/phronomy/filter/{contract/filter_block_error.rb → filter_block_error.rb} +3 -3
- data/lib/phronomy/generation/generator_verifier/agent_operation.rb +65 -0
- data/lib/phronomy/generation/generator_verifier/default_parser.rb +27 -0
- data/lib/phronomy/generation/generator_verifier/workflow_builder.rb +2 -2
- data/lib/phronomy/generation/generator_verifier.rb +7 -7
- data/lib/phronomy/generation/low_confidence_error.rb +2 -2
- data/lib/phronomy/integrations/ordered_event_delivery.rb +208 -0
- data/lib/phronomy/llm_adapter/async/async_client.rb +47 -0
- data/lib/phronomy/{llm_contract → llm_adapter}/authentication_error.rb +3 -1
- data/lib/phronomy/llm_adapter/backends/ruby_llm.rb +183 -0
- data/lib/phronomy/llm_adapter/base.rb +49 -68
- data/lib/phronomy/{llm_contract → llm_adapter}/context_length_error.rb +3 -1
- data/lib/phronomy/llm_adapter/invalid_result_error.rb +10 -0
- data/lib/phronomy/llm_adapter/message.rb +62 -0
- data/lib/phronomy/{llm_contract → llm_adapter}/rate_limit_error.rb +3 -1
- data/lib/phronomy/llm_adapter/request.rb +79 -0
- data/lib/phronomy/llm_adapter/response.rb +36 -0
- data/lib/phronomy/llm_adapter/stream_chunk.rb +18 -0
- data/lib/phronomy/llm_adapter/token_usage.rb +64 -0
- data/lib/phronomy/llm_adapter/transport_error.rb +9 -0
- data/lib/phronomy/llm_adapter.rb +3 -16
- data/lib/phronomy/multi_agent/admission_registry.rb +1 -8
- data/lib/phronomy/multi_agent/durable_subagent_coordinator.rb +108 -84
- data/lib/phronomy/multi_agent/execution_environment.rb +29 -0
- data/lib/phronomy/{agent/handoff → multi_agent}/handoff.rb +2 -2
- data/lib/phronomy/{agent/handoff → multi_agent}/handoff_capability_factory.rb +21 -2
- data/lib/phronomy/multi_agent/handoff_participant.rb +79 -0
- data/lib/phronomy/{agent/handoff → multi_agent}/handoff_policy.rb +1 -1
- data/lib/phronomy/multi_agent/handoff_runner.rb +77 -100
- data/lib/phronomy/{agent/handoff → multi_agent}/handoff_state.rb +1 -1
- data/lib/phronomy/multi_agent/orchestrator.rb +61 -75
- data/lib/phronomy/multi_agent/persistence/codec.rb +20 -0
- data/lib/phronomy/multi_agent/persistence/handoff_state_repository.rb +77 -0
- data/lib/phronomy/multi_agent/persistence/records.rb +27 -0
- data/lib/phronomy/multi_agent/persistence/storage_schema.rb +21 -0
- data/lib/phronomy/multi_agent/persistence/team_execution_repository.rb +60 -44
- data/lib/phronomy/multi_agent/persistence/team_repository.rb +29 -21
- data/lib/phronomy/multi_agent/reserved_child_admission.rb +88 -0
- data/lib/phronomy/multi_agent/runtime_binding/engine_environment.rb +35 -0
- data/lib/phronomy/multi_agent/shared_state.rb +2 -2
- data/lib/phronomy/multi_agent/store.rb +156 -0
- data/lib/phronomy/multi_agent/team_busy_error.rb +18 -0
- data/lib/phronomy/multi_agent/team_coordinator.rb +99 -77
- data/lib/phronomy/multi_agent/team_not_found_error.rb +18 -0
- data/lib/phronomy/multi_agent/team_ownership_registry.rb +2 -12
- data/lib/phronomy/output_parser/parse_error.rb +7 -0
- data/lib/phronomy/persistence/content_repository.rb +26 -0
- data/lib/phronomy/persistence/errors.rb +16 -0
- data/lib/phronomy/persistence/migration/initial_format_migration.rb +2 -2
- data/lib/phronomy/persistence/persistence.rb +23 -0
- data/lib/phronomy/persistence/save_outcome.rb +24 -0
- data/lib/phronomy/persistence/snapshot_comparison.rb +81 -0
- data/lib/phronomy/persistence/storage_boundary.rb +32 -0
- data/lib/phronomy/persistence/transaction.rb +86 -0
- data/lib/phronomy/persistence_composition/storage_schema.rb +9 -4
- data/lib/phronomy/persistence_composition/stores.rb +34 -0
- data/lib/phronomy/persistence_composition/unit4_migration.rb +276 -0
- data/lib/phronomy/runtime_composition/agent_defaults.rb +5 -1
- data/lib/phronomy/runtime_composition/configuration.rb +146 -0
- data/lib/phronomy/runtime_composition/evaluation_defaults.rb +7 -0
- data/lib/phronomy/runtime_composition/execution_defaults.rb +5 -0
- data/lib/phronomy/runtime_composition/generation_defaults.rb +6 -0
- data/lib/phronomy/runtime_composition/global_configuration.rb +38 -0
- data/lib/phronomy/runtime_composition/multi_agent_defaults.rb +9 -0
- data/lib/phronomy/runtime_composition/workflow_defaults.rb +4 -0
- data/lib/phronomy/storage/async/async_client.rb +60 -0
- data/lib/phronomy/storage/backend.rb +8 -2
- data/lib/phronomy/storage/condition_failed_error.rb +2 -2
- data/lib/phronomy/storage/unique_constraint_error.rb +2 -2
- data/lib/phronomy/testing/eval/metrics.rb +1 -1
- data/lib/phronomy/testing/eval/scorer/llm_judge.rb +19 -3
- data/lib/phronomy/testing/persistence_contract/a_content_store.rb +2 -2
- data/lib/phronomy/testing/persistence_contract/a_journal_repository.rb +6 -6
- data/lib/phronomy/testing/persistence_contract/a_persistence_backend.rb +55 -52
- data/lib/phronomy/testing/persistence_contract/a_workflow_state_repository.rb +3 -3
- data/lib/phronomy/testing/persistence_contract/an_agent_repository.rb +7 -7
- data/lib/phronomy/testing/persistence_contract/an_execution_repository.rb +11 -11
- data/lib/phronomy/testing/persistence_contract/coordination_repositories.rb +57 -51
- data/lib/phronomy/testing/persistence_contract/neutral_storage_primitives.rb +1 -1
- data/lib/phronomy/testing/persistence_contract/storage_transaction_boundaries.rb +23 -22
- data/lib/phronomy/tool/authorization.rb +77 -0
- data/lib/phronomy/tool/base.rb +551 -9
- data/lib/phronomy/tool/call_request.rb +40 -0
- data/lib/phronomy/{agent/tool_execution/tool_definition_set.rb → tool/definition_set.rb} +7 -8
- data/lib/phronomy/tool/operation.rb +88 -0
- data/lib/phronomy/tool/schema.rb +214 -0
- data/lib/phronomy/tool/settings.rb +31 -0
- data/lib/phronomy/tool/tool_error.rb +7 -0
- data/lib/phronomy/tool/tool_executor.rb +58 -0
- data/lib/phronomy/tools/agent.rb +22 -90
- data/lib/phronomy/tools/mcp.rb +21 -14
- data/lib/phronomy/tools/vector_search.rb +4 -4
- data/lib/phronomy/tracing/automatic.rb +11 -6
- data/lib/phronomy/tracing/base.rb +36 -7
- data/lib/phronomy/tracing/observation.rb +37 -0
- data/lib/phronomy/tracing/open_telemetry_tracer.rb +4 -29
- data/lib/phronomy/tracing/settings.rb +36 -0
- data/lib/phronomy/vector_store/{async_backend.rb → async/async_client.rb} +35 -29
- data/lib/phronomy/vector_store/{in_memory.rb → backends/in_memory.rb} +12 -10
- data/lib/phronomy/vector_store/{pgvector.rb → backends/pgvector.rb} +44 -16
- data/lib/phronomy/vector_store/{redis_search.rb → backends/redis_search.rb} +74 -37
- data/lib/phronomy/vector_store/base.rb +118 -49
- data/lib/phronomy/vector_store/invalid_result_error.rb +12 -0
- data/lib/phronomy/vector_store.rb +2 -17
- data/lib/phronomy/version.rb +1 -1
- data/lib/phronomy/workflow/completion.rb +11 -0
- data/lib/phronomy/workflow/execution/workflow.rb +37 -9
- data/lib/phronomy/workflow/execution/workflow_action_rules.rb +67 -0
- data/lib/phronomy/workflow/execution/workflow_context.rb +2 -2
- data/lib/phronomy/workflow/execution/workflow_execution_environment.rb +28 -0
- data/lib/phronomy/workflow/execution/workflow_execution_registry.rb +77 -8
- data/lib/phronomy/workflow/execution/workflow_runner.rb +105 -92
- data/lib/phronomy/workflow/execution/workflow_settings.rb +28 -0
- data/lib/phronomy/workflow/execution/workflow_task_execution.rb +153 -0
- data/lib/phronomy/workflow/execution/workflow_task_reception.rb +72 -0
- data/lib/phronomy/workflow/execution/workflow_task_resume_error.rb +14 -0
- data/lib/phronomy/workflow/persistence/state_repository.rb +28 -22
- data/lib/phronomy/workflow/persistence/storage_schema.rb +13 -0
- data/lib/phronomy/workflow/runtime_binding/workflow_engine_environment.rb +61 -0
- data/lib/phronomy/workflow/runtime_binding/workflow_phase_machine_builder.rb +158 -0
- data/lib/phronomy/workflow/runtime_binding/workflow_task_session.rb +76 -0
- data/lib/phronomy/workflow/{execution → runtime_binding}/workflow_terminal_policy.rb +4 -4
- data/lib/phronomy.rb +63 -16
- data/scripts/api_snapshot.rb +47 -15
- data/scripts/check_readme_ruby.rb +24 -29
- data/scripts/check_readme_runnable.rb +92 -81
- data/sig/_private/phronomy/agent/settings.rbs +19 -0
- data/sig/_private/phronomy/configuration/runtime_settings.rbs +20 -0
- data/sig/_private/phronomy/llm_adapter/async/async_client.rbs +10 -0
- data/sig/_private/phronomy/multi_agent/store.rbs +8 -0
- data/sig/_private/phronomy/persistence/storage_boundary.rbs +7 -0
- data/sig/_private/phronomy/tool/settings.rbs +13 -0
- data/sig/_private/phronomy/tracing/settings.rbs +15 -0
- data/sig/_private/phronomy/workflow/execution/workflow_settings.rbs +13 -0
- data/sig/phronomy/agent/admission.rbs +19 -0
- data/sig/phronomy/agent/agent_not_found_error.rbs +6 -0
- data/sig/phronomy/agent/agent_unloaded_error.rbs +6 -0
- data/sig/phronomy/agent/execution_contract.rbs +132 -0
- data/sig/phronomy/agent/execution_environment.rbs +20 -0
- data/sig/phronomy/agent/store.rbs +73 -0
- data/sig/phronomy/agent/stream_callback_error.rbs +8 -0
- data/sig/phronomy/agent.rbs +29 -135
- data/sig/phronomy/common.rbs +7 -0
- data/sig/phronomy/content_store/contracts.rbs +13 -0
- data/sig/phronomy/context.rbs +152 -0
- data/sig/phronomy/embeddings/async/async_client.rbs +9 -0
- data/sig/phronomy/embeddings/base.rbs +23 -0
- data/sig/phronomy/engine/concurrency/timer_bindings.rbs +22 -0
- data/sig/phronomy/engine/control_bindings.rbs +11 -0
- data/sig/phronomy/engine/control_protocols.rbs +23 -0
- data/sig/phronomy/engine/execution_binding.rbs +6 -0
- data/sig/phronomy/engine/execution_receiver.rbs +15 -0
- data/sig/phronomy/engine/observability.rbs +13 -0
- data/sig/phronomy/execution/async_operation.rbs +7 -0
- data/sig/phronomy/execution/blocking.rbs +5 -0
- data/sig/phronomy/execution/concurrency/cancellation_token.rbs +13 -0
- data/sig/phronomy/execution/concurrency/deadline.rbs +10 -0
- data/sig/phronomy/execution/concurrency/result_composition.rbs +7 -0
- data/sig/phronomy/execution/control_protocols.rbs +18 -0
- data/sig/phronomy/execution/errors.rbs +7 -0
- data/sig/phronomy/execution/execution.rbs +41 -0
- data/sig/phronomy/execution/execution_receiver.rbs +40 -0
- data/sig/phronomy/execution/execution_scope_state.rbs +9 -0
- data/sig/phronomy/execution/invocation_context.rbs +18 -0
- data/sig/phronomy/execution/invocation_controls.rbs +13 -0
- data/sig/phronomy/execution/task_result.rbs +29 -0
- data/sig/phronomy/extensions.rbs +1 -21
- data/sig/phronomy/filter/filter_block_error.rbs +6 -0
- data/sig/phronomy/generation/low_confidence_error.rbs +6 -0
- data/sig/phronomy/handoff.rbs +10 -4
- data/sig/phronomy/integrations.rbs +14 -0
- data/sig/phronomy/llm_adapter/backends/ruby_llm.rbs +6 -0
- data/sig/phronomy/llm_adapter/base.rbs +14 -0
- data/sig/phronomy/llm_adapter/usage.rbs +14 -0
- data/sig/phronomy/llm_adapter/values.rbs +43 -0
- data/sig/phronomy/llm_context_window.rbs +10 -0
- data/sig/phronomy/multi_agent/reserved_child_admission.rbs +8 -0
- data/sig/phronomy/multi_agent/store.rbs +54 -0
- data/sig/phronomy/multi_agent/team_busy_error.rbs +8 -0
- data/sig/phronomy/multi_agent/team_not_found_error.rbs +8 -0
- data/sig/phronomy/multi_agent.rbs +6 -3
- data/sig/phronomy/persistence/errors.rbs +18 -0
- data/sig/phronomy/persistence/migration.rbs +13 -0
- data/sig/phronomy/persistence/transaction.rbs +19 -0
- data/sig/phronomy/persistence.rbs +1 -99
- data/sig/phronomy/persistence_composition.rbs +19 -0
- data/sig/phronomy/runtime_composition/configuration.rbs +36 -0
- data/sig/phronomy/storage/async/async_client.rbs +8 -0
- data/sig/phronomy/storage/backends/in_memory.rbs +9 -0
- data/sig/phronomy/{storage.rbs → storage/contracts.rbs} +4 -18
- data/sig/phronomy/tool.rbs +48 -4
- data/sig/phronomy/tracing/observation.rbs +7 -0
- data/sig/phronomy/vector_store/async/async_client.rbs +13 -0
- data/sig/phronomy/vector_store/base.rbs +23 -0
- data/sig/phronomy/workflow/execution/workflow_execution_environment.rbs +15 -0
- data/sig/phronomy/workflow/runtime_binding/workflow_terminal_policy.rbs +7 -0
- data/sig/phronomy/workflow/store.rbs +8 -0
- data/sig/phronomy/workflow.rbs +5 -1
- data/sig/phronomy.rbs +4 -49
- metadata +365 -117
- data/lib/phronomy/agent/concerns/before_llm_input.rb +0 -66
- data/lib/phronomy/agent/concerns/error_translation.rb +0 -45
- data/lib/phronomy/agent/concerns/filterable.rb +0 -184
- data/lib/phronomy/agent/context/capability/base.rb +0 -548
- data/lib/phronomy/agent/context/capability/tool_executor.rb +0 -62
- data/lib/phronomy/agent/context/instruction/prompt_template.rb +0 -102
- data/lib/phronomy/agent/context_assembly/runtime_chat_builder.rb +0 -36
- data/lib/phronomy/agent/context_assembly/token_budget_resolver.rb +0 -22
- data/lib/phronomy/agent/context_parts/validators/final_budget_validator.rb +0 -37
- data/lib/phronomy/agent/context_policies/default.rb +0 -142
- data/lib/phronomy/agent/execution/phase_machine_builder.rb +0 -101
- data/lib/phronomy/agent/execution/provider_call_outcome.rb +0 -106
- data/lib/phronomy/agent/handoff/handoff_execution_coordinator.rb +0 -15
- data/lib/phronomy/agent/handoff/handoff_outcome_committer.rb +0 -131
- data/lib/phronomy/agent/handoff/handoff_request.rb +0 -45
- data/lib/phronomy/agent/lifecycle_contract/handoff_error.rb +0 -7
- data/lib/phronomy/agent/persistence/handoff_state_repository.rb +0 -58
- data/lib/phronomy/agent/persistence/queries.rb +0 -61
- data/lib/phronomy/agent/selection/candidate.rb +0 -53
- data/lib/phronomy/agent/selection/constraint.rb +0 -49
- data/lib/phronomy/agent/tool_execution/tool_call_intercepted.rb +0 -29
- data/lib/phronomy/agent/tool_execution/tool_invocation_session_builder.rb +0 -276
- data/lib/phronomy/configuration/configuration.rb +0 -68
- data/lib/phronomy/configuration/global_configuration.rb +0 -26
- data/lib/phronomy/engine/concurrency/cancellation_scope.rb +0 -124
- data/lib/phronomy/engine/concurrency/operation_binding.rb +0 -43
- data/lib/phronomy/engine/execution_receiver.rb +0 -65
- data/lib/phronomy/engine/runnable.rb +0 -54
- data/lib/phronomy/llm_adapter/ruby_llm.rb +0 -47
- data/lib/phronomy/llm_contract/token_usage.rb +0 -85
- data/lib/phronomy/multi_agent/persistence/queries.rb +0 -30
- data/lib/phronomy/multi_agent/storage_contract/team_storage_schema.rb +0 -15
- data/lib/phronomy/output_parser/contract/parse_error.rb +0 -7
- data/lib/phronomy/persistence/api/persistence.rb +0 -140
- data/lib/phronomy/persistence_composition/repositories.rb +0 -77
- data/lib/phronomy/recovery/recovery.rb +0 -186
- data/lib/phronomy/tool/contract/tool_error.rb +0 -7
- data/lib/phronomy/vector_store/embeddings/base.rb +0 -44
- data/lib/phronomy/vector_store/embeddings/ruby_llm_embeddings.rb +0 -47
- data/lib/phronomy/workflow/phase_machine_builder.rb +0 -205
- data/lib/phronomy/workflow/storage_contract/workflow_storage_schema.rb +0 -9
- data/sig/phronomy/execution_receiver.rbs +0 -34
- data/sig/phronomy/llm_adapter.rbs +0 -11
- data/sig/phronomy/runtime.rbs +0 -76
- /data/lib/phronomy/agent/{context_assembly/context_importer.rb → context_importer.rb} +0 -0
- /data/lib/phronomy/{engine → execution}/backpressure_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/cancellation_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/concurrency/worker_input_restricted.rb +0 -0
- /data/lib/phronomy/{engine → execution}/event_loop_reentrancy_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/invalid_async_entry_action_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/invalid_async_transition_action_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/invalid_async_workflow_action_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/pool_shutdown_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/recursion_limit_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/runtime_shutdown_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/runtime_shutdown_reentrancy_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/scheduler_reentrancy_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/timeout_error.rb +0 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
|
|
3
|
+
module Agent
|
|
4
|
+
type execution_wiring = { ?phronomy_execution_participant: _ExecutionParticipant, ?phronomy_control_bindings: Array[_ControlCapability], ?phronomy_transfer_context: TransferContext, ?phronomy_admission: _AdmissionOwner, ?phronomy_reservation: Hash[String, json_value] }
|
|
5
|
+
type execution_result = { agent_id: String, execution_id: String, status: Symbol, result: String?, output: String?, error: Hash[String, json_value]? }
|
|
6
|
+
|
|
7
|
+
class ReservedExecution < Data
|
|
8
|
+
attr_reader agent_id: String
|
|
9
|
+
attr_reader execution_id: String
|
|
10
|
+
attr_reader correlation: Hash[String, json_value]?
|
|
11
|
+
def self.new: (agent_id: String, execution_id: String, ?correlation: Hash[String, json_value]?) -> instance
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class ExecutionObservation < Data
|
|
15
|
+
attr_reader agent_id: String
|
|
16
|
+
attr_reader execution_id: String
|
|
17
|
+
attr_reader status: Symbol
|
|
18
|
+
attr_reader result: String?
|
|
19
|
+
attr_reader error: Hash[String, json_value]?
|
|
20
|
+
attr_reader reservation: ReservedExecution?
|
|
21
|
+
attr_reader transfer_receipt: Hash[String, json_value]?
|
|
22
|
+
attr_reader cancellation_requested: bool
|
|
23
|
+
def self.new: (agent_id: String, execution_id: String, status: Symbol, result: String?, error: Hash[String, json_value]?, reservation: ReservedExecution?, transfer_receipt: Hash[String, json_value]?, cancellation_requested: bool) -> instance
|
|
24
|
+
def self.from_result: (execution_result) -> instance
|
|
25
|
+
def absent?: () -> bool
|
|
26
|
+
def terminal?: () -> bool
|
|
27
|
+
def active?: () -> bool
|
|
28
|
+
def continuable?: () -> bool
|
|
29
|
+
def value!: () -> execution_result
|
|
30
|
+
def to_result: () -> execution_result
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class ExecutionExtensionState < Data
|
|
34
|
+
attr_reader binding_key: String
|
|
35
|
+
attr_reader binding_version: Integer
|
|
36
|
+
attr_reader state_ref: String?
|
|
37
|
+
def self.new: (binding_key: String, binding_version: Integer, ?state_ref: String?) -> instance
|
|
38
|
+
def self.from_h: (Hash[String, json_value]) -> instance
|
|
39
|
+
def to_h: () -> Hash[String, json_value]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
class KnowledgeItem < Data
|
|
43
|
+
attr_reader content: String
|
|
44
|
+
attr_reader metadata: Hash[String, json_value]
|
|
45
|
+
def self.new: (content: String, ?metadata: Hash[String, json_value]) -> instance
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
class Retention < Data
|
|
49
|
+
attr_reader agent_id: String
|
|
50
|
+
attr_reader execution_id: String?
|
|
51
|
+
attr_reader owner_key: String
|
|
52
|
+
def self.new: (agent_id: String, owner_key: String, ?execution_id: String?) -> instance
|
|
53
|
+
def to_h: () -> Hash[String, json_value]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
class ControlRequest < Data
|
|
57
|
+
attr_reader target_agent_id: String
|
|
58
|
+
attr_reader responsibility: String
|
|
59
|
+
attr_reader selection: Hash[Symbol, bool]
|
|
60
|
+
attr_reader llm_call_id: String?
|
|
61
|
+
attr_reader tool_call_id: String?
|
|
62
|
+
def self.new: (target_agent_id: String, responsibility: String, selection: Hash[Symbol, bool], ?llm_call_id: String?, ?tool_call_id: String?) -> instance
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
interface _ControlCapability
|
|
66
|
+
def source_agent_id: () -> String
|
|
67
|
+
def request: (arguments: Hash[String, json_value], llm_call_id: String?, tool_call_id: String?) -> ControlRequest
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
interface _ExecutionParticipant
|
|
71
|
+
def binding: () -> ExecutionExtensionState
|
|
72
|
+
def guard_change: (ExecutionChange change, ::Phronomy::Persistence::Transaction scope) -> void
|
|
73
|
+
def change_evidence: (ExecutionChange change, ::Phronomy::Persistence::Transaction scope) -> json_value
|
|
74
|
+
def commit: (ExecutionChange change) -> void
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
class ExecutionChange
|
|
78
|
+
attr_reader kind: :dispatch | :terminal
|
|
79
|
+
attr_reader agent_id: String
|
|
80
|
+
attr_reader execution_id: String
|
|
81
|
+
attr_reader extension: ExecutionExtensionState?
|
|
82
|
+
attr_reader operations: Array[Store::AuthorizedOperation]
|
|
83
|
+
attr_reader control_request: ControlRequest?
|
|
84
|
+
attr_reader cancel_requested: bool
|
|
85
|
+
attr_reader recovery_required: bool
|
|
86
|
+
attr_reader durable_context: Hash[String, json_value]?
|
|
87
|
+
attr_reader correlation: Hash[String, json_value]?
|
|
88
|
+
attr_reader coordinator: ::Phronomy::Persistence
|
|
89
|
+
def finishing?: () -> bool
|
|
90
|
+
def prepare_in: (::Phronomy::Persistence::Transaction scope) -> nil
|
|
91
|
+
def commit_in: (::Phronomy::Persistence::Transaction scope, ?state: ExecutionExtensionState?, ?transfer_receipt: Hash[String, json_value]?, ?pending: bool) -> nil
|
|
92
|
+
def transfer_context: (::Phronomy::Persistence::Transaction scope) -> TransferContext
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
class TransferContext
|
|
96
|
+
attr_reader responsibility: String
|
|
97
|
+
attr_reader items: Array[Item]
|
|
98
|
+
def self.from_h: (Hash[String, json_value]) -> instance
|
|
99
|
+
def initialize: (responsibility: String, ?items: Array[Item]) -> void
|
|
100
|
+
def to_h: () -> Hash[String, json_value]
|
|
101
|
+
class Item < Data
|
|
102
|
+
attr_reader candidate_category: Symbol
|
|
103
|
+
attr_reader policy_category: Symbol
|
|
104
|
+
attr_reader role: Symbol?
|
|
105
|
+
attr_reader content: json_value
|
|
106
|
+
attr_reader content_format: Symbol
|
|
107
|
+
attr_reader tool_call_id: String?
|
|
108
|
+
attr_reader provenance: Provenance
|
|
109
|
+
attr_reader metadata: Hash[String, json_value]
|
|
110
|
+
end
|
|
111
|
+
class Provenance < Data
|
|
112
|
+
attr_reader origin_agent_id: String?
|
|
113
|
+
attr_reader origin_record_id: String?
|
|
114
|
+
attr_reader origin_execution_id: String?
|
|
115
|
+
attr_reader origin_llm_call_id: String?
|
|
116
|
+
attr_reader origin_tool_call_id: String?
|
|
117
|
+
attr_reader transfer_path: Array[String]
|
|
118
|
+
def forwarded_to: (String agent_id) -> instance
|
|
119
|
+
def to_h: () -> Hash[String, json_value]
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
class Persistence
|
|
125
|
+
class SaveOutcome < Data
|
|
126
|
+
attr_reader disposition: :committed | :not_committed | :unknown
|
|
127
|
+
attr_reader original_error: Exception?
|
|
128
|
+
attr_reader read_error: Exception?
|
|
129
|
+
def self.compare: [V] (before: V, after: V, ?original_error: Exception?) { () -> V } -> instance
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module Agent
|
|
3
|
+
# Private composition port; serial ownership and routing are process-local.
|
|
4
|
+
class ExecutionEnvironment
|
|
5
|
+
def self.install_provider: (^() -> ExecutionEnvironment provider) -> untyped
|
|
6
|
+
def self.current: () -> ExecutionEnvironment
|
|
7
|
+
def registry: () -> untyped
|
|
8
|
+
def existing_registry: () -> untyped
|
|
9
|
+
def ownership: () -> untyped
|
|
10
|
+
def existing_ownership: () -> untyped
|
|
11
|
+
def executing?: () -> bool
|
|
12
|
+
def session_phase: (String id) -> Symbol?
|
|
13
|
+
def submit: [V] (**untyped options) { () -> V } -> TaskResult[V]
|
|
14
|
+
def submit_authorization: [V] (timeout: Numeric?, cancellation_token: Concurrency::CancellationToken?) { () -> V } -> TaskResult[V]
|
|
15
|
+
def build_agent_session: (invocation: untyped, ?resume_event: Symbol?, ?resume_phase: Symbol?) -> untyped
|
|
16
|
+
def build_tool_session: (invocation: untyped, parent_sink: untyped, ?resume_event: Symbol?, ?resume_phase: Symbol?) -> untyped
|
|
17
|
+
def register_session: (untyped session, completion: TaskResult[untyped]) -> untyped
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
interface _AgentRepository
|
|
3
|
+
def create: (untyped root) -> untyped
|
|
4
|
+
def load: (String agent_id) -> untyped
|
|
5
|
+
def save: (String agent_id, expected_revision: Integer, root: untyped) -> untyped
|
|
6
|
+
def delete: (String agent_id) -> untyped
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
interface _JournalRepository
|
|
10
|
+
def append: (String agent_id, expected_position: Integer, records: Array[untyped]) -> Array[untyped]
|
|
11
|
+
def read: (String agent_id, ?after: Integer?, ?limit: Integer?) -> Array[untyped]
|
|
12
|
+
def head: (String agent_id) -> Integer
|
|
13
|
+
def delete: (String agent_id) -> untyped
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
interface _ExecutionRepository
|
|
17
|
+
def create_active: (untyped execution) -> untyped
|
|
18
|
+
def load: (String execution_id) -> untyped
|
|
19
|
+
def save: (String execution_id, expected_revision: Integer, execution: untyped) -> untyped
|
|
20
|
+
def list_active: (String agent_id) -> Array[untyped]
|
|
21
|
+
def list: (String agent_id, ?after: String?, ?limit: Integer) -> Array[untyped]
|
|
22
|
+
def delete: (String execution_id) -> untyped
|
|
23
|
+
def delete_for_agent: (String agent_id) -> untyped
|
|
24
|
+
def assert_idle!: (String agent_id) -> untyped
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
module Agent
|
|
28
|
+
interface _Records
|
|
29
|
+
def contents: () -> _ContentRepository
|
|
30
|
+
def agents: () -> _AgentRepository
|
|
31
|
+
def journals: () -> _JournalRepository
|
|
32
|
+
def executions: () -> _ExecutionRepository
|
|
33
|
+
def guard_agent!: (String agent_id) -> untyped
|
|
34
|
+
def assert_agent_watermark!: (agent_id: String, agent_revision: Integer, journal_position: Integer) -> true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class Store
|
|
38
|
+
class AuthorizedOperation < Data
|
|
39
|
+
attr_reader invocation_id: String
|
|
40
|
+
attr_reader name: String
|
|
41
|
+
attr_reader arguments: Hash[String, json_value]
|
|
42
|
+
def self.new: (invocation_id: String, name: String, arguments: Hash[String, json_value]) -> instance
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
attr_reader coordinator: ::Phronomy::Persistence
|
|
46
|
+
attr_reader contents: _ContentRepository
|
|
47
|
+
attr_reader agents: _AgentRepository
|
|
48
|
+
attr_reader journals: _JournalRepository
|
|
49
|
+
attr_reader executions: _ExecutionRepository
|
|
50
|
+
def initialize: (coordinator: ::Phronomy::Persistence, records: ::Phronomy::Persistence::_Participant[_Records]) -> void
|
|
51
|
+
def transaction: [R] () { (_Records, ::Phronomy::Persistence::Transaction) -> R } -> R
|
|
52
|
+
def participate: [R] (::Phronomy::Persistence::Transaction scope) { (_Records) -> R } -> R
|
|
53
|
+
def exist?: (String agent_id) -> bool
|
|
54
|
+
def authorized_operations: (::Phronomy::Persistence::Transaction scope, agent_id: String, execution_id: String, invocation_id: String, name: String, arguments: Hash[String, untyped], names: Array[String]) -> Array[AuthorizedOperation]
|
|
55
|
+
def result: (String execution_id) -> Hash[Symbol, untyped]
|
|
56
|
+
def runs: (String owner_id, ?after: String?, ?limit: Integer) -> Array[untyped]
|
|
57
|
+
def observe_execution: (agent_id: String, execution_id: String, ?scope: ::Phronomy::Persistence::Transaction?) -> ExecutionObservation
|
|
58
|
+
def active_executions: (agent_id: String, ?scope: ::Phronomy::Persistence::Transaction?) -> Array[ExecutionObservation]
|
|
59
|
+
def definition: (agent_id: String, ?scope: ::Phronomy::Persistence::Transaction?) -> { id: String, version: Integer }
|
|
60
|
+
def knowledge_snapshot: (agent_id: String, ?scope: ::Phronomy::Persistence::Transaction?) -> Array[KnowledgeItem]
|
|
61
|
+
def execution_extension: (agent_id: String, execution_id: String, binding_key: String, ?scope: ::Phronomy::Persistence::Transaction?) -> ExecutionExtensionState?
|
|
62
|
+
def guard_agents: (::Phronomy::Persistence::Transaction scope, agent_ids: Array[String]) -> nil
|
|
63
|
+
def remove_execution_extension: (agent_id: String, execution_id: String, binding_key: String, scope: ::Phronomy::Persistence::Transaction) -> nil
|
|
64
|
+
def execution_identity: (String execution_id, ?scope: ::Phronomy::Persistence::Transaction?) -> ReservedExecution
|
|
65
|
+
def retained_references: (agent_id: String, ?scope: ::Phronomy::Persistence::Transaction?) -> Array[Retention]
|
|
66
|
+
def retain: (Retention retention, ?scope: ::Phronomy::Persistence::Transaction?) -> Retention
|
|
67
|
+
def release_retention: (agent_id: String, owner_key: String, scope: ::Phronomy::Persistence::Transaction) -> nil
|
|
68
|
+
def request_cancellation: (agent_id: String, execution_id: String, ?scope: ::Phronomy::Persistence::Transaction?) -> bool
|
|
69
|
+
def cancellation_requested?: (agent_id: String, execution_id: String, ?scope: ::Phronomy::Persistence::Transaction?) -> bool
|
|
70
|
+
def assert_agent_watermark!: (agent_id: String, agent_revision: Integer, journal_position: Integer) -> true
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
class StreamCallbackError < Error
|
|
3
|
+
attr_reader event_type: Symbol
|
|
4
|
+
attr_reader original_error: Exception
|
|
5
|
+
attr_reader result: untyped
|
|
6
|
+
def initialize: (event_type: Symbol, original_error: Exception, ?result: untyped, ?code: String?) -> void
|
|
7
|
+
end
|
|
8
|
+
end
|
data/sig/phronomy/agent.rbs
CHANGED
|
@@ -1,25 +1,23 @@
|
|
|
1
1
|
module Phronomy
|
|
2
2
|
module Agent
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
# The block's TaskResult is awaited and unwrapped; Scope itself is process-local.
|
|
4
|
+
def self.open_scope: [R] () { (Scope) -> (R | Phronomy::TaskResult[R]) } -> R
|
|
5
|
+
|
|
6
|
+
class Scope
|
|
7
|
+
def create: (singleton(Base) agent_class, **untyped options) ?{ (untyped event) -> void } -> Base
|
|
8
|
+
def create_async: (singleton(Base) agent_class, **untyped options) ?{ (untyped event) -> void } -> Phronomy::TaskResult[Base]
|
|
9
|
+
def load: (singleton(Base) agent_class, String agent_id, persistence: Store, **untyped options) ?{ (untyped event) -> void } -> Base
|
|
10
|
+
def load_async: (singleton(Base) agent_class, String agent_id, persistence: Store, **untyped options) ?{ (untyped event) -> void } -> Phronomy::TaskResult[Base]
|
|
5
11
|
end
|
|
6
12
|
|
|
7
|
-
class
|
|
8
|
-
attr_reader
|
|
9
|
-
attr_reader
|
|
10
|
-
|
|
11
|
-
def initialize: (?model_config_patch: Hash[untyped, untyped]?, ?segment_candidates: Array[untyped]?) -> void
|
|
12
|
-
def self.empty: () -> LLMInputPatch
|
|
13
|
+
class ScopeCleanupError < Phronomy::Error
|
|
14
|
+
attr_reader failures: Array[{ agent_id: String, error: Exception }]
|
|
15
|
+
attr_reader result: untyped
|
|
16
|
+
def initialize: (failures: Array[{ agent_id: String, error: Exception }], result: untyped) -> void
|
|
13
17
|
end
|
|
14
18
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
attr_reader agent_definition_id: String
|
|
18
|
-
attr_reader agent_definition_version: Integer
|
|
19
|
-
attr_reader config: Hash[untyped, untyped]
|
|
20
|
-
attr_reader call_sequence: Integer
|
|
21
|
-
|
|
22
|
-
def initialize: (agent_id: String, agent_definition_id: String, agent_definition_version: Integer, ?config: Hash[untyped, untyped], call_sequence: Integer) -> void
|
|
19
|
+
interface _BeforeLLMInputHook
|
|
20
|
+
def call: (Phronomy::Context::LLMInputBuildContext context) -> Phronomy::Context::LLMInputPatch?
|
|
23
21
|
end
|
|
24
22
|
|
|
25
23
|
class ToolApprovalRequest
|
|
@@ -67,118 +65,6 @@ module Phronomy
|
|
|
67
65
|
def initialize: (agent_id: String, agent_definition_id: String, agent_definition_version: Integer, execution_id: String, tool_name: String, tool_schema: Hash[untyped, untyped], tool_invocation_id: String, tool_call_id: String?, arguments: Hash[untyped, untyped], ?facts: Hash[untyped, untyped], ?invocation_context: Hash[untyped, untyped], ?origin: Symbol, ?metadata: Hash[untyped, untyped], ?default_decision: Symbol?) -> void
|
|
68
66
|
end
|
|
69
67
|
|
|
70
|
-
class LLMInputManifest
|
|
71
|
-
VERSION: String
|
|
72
|
-
CALL_MODES: Array[Symbol]
|
|
73
|
-
SEGMENT_DELIVERIES: Array[String]
|
|
74
|
-
|
|
75
|
-
def self.from_h: (Hash[String, untyped] hash) -> LLMInputManifest
|
|
76
|
-
def version: () -> String
|
|
77
|
-
def to_h: () -> Hash[String, untyped]
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
class ContextPolicyInput
|
|
81
|
-
class Provenance
|
|
82
|
-
attr_reader origin: Symbol
|
|
83
|
-
attr_reader content_ref: String?
|
|
84
|
-
attr_reader record_id: String?
|
|
85
|
-
attr_reader agent_id: String?
|
|
86
|
-
attr_reader execution_id: String?
|
|
87
|
-
attr_reader llm_call_id: String?
|
|
88
|
-
def initialize: (origin: Symbol, ?content_ref: String?, ?record_id: String?, ?agent_id: String?, ?execution_id: String?, ?llm_call_id: String?) -> void
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
class InstructionItem
|
|
92
|
-
attr_reader id: String
|
|
93
|
-
attr_reader kind: Symbol
|
|
94
|
-
attr_reader role: Symbol?
|
|
95
|
-
attr_reader content: untyped
|
|
96
|
-
attr_reader content_format: Symbol
|
|
97
|
-
attr_reader estimated_tokens: Integer
|
|
98
|
-
attr_reader required: bool
|
|
99
|
-
attr_reader provenance: Provenance
|
|
100
|
-
attr_reader metadata: Hash[untyped, untyped]
|
|
101
|
-
def initialize: (id: String, kind: Symbol, ?role: Symbol?, content: untyped, ?content_format: Symbol?, ?estimated_tokens: Integer?, ?required: bool?, ?provenance: Provenance?, ?metadata: Hash[untyped, untyped]) -> void
|
|
102
|
-
def required?: () -> bool
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
class KnowledgeItem
|
|
106
|
-
attr_reader id: String
|
|
107
|
-
attr_reader kind: Symbol
|
|
108
|
-
attr_reader role: Symbol?
|
|
109
|
-
attr_reader content: untyped
|
|
110
|
-
attr_reader content_format: Symbol
|
|
111
|
-
attr_reader estimated_tokens: Integer
|
|
112
|
-
attr_reader required: bool
|
|
113
|
-
attr_reader provenance: Provenance
|
|
114
|
-
attr_reader metadata: Hash[untyped, untyped]
|
|
115
|
-
def initialize: (id: String, kind: Symbol, ?role: Symbol?, content: untyped, ?content_format: Symbol?, ?estimated_tokens: Integer?, ?required: bool?, ?provenance: Provenance?, ?metadata: Hash[untyped, untyped]) -> void
|
|
116
|
-
def required?: () -> bool
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
class ToolItem
|
|
120
|
-
attr_reader id: String
|
|
121
|
-
attr_reader definition: Hash[untyped, untyped]
|
|
122
|
-
attr_reader estimated_tokens: Integer
|
|
123
|
-
attr_reader required: bool
|
|
124
|
-
attr_reader provenance: Provenance
|
|
125
|
-
attr_reader metadata: Hash[untyped, untyped]
|
|
126
|
-
def initialize: (id: String, definition: Hash[untyped, untyped], ?estimated_tokens: Integer?, ?required: bool?, ?provenance: Provenance?, ?metadata: Hash[untyped, untyped]) -> void
|
|
127
|
-
def required?: () -> bool
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
class ConversationItem
|
|
131
|
-
attr_reader id: String
|
|
132
|
-
attr_reader kind: Symbol
|
|
133
|
-
attr_reader role: Symbol?
|
|
134
|
-
attr_reader content: untyped
|
|
135
|
-
attr_reader content_format: Symbol
|
|
136
|
-
attr_reader sequence: Integer?
|
|
137
|
-
attr_reader estimated_tokens: Integer
|
|
138
|
-
attr_reader required: bool
|
|
139
|
-
attr_reader provenance: Provenance
|
|
140
|
-
attr_reader tool_call_id: String?
|
|
141
|
-
attr_reader tool_call_ids: Array[String]
|
|
142
|
-
attr_reader delivery: Symbol
|
|
143
|
-
attr_reader metadata: Hash[untyped, untyped]
|
|
144
|
-
def initialize: (id: String, kind: Symbol, ?role: Symbol?, content: untyped, ?content_format: Symbol?, ?sequence: Integer?, ?estimated_tokens: Integer?, ?required: bool?, ?provenance: Provenance?, ?tool_call_id: String?, ?tool_call_ids: Array[String], ?delivery: Symbol, ?metadata: Hash[untyped, untyped]) -> void
|
|
145
|
-
def required?: () -> bool
|
|
146
|
-
def with_required: (bool required) -> ConversationItem
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
attr_reader agent_id: String
|
|
150
|
-
attr_reader execution_id: String?
|
|
151
|
-
attr_reader call_sequence: Integer
|
|
152
|
-
attr_reader call_mode: Symbol
|
|
153
|
-
attr_reader instruction: Array[InstructionItem]
|
|
154
|
-
attr_reader knowledge: Array[KnowledgeItem]
|
|
155
|
-
attr_reader tools: Array[ToolItem]
|
|
156
|
-
attr_reader conversation: Array[Array[ConversationItem]]
|
|
157
|
-
attr_reader token_budget: untyped
|
|
158
|
-
attr_reader model_config: Hash[untyped, untyped]
|
|
159
|
-
attr_reader previous_manifest: LLMInputManifest?
|
|
160
|
-
attr_reader metadata: Hash[untyped, untyped]
|
|
161
|
-
def initialize: (agent_id: String, ?execution_id: String?, call_sequence: Integer, call_mode: Symbol, ?instruction: Array[InstructionItem], ?knowledge: Array[KnowledgeItem], ?tools: Array[ToolItem], ?conversation: Array[Array[ConversationItem]], token_budget: untyped, ?model_config: Hash[untyped, untyped], previous_manifest: LLMInputManifest?, ?metadata: Hash[untyped, untyped]) -> void
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
class ContextPlan
|
|
165
|
-
attr_reader instruction: Array[ContextPolicyInput::InstructionItem]
|
|
166
|
-
attr_reader knowledge: Array[ContextPolicyInput::KnowledgeItem]
|
|
167
|
-
attr_reader tools: Array[ContextPolicyInput::ToolItem]
|
|
168
|
-
attr_reader conversation: Array[Array[ContextPolicyInput::ConversationItem]]
|
|
169
|
-
attr_reader metadata: Hash[untyped, untyped]
|
|
170
|
-
def initialize: (?instruction: Array[ContextPolicyInput::InstructionItem], ?knowledge: Array[ContextPolicyInput::KnowledgeItem], ?tools: Array[ContextPolicyInput::ToolItem], ?conversation: Array[Array[ContextPolicyInput::ConversationItem]], ?metadata: Hash[untyped, untyped]) -> void
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
class ContextPolicy
|
|
174
|
-
def call: (ContextPolicyInput input) -> ContextPlan
|
|
175
|
-
|
|
176
|
-
def instruction_item: (content: untyped, ?role: Symbol, ?kind: Symbol, ?content_format: Symbol?, ?required: bool, ?metadata: Hash[untyped, untyped]) -> ContextPolicyInput::InstructionItem
|
|
177
|
-
def knowledge_item: (content: untyped, ?role: Symbol, ?kind: Symbol, ?content_format: Symbol?, ?required: bool, ?metadata: Hash[untyped, untyped]) -> ContextPolicyInput::KnowledgeItem
|
|
178
|
-
def conversation_item: (content: untyped, role: Symbol, ?kind: Symbol, ?content_format: Symbol?, ?sequence: Integer?, ?required: bool, ?tool_call_id: String?, ?tool_call_ids: Array[String], ?delivery: Symbol, ?metadata: Hash[untyped, untyped]) -> ContextPolicyInput::ConversationItem
|
|
179
|
-
def plan: (?instruction: Array[ContextPolicyInput::InstructionItem], ?knowledge: Array[ContextPolicyInput::KnowledgeItem], ?tools: Array[ContextPolicyInput::ToolItem], ?conversation: Array[Array[ContextPolicyInput::ConversationItem]], ?metadata: Hash[untyped, untyped]) -> ContextPlan
|
|
180
|
-
end
|
|
181
|
-
|
|
182
68
|
class Base
|
|
183
69
|
def self.model: (?String name) -> String?
|
|
184
70
|
def self.instructions: (?untyped text) { (untyped) -> untyped } -> untyped
|
|
@@ -190,23 +76,29 @@ module Phronomy
|
|
|
190
76
|
def self.max_iterations: (?Integer value) -> Integer
|
|
191
77
|
def self.cache_instructions: (?bool enabled) -> bool?
|
|
192
78
|
def self.max_output_tokens: (?Integer value) -> Integer?
|
|
193
|
-
def self.context_policy: () -> ContextPolicy
|
|
194
|
-
| (ContextPolicy policy) -> ContextPolicy
|
|
79
|
+
def self.context_policy: () -> Phronomy::Context::ContextPolicy
|
|
80
|
+
| (Phronomy::Context::ContextPolicy policy) -> Phronomy::Context::ContextPolicy
|
|
195
81
|
def self.agent_definition: () -> Hash[Symbol, untyped]
|
|
196
82
|
| (version: Integer, ?id: String?) -> Hash[Symbol, untyped]
|
|
197
|
-
def self.before_llm_input: (?_BeforeLLMInputHook callable) ?{ (LLMInputBuildContext context) -> LLMInputPatch? } -> _BeforeLLMInputHook?
|
|
83
|
+
def self.before_llm_input: (?_BeforeLLMInputHook callable) ?{ (Phronomy::Context::LLMInputBuildContext context) -> Phronomy::Context::LLMInputPatch? } -> _BeforeLLMInputHook?
|
|
198
84
|
|
|
199
85
|
# on_event is bound once to the live Agent Runtime incarnation. The block
|
|
200
86
|
# is an alternative spelling of on_event; supplying both is an error.
|
|
201
|
-
def self.create: (?agent_id: String, ?context: untyped, ?knowledge: Array[
|
|
202
|
-
def self.load: (String agent_id, persistence:
|
|
87
|
+
def self.create: (?agent_id: String, ?context: untyped, ?knowledge: Array[KnowledgeItem], ?retention: Retention?, ?persistence: Store?, ?metadata: Hash[untyped, untyped], ?on_event: ^(untyped) -> void) ?{ (untyped event) -> void } -> instance
|
|
88
|
+
def self.load: (String agent_id, persistence: Store, ?execution_wiring: execution_wiring, ?on_event: ^(untyped) -> void) ?{ (untyped event) -> void } -> instance
|
|
203
89
|
def self.get: (String agent_id) -> instance?
|
|
204
90
|
def self.live_for_execution: (String execution_id) -> instance
|
|
205
91
|
|
|
206
|
-
def initialize: (?agent_id: String?, ?context: untyped, ?knowledge: Array[
|
|
92
|
+
def initialize: (?agent_id: String?, ?context: untyped, ?knowledge: Array[KnowledgeItem], ?retention: Retention?, ?persistence: Store?, ?metadata: Hash[untyped, untyped], ?on_event: ^(untyped) -> void) ?{ (untyped event) -> void } -> void
|
|
207
93
|
|
|
208
94
|
attr_reader agent_id: String
|
|
209
|
-
attr_reader persistence:
|
|
95
|
+
attr_reader persistence: Store
|
|
96
|
+
def knowledge_snapshot: () -> Array[KnowledgeItem]
|
|
97
|
+
def event_listener: () -> (^(Object) -> void)?
|
|
98
|
+
def start_reserved_async: (reservation: ReservedExecution, input: String, ?config: Hash[Symbol, Object]) -> TaskResult[execution_result]
|
|
99
|
+
def resume_async: (String execution_id, ?config: Hash[Symbol, Object]) -> TaskResult[execution_result]
|
|
100
|
+
def resume: (String execution_id, ?config: Hash[Symbol, Object]) -> execution_result
|
|
101
|
+
def cancel_async: (String execution_id) -> TaskResult[ExecutionObservation]
|
|
210
102
|
attr_accessor before_llm_input: _BeforeLLMInputHook?
|
|
211
103
|
|
|
212
104
|
# Public operation methods no longer accept per-invocation event listeners
|
|
@@ -232,6 +124,8 @@ module Phronomy
|
|
|
232
124
|
def reset_context!: () -> untyped
|
|
233
125
|
def close!: () -> untyped
|
|
234
126
|
def purge!: () -> bool
|
|
127
|
+
def unload_async: () -> Phronomy::TaskResult[bool]
|
|
128
|
+
def unload!: (?timeout: Numeric?) -> bool
|
|
235
129
|
end
|
|
236
130
|
end
|
|
237
131
|
end
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
type json_value = nil | bool | String | Integer | Float | Array[json_value] | Hash[String, json_value]
|
|
3
|
+
# Synchronous backends need only cooperative cancellation, not Runtime services.
|
|
4
|
+
interface _CancellationSignal
|
|
5
|
+
def raise_if_cancelled!: (?String message) -> nil
|
|
6
|
+
end
|
|
7
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
interface _ContentRepository
|
|
3
|
+
def put: (String bytes, canonicalization_version: untyped) -> String
|
|
4
|
+
def fetch: (String content_id) -> String
|
|
5
|
+
def exist?: (String content_id) -> bool
|
|
6
|
+
def put_text: (String text) -> String
|
|
7
|
+
def put_json: (untyped value) -> String
|
|
8
|
+
def fetch_text: (String content_id) -> String
|
|
9
|
+
def fetch_json: (String content_id) -> untyped
|
|
10
|
+
def fetch_many: (Array[String] content_ids) -> Hash[String, String]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module Context
|
|
3
|
+
class LLMInputPatch
|
|
4
|
+
attr_reader model_config_patch: Hash[untyped, untyped]?
|
|
5
|
+
attr_reader segment_candidates: Array[untyped]?
|
|
6
|
+
|
|
7
|
+
def initialize: (?model_config_patch: Hash[untyped, untyped]?, ?segment_candidates: Array[untyped]?) -> void
|
|
8
|
+
def self.empty: () -> LLMInputPatch
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class LLMInputBuildContext
|
|
12
|
+
attr_reader agent_id: String
|
|
13
|
+
attr_reader agent_definition_id: String
|
|
14
|
+
attr_reader agent_definition_version: Integer
|
|
15
|
+
attr_reader config: Hash[untyped, untyped]
|
|
16
|
+
attr_reader call_sequence: Integer
|
|
17
|
+
|
|
18
|
+
def initialize: (agent_id: String, agent_definition_id: String, agent_definition_version: Integer, ?config: Hash[untyped, untyped], call_sequence: Integer) -> void
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class LLMInputManifest
|
|
22
|
+
VERSION: String
|
|
23
|
+
CALL_MODES: Array[Symbol]
|
|
24
|
+
SEGMENT_DELIVERIES: Array[String]
|
|
25
|
+
|
|
26
|
+
def self.from_h: (Hash[String, untyped] hash) -> LLMInputManifest
|
|
27
|
+
def version: () -> String
|
|
28
|
+
def to_h: () -> Hash[String, untyped]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class ContextPolicyInput
|
|
32
|
+
class Provenance
|
|
33
|
+
attr_reader origin: Symbol
|
|
34
|
+
attr_reader content_ref: String?
|
|
35
|
+
attr_reader record_id: String?
|
|
36
|
+
attr_reader agent_id: String?
|
|
37
|
+
attr_reader execution_id: String?
|
|
38
|
+
attr_reader llm_call_id: String?
|
|
39
|
+
def initialize: (origin: Symbol, ?content_ref: String?, ?record_id: String?, ?agent_id: String?, ?execution_id: String?, ?llm_call_id: String?) -> void
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
class InstructionItem
|
|
43
|
+
attr_reader id: String
|
|
44
|
+
attr_reader kind: Symbol
|
|
45
|
+
attr_reader role: Symbol?
|
|
46
|
+
attr_reader content: untyped
|
|
47
|
+
attr_reader content_format: Symbol
|
|
48
|
+
attr_reader estimated_tokens: Integer
|
|
49
|
+
attr_reader required: bool
|
|
50
|
+
attr_reader provenance: Provenance
|
|
51
|
+
attr_reader metadata: Hash[untyped, untyped]
|
|
52
|
+
def initialize: (id: String, kind: Symbol, ?role: Symbol?, content: untyped, ?content_format: Symbol?, ?estimated_tokens: Integer?, ?required: bool?, ?provenance: Provenance?, ?metadata: Hash[untyped, untyped]) -> void
|
|
53
|
+
def required?: () -> bool
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
class KnowledgeItem
|
|
57
|
+
attr_reader id: String
|
|
58
|
+
attr_reader kind: Symbol
|
|
59
|
+
attr_reader role: Symbol?
|
|
60
|
+
attr_reader content: untyped
|
|
61
|
+
attr_reader content_format: Symbol
|
|
62
|
+
attr_reader estimated_tokens: Integer
|
|
63
|
+
attr_reader required: bool
|
|
64
|
+
attr_reader provenance: Provenance
|
|
65
|
+
attr_reader metadata: Hash[untyped, untyped]
|
|
66
|
+
def initialize: (id: String, kind: Symbol, ?role: Symbol?, content: untyped, ?content_format: Symbol?, ?estimated_tokens: Integer?, ?required: bool?, ?provenance: Provenance?, ?metadata: Hash[untyped, untyped]) -> void
|
|
67
|
+
def required?: () -> bool
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
class ToolItem
|
|
71
|
+
attr_reader id: String
|
|
72
|
+
attr_reader definition: Hash[untyped, untyped]
|
|
73
|
+
attr_reader estimated_tokens: Integer
|
|
74
|
+
attr_reader required: bool
|
|
75
|
+
attr_reader provenance: Provenance
|
|
76
|
+
attr_reader metadata: Hash[untyped, untyped]
|
|
77
|
+
def initialize: (id: String, definition: Hash[untyped, untyped], ?estimated_tokens: Integer?, ?required: bool?, ?provenance: Provenance?, ?metadata: Hash[untyped, untyped]) -> void
|
|
78
|
+
def required?: () -> bool
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
class ConversationItem
|
|
82
|
+
attr_reader id: String
|
|
83
|
+
attr_reader kind: Symbol
|
|
84
|
+
attr_reader role: Symbol?
|
|
85
|
+
attr_reader content: untyped
|
|
86
|
+
attr_reader content_format: Symbol
|
|
87
|
+
attr_reader sequence: Integer?
|
|
88
|
+
attr_reader estimated_tokens: Integer
|
|
89
|
+
attr_reader required: bool
|
|
90
|
+
attr_reader provenance: Provenance
|
|
91
|
+
attr_reader tool_call_id: String?
|
|
92
|
+
attr_reader tool_call_ids: Array[String]
|
|
93
|
+
attr_reader delivery: Symbol
|
|
94
|
+
attr_reader metadata: Hash[untyped, untyped]
|
|
95
|
+
def initialize: (id: String, kind: Symbol, ?role: Symbol?, content: untyped, ?content_format: Symbol?, ?sequence: Integer?, ?estimated_tokens: Integer?, ?required: bool?, ?provenance: Provenance?, ?tool_call_id: String?, ?tool_call_ids: Array[String], ?delivery: Symbol, ?metadata: Hash[untyped, untyped]) -> void
|
|
96
|
+
def required?: () -> bool
|
|
97
|
+
def with_required: (bool required) -> ConversationItem
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
attr_reader agent_id: String
|
|
101
|
+
attr_reader execution_id: String?
|
|
102
|
+
attr_reader call_sequence: Integer
|
|
103
|
+
attr_reader call_mode: Symbol
|
|
104
|
+
attr_reader instruction: Array[InstructionItem]
|
|
105
|
+
attr_reader knowledge: Array[KnowledgeItem]
|
|
106
|
+
attr_reader tools: Array[ToolItem]
|
|
107
|
+
attr_reader conversation: Array[Array[ConversationItem]]
|
|
108
|
+
attr_reader token_budget: untyped
|
|
109
|
+
attr_reader model_config: Hash[untyped, untyped]
|
|
110
|
+
attr_reader previous_manifest: LLMInputManifest?
|
|
111
|
+
attr_reader metadata: Hash[untyped, untyped]
|
|
112
|
+
def initialize: (agent_id: String, ?execution_id: String?, call_sequence: Integer, call_mode: Symbol, ?instruction: Array[InstructionItem], ?knowledge: Array[KnowledgeItem], ?tools: Array[ToolItem], ?conversation: Array[Array[ConversationItem]], token_budget: untyped, ?model_config: Hash[untyped, untyped], previous_manifest: LLMInputManifest?, ?metadata: Hash[untyped, untyped]) -> void
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
class ContextPlan
|
|
116
|
+
attr_reader instruction: Array[ContextPolicyInput::InstructionItem]
|
|
117
|
+
attr_reader knowledge: Array[ContextPolicyInput::KnowledgeItem]
|
|
118
|
+
attr_reader tools: Array[ContextPolicyInput::ToolItem]
|
|
119
|
+
attr_reader conversation: Array[Array[ContextPolicyInput::ConversationItem]]
|
|
120
|
+
attr_reader metadata: Hash[untyped, untyped]
|
|
121
|
+
def initialize: (?instruction: Array[ContextPolicyInput::InstructionItem], ?knowledge: Array[ContextPolicyInput::KnowledgeItem], ?tools: Array[ContextPolicyInput::ToolItem], ?conversation: Array[Array[ContextPolicyInput::ConversationItem]], ?metadata: Hash[untyped, untyped]) -> void
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
class ContextPolicy
|
|
125
|
+
def call: (ContextPolicyInput input) -> ContextPlan
|
|
126
|
+
|
|
127
|
+
def instruction_item: (content: untyped, ?role: Symbol, ?kind: Symbol, ?content_format: Symbol?, ?required: bool, ?metadata: Hash[untyped, untyped]) -> ContextPolicyInput::InstructionItem
|
|
128
|
+
def knowledge_item: (content: untyped, ?role: Symbol, ?kind: Symbol, ?content_format: Symbol?, ?required: bool, ?metadata: Hash[untyped, untyped]) -> ContextPolicyInput::KnowledgeItem
|
|
129
|
+
def conversation_item: (content: untyped, role: Symbol, ?kind: Symbol, ?content_format: Symbol?, ?sequence: Integer?, ?required: bool, ?tool_call_id: String?, ?tool_call_ids: Array[String], ?delivery: Symbol, ?metadata: Hash[untyped, untyped]) -> ContextPolicyInput::ConversationItem
|
|
130
|
+
def plan: (?instruction: Array[ContextPolicyInput::InstructionItem], ?knowledge: Array[ContextPolicyInput::KnowledgeItem], ?tools: Array[ContextPolicyInput::ToolItem], ?conversation: Array[Array[ContextPolicyInput::ConversationItem]], ?metadata: Hash[untyped, untyped]) -> ContextPlan
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
class BudgetExceededError < Phronomy::Error
|
|
134
|
+
end
|
|
135
|
+
class ManifestError < Phronomy::Error
|
|
136
|
+
end
|
|
137
|
+
class Assembly
|
|
138
|
+
@tracer: Phronomy::Tracing::Base
|
|
139
|
+
def initialize: (?tracer: Phronomy::Tracing::Base) -> void
|
|
140
|
+
class Prepared
|
|
141
|
+
attr_reader input: ContextPolicyInput
|
|
142
|
+
attr_reader plan: ContextPlan
|
|
143
|
+
attr_reader adapter_identity: Hash[String, String?]
|
|
144
|
+
end
|
|
145
|
+
def prepare: (input: ContextPolicyInput, policy: ContextPolicy, adapter_identity: Hash[String, String?]) -> Prepared
|
|
146
|
+
def store: (Prepared prepared, contents: Phronomy::_ContentRepository) -> [LLMInputManifest, String]
|
|
147
|
+
end
|
|
148
|
+
class DefaultPolicy < ContextPolicy
|
|
149
|
+
def self.instance: () -> DefaultPolicy
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module Embeddings
|
|
3
|
+
class AsyncClient
|
|
4
|
+
def initialize: (adapter: Base, ?pool: untyped) -> void
|
|
5
|
+
def embed_async: (String text, ?Concurrency::CancellationToken? cancellation_token, ?timeout: Numeric?) -> TaskResult[Array[Float]]
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module Embeddings
|
|
3
|
+
class InvalidResultError < Phronomy::Error
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
class TransportError < Phronomy::Error
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class AuthenticationError < TransportError
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class RateLimitError < TransportError
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class Base
|
|
16
|
+
def embed: (String text, ?_CancellationSignal? cancellation_token) -> Array[Float]
|
|
17
|
+
|
|
18
|
+
# Protected extension SPI at runtime; RBS has no protected visibility.
|
|
19
|
+
private
|
|
20
|
+
def perform_embed: (String text, ?_CancellationSignal? cancellation_token) -> Array[Numeric]
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|