phronomy 0.27.0 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.mutant.yml +9 -9
- data/CHANGELOG.md +52 -0
- data/CONTRIBUTING.md +8 -8
- data/README.md +9 -3
- data/benchmark/bench_agent_invoke.rb +25 -50
- data/benchmark/bench_context_assembler.rb +14 -11
- data/benchmark/bench_regression.rb +1 -1
- data/benchmark/bench_tool_schema.rb +1 -1
- data/docs/architecture/agent-chat-and-state-ownership.md +7 -1
- data/docs/architecture/agent-transition-ownership.md +13 -89
- data/docs/architecture/backend-groups.md +152 -0
- data/docs/architecture/before-llm-input.md +3 -3
- data/docs/architecture/context-management.md +1 -1
- data/docs/architecture/execution-abstraction-review.md +88 -0
- data/docs/architecture/execution-boundaries.md +28 -0
- data/docs/architecture/execution-metadata-and-values.md +6 -0
- data/docs/architecture/multi-agent-handoff.md +6 -5
- data/docs/architecture/persistence.md +27 -9
- data/docs/architecture/r8-unit1.md +104 -0
- data/docs/architecture/r8-unit10.md +72 -0
- data/docs/architecture/r8-unit11.md +71 -0
- data/docs/architecture/r8-unit12.md +67 -0
- data/docs/architecture/r8-unit13.md +61 -0
- data/docs/architecture/r8-unit14.md +72 -0
- data/docs/architecture/r8-unit15.md +65 -0
- data/docs/architecture/r8-unit16.md +54 -0
- data/docs/architecture/r8-unit17.md +73 -0
- data/docs/architecture/r8-unit18.md +92 -0
- data/docs/architecture/r8-unit19.md +61 -0
- data/docs/architecture/r8-unit2.md +55 -0
- data/docs/architecture/r8-unit20.md +51 -0
- data/docs/architecture/r8-unit21.md +79 -0
- data/docs/architecture/r8-unit22.md +74 -0
- data/docs/architecture/r8-unit23.md +81 -0
- data/docs/architecture/r8-unit3.md +130 -0
- data/docs/architecture/r8-unit4.md +79 -0
- data/docs/architecture/r8-unit5.md +115 -0
- data/docs/architecture/r8-unit6.md +71 -0
- data/docs/architecture/r8-unit7.md +70 -0
- data/docs/architecture/r8-unit8.md +78 -0
- data/docs/architecture/r8-unit9.md +73 -0
- data/docs/architecture/refactoring-closure.md +10 -1
- data/docs/architecture/remaining-refactoring-plan.md +16 -0
- data/docs/architecture/storage-execution-boundaries.md +54 -0
- data/docs/architecture/tool-schema-recording-gap.md +6 -0
- data/docs/architecture/tracing.md +1 -1
- data/docs/architecture/workflow-terminal-ownership-design.md +2 -2
- data/docs/architecture.md +24 -11
- data/docs/decisions/015-tool-public-facade-and-rbs-boundary.md +3 -3
- data/docs/decisions/027-llm-adapter-provider-boundary.md +2 -0
- data/docs/decisions/030-agent-handoff-domain-and-durable-responsibility.md +2 -0
- data/docs/decisions/031-durable-multi-agent-coordination.md +2 -0
- data/docs/decisions/032-storage-backend-composition.md +5 -0
- data/docs/decisions/034-handoff-runner-coordination-ownership.md +2 -0
- data/docs/decisions/035-tool-executor-capability-ownership.md +1 -1
- data/docs/decisions/038-responsibility-based-source-layout.md +14 -0
- data/docs/decisions/039-runtime-configuration-lifecycle-ownership.md +8 -0
- data/docs/decisions/040-configuration-default-composition.md +12 -1
- data/docs/decisions/045-worker-input-restriction-ownership.md +4 -0
- data/docs/decisions/051-execution-outcome-worker-ownership.md +2 -0
- data/docs/decisions/056-workflow-terminal-policy-ownership.md +1 -1
- data/docs/decisions/058-neutral-storage-primitives.md +5 -0
- data/docs/decisions/059-backend-contracts-and-async-clients.md +74 -0
- data/docs/decisions/060-runtime-settings-and-application-configuration.md +86 -0
- data/docs/decisions/061-persistence-failure-contracts.md +89 -0
- data/docs/decisions/062-content-store-service.md +52 -0
- data/docs/decisions/063-execution-contracts-and-services.md +88 -0
- data/docs/decisions/064-agent-execution-and-multi-agent-responsibility.md +36 -0
- data/docs/decisions/065-vector-and-embeddings-common-operations.md +38 -0
- data/docs/decisions/066-llm-and-tool-operation-contracts.md +20 -0
- data/docs/decisions/067-agent-progress-and-engine-connection.md +29 -0
- data/docs/decisions/068-agent-tool-child-progress-and-tool-operation.md +36 -0
- data/docs/decisions/README.md +18 -1
- data/docs/execution-boundaries-preview.md +45 -0
- data/docs/features.md +8 -3
- data/docs/getting-started.md +9 -6
- data/docs/migrations/0.22.md +2 -2
- data/docs/migrations/durable-semantic-coordination-v2.md +2 -0
- data/docs/migrations/handoff-runner-multi-agent.md +2 -0
- data/docs/migrations/persistence-failure-contracts.md +67 -0
- data/docs/migrations/r8-unit10.md +36 -0
- data/docs/migrations/r8-unit11.md +33 -0
- data/docs/migrations/r8-unit12.md +31 -0
- data/docs/migrations/r8-unit13.md +36 -0
- data/docs/migrations/r8-unit14.md +31 -0
- data/docs/migrations/r8-unit15.md +31 -0
- data/docs/migrations/r8-unit16.md +26 -0
- data/docs/migrations/r8-unit17.md +28 -0
- data/docs/migrations/r8-unit18.md +29 -0
- data/docs/migrations/r8-unit19.md +28 -0
- data/docs/migrations/r8-unit20.md +24 -0
- data/docs/migrations/r8-unit21.md +28 -0
- data/docs/migrations/r8-unit22.md +29 -0
- data/docs/migrations/r8-unit23.md +20 -0
- data/docs/migrations/r8-unit4.md +67 -0
- data/docs/migrations/r8-unit5.md +75 -0
- data/docs/migrations/r8-unit6.md +109 -0
- data/docs/migrations/r8-unit7.md +31 -0
- data/docs/migrations/r8-unit8.md +33 -0
- data/docs/migrations/r8-unit9.md +28 -0
- data/docs/migrations/storage-async-client.md +103 -0
- data/docs/migrations/vector-async-clients.md +110 -0
- data/docs/persistence-backends.md +38 -21
- data/docs/runtime-and-concurrency.md +26 -1
- data/lib/phronomy/agent/admission.rb +78 -0
- data/lib/phronomy/agent/{lifecycle_contract/agent_already_exists_error.rb → agent_already_exists_error.rb} +1 -1
- data/lib/phronomy/agent/{lifecycle_contract/agent_busy_error.rb → agent_busy_error.rb} +1 -1
- data/lib/phronomy/agent/{lifecycle_contract/agent_purged_error.rb → agent_purged_error.rb} +1 -1
- data/lib/phronomy/{recovery → agent/api}/execution_rehydration_required_error.rb +1 -1
- data/lib/phronomy/agent/async_event_api.rb +37 -32
- data/lib/phronomy/agent/base.rb +74 -72
- data/lib/phronomy/agent/before_llm_input.rb +64 -0
- data/lib/phronomy/agent/composition/run_once.rb +1 -1
- data/lib/phronomy/agent/{context_assembly/context_candidate_resolver.rb → context_candidate_resolver.rb} +2 -2
- data/lib/phronomy/agent/{context_assembly/context_assembler.rb → context_preparation.rb} +35 -221
- data/lib/phronomy/agent/control_request.rb +21 -0
- data/lib/phronomy/agent/execution/agent_execution.rb +1 -1
- data/lib/phronomy/agent/execution/agent_invocation.rb +27 -53
- data/lib/phronomy/agent/execution/approval_resume_commit.rb +1 -1
- data/lib/phronomy/agent/execution/dispatch_preparation.rb +17 -127
- data/lib/phronomy/agent/execution/exact_execution.rb +44 -23
- data/lib/phronomy/agent/execution/execution_cancellation.rb +8 -4
- data/lib/phronomy/agent/execution/execution_coordinator.rb +214 -395
- data/lib/phronomy/agent/execution/execution_metadata.rb +1 -0
- data/lib/phronomy/agent/execution/execution_outcome_committer.rb +70 -126
- data/lib/phronomy/agent/execution/execution_registry.rb +6 -2
- data/lib/phronomy/agent/execution/execution_session_runner.rb +22 -27
- data/lib/phronomy/agent/execution/initial_preparation.rb +18 -116
- data/lib/phronomy/agent/execution/{agent_invocation_session_builder.rb → invocation_actions.rb} +54 -194
- data/lib/phronomy/agent/execution/invocation_transitions.rb +39 -1
- data/lib/phronomy/agent/execution/runtime_record_encoder.rb +7 -7
- data/lib/phronomy/agent/execution_change.rb +161 -0
- data/lib/phronomy/agent/execution_environment.rb +36 -0
- data/lib/phronomy/agent/execution_extension_state.rb +21 -0
- data/lib/phronomy/agent/execution_observation.rb +35 -0
- data/lib/phronomy/agent/filterable.rb +182 -0
- data/lib/phronomy/agent/handoff/{handoff_context.rb → transfer_context.rb} +4 -4
- data/lib/phronomy/agent/handoff/{handoff_projection.rb → transfer_projection.rb} +14 -33
- data/lib/phronomy/{llm_contract/transport_error.rb → agent/handoff_error.rb} +1 -1
- data/lib/phronomy/agent/journal/journal_projection.rb +1 -1
- data/lib/phronomy/agent/knowledge_item.rb +13 -0
- data/lib/phronomy/agent/lifecycle/agent_root.rb +1 -1
- data/lib/phronomy/agent/lifecycle/ownership_registry.rb +18 -23
- data/lib/phronomy/agent/persistence/agent_repository.rb +29 -21
- data/lib/phronomy/agent/persistence/cancellation_repository.rb +51 -0
- data/lib/phronomy/agent/persistence/codec.rb +1 -21
- data/lib/phronomy/agent/persistence/execution_repository.rb +57 -41
- data/lib/phronomy/agent/persistence/journal_repository.rb +27 -18
- data/lib/phronomy/agent/persistence/records.rb +33 -0
- data/lib/phronomy/agent/persistence/retention_repository.rb +70 -0
- data/lib/phronomy/agent/persistence/storage_schema.rb +7 -2
- data/lib/phronomy/agent/persistence/watermark.rb +13 -11
- data/lib/phronomy/agent/recovery/invocation_restorer.rb +13 -21
- data/lib/phronomy/agent/recovery/recovery_coordinator/continuation.rb +10 -9
- data/lib/phronomy/agent/recovery/recovery_coordinator/installation.rb +27 -27
- data/lib/phronomy/agent/recovery/recovery_coordinator/resolution.rb +19 -21
- data/lib/phronomy/agent/recovery/recovery_coordinator.rb +23 -16
- data/lib/phronomy/agent/recovery/recovery_rules.rb +119 -0
- data/lib/phronomy/agent/recovery/recovery_support.rb +8 -11
- data/lib/phronomy/agent/reserved_execution.rb +16 -0
- data/lib/phronomy/agent/retention.rb +17 -0
- data/lib/phronomy/agent/runtime_binding/engine_environment.rb +60 -0
- data/lib/phronomy/agent/runtime_binding/engine_session_builder.rb +34 -0
- data/lib/phronomy/agent/runtime_binding/phase_machine_builder.rb +64 -0
- data/lib/phronomy/agent/runtime_binding/tool_session_builder.rb +34 -0
- data/lib/phronomy/agent/{context_assembly/ruby_llm_materializer.rb → runtime_input.rb} +18 -35
- data/lib/phronomy/agent/{context_assembly/saved_context_reader.rb → saved_context_reader.rb} +6 -4
- data/lib/phronomy/agent/settings.rb +47 -0
- data/lib/phronomy/agent/{context_assembly/state_writer.rb → state_writer.rb} +4 -3
- data/lib/phronomy/agent/store.rb +253 -0
- data/lib/phronomy/agent/{lifecycle_contract/stream_callback_error.rb → stream_callback_error.rb} +1 -1
- data/lib/phronomy/agent/tool_execution/tool_binding.rb +4 -64
- data/lib/phronomy/agent/tool_execution/tool_invocation.rb +50 -219
- data/lib/phronomy/agent/tool_execution/tool_invocation_actions.rb +107 -0
- data/lib/phronomy/agent/tool_execution/tool_invocation_transitions.rb +70 -0
- data/lib/phronomy/configuration/runtime_settings.rb +49 -0
- data/lib/phronomy/content_store/storage_schema.rb +1 -0
- data/lib/phronomy/content_store/stored_contents.rb +2 -1
- data/lib/phronomy/context/assembly.rb +202 -0
- data/lib/phronomy/{llm_contract/context_budget_exceeded_error.rb → context/budget_exceeded_error.rb} +3 -1
- data/lib/phronomy/context/candidate.rb +51 -0
- data/lib/phronomy/context/constraint.rb +47 -0
- data/lib/phronomy/{agent/context_contract → context}/context_plan.rb +1 -1
- data/lib/phronomy/{agent/context_contract → context}/context_plan_validator.rb +3 -3
- data/lib/phronomy/{agent/context_contract → context}/context_policy.rb +1 -1
- data/lib/phronomy/{agent/context_contract → context}/context_policy_input.rb +1 -1
- data/lib/phronomy/{agent/context_assembly → context}/context_policy_input_builder.rb +1 -1
- data/lib/phronomy/context/default_policy.rb +140 -0
- data/lib/phronomy/context/final_budget_validator.rb +33 -0
- data/lib/phronomy/{agent/context_contract → context}/llm_input_build_context.rb +1 -1
- data/lib/phronomy/{agent/context_contract → context}/llm_input_manifest.rb +19 -19
- data/lib/phronomy/{agent/context_contract → context}/llm_input_patch.rb +1 -1
- data/lib/phronomy/context/manifest_error.rb +10 -0
- data/lib/phronomy/context/prompt_template.rb +98 -0
- data/lib/phronomy/{vector_store → documents}/loader/base.rb +1 -1
- data/lib/phronomy/{vector_store → documents}/loader/csv_loader.rb +2 -2
- data/lib/phronomy/{vector_store → documents}/loader/markdown_loader.rb +3 -3
- data/lib/phronomy/{vector_store → documents}/loader/plain_text_loader.rb +2 -2
- data/lib/phronomy/{vector_store → documents}/splitter/base.rb +1 -1
- data/lib/phronomy/{vector_store → documents}/splitter/fixed_size_splitter.rb +2 -2
- data/lib/phronomy/{vector_store → documents}/splitter/recursive_splitter.rb +2 -2
- data/lib/phronomy/embeddings/async/async_client.rb +44 -0
- data/lib/phronomy/embeddings/backends/ruby_llm_embeddings.rb +48 -0
- data/lib/phronomy/embeddings/base.rb +43 -0
- data/lib/phronomy/embeddings/invalid_result_error.rb +11 -0
- data/lib/phronomy/embeddings/transport_error.rb +11 -0
- data/lib/phronomy/engine/concurrency/offload_pool.rb +36 -21
- data/lib/phronomy/engine/concurrency/pool_registry.rb +47 -12
- data/lib/phronomy/engine/diagnostics.rb +1 -1
- data/lib/phronomy/engine/event_loop.rb +7 -7
- data/lib/phronomy/engine/execution_binding.rb +23 -0
- data/lib/phronomy/engine/execution_receiver_binding.rb +43 -0
- data/lib/phronomy/engine/fsm_protocol.rb +1 -6
- data/lib/phronomy/engine/fsm_session.rb +3 -3
- data/lib/phronomy/engine/metrics.rb +16 -14
- data/lib/phronomy/engine/runtime/timer_queue.rb +1 -1
- data/lib/phronomy/engine/runtime.rb +25 -12
- data/lib/phronomy/engine/terminal_decision.rb +7 -0
- data/lib/phronomy/execution/async_operation.rb +41 -0
- data/lib/phronomy/{engine → execution}/blocking.rb +2 -2
- data/lib/phronomy/{engine → execution}/concurrency/cancellation_token.rb +1 -1
- data/lib/phronomy/{engine → execution}/concurrency/deadline.rb +0 -17
- data/lib/phronomy/{engine → execution}/concurrency/physical_completion_task.rb +1 -1
- data/lib/phronomy/{engine → execution}/concurrency/result_collector.rb +1 -1
- data/lib/phronomy/{engine → execution}/concurrency/result_composition.rb +33 -12
- data/lib/phronomy/{engine/concurrency/subscriptions.rb → execution/concurrency/result_subscriptions.rb} +14 -18
- data/lib/phronomy/execution/concurrency/subscriptions.rb +25 -0
- data/lib/phronomy/{engine → execution}/execution.rb +61 -27
- data/lib/phronomy/execution/execution_receiver.rb +78 -0
- data/lib/phronomy/execution/execution_scope_state.rb +35 -0
- data/lib/phronomy/{engine → execution}/invocation_context.rb +0 -15
- data/lib/phronomy/execution/invocation_controls.rb +73 -0
- data/lib/phronomy/execution/runnable.rb +24 -0
- data/lib/phronomy/{engine → execution}/task_result.rb +3 -3
- data/lib/phronomy/execution/wait_policy.rb +24 -0
- data/lib/phronomy/filter/{contract/filter_block_error.rb → filter_block_error.rb} +1 -1
- data/lib/phronomy/generation/generator_verifier/agent_operation.rb +65 -0
- data/lib/phronomy/generation/generator_verifier/default_parser.rb +27 -0
- data/lib/phronomy/generation/generator_verifier/workflow_builder.rb +2 -2
- data/lib/phronomy/generation/generator_verifier.rb +7 -7
- data/lib/phronomy/llm_adapter/async/async_client.rb +47 -0
- data/lib/phronomy/{llm_contract → llm_adapter}/authentication_error.rb +3 -1
- data/lib/phronomy/llm_adapter/backends/ruby_llm.rb +183 -0
- data/lib/phronomy/llm_adapter/base.rb +49 -68
- data/lib/phronomy/{llm_contract → llm_adapter}/context_length_error.rb +3 -1
- data/lib/phronomy/llm_adapter/invalid_result_error.rb +10 -0
- data/lib/phronomy/llm_adapter/message.rb +62 -0
- data/lib/phronomy/{llm_contract → llm_adapter}/rate_limit_error.rb +3 -1
- data/lib/phronomy/llm_adapter/request.rb +79 -0
- data/lib/phronomy/llm_adapter/response.rb +36 -0
- data/lib/phronomy/llm_adapter/stream_chunk.rb +18 -0
- data/lib/phronomy/llm_adapter/token_usage.rb +64 -0
- data/lib/phronomy/llm_adapter/transport_error.rb +9 -0
- data/lib/phronomy/llm_adapter.rb +3 -16
- data/lib/phronomy/multi_agent/admission_registry.rb +1 -8
- data/lib/phronomy/multi_agent/durable_subagent_coordinator.rb +108 -84
- data/lib/phronomy/multi_agent/execution_environment.rb +29 -0
- data/lib/phronomy/{agent/handoff → multi_agent}/handoff.rb +2 -2
- data/lib/phronomy/{agent/handoff → multi_agent}/handoff_capability_factory.rb +21 -2
- data/lib/phronomy/multi_agent/handoff_participant.rb +79 -0
- data/lib/phronomy/{agent/handoff → multi_agent}/handoff_policy.rb +1 -1
- data/lib/phronomy/multi_agent/handoff_runner.rb +77 -100
- data/lib/phronomy/{agent/handoff → multi_agent}/handoff_state.rb +1 -1
- data/lib/phronomy/multi_agent/orchestrator.rb +61 -75
- data/lib/phronomy/multi_agent/persistence/codec.rb +20 -0
- data/lib/phronomy/multi_agent/persistence/handoff_state_repository.rb +77 -0
- data/lib/phronomy/multi_agent/persistence/records.rb +27 -0
- data/lib/phronomy/multi_agent/persistence/storage_schema.rb +21 -0
- data/lib/phronomy/multi_agent/persistence/team_execution_repository.rb +58 -42
- data/lib/phronomy/multi_agent/persistence/team_repository.rb +29 -21
- data/lib/phronomy/multi_agent/reserved_child_admission.rb +88 -0
- data/lib/phronomy/multi_agent/runtime_binding/engine_environment.rb +35 -0
- data/lib/phronomy/multi_agent/shared_state.rb +2 -2
- data/lib/phronomy/multi_agent/store.rb +156 -0
- data/lib/phronomy/multi_agent/team_coordinator.rb +83 -74
- data/lib/phronomy/multi_agent/team_ownership_registry.rb +2 -12
- data/lib/phronomy/output_parser/parse_error.rb +7 -0
- data/lib/phronomy/persistence/content_repository.rb +26 -0
- data/lib/phronomy/persistence/errors.rb +16 -0
- data/lib/phronomy/persistence/migration/initial_format_migration.rb +2 -2
- data/lib/phronomy/persistence/persistence.rb +23 -0
- data/lib/phronomy/persistence/save_outcome.rb +24 -0
- data/lib/phronomy/persistence/snapshot_comparison.rb +81 -0
- data/lib/phronomy/persistence/storage_boundary.rb +32 -0
- data/lib/phronomy/persistence/transaction.rb +86 -0
- data/lib/phronomy/persistence_composition/storage_schema.rb +9 -4
- data/lib/phronomy/persistence_composition/stores.rb +34 -0
- data/lib/phronomy/persistence_composition/unit4_migration.rb +276 -0
- data/lib/phronomy/runtime_composition/agent_defaults.rb +5 -1
- data/lib/phronomy/runtime_composition/configuration.rb +146 -0
- data/lib/phronomy/runtime_composition/evaluation_defaults.rb +7 -0
- data/lib/phronomy/runtime_composition/execution_defaults.rb +5 -0
- data/lib/phronomy/runtime_composition/generation_defaults.rb +6 -0
- data/lib/phronomy/runtime_composition/global_configuration.rb +38 -0
- data/lib/phronomy/runtime_composition/multi_agent_defaults.rb +9 -0
- data/lib/phronomy/runtime_composition/workflow_defaults.rb +4 -0
- data/lib/phronomy/storage/async/async_client.rb +60 -0
- data/lib/phronomy/storage/backend.rb +8 -2
- data/lib/phronomy/testing/eval/metrics.rb +1 -1
- data/lib/phronomy/testing/eval/scorer/llm_judge.rb +19 -3
- data/lib/phronomy/testing/persistence_contract/a_content_store.rb +2 -2
- data/lib/phronomy/testing/persistence_contract/a_journal_repository.rb +6 -6
- data/lib/phronomy/testing/persistence_contract/a_persistence_backend.rb +55 -52
- data/lib/phronomy/testing/persistence_contract/a_workflow_state_repository.rb +3 -3
- data/lib/phronomy/testing/persistence_contract/an_agent_repository.rb +7 -7
- data/lib/phronomy/testing/persistence_contract/an_execution_repository.rb +11 -11
- data/lib/phronomy/testing/persistence_contract/coordination_repositories.rb +57 -51
- data/lib/phronomy/testing/persistence_contract/neutral_storage_primitives.rb +1 -1
- data/lib/phronomy/testing/persistence_contract/storage_transaction_boundaries.rb +23 -22
- data/lib/phronomy/tool/authorization.rb +77 -0
- data/lib/phronomy/tool/base.rb +549 -9
- data/lib/phronomy/tool/call_request.rb +40 -0
- data/lib/phronomy/{agent/tool_execution/tool_definition_set.rb → tool/definition_set.rb} +7 -8
- data/lib/phronomy/tool/operation.rb +88 -0
- data/lib/phronomy/tool/schema.rb +214 -0
- data/lib/phronomy/tool/settings.rb +31 -0
- data/lib/phronomy/tool/tool_error.rb +7 -0
- data/lib/phronomy/tool/tool_executor.rb +58 -0
- data/lib/phronomy/tools/agent.rb +22 -90
- data/lib/phronomy/tools/mcp.rb +21 -14
- data/lib/phronomy/tools/vector_search.rb +4 -4
- data/lib/phronomy/tracing/automatic.rb +11 -6
- data/lib/phronomy/tracing/base.rb +1 -1
- data/lib/phronomy/tracing/observation.rb +37 -0
- data/lib/phronomy/tracing/settings.rb +36 -0
- data/lib/phronomy/vector_store/{async_backend.rb → async/async_client.rb} +35 -29
- data/lib/phronomy/vector_store/{in_memory.rb → backends/in_memory.rb} +12 -10
- data/lib/phronomy/vector_store/{pgvector.rb → backends/pgvector.rb} +44 -16
- data/lib/phronomy/vector_store/{redis_search.rb → backends/redis_search.rb} +74 -37
- data/lib/phronomy/vector_store/base.rb +118 -49
- data/lib/phronomy/vector_store/invalid_result_error.rb +12 -0
- data/lib/phronomy/vector_store.rb +2 -17
- data/lib/phronomy/version.rb +1 -1
- data/lib/phronomy/workflow/completion.rb +11 -0
- data/lib/phronomy/workflow/execution/workflow.rb +7 -7
- data/lib/phronomy/workflow/execution/workflow_action_rules.rb +67 -0
- data/lib/phronomy/workflow/execution/workflow_context.rb +2 -2
- data/lib/phronomy/workflow/execution/workflow_execution_environment.rb +27 -0
- data/lib/phronomy/workflow/execution/workflow_execution_registry.rb +3 -5
- data/lib/phronomy/workflow/execution/workflow_runner.rb +58 -79
- data/lib/phronomy/workflow/execution/workflow_settings.rb +28 -0
- data/lib/phronomy/workflow/persistence/state_repository.rb +28 -22
- data/lib/phronomy/workflow/persistence/storage_schema.rb +13 -0
- data/lib/phronomy/workflow/runtime_binding/workflow_engine_environment.rb +38 -0
- data/lib/phronomy/workflow/runtime_binding/workflow_phase_machine_builder.rb +156 -0
- data/lib/phronomy/workflow/{execution → runtime_binding}/workflow_terminal_policy.rb +4 -4
- data/lib/phronomy.rb +57 -16
- data/scripts/api_snapshot.rb +35 -15
- data/sig/_private/phronomy/agent/settings.rbs +19 -0
- data/sig/_private/phronomy/configuration/runtime_settings.rbs +20 -0
- data/sig/_private/phronomy/llm_adapter/async/async_client.rbs +10 -0
- data/sig/_private/phronomy/multi_agent/store.rbs +8 -0
- data/sig/_private/phronomy/persistence/storage_boundary.rbs +7 -0
- data/sig/_private/phronomy/tool/settings.rbs +13 -0
- data/sig/_private/phronomy/tracing/settings.rbs +15 -0
- data/sig/_private/phronomy/workflow/execution/workflow_settings.rbs +13 -0
- data/sig/phronomy/agent/admission.rbs +19 -0
- data/sig/phronomy/agent/execution_contract.rbs +132 -0
- data/sig/phronomy/agent/execution_environment.rbs +20 -0
- data/sig/phronomy/agent/store.rbs +73 -0
- data/sig/phronomy/agent.rbs +14 -138
- data/sig/phronomy/common.rbs +7 -0
- data/sig/phronomy/content_store/contracts.rbs +13 -0
- data/sig/phronomy/context.rbs +152 -0
- data/sig/phronomy/embeddings/async/async_client.rbs +9 -0
- data/sig/phronomy/embeddings/base.rbs +17 -0
- data/sig/phronomy/engine/concurrency/timer_bindings.rbs +22 -0
- data/sig/phronomy/engine/control_bindings.rbs +11 -0
- data/sig/phronomy/engine/control_protocols.rbs +23 -0
- data/sig/phronomy/engine/execution_binding.rbs +6 -0
- data/sig/phronomy/engine/execution_receiver.rbs +15 -0
- data/sig/phronomy/engine/observability.rbs +13 -0
- data/sig/phronomy/execution/async_operation.rbs +7 -0
- data/sig/phronomy/execution/blocking.rbs +5 -0
- data/sig/phronomy/execution/concurrency/cancellation_token.rbs +13 -0
- data/sig/phronomy/execution/concurrency/deadline.rbs +10 -0
- data/sig/phronomy/execution/concurrency/result_composition.rbs +7 -0
- data/sig/phronomy/execution/control_protocols.rbs +18 -0
- data/sig/phronomy/execution/errors.rbs +7 -0
- data/sig/phronomy/execution/execution.rbs +41 -0
- data/sig/phronomy/execution/execution_receiver.rbs +40 -0
- data/sig/phronomy/execution/execution_scope_state.rbs +9 -0
- data/sig/phronomy/execution/invocation_context.rbs +18 -0
- data/sig/phronomy/execution/invocation_controls.rbs +13 -0
- data/sig/phronomy/execution/task_result.rbs +29 -0
- data/sig/phronomy/extensions.rbs +0 -21
- data/sig/phronomy/handoff.rbs +10 -4
- data/sig/phronomy/llm_adapter/backends/ruby_llm.rbs +6 -0
- data/sig/phronomy/llm_adapter/base.rbs +14 -0
- data/sig/phronomy/llm_adapter/usage.rbs +14 -0
- data/sig/phronomy/llm_adapter/values.rbs +43 -0
- data/sig/phronomy/llm_context_window.rbs +10 -0
- data/sig/phronomy/multi_agent/reserved_child_admission.rbs +8 -0
- data/sig/phronomy/multi_agent/store.rbs +54 -0
- data/sig/phronomy/multi_agent.rbs +6 -3
- data/sig/phronomy/persistence/errors.rbs +18 -0
- data/sig/phronomy/persistence/migration.rbs +13 -0
- data/sig/phronomy/persistence/transaction.rbs +19 -0
- data/sig/phronomy/persistence.rbs +1 -99
- data/sig/phronomy/persistence_composition.rbs +19 -0
- data/sig/phronomy/runtime_composition/configuration.rbs +36 -0
- data/sig/phronomy/storage/async/async_client.rbs +8 -0
- data/sig/phronomy/storage/backends/in_memory.rbs +9 -0
- data/sig/phronomy/{storage.rbs → storage/contracts.rbs} +2 -16
- data/sig/phronomy/tool.rbs +48 -4
- data/sig/phronomy/tracing/observation.rbs +7 -0
- data/sig/phronomy/vector_store/async/async_client.rbs +13 -0
- data/sig/phronomy/vector_store/base.rbs +23 -0
- data/sig/phronomy/workflow/execution/workflow_execution_environment.rbs +14 -0
- data/sig/phronomy/workflow/runtime_binding/workflow_terminal_policy.rbs +7 -0
- data/sig/phronomy/workflow/store.rbs +8 -0
- data/sig/phronomy/workflow.rbs +1 -1
- data/sig/phronomy.rbs +0 -49
- metadata +318 -117
- data/lib/phronomy/agent/concerns/before_llm_input.rb +0 -66
- data/lib/phronomy/agent/concerns/error_translation.rb +0 -45
- data/lib/phronomy/agent/concerns/filterable.rb +0 -184
- data/lib/phronomy/agent/context/capability/base.rb +0 -548
- data/lib/phronomy/agent/context/capability/tool_executor.rb +0 -62
- data/lib/phronomy/agent/context/instruction/prompt_template.rb +0 -102
- data/lib/phronomy/agent/context_assembly/runtime_chat_builder.rb +0 -36
- data/lib/phronomy/agent/context_assembly/token_budget_resolver.rb +0 -22
- data/lib/phronomy/agent/context_parts/validators/final_budget_validator.rb +0 -37
- data/lib/phronomy/agent/context_policies/default.rb +0 -142
- data/lib/phronomy/agent/execution/phase_machine_builder.rb +0 -101
- data/lib/phronomy/agent/execution/provider_call_outcome.rb +0 -106
- data/lib/phronomy/agent/handoff/handoff_execution_coordinator.rb +0 -15
- data/lib/phronomy/agent/handoff/handoff_outcome_committer.rb +0 -131
- data/lib/phronomy/agent/handoff/handoff_request.rb +0 -45
- data/lib/phronomy/agent/lifecycle_contract/handoff_error.rb +0 -7
- data/lib/phronomy/agent/persistence/handoff_state_repository.rb +0 -58
- data/lib/phronomy/agent/persistence/queries.rb +0 -61
- data/lib/phronomy/agent/selection/candidate.rb +0 -53
- data/lib/phronomy/agent/selection/constraint.rb +0 -49
- data/lib/phronomy/agent/tool_execution/tool_call_intercepted.rb +0 -29
- data/lib/phronomy/agent/tool_execution/tool_invocation_session_builder.rb +0 -276
- data/lib/phronomy/configuration/configuration.rb +0 -68
- data/lib/phronomy/configuration/global_configuration.rb +0 -26
- data/lib/phronomy/engine/concurrency/cancellation_scope.rb +0 -124
- data/lib/phronomy/engine/concurrency/operation_binding.rb +0 -43
- data/lib/phronomy/engine/execution_receiver.rb +0 -65
- data/lib/phronomy/engine/runnable.rb +0 -54
- data/lib/phronomy/llm_adapter/ruby_llm.rb +0 -47
- data/lib/phronomy/llm_contract/token_usage.rb +0 -85
- data/lib/phronomy/multi_agent/persistence/queries.rb +0 -30
- data/lib/phronomy/multi_agent/storage_contract/team_storage_schema.rb +0 -15
- data/lib/phronomy/output_parser/contract/parse_error.rb +0 -7
- data/lib/phronomy/persistence/api/persistence.rb +0 -140
- data/lib/phronomy/persistence_composition/repositories.rb +0 -77
- data/lib/phronomy/recovery/recovery.rb +0 -186
- data/lib/phronomy/tool/contract/tool_error.rb +0 -7
- data/lib/phronomy/vector_store/embeddings/base.rb +0 -44
- data/lib/phronomy/vector_store/embeddings/ruby_llm_embeddings.rb +0 -47
- data/lib/phronomy/workflow/phase_machine_builder.rb +0 -205
- data/lib/phronomy/workflow/storage_contract/workflow_storage_schema.rb +0 -9
- data/sig/phronomy/execution_receiver.rbs +0 -34
- data/sig/phronomy/llm_adapter.rbs +0 -11
- data/sig/phronomy/runtime.rbs +0 -76
- /data/lib/phronomy/agent/{context_assembly/context_importer.rb → context_importer.rb} +0 -0
- /data/lib/phronomy/{engine → execution}/backpressure_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/cancellation_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/concurrency/worker_input_restricted.rb +0 -0
- /data/lib/phronomy/{engine → execution}/event_loop_reentrancy_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/execution_cancellation_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/execution_timeout_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/invalid_async_entry_action_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/invalid_async_transition_action_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/invalid_async_workflow_action_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/pool_shutdown_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/recursion_limit_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/runtime_shutdown_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/runtime_shutdown_reentrancy_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/scheduler_reentrancy_error.rb +0 -0
- /data/lib/phronomy/{engine → execution}/timeout_error.rb +0 -0
|
@@ -0,0 +1,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
|
data/sig/phronomy/agent.rbs
CHANGED
|
@@ -1,25 +1,7 @@
|
|
|
1
1
|
module Phronomy
|
|
2
2
|
module Agent
|
|
3
3
|
interface _BeforeLLMInputHook
|
|
4
|
-
def call: (LLMInputBuildContext context) -> LLMInputPatch?
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
class LLMInputPatch
|
|
8
|
-
attr_reader model_config_patch: Hash[untyped, untyped]?
|
|
9
|
-
attr_reader segment_candidates: Array[untyped]?
|
|
10
|
-
|
|
11
|
-
def initialize: (?model_config_patch: Hash[untyped, untyped]?, ?segment_candidates: Array[untyped]?) -> void
|
|
12
|
-
def self.empty: () -> LLMInputPatch
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
class LLMInputBuildContext
|
|
16
|
-
attr_reader agent_id: String
|
|
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
|
|
4
|
+
def call: (Phronomy::Context::LLMInputBuildContext context) -> Phronomy::Context::LLMInputPatch?
|
|
23
5
|
end
|
|
24
6
|
|
|
25
7
|
class ToolApprovalRequest
|
|
@@ -67,118 +49,6 @@ module Phronomy
|
|
|
67
49
|
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
50
|
end
|
|
69
51
|
|
|
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
52
|
class Base
|
|
183
53
|
def self.model: (?String name) -> String?
|
|
184
54
|
def self.instructions: (?untyped text) { (untyped) -> untyped } -> untyped
|
|
@@ -190,23 +60,29 @@ module Phronomy
|
|
|
190
60
|
def self.max_iterations: (?Integer value) -> Integer
|
|
191
61
|
def self.cache_instructions: (?bool enabled) -> bool?
|
|
192
62
|
def self.max_output_tokens: (?Integer value) -> Integer?
|
|
193
|
-
def self.context_policy: () -> ContextPolicy
|
|
194
|
-
| (ContextPolicy policy) -> ContextPolicy
|
|
63
|
+
def self.context_policy: () -> Phronomy::Context::ContextPolicy
|
|
64
|
+
| (Phronomy::Context::ContextPolicy policy) -> Phronomy::Context::ContextPolicy
|
|
195
65
|
def self.agent_definition: () -> Hash[Symbol, untyped]
|
|
196
66
|
| (version: Integer, ?id: String?) -> Hash[Symbol, untyped]
|
|
197
|
-
def self.before_llm_input: (?_BeforeLLMInputHook callable) ?{ (LLMInputBuildContext context) -> LLMInputPatch? } -> _BeforeLLMInputHook?
|
|
67
|
+
def self.before_llm_input: (?_BeforeLLMInputHook callable) ?{ (Phronomy::Context::LLMInputBuildContext context) -> Phronomy::Context::LLMInputPatch? } -> _BeforeLLMInputHook?
|
|
198
68
|
|
|
199
69
|
# on_event is bound once to the live Agent Runtime incarnation. The block
|
|
200
70
|
# 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:
|
|
71
|
+
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
|
|
72
|
+
def self.load: (String agent_id, persistence: Store, ?execution_wiring: execution_wiring, ?on_event: ^(untyped) -> void) ?{ (untyped event) -> void } -> instance
|
|
203
73
|
def self.get: (String agent_id) -> instance?
|
|
204
74
|
def self.live_for_execution: (String execution_id) -> instance
|
|
205
75
|
|
|
206
|
-
def initialize: (?agent_id: String?, ?context: untyped, ?knowledge: Array[
|
|
76
|
+
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
77
|
|
|
208
78
|
attr_reader agent_id: String
|
|
209
|
-
attr_reader persistence:
|
|
79
|
+
attr_reader persistence: Store
|
|
80
|
+
def knowledge_snapshot: () -> Array[KnowledgeItem]
|
|
81
|
+
def event_listener: () -> (^(Object) -> void)?
|
|
82
|
+
def start_reserved_async: (reservation: ReservedExecution, input: String, ?config: Hash[Symbol, Object]) -> TaskResult[execution_result]
|
|
83
|
+
def resume_async: (String execution_id, ?config: Hash[Symbol, Object]) -> TaskResult[execution_result]
|
|
84
|
+
def resume: (String execution_id, ?config: Hash[Symbol, Object]) -> execution_result
|
|
85
|
+
def cancel_async: (String execution_id) -> TaskResult[ExecutionObservation]
|
|
210
86
|
attr_accessor before_llm_input: _BeforeLLMInputHook?
|
|
211
87
|
|
|
212
88
|
# Public operation methods no longer accept per-invocation event listeners
|
|
@@ -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,17 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module Embeddings
|
|
3
|
+
class InvalidResultError < Phronomy::Error
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
class TransportError < Phronomy::Error
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class Base
|
|
10
|
+
def embed: (String text, ?_CancellationSignal? cancellation_token) -> Array[Float]
|
|
11
|
+
|
|
12
|
+
# Protected extension SPI at runtime; RBS has no protected visibility.
|
|
13
|
+
private
|
|
14
|
+
def perform_embed: (String text, ?_CancellationSignal? cancellation_token) -> Array[Numeric]
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
interface _TimerQueue
|
|
3
|
+
def schedule: (seconds: Numeric) { () -> void } -> self
|
|
4
|
+
def cancel: (^() -> void callback) -> bool
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
module Concurrency
|
|
8
|
+
class OffloadPool
|
|
9
|
+
@timer_queue_provider: (^() -> _TimerQueue)?
|
|
10
|
+
def initialize: (?pool_size: Integer, ?queue_size: Integer, ?name: (String | Symbol)?, ?logger: untyped, ?timer_queue_provider: (^() -> _TimerQueue)?) -> void
|
|
11
|
+
def begin_shutdown: () -> self
|
|
12
|
+
def terminated?: () -> bool
|
|
13
|
+
def shutdown: (?drain_timeout: Numeric, ?deadline: Numeric?) -> self
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class PoolRegistry
|
|
17
|
+
@timer_queue_provider: (^() -> _TimerQueue)?
|
|
18
|
+
def initialize: (?timer_queue_provider: (^() -> _TimerQueue)?) -> void
|
|
19
|
+
def shutdown: (?deadline: Numeric) -> bool
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
interface _FSMEventSink
|
|
3
|
+
def post: (Symbol type, ?untyped payload) -> untyped
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
interface _TerminalPolicy
|
|
7
|
+
def start: (terminal_type: Symbol, context: untyped, event_sink: _FSMEventSink) -> untyped
|
|
8
|
+
def handles?: (Event event) -> bool
|
|
9
|
+
def decision_for: (Event event) -> TerminalDecision
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class Event
|
|
13
|
+
attr_reader type: Symbol
|
|
14
|
+
attr_reader payload: untyped
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class TerminalDecision < Data
|
|
18
|
+
attr_reader action: (:complete | :fail | :retire)
|
|
19
|
+
attr_reader error: Exception?
|
|
20
|
+
def self.new: (action: (:complete | :fail | :retire), error: Exception?) -> instance
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module ExecutionBinding
|
|
3
|
+
def self.submit: [V] (?pool: _ExecutionPool?, ?runtime: _ExecutionRuntime?, ?pool_name: Symbol?, ?size: Integer, ?queue_size: Integer, ?timeout: Numeric?, ?cancellation_token: Concurrency::CancellationToken?, ?on_full: Symbol) { () -> V } -> TaskResult[V]
|
|
4
|
+
def self.after: (Numeric seconds) { () -> void } -> ^() -> untyped
|
|
5
|
+
end
|
|
6
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
class EventLoop
|
|
3
|
+
def __execution_receiver: (key: untyped) -> ExecutionReceiver?
|
|
4
|
+
def __register_execution_receiver: (key: untyped, receiver: ExecutionReceiver) -> ExecutionReceiver
|
|
5
|
+
def __synchronize_execution_state: [V] () { () -> V } -> V
|
|
6
|
+
def __admit_execution: [V] (ExecutionReceiver receiver) { () -> V } -> V
|
|
7
|
+
def __post_execution: (ExecutionReceiver receiver, untyped message, ?admission: bool, ?completion: TaskResult[untyped]?) -> bool
|
|
8
|
+
def __route_execution_event: (ExecutionReceiver receiver) { () -> untyped } -> bool
|
|
9
|
+
def __receiver_cleanup_complete?: () -> bool
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class Runtime
|
|
13
|
+
def __event_loop_if_initialized: () -> EventLoop?
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Internal lookup operations. None of these methods initializes a resource.
|
|
2
|
+
module Phronomy
|
|
3
|
+
class Runtime
|
|
4
|
+
def self.__default_if_initialized: () -> Runtime?
|
|
5
|
+
def __offload_if_initialized: () -> Concurrency::OffloadPool?
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
module Concurrency
|
|
9
|
+
class PoolRegistry
|
|
10
|
+
def default_pool_if_initialized: () -> OffloadPool?
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module AsyncOperation
|
|
3
|
+
def self.map: [A, B] (_CompletionHandle[A] source, name: String, ?on_error: (^(Exception) -> B)?) { (A) -> B } -> TaskResult[B]
|
|
4
|
+
def self.call: [A, B] (name: String, ?on_error: (^(Exception) -> B)?, ?transform: ^(A) -> B) { () -> _CompletionHandle[A] } -> TaskResult[B]
|
|
5
|
+
def self.capture: [V] (name: String, ?on_error: (^(Exception) -> V)?) { () -> V } -> TaskResult[V]
|
|
6
|
+
end
|
|
7
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
module Concurrency
|
|
3
|
+
class CancellationToken
|
|
4
|
+
def self.timeout_after: (Numeric seconds) -> CancellationToken
|
|
5
|
+
def initialize: (?monotonic_deadline: Float?) -> void
|
|
6
|
+
def remaining_monotonic_seconds: () -> Float?
|
|
7
|
+
def on_cancel: () { () -> void } -> self
|
|
8
|
+
def cancel!: () -> self
|
|
9
|
+
def cancelled?: () -> bool
|
|
10
|
+
def raise_if_cancelled!: (?String message) -> nil
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Phronomy
|
|
2
|
+
# Only the operations used across the execution boundary; no concrete runtime.
|
|
3
|
+
interface _CompletionHandle[A]
|
|
4
|
+
def on_complete: () { (A?, Exception?) -> void } -> untyped
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
interface _ExecutionScope
|
|
8
|
+
def __while_open: [V] () { () -> V } -> V?
|
|
9
|
+
def __open?: () -> bool
|
|
10
|
+
def __cancellation_token: () -> Concurrency::CancellationToken
|
|
11
|
+
def __cancellation_error: () -> Exception
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
module WaitPolicy
|
|
15
|
+
def self.blocking_forbidden?: () -> bool
|
|
16
|
+
def self.without_blocking: [V] () { () -> V } -> V
|
|
17
|
+
end
|
|
18
|
+
end
|