phronomy 0.26.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (557) hide show
  1. checksums.yaml +4 -4
  2. data/.mutant.yml +9 -9
  3. data/CHANGELOG.md +92 -0
  4. data/CONTRIBUTING.md +8 -8
  5. data/README.md +13 -3
  6. data/VERIFY.sh +27 -27
  7. data/benchmark/bench_agent_invoke.rb +26 -47
  8. data/benchmark/bench_context_assembler.rb +17 -15
  9. data/benchmark/bench_regression.rb +1 -1
  10. data/benchmark/bench_tool_schema.rb +1 -1
  11. data/docs/architecture/agent-chat-and-state-ownership.md +153 -0
  12. data/docs/architecture/agent-configuration-and-tool-binding.md +139 -0
  13. data/docs/architecture/agent-context.md +4 -2
  14. data/docs/architecture/agent-transition-ownership.md +13 -0
  15. data/docs/architecture/backend-groups.md +152 -0
  16. data/docs/architecture/before-llm-input.md +9 -3
  17. data/docs/architecture/context-management.md +31 -1
  18. data/docs/architecture/context-preparation-steps.md +90 -0
  19. data/docs/architecture/entry-action-and-team-wording.md +72 -0
  20. data/docs/architecture/execution-abstraction-review.md +88 -0
  21. data/docs/architecture/execution-boundaries.md +28 -0
  22. data/docs/architecture/execution-metadata-and-values.md +86 -0
  23. data/docs/architecture/generator-verifier-ownership.md +111 -0
  24. data/docs/architecture/multi-agent-handoff.md +11 -4
  25. data/docs/architecture/persistence-refactoring-plan.md +50 -0
  26. data/docs/architecture/persistence.md +45 -4
  27. data/docs/architecture/r8-unit1.md +104 -0
  28. data/docs/architecture/r8-unit10.md +72 -0
  29. data/docs/architecture/r8-unit11.md +71 -0
  30. data/docs/architecture/r8-unit12.md +67 -0
  31. data/docs/architecture/r8-unit13.md +61 -0
  32. data/docs/architecture/r8-unit14.md +72 -0
  33. data/docs/architecture/r8-unit15.md +65 -0
  34. data/docs/architecture/r8-unit16.md +54 -0
  35. data/docs/architecture/r8-unit17.md +73 -0
  36. data/docs/architecture/r8-unit18.md +92 -0
  37. data/docs/architecture/r8-unit19.md +61 -0
  38. data/docs/architecture/r8-unit2.md +55 -0
  39. data/docs/architecture/r8-unit20.md +51 -0
  40. data/docs/architecture/r8-unit21.md +79 -0
  41. data/docs/architecture/r8-unit22.md +74 -0
  42. data/docs/architecture/r8-unit23.md +81 -0
  43. data/docs/architecture/r8-unit3.md +130 -0
  44. data/docs/architecture/r8-unit4.md +79 -0
  45. data/docs/architecture/r8-unit5.md +115 -0
  46. data/docs/architecture/r8-unit6.md +71 -0
  47. data/docs/architecture/r8-unit7.md +70 -0
  48. data/docs/architecture/r8-unit8.md +78 -0
  49. data/docs/architecture/r8-unit9.md +73 -0
  50. data/docs/architecture/refactoring-closure.md +343 -0
  51. data/docs/architecture/remaining-refactoring-plan.md +390 -0
  52. data/docs/architecture/rubyllm-2-token-ownership.md +82 -0
  53. data/docs/architecture/storage-execution-boundaries.md +54 -0
  54. data/docs/architecture/tool-schema-recording-gap.md +56 -0
  55. data/docs/architecture/tracing.md +2 -2
  56. data/docs/architecture/workflow-terminal-ownership-design.md +104 -0
  57. data/docs/architecture.md +222 -0
  58. data/docs/decisions/014-unified-persistence-durable-state.md +11 -0
  59. data/docs/decisions/015-tool-public-facade-and-rbs-boundary.md +3 -3
  60. data/docs/decisions/024-event-loop-single-writer-agent-runtime.md +5 -1
  61. data/docs/decisions/025-process-local-agent-ownership-and-runtime-admission.md +13 -3
  62. data/docs/decisions/026-workflow-runtime-admission-and-durable-terminal-barrier.md +5 -1
  63. data/docs/decisions/027-llm-adapter-provider-boundary.md +2 -0
  64. data/docs/decisions/030-agent-handoff-domain-and-durable-responsibility.md +7 -0
  65. data/docs/decisions/031-durable-multi-agent-coordination.md +7 -0
  66. data/docs/decisions/032-storage-backend-composition.md +85 -0
  67. data/docs/decisions/033-domain-persistence-ownership.md +79 -0
  68. data/docs/decisions/034-handoff-runner-coordination-ownership.md +78 -0
  69. data/docs/decisions/035-tool-executor-capability-ownership.md +68 -0
  70. data/docs/decisions/036-context-contract-ownership.md +86 -0
  71. data/docs/decisions/037-common-definition-ownership.md +62 -0
  72. data/docs/decisions/038-responsibility-based-source-layout.md +145 -0
  73. data/docs/decisions/039-runtime-configuration-lifecycle-ownership.md +82 -0
  74. data/docs/decisions/040-configuration-default-composition.md +105 -0
  75. data/docs/decisions/041-feature-owned-identity-registries.md +100 -0
  76. data/docs/decisions/042-feature-owned-execution-state.md +106 -0
  77. data/docs/decisions/043-storage-execution-constraint-notifications.md +75 -0
  78. data/docs/decisions/044-agent-default-and-one-shot-composition.md +106 -0
  79. data/docs/decisions/045-worker-input-restriction-ownership.md +104 -0
  80. data/docs/decisions/046-agent-responsibility-layout-and-shared-records.md +110 -0
  81. data/docs/decisions/047-recovered-execution-continuation-contract.md +116 -0
  82. data/docs/decisions/048-dispatch-preparation-worker-ownership.md +120 -0
  83. data/docs/decisions/049-initial-preparation-worker-ownership.md +111 -0
  84. data/docs/decisions/050-approval-resume-snapshot-and-commit-ownership.md +98 -0
  85. data/docs/decisions/051-execution-outcome-worker-ownership.md +153 -0
  86. data/docs/decisions/052-tool-invocation-restoration-ownership.md +92 -0
  87. data/docs/decisions/053-shared-state-coordination-ownership.md +71 -0
  88. data/docs/decisions/054-workflow-terminal-save-single-owner.md +76 -0
  89. data/docs/decisions/055-terminal-observer-failure-settlement.md +60 -0
  90. data/docs/decisions/056-workflow-terminal-policy-ownership.md +87 -0
  91. data/docs/decisions/057-storage-transaction-boundaries.md +73 -0
  92. data/docs/decisions/058-neutral-storage-primitives.md +83 -0
  93. data/docs/decisions/059-backend-contracts-and-async-clients.md +74 -0
  94. data/docs/decisions/060-runtime-settings-and-application-configuration.md +86 -0
  95. data/docs/decisions/061-persistence-failure-contracts.md +89 -0
  96. data/docs/decisions/062-content-store-service.md +52 -0
  97. data/docs/decisions/063-execution-contracts-and-services.md +88 -0
  98. data/docs/decisions/064-agent-execution-and-multi-agent-responsibility.md +36 -0
  99. data/docs/decisions/065-vector-and-embeddings-common-operations.md +38 -0
  100. data/docs/decisions/066-llm-and-tool-operation-contracts.md +20 -0
  101. data/docs/decisions/067-agent-progress-and-engine-connection.md +29 -0
  102. data/docs/decisions/068-agent-tool-child-progress-and-tool-operation.md +36 -0
  103. data/docs/decisions/README.md +52 -6
  104. data/docs/design/durable-semantic-coordination/IMPLEMENTATION_DESIGN_V2.md +6 -0
  105. data/docs/design/durable-semantic-coordination/IMPLEMENTATION_REPORT.md +6 -0
  106. data/docs/execution-boundaries-preview.md +45 -0
  107. data/docs/features.md +16 -5
  108. data/docs/getting-started.md +11 -8
  109. data/docs/migrations/0.15.md +5 -0
  110. data/docs/migrations/0.22.md +2 -2
  111. data/docs/migrations/durable-semantic-coordination-v2.md +8 -0
  112. data/docs/migrations/handoff-runner-multi-agent.md +37 -0
  113. data/docs/migrations/neutral-storage-spi.md +43 -0
  114. data/docs/migrations/parallel-tool-chat-removal.md +49 -0
  115. data/docs/migrations/persistence-failure-contracts.md +67 -0
  116. data/docs/migrations/r8-unit10.md +36 -0
  117. data/docs/migrations/r8-unit11.md +33 -0
  118. data/docs/migrations/r8-unit12.md +31 -0
  119. data/docs/migrations/r8-unit13.md +36 -0
  120. data/docs/migrations/r8-unit14.md +31 -0
  121. data/docs/migrations/r8-unit15.md +31 -0
  122. data/docs/migrations/r8-unit16.md +26 -0
  123. data/docs/migrations/r8-unit17.md +28 -0
  124. data/docs/migrations/r8-unit18.md +29 -0
  125. data/docs/migrations/r8-unit19.md +28 -0
  126. data/docs/migrations/r8-unit20.md +24 -0
  127. data/docs/migrations/r8-unit21.md +28 -0
  128. data/docs/migrations/r8-unit22.md +29 -0
  129. data/docs/migrations/r8-unit23.md +20 -0
  130. data/docs/migrations/r8-unit4.md +67 -0
  131. data/docs/migrations/r8-unit5.md +75 -0
  132. data/docs/migrations/r8-unit6.md +109 -0
  133. data/docs/migrations/r8-unit7.md +31 -0
  134. data/docs/migrations/r8-unit8.md +33 -0
  135. data/docs/migrations/r8-unit9.md +28 -0
  136. data/docs/migrations/shared-state-multi-agent.md +44 -0
  137. data/docs/migrations/storage-async-client.md +103 -0
  138. data/docs/migrations/storage-backend-composition.md +117 -0
  139. data/docs/migrations/storage-transaction-boundaries.md +74 -0
  140. data/docs/migrations/vector-async-clients.md +110 -0
  141. data/docs/persistence-backends.md +190 -215
  142. data/docs/runtime-and-concurrency.md +142 -32
  143. data/lib/phronomy/agent/admission.rb +78 -0
  144. data/lib/phronomy/{agent_already_exists_error.rb → agent/agent_already_exists_error.rb} +2 -0
  145. data/lib/phronomy/{agent_busy_error.rb → agent/agent_busy_error.rb} +2 -0
  146. data/lib/phronomy/{agent_purged_error.rb → agent/agent_purged_error.rb} +2 -0
  147. data/lib/phronomy/agent/api/agent.rb +17 -0
  148. data/lib/phronomy/{execution_rehydration_required_error.rb → agent/api/execution_rehydration_required_error.rb} +2 -0
  149. data/lib/phronomy/agent/async_event_api.rb +38 -33
  150. data/lib/phronomy/agent/base.rb +106 -294
  151. data/lib/phronomy/agent/before_llm_input.rb +64 -0
  152. data/lib/phronomy/{agent.rb → agent/composition/run_once.rb} +4 -13
  153. data/lib/phronomy/agent/context_candidate_resolver.rb +2 -2
  154. data/lib/phronomy/agent/context_importer.rb +2 -2
  155. data/lib/phronomy/agent/{context_assembler.rb → context_preparation.rb} +157 -288
  156. data/lib/phronomy/agent/control_request.rb +21 -0
  157. data/lib/phronomy/agent/{agent_execution.rb → execution/agent_execution.rb} +8 -4
  158. data/lib/phronomy/agent/{agent_invocation.rb → execution/agent_invocation.rb} +32 -63
  159. data/lib/phronomy/agent/execution/approval_resume_commit.rb +108 -0
  160. data/lib/phronomy/agent/execution/dispatch_preparation.rb +195 -0
  161. data/lib/phronomy/agent/{exact_execution.rb → execution/exact_execution.rb} +43 -23
  162. data/lib/phronomy/agent/{execution_cancellation.rb → execution/execution_cancellation.rb} +8 -5
  163. data/lib/phronomy/agent/execution/execution_coordinator.rb +1744 -0
  164. data/lib/phronomy/agent/execution/execution_failure.rb +30 -0
  165. data/lib/phronomy/agent/execution/execution_metadata.rb +54 -0
  166. data/lib/phronomy/agent/execution/execution_outcome_committer.rb +288 -0
  167. data/lib/phronomy/agent/execution/execution_registry.rb +463 -0
  168. data/lib/phronomy/agent/execution/execution_session_runner.rb +113 -0
  169. data/lib/phronomy/agent/execution/initial_preparation.rb +323 -0
  170. data/lib/phronomy/agent/execution/invocation_actions.rb +368 -0
  171. data/lib/phronomy/agent/execution/invocation_transitions.rb +124 -0
  172. data/lib/phronomy/agent/execution/runtime_record_encoder.rb +210 -0
  173. data/lib/phronomy/agent/execution_change.rb +161 -0
  174. data/lib/phronomy/agent/execution_environment.rb +36 -0
  175. data/lib/phronomy/agent/execution_extension_state.rb +21 -0
  176. data/lib/phronomy/agent/execution_observation.rb +35 -0
  177. data/lib/phronomy/agent/filterable.rb +182 -0
  178. data/lib/phronomy/agent/{handoff_context.rb → handoff/transfer_context.rb} +6 -6
  179. data/lib/phronomy/agent/{handoff_projection.rb → handoff/transfer_projection.rb} +14 -33
  180. data/lib/phronomy/agent/handoff_error.rb +7 -0
  181. data/lib/phronomy/agent/{journal_projection.rb → journal/journal_projection.rb} +4 -0
  182. data/lib/phronomy/agent/{journal_record.rb → journal/journal_record.rb} +3 -3
  183. data/lib/phronomy/agent/{llm_call_record.rb → journal/llm_call_record.rb} +2 -2
  184. data/lib/phronomy/agent/knowledge_item.rb +13 -0
  185. data/lib/phronomy/agent/{agent_root.rb → lifecycle/agent_root.rb} +6 -2
  186. data/lib/phronomy/agent/lifecycle/default_persistence.rb +29 -0
  187. data/lib/phronomy/{engine/runtime/agent_ownership_registry.rb → agent/lifecycle/ownership_registry.rb} +24 -15
  188. data/lib/phronomy/agent/persistence/agent_repository.rb +69 -0
  189. data/lib/phronomy/agent/persistence/cancellation_repository.rb +51 -0
  190. data/lib/phronomy/agent/persistence/codec.rb +338 -0
  191. data/lib/phronomy/agent/persistence/execution_repository.rb +124 -0
  192. data/lib/phronomy/agent/persistence/journal_repository.rb +63 -0
  193. data/lib/phronomy/agent/persistence/records.rb +33 -0
  194. data/lib/phronomy/agent/persistence/retention_repository.rb +70 -0
  195. data/lib/phronomy/agent/persistence/storage_schema.rb +29 -0
  196. data/lib/phronomy/agent/persistence/watermark.rb +29 -0
  197. data/lib/phronomy/agent/recovery/invocation_restorer.rb +124 -0
  198. data/lib/phronomy/agent/{recovery_coordinator → recovery/recovery_coordinator}/continuation.rb +28 -51
  199. data/lib/phronomy/agent/{recovery_coordinator → recovery/recovery_coordinator}/installation.rb +50 -55
  200. data/lib/phronomy/agent/{recovery_coordinator → recovery/recovery_coordinator}/resolution.rb +38 -43
  201. data/lib/phronomy/agent/{recovery_coordinator.rb → recovery/recovery_coordinator.rb} +26 -23
  202. data/lib/phronomy/agent/recovery/recovery_rules.rb +119 -0
  203. data/lib/phronomy/agent/recovery/recovery_support.rb +224 -0
  204. data/lib/phronomy/agent/reserved_execution.rb +16 -0
  205. data/lib/phronomy/agent/retention.rb +17 -0
  206. data/lib/phronomy/agent/runtime_binding/engine_environment.rb +60 -0
  207. data/lib/phronomy/agent/runtime_binding/engine_session_builder.rb +34 -0
  208. data/lib/phronomy/agent/runtime_binding/phase_machine_builder.rb +64 -0
  209. data/lib/phronomy/agent/runtime_binding/tool_session_builder.rb +34 -0
  210. data/lib/phronomy/agent/{ruby_llm_materializer.rb → runtime_input.rb} +19 -39
  211. data/lib/phronomy/agent/saved_context_reader.rb +55 -0
  212. data/lib/phronomy/agent/settings.rb +47 -0
  213. data/lib/phronomy/agent/state_writer.rb +166 -0
  214. data/lib/phronomy/agent/store.rb +253 -0
  215. data/lib/phronomy/{stream_callback_error.rb → agent/stream_callback_error.rb} +2 -0
  216. data/lib/phronomy/agent/{approval_evaluation_request.rb → tool_execution/approval_evaluation_request.rb} +1 -12
  217. data/lib/phronomy/agent/{tool_approval_request.rb → tool_execution/tool_approval_request.rb} +1 -10
  218. data/lib/phronomy/agent/tool_execution/tool_binding.rb +30 -0
  219. data/lib/phronomy/agent/{tool_invocation.rb → tool_execution/tool_invocation.rb} +114 -248
  220. data/lib/phronomy/agent/tool_execution/tool_invocation_actions.rb +107 -0
  221. data/lib/phronomy/agent/tool_execution/tool_invocation_transitions.rb +70 -0
  222. data/lib/phronomy/common/configuration_error.rb +7 -0
  223. data/lib/phronomy/common/error.rb +5 -0
  224. data/lib/phronomy/{agent → common/values}/immutable.rb +9 -1
  225. data/lib/phronomy/common/values/serializable.rb +32 -0
  226. data/lib/phronomy/configuration/runtime_settings.rb +49 -0
  227. data/lib/phronomy/content_store/storage_schema.rb +12 -0
  228. data/lib/phronomy/content_store/stored_contents.rb +44 -0
  229. data/lib/phronomy/context/assembly.rb +202 -0
  230. data/lib/phronomy/{context_budget_exceeded_error.rb → context/budget_exceeded_error.rb} +5 -1
  231. data/lib/phronomy/context/candidate.rb +51 -0
  232. data/lib/phronomy/context/constraint.rb +47 -0
  233. data/lib/phronomy/{agent → context}/context_plan.rb +2 -2
  234. data/lib/phronomy/{agent → context}/context_plan_validator.rb +3 -3
  235. data/lib/phronomy/{agent → context}/context_policy.rb +1 -1
  236. data/lib/phronomy/{agent → context}/context_policy_input.rb +7 -7
  237. data/lib/phronomy/{agent → context}/context_policy_input_builder.rb +1 -1
  238. data/lib/phronomy/context/default_policy.rb +140 -0
  239. data/lib/phronomy/context/final_budget_validator.rb +33 -0
  240. data/lib/phronomy/{agent → context}/llm_input_build_context.rb +2 -2
  241. data/lib/phronomy/{agent → context}/llm_input_manifest.rb +21 -21
  242. data/lib/phronomy/{agent → context}/llm_input_patch.rb +3 -3
  243. data/lib/phronomy/context/manifest_error.rb +10 -0
  244. data/lib/phronomy/context/prompt_template.rb +98 -0
  245. data/lib/phronomy/{vector_store → documents}/loader/base.rb +1 -1
  246. data/lib/phronomy/{vector_store → documents}/loader/csv_loader.rb +2 -2
  247. data/lib/phronomy/{vector_store → documents}/loader/markdown_loader.rb +3 -3
  248. data/lib/phronomy/{vector_store → documents}/loader/plain_text_loader.rb +2 -2
  249. data/lib/phronomy/{vector_store → documents}/splitter/base.rb +1 -1
  250. data/lib/phronomy/{vector_store → documents}/splitter/fixed_size_splitter.rb +2 -2
  251. data/lib/phronomy/{vector_store → documents}/splitter/recursive_splitter.rb +2 -2
  252. data/lib/phronomy/embeddings/async/async_client.rb +44 -0
  253. data/lib/phronomy/embeddings/backends/ruby_llm_embeddings.rb +48 -0
  254. data/lib/phronomy/embeddings/base.rb +43 -0
  255. data/lib/phronomy/embeddings/invalid_result_error.rb +11 -0
  256. data/lib/phronomy/embeddings/transport_error.rb +11 -0
  257. data/lib/phronomy/engine/concurrency/offload_pool.rb +39 -20
  258. data/lib/phronomy/engine/concurrency/pool_registry.rb +47 -12
  259. data/lib/phronomy/{diagnostics.rb → engine/diagnostics.rb} +1 -1
  260. data/lib/phronomy/engine/event_loop.rb +164 -630
  261. data/lib/phronomy/engine/execution_binding.rb +23 -0
  262. data/lib/phronomy/engine/execution_receiver_binding.rb +43 -0
  263. data/lib/phronomy/engine/fsm_protocol.rb +9 -0
  264. data/lib/phronomy/engine/fsm_session.rb +37 -30
  265. data/lib/phronomy/engine/metrics.rb +28 -0
  266. data/lib/phronomy/engine/runtime/timer_queue.rb +1 -1
  267. data/lib/phronomy/engine/runtime.rb +104 -95
  268. data/lib/phronomy/engine/terminal_decision.rb +7 -0
  269. data/lib/phronomy/execution/async_operation.rb +41 -0
  270. data/lib/phronomy/execution/backpressure_error.rb +7 -0
  271. data/lib/phronomy/{blocking.rb → execution/blocking.rb} +2 -2
  272. data/lib/phronomy/execution/cancellation_error.rb +7 -0
  273. data/lib/phronomy/{engine → execution}/concurrency/cancellation_token.rb +5 -1
  274. data/lib/phronomy/{engine → execution}/concurrency/deadline.rb +0 -17
  275. data/lib/phronomy/{engine → execution}/concurrency/physical_completion_task.rb +1 -1
  276. data/lib/phronomy/{engine → execution}/concurrency/result_collector.rb +1 -1
  277. data/lib/phronomy/{engine → execution}/concurrency/result_composition.rb +33 -12
  278. data/lib/phronomy/{engine/concurrency/subscriptions.rb → execution/concurrency/result_subscriptions.rb} +14 -18
  279. data/lib/phronomy/execution/concurrency/subscriptions.rb +25 -0
  280. data/lib/phronomy/execution/concurrency/worker_input_restricted.rb +14 -0
  281. data/lib/phronomy/execution/event_loop_reentrancy_error.rb +8 -0
  282. data/lib/phronomy/{execution.rb → execution/execution.rb} +57 -30
  283. data/lib/phronomy/{execution_cancellation_error.rb → execution/execution_cancellation_error.rb} +2 -0
  284. data/lib/phronomy/execution/execution_receiver.rb +78 -0
  285. data/lib/phronomy/execution/execution_scope_state.rb +35 -0
  286. data/lib/phronomy/{execution_timeout_error.rb → execution/execution_timeout_error.rb} +2 -0
  287. data/lib/phronomy/{invalid_async_entry_action_error.rb → execution/invalid_async_entry_action_error.rb} +2 -0
  288. data/lib/phronomy/{invalid_async_transition_action_error.rb → execution/invalid_async_transition_action_error.rb} +2 -0
  289. data/lib/phronomy/{invalid_async_workflow_action_error.rb → execution/invalid_async_workflow_action_error.rb} +2 -0
  290. data/lib/phronomy/{invocation_context.rb → execution/invocation_context.rb} +0 -15
  291. data/lib/phronomy/execution/invocation_controls.rb +73 -0
  292. data/lib/phronomy/execution/pool_shutdown_error.rb +7 -0
  293. data/lib/phronomy/execution/recursion_limit_error.rb +7 -0
  294. data/lib/phronomy/execution/runnable.rb +24 -0
  295. data/lib/phronomy/execution/runtime_shutdown_error.rb +7 -0
  296. data/lib/phronomy/execution/runtime_shutdown_reentrancy_error.rb +7 -0
  297. data/lib/phronomy/execution/scheduler_reentrancy_error.rb +9 -0
  298. data/lib/phronomy/{engine → execution}/task_result.rb +7 -3
  299. data/lib/phronomy/execution/timeout_error.rb +7 -0
  300. data/lib/phronomy/execution/wait_policy.rb +24 -0
  301. data/lib/phronomy/filter/filter_block_error.rb +14 -0
  302. data/lib/phronomy/generation/generator_verifier/agent_operation.rb +65 -0
  303. data/lib/phronomy/generation/generator_verifier/agent_result_receiver.rb +89 -0
  304. data/lib/phronomy/generation/generator_verifier/default_parser.rb +27 -0
  305. data/lib/phronomy/generation/generator_verifier/pipeline_state.rb +57 -0
  306. data/lib/phronomy/generation/generator_verifier/workflow_builder.rb +112 -0
  307. data/lib/phronomy/generation/generator_verifier.rb +118 -0
  308. data/lib/phronomy/generation/low_confidence_error.rb +14 -0
  309. data/lib/phronomy/llm_adapter/async/async_client.rb +47 -0
  310. data/lib/phronomy/llm_adapter/authentication_error.rb +9 -0
  311. data/lib/phronomy/llm_adapter/backends/ruby_llm.rb +183 -0
  312. data/lib/phronomy/llm_adapter/base.rb +49 -68
  313. data/lib/phronomy/llm_adapter/context_length_error.rb +9 -0
  314. data/lib/phronomy/llm_adapter/invalid_result_error.rb +10 -0
  315. data/lib/phronomy/llm_adapter/message.rb +62 -0
  316. data/lib/phronomy/llm_adapter/rate_limit_error.rb +9 -0
  317. data/lib/phronomy/llm_adapter/request.rb +79 -0
  318. data/lib/phronomy/llm_adapter/response.rb +36 -0
  319. data/lib/phronomy/llm_adapter/stream_chunk.rb +18 -0
  320. data/lib/phronomy/llm_adapter/token_usage.rb +64 -0
  321. data/lib/phronomy/llm_adapter/transport_error.rb +9 -0
  322. data/lib/phronomy/llm_adapter.rb +3 -16
  323. data/lib/phronomy/llm_context_window/token_budget.rb +6 -7
  324. data/lib/phronomy/multi_agent/admission_registry.rb +15 -2
  325. data/lib/phronomy/multi_agent/durable_subagent_coordinator.rb +108 -84
  326. data/lib/phronomy/multi_agent/execution_environment.rb +29 -0
  327. data/lib/phronomy/{agent → multi_agent}/handoff.rb +2 -2
  328. data/lib/phronomy/{agent → multi_agent}/handoff_capability_factory.rb +21 -2
  329. data/lib/phronomy/multi_agent/handoff_participant.rb +79 -0
  330. data/lib/phronomy/{agent → multi_agent}/handoff_policy.rb +1 -1
  331. data/lib/phronomy/multi_agent/handoff_runner.rb +156 -0
  332. data/lib/phronomy/{agent → multi_agent}/handoff_state.rb +2 -2
  333. data/lib/phronomy/multi_agent/orchestrator.rb +61 -75
  334. data/lib/phronomy/multi_agent/persistence/codec.rb +75 -0
  335. data/lib/phronomy/multi_agent/persistence/handoff_state_repository.rb +77 -0
  336. data/lib/phronomy/multi_agent/persistence/records.rb +27 -0
  337. data/lib/phronomy/multi_agent/persistence/storage_schema.rb +21 -0
  338. data/lib/phronomy/multi_agent/persistence/team_execution_repository.rb +124 -0
  339. data/lib/phronomy/multi_agent/persistence/team_repository.rb +69 -0
  340. data/lib/phronomy/multi_agent/reserved_child_admission.rb +88 -0
  341. data/lib/phronomy/multi_agent/runtime_binding/engine_environment.rb +35 -0
  342. data/lib/phronomy/{agent → multi_agent}/shared_state.rb +56 -39
  343. data/lib/phronomy/multi_agent/store.rb +156 -0
  344. data/lib/phronomy/multi_agent/team_coordinator.rb +87 -75
  345. data/lib/phronomy/multi_agent/team_execution.rb +1 -1
  346. data/lib/phronomy/{engine/runtime → multi_agent}/team_ownership_registry.rb +5 -5
  347. data/lib/phronomy/multi_agent/team_root.rb +1 -1
  348. data/lib/phronomy/output_parser/parse_error.rb +7 -0
  349. data/lib/phronomy/persistence/content_repository.rb +26 -0
  350. data/lib/phronomy/persistence/errors.rb +16 -0
  351. data/lib/phronomy/persistence/migration/initial_format_migration.rb +21 -21
  352. data/lib/phronomy/persistence/persistence.rb +23 -0
  353. data/lib/phronomy/persistence/save_outcome.rb +24 -0
  354. data/lib/phronomy/persistence/snapshot_comparison.rb +81 -0
  355. data/lib/phronomy/persistence/storage_boundary.rb +32 -0
  356. data/lib/phronomy/persistence/transaction.rb +86 -0
  357. data/lib/phronomy/persistence_composition/storage_schema.rb +29 -0
  358. data/lib/phronomy/persistence_composition/stores.rb +34 -0
  359. data/lib/phronomy/persistence_composition/unit4_migration.rb +276 -0
  360. data/lib/phronomy/runtime_composition/agent_defaults.rb +11 -0
  361. data/lib/phronomy/runtime_composition/configuration.rb +146 -0
  362. data/lib/phronomy/runtime_composition/configuration_defaults.rb +9 -0
  363. data/lib/phronomy/runtime_composition/evaluation_defaults.rb +7 -0
  364. data/lib/phronomy/runtime_composition/execution_defaults.rb +5 -0
  365. data/lib/phronomy/runtime_composition/generation_defaults.rb +6 -0
  366. data/lib/phronomy/runtime_composition/global_configuration.rb +38 -0
  367. data/lib/phronomy/runtime_composition/global_runtime.rb +19 -0
  368. data/lib/phronomy/runtime_composition/multi_agent_defaults.rb +9 -0
  369. data/lib/phronomy/runtime_composition/workflow_defaults.rb +4 -0
  370. data/lib/phronomy/storage/async/async_client.rb +60 -0
  371. data/lib/phronomy/storage/backend.rb +107 -0
  372. data/lib/phronomy/storage/backends/in_memory.rb +157 -0
  373. data/lib/phronomy/storage/blob_conflict_error.rb +10 -0
  374. data/lib/phronomy/storage/blobs.rb +31 -0
  375. data/lib/phronomy/storage/condition.rb +25 -0
  376. data/lib/phronomy/storage/condition_failed_error.rb +16 -0
  377. data/lib/phronomy/storage/conflict_error.rb +9 -0
  378. data/lib/phronomy/{persistence → storage}/durable_record.rb +12 -12
  379. data/lib/phronomy/storage/entry.rb +33 -0
  380. data/lib/phronomy/storage/guard_ref.rb +13 -0
  381. data/lib/phronomy/storage/not_found_error.rb +9 -0
  382. data/lib/phronomy/storage/record_codec.rb +177 -0
  383. data/lib/phronomy/storage/records.rb +61 -0
  384. data/lib/phronomy/storage/resource.rb +126 -0
  385. data/lib/phronomy/storage/scope.rb +25 -0
  386. data/lib/phronomy/storage/serialization_error.rb +9 -0
  387. data/lib/phronomy/storage/streams.rb +44 -0
  388. data/lib/phronomy/storage/transaction_error.rb +10 -0
  389. data/lib/phronomy/storage/unique_constraint_error.rb +17 -0
  390. data/lib/phronomy/storage/unsupported_backend_error.rb +9 -0
  391. data/lib/phronomy/storage/validation.rb +53 -0
  392. data/lib/phronomy/storage/view.rb +131 -0
  393. data/lib/phronomy/testing/eval/metrics.rb +1 -1
  394. data/lib/phronomy/testing/eval/scorer/llm_judge.rb +19 -3
  395. data/lib/phronomy/testing/persistence_contract/a_content_store.rb +1 -1
  396. data/lib/phronomy/testing/persistence_contract/a_journal_repository.rb +2 -2
  397. data/lib/phronomy/testing/persistence_contract/a_persistence_backend.rb +54 -48
  398. data/lib/phronomy/testing/persistence_contract/a_workflow_state_repository.rb +1 -1
  399. data/lib/phronomy/testing/persistence_contract/an_agent_repository.rb +1 -1
  400. data/lib/phronomy/testing/persistence_contract/an_execution_repository.rb +5 -5
  401. data/lib/phronomy/testing/persistence_contract/coordination_repositories.rb +52 -46
  402. data/lib/phronomy/testing/persistence_contract/neutral_storage_primitives.rb +263 -0
  403. data/lib/phronomy/testing/persistence_contract/storage_transaction_boundaries.rb +124 -0
  404. data/lib/phronomy/testing/persistence_contract.rb +4 -0
  405. data/lib/phronomy/tool/authorization.rb +77 -0
  406. data/lib/phronomy/tool/base.rb +549 -9
  407. data/lib/phronomy/tool/call_request.rb +40 -0
  408. data/lib/phronomy/{agent/tool_definition_set.rb → tool/definition_set.rb} +16 -12
  409. data/lib/phronomy/tool/operation.rb +88 -0
  410. data/lib/phronomy/tool/schema.rb +214 -0
  411. data/lib/phronomy/tool/settings.rb +31 -0
  412. data/lib/phronomy/tool/tool_error.rb +7 -0
  413. data/lib/phronomy/{agent → tool}/tool_executor.rb +10 -7
  414. data/lib/phronomy/tools/agent.rb +22 -90
  415. data/lib/phronomy/tools/mcp.rb +21 -14
  416. data/lib/phronomy/tools/vector_search.rb +4 -4
  417. data/lib/phronomy/tracing/automatic.rb +11 -6
  418. data/lib/phronomy/tracing/base.rb +1 -1
  419. data/lib/phronomy/tracing/observation.rb +37 -0
  420. data/lib/phronomy/tracing/settings.rb +36 -0
  421. data/lib/phronomy/vector_store/{async_backend.rb → async/async_client.rb} +35 -29
  422. data/lib/phronomy/vector_store/{in_memory.rb → backends/in_memory.rb} +12 -10
  423. data/lib/phronomy/vector_store/{pgvector.rb → backends/pgvector.rb} +44 -16
  424. data/lib/phronomy/vector_store/{redis_search.rb → backends/redis_search.rb} +74 -37
  425. data/lib/phronomy/vector_store/base.rb +118 -49
  426. data/lib/phronomy/vector_store/invalid_result_error.rb +12 -0
  427. data/lib/phronomy/vector_store.rb +2 -17
  428. data/lib/phronomy/version.rb +1 -1
  429. data/lib/phronomy/workflow/completion.rb +11 -0
  430. data/lib/phronomy/{workflow.rb → workflow/execution/workflow.rb} +10 -8
  431. data/lib/phronomy/workflow/execution/workflow_action_rules.rb +67 -0
  432. data/lib/phronomy/{workflow_context.rb → workflow/execution/workflow_context.rb} +5 -1
  433. data/lib/phronomy/workflow/execution/workflow_context_ownership_error.rb +7 -0
  434. data/lib/phronomy/workflow/execution/workflow_execution_environment.rb +27 -0
  435. data/lib/phronomy/workflow/execution/workflow_execution_registry.rb +186 -0
  436. data/lib/phronomy/{workflow_runner.rb → workflow/execution/workflow_runner.rb} +145 -115
  437. data/lib/phronomy/workflow/execution/workflow_settings.rb +28 -0
  438. data/lib/phronomy/workflow/persistence/codec.rb +153 -0
  439. data/lib/phronomy/workflow/persistence/state_repository.rb +63 -0
  440. data/lib/phronomy/workflow/persistence/storage_schema.rb +13 -0
  441. data/lib/phronomy/workflow/runtime_binding/workflow_engine_environment.rb +38 -0
  442. data/lib/phronomy/workflow/runtime_binding/workflow_phase_machine_builder.rb +156 -0
  443. data/lib/phronomy/workflow/runtime_binding/workflow_terminal_policy.rb +40 -0
  444. data/lib/phronomy.rb +97 -98
  445. data/scripts/api_snapshot.rb +36 -16
  446. data/scripts/storage_spi_snapshot.rb +36 -0
  447. data/sig/_private/phronomy/agent/settings.rbs +19 -0
  448. data/sig/_private/phronomy/configuration/runtime_settings.rbs +20 -0
  449. data/sig/_private/phronomy/llm_adapter/async/async_client.rbs +10 -0
  450. data/sig/_private/phronomy/multi_agent/store.rbs +8 -0
  451. data/sig/_private/phronomy/persistence/storage_boundary.rbs +7 -0
  452. data/sig/_private/phronomy/tool/settings.rbs +13 -0
  453. data/sig/_private/phronomy/tracing/settings.rbs +15 -0
  454. data/sig/_private/phronomy/workflow/execution/workflow_settings.rbs +13 -0
  455. data/sig/phronomy/agent/admission.rbs +19 -0
  456. data/sig/phronomy/agent/execution_contract.rbs +132 -0
  457. data/sig/phronomy/agent/execution_environment.rbs +20 -0
  458. data/sig/phronomy/agent/store.rbs +73 -0
  459. data/sig/phronomy/agent.rbs +14 -139
  460. data/sig/phronomy/common.rbs +7 -0
  461. data/sig/phronomy/content_store/contracts.rbs +13 -0
  462. data/sig/phronomy/context.rbs +152 -0
  463. data/sig/phronomy/embeddings/async/async_client.rbs +9 -0
  464. data/sig/phronomy/embeddings/base.rbs +17 -0
  465. data/sig/phronomy/engine/concurrency/timer_bindings.rbs +22 -0
  466. data/sig/phronomy/engine/control_bindings.rbs +11 -0
  467. data/sig/phronomy/engine/control_protocols.rbs +23 -0
  468. data/sig/phronomy/engine/execution_binding.rbs +6 -0
  469. data/sig/phronomy/engine/execution_receiver.rbs +15 -0
  470. data/sig/phronomy/engine/observability.rbs +13 -0
  471. data/sig/phronomy/execution/async_operation.rbs +7 -0
  472. data/sig/phronomy/execution/blocking.rbs +5 -0
  473. data/sig/phronomy/execution/concurrency/cancellation_token.rbs +13 -0
  474. data/sig/phronomy/execution/concurrency/deadline.rbs +10 -0
  475. data/sig/phronomy/execution/concurrency/result_composition.rbs +7 -0
  476. data/sig/phronomy/execution/control_protocols.rbs +18 -0
  477. data/sig/phronomy/execution/errors.rbs +7 -0
  478. data/sig/phronomy/execution/execution.rbs +41 -0
  479. data/sig/phronomy/execution/execution_receiver.rbs +40 -0
  480. data/sig/phronomy/execution/execution_scope_state.rbs +9 -0
  481. data/sig/phronomy/execution/invocation_context.rbs +18 -0
  482. data/sig/phronomy/execution/invocation_controls.rbs +13 -0
  483. data/sig/phronomy/execution/task_result.rbs +29 -0
  484. data/sig/phronomy/extensions.rbs +0 -21
  485. data/sig/phronomy/handoff.rbs +12 -4
  486. data/sig/phronomy/llm_adapter/backends/ruby_llm.rbs +6 -0
  487. data/sig/phronomy/llm_adapter/base.rbs +14 -0
  488. data/sig/phronomy/llm_adapter/usage.rbs +14 -0
  489. data/sig/phronomy/llm_adapter/values.rbs +43 -0
  490. data/sig/phronomy/llm_context_window.rbs +10 -0
  491. data/sig/phronomy/multi_agent/reserved_child_admission.rbs +8 -0
  492. data/sig/phronomy/multi_agent/store.rbs +54 -0
  493. data/sig/phronomy/multi_agent.rbs +24 -3
  494. data/sig/phronomy/persistence/errors.rbs +18 -0
  495. data/sig/phronomy/persistence/migration.rbs +13 -0
  496. data/sig/phronomy/persistence/transaction.rbs +19 -0
  497. data/sig/phronomy/persistence.rbs +3 -185
  498. data/sig/phronomy/persistence_composition.rbs +19 -0
  499. data/sig/phronomy/runtime_composition/configuration.rbs +36 -0
  500. data/sig/phronomy/storage/async/async_client.rbs +8 -0
  501. data/sig/phronomy/storage/backends/in_memory.rbs +9 -0
  502. data/sig/phronomy/storage/contracts.rbs +160 -0
  503. data/sig/phronomy/tool.rbs +58 -5
  504. data/sig/phronomy/tracing/observation.rbs +7 -0
  505. data/sig/phronomy/vector_store/async/async_client.rbs +13 -0
  506. data/sig/phronomy/vector_store/base.rbs +23 -0
  507. data/sig/phronomy/workflow/execution/workflow_execution_environment.rbs +14 -0
  508. data/sig/phronomy/workflow/runtime_binding/workflow_terminal_policy.rbs +7 -0
  509. data/sig/phronomy/workflow/store.rbs +8 -0
  510. data/sig/phronomy/workflow.rbs +1 -1
  511. data/sig/phronomy.rbs +0 -49
  512. metadata +462 -130
  513. data/lib/phronomy/agent/agent_invocation_session_builder.rb +0 -584
  514. data/lib/phronomy/agent/concerns/before_llm_input.rb +0 -66
  515. data/lib/phronomy/agent/concerns/error_translation.rb +0 -45
  516. data/lib/phronomy/agent/concerns/filterable.rb +0 -184
  517. data/lib/phronomy/agent/context/capability/base.rb +0 -507
  518. data/lib/phronomy/agent/context/instruction/prompt_template.rb +0 -102
  519. data/lib/phronomy/agent/context_parts/validators/final_budget_validator.rb +0 -37
  520. data/lib/phronomy/agent/context_policies/default.rb +0 -142
  521. data/lib/phronomy/agent/execution_coordinator.rb +0 -3151
  522. data/lib/phronomy/agent/handoff_execution_coordinator.rb +0 -143
  523. data/lib/phronomy/agent/handoff_request.rb +0 -45
  524. data/lib/phronomy/agent/handoff_runner.rb +0 -178
  525. data/lib/phronomy/agent/phase_machine_builder.rb +0 -152
  526. data/lib/phronomy/agent/provider_call_outcome.rb +0 -106
  527. data/lib/phronomy/agent/recovery_support.rb +0 -504
  528. data/lib/phronomy/agent/selection/candidate.rb +0 -53
  529. data/lib/phronomy/agent/selection/constraint.rb +0 -49
  530. data/lib/phronomy/agent/token_budget_resolver.rb +0 -70
  531. data/lib/phronomy/agent/tool_call_intercepted.rb +0 -29
  532. data/lib/phronomy/agent/tool_invocation_session_builder.rb +0 -276
  533. data/lib/phronomy/configuration.rb +0 -59
  534. data/lib/phronomy/engine/concurrency/cancellation_scope.rb +0 -124
  535. data/lib/phronomy/engine/concurrency/operation_binding.rb +0 -43
  536. data/lib/phronomy/generator_verifier.rb +0 -369
  537. data/lib/phronomy/invalid_context_budget_configuration_error.rb +0 -8
  538. data/lib/phronomy/llm_adapter/ruby_llm.rb +0 -47
  539. data/lib/phronomy/metrics.rb +0 -26
  540. data/lib/phronomy/multi_agent/parallel_tool_chat.rb +0 -116
  541. data/lib/phronomy/persistence/durable_codec.rb +0 -706
  542. data/lib/phronomy/persistence/in_memory.rb +0 -690
  543. data/lib/phronomy/persistence/repository_facades.rb +0 -535
  544. data/lib/phronomy/persistence.rb +0 -276
  545. data/lib/phronomy/recovery.rb +0 -186
  546. data/lib/phronomy/ruby_llm_patches.rb +0 -24
  547. data/lib/phronomy/runnable.rb +0 -54
  548. data/lib/phronomy/token_usage.rb +0 -85
  549. data/lib/phronomy/vector_store/embeddings/base.rb +0 -44
  550. data/lib/phronomy/vector_store/embeddings/ruby_llm_embeddings.rb +0 -47
  551. data/lib/phronomy/workflow/phase_machine_builder.rb +0 -205
  552. data/lib/phronomy/workflow_recovery.rb +0 -123
  553. data/sig/phronomy/llm_adapter.rbs +0 -11
  554. data/sig/phronomy/runtime.rbs +0 -76
  555. /data/lib/phronomy/agent/{llm_operation_result.rb → execution/llm_operation_result.rb} +0 -0
  556. /data/lib/phronomy/{canonical_json.rb → common/canonical_json.rb} +0 -0
  557. /data/lib/phronomy/{event.rb → engine/event.rb} +0 -0
@@ -1,189 +1,7 @@
1
1
  module Phronomy
2
- interface _ContentRepository
3
- def put: (String bytes, canonicalization_version: untyped) -> String
4
- def fetch: (String content_id) -> String
5
- def exist?: (String content_id) -> bool
6
- end
7
-
8
- # Runtime/domain-facing repository interfaces.
9
- interface _AgentRepository
10
- def create: (untyped root) -> untyped
11
- def load: (String agent_id) -> untyped
12
- def save: (String agent_id, expected_revision: Integer, root: untyped) -> untyped
13
- def delete: (String agent_id) -> untyped
14
- end
15
-
16
- interface _JournalRepository
17
- def append: (String agent_id, expected_position: Integer, records: Array[untyped]) -> Array[untyped]
18
- def read: (String agent_id, ?after: Integer?, ?limit: Integer?) -> Array[untyped]
19
- def head: (String agent_id) -> Integer
20
- def delete: (String agent_id) -> untyped
21
- end
22
-
23
- interface _ExecutionRepository
24
- def create_active: (untyped execution) -> untyped
25
- def load: (String execution_id) -> untyped
26
- def save: (String execution_id, expected_revision: Integer, execution: untyped) -> untyped
27
- def list_active: (String agent_id) -> Array[untyped]
28
- def list: (String agent_id, ?after: String?, ?limit: Integer) -> Array[untyped]
29
- def delete: (String execution_id) -> untyped
30
- def delete_for_agent: (String agent_id) -> untyped
31
- def assert_idle!: (String agent_id) -> untyped
32
- end
33
-
34
- interface _WorkflowStateRepository
35
- def load: (String workflow_instance_id) -> Hash[untyped, untyped]?
36
- def save: (String workflow_instance_id, expected_revision: Integer?, snapshot: Hash[untyped, untyped]) -> Integer
37
- def delete: (String workflow_instance_id, expected_revision: Integer) -> untyped
38
- end
39
-
40
- # Backend-side record repository interfaces. DurableRecord is the opaque data
41
- # carrier. Identity/revision/index metadata is passed separately so backends do
42
- # not need to interpret DurableRecord#payload.
43
- interface _BackendAgentRecordRepository
44
- def create: (agent_id: String, agent_revision: Integer, record: Persistence::DurableRecord) -> Persistence::DurableRecord
45
- def load: (String agent_id) -> Persistence::DurableRecord
46
- def save: (String agent_id, expected_revision: Integer, next_revision: Integer, record: Persistence::DurableRecord) -> Persistence::DurableRecord
47
- def delete: (String agent_id) -> untyped
48
- end
49
-
50
- interface _BackendJournalRecordRepository
51
- def append: (String agent_id, expected_position: Integer, records: Array[Persistence::DurableRecord], record_ids: Array[String]) -> Array[Persistence::DurableRecord]
52
- def read: (String agent_id, ?after: Integer?, ?limit: Integer?) -> Array[Persistence::DurableRecord]
53
- def head: (String agent_id) -> Integer
54
- def delete: (String agent_id) -> untyped
55
- end
56
-
57
- interface _BackendExecutionRecordRepository
58
- def create_active: (execution_id: String, agent_id: String, execution_revision: Integer, record: Persistence::DurableRecord) -> Persistence::DurableRecord
59
- def load: (String execution_id) -> Persistence::DurableRecord
60
- def save: (String execution_id, expected_revision: Integer, next_revision: Integer, agent_id: String, active: bool, record: Persistence::DurableRecord) -> Persistence::DurableRecord
61
- def list_active: (String agent_id) -> Array[Persistence::DurableRecord]
62
- def list: (String agent_id, ?after: String?, ?limit: Integer) -> Array[Persistence::DurableRecord]
63
- def delete: (String execution_id) -> untyped
64
- def delete_for_agent: (String agent_id) -> untyped
65
- def assert_idle!: (String agent_id) -> untyped
66
- end
67
-
68
- interface _BackendWorkflowStateRecordRepository
69
- def load: (String workflow_instance_id) -> Persistence::DurableRecord?
70
- def save: (String workflow_instance_id, expected_revision: Integer?, next_revision: Integer, record: Persistence::DurableRecord) -> Persistence::DurableRecord
71
- def delete: (String workflow_instance_id, expected_revision: Integer) -> untyped
72
- end
73
-
74
- interface _HandoffStateRepository
75
- def load: (String main_agent_id) -> untyped
76
- def save: (String main_agent_id, expected_revision: Integer?, state: untyped) -> untyped
77
- def delete: (String main_agent_id, expected_revision: Integer) -> untyped
78
- end
79
-
80
- interface _TeamRepository
81
- def create: (untyped root) -> untyped
82
- def load: (String team_id) -> untyped
83
- def save: (String team_id, expected_revision: Integer, root: untyped) -> untyped
84
- def delete: (String team_id) -> untyped
85
- end
86
-
87
- interface _TeamExecutionRepository
88
- def create_active: (untyped execution) -> untyped
89
- def load: (String team_execution_id) -> untyped
90
- def save: (String team_execution_id, expected_revision: Integer, execution: untyped) -> untyped
91
- def list_active: (String team_id) -> Array[untyped]
92
- def list: (String team_id, ?after: String?, ?limit: Integer) -> Array[untyped]
93
- def delete: (String team_execution_id) -> untyped
94
- def delete_for_team: (String team_id) -> untyped
95
- def assert_idle!: (String team_id) -> untyped
96
- end
97
-
98
- interface _BackendHandoffStateRecordRepository
99
- def load: (String main_agent_id) -> Persistence::DurableRecord?
100
- def save: (String main_agent_id, expected_revision: Integer?, next_revision: Integer, active_agent_id: String, record: Persistence::DurableRecord) -> Persistence::DurableRecord
101
- def delete: (String main_agent_id, expected_revision: Integer) -> untyped
102
- end
103
-
104
- interface _BackendTeamRecordRepository
105
- def create: (team_id: String, team_revision: Integer, record: Persistence::DurableRecord) -> Persistence::DurableRecord
106
- def load: (String team_id) -> Persistence::DurableRecord
107
- def save: (String team_id, expected_revision: Integer, next_revision: Integer, record: Persistence::DurableRecord) -> Persistence::DurableRecord
108
- def delete: (String team_id) -> untyped
109
- end
110
-
111
- interface _BackendTeamExecutionRecordRepository
112
- def create_active: (team_execution_id: String, team_id: String, execution_revision: Integer, record: Persistence::DurableRecord) -> Persistence::DurableRecord
113
- def load: (String team_execution_id) -> Persistence::DurableRecord
114
- def save: (String team_execution_id, expected_revision: Integer, next_revision: Integer, team_id: String, active: bool, record: Persistence::DurableRecord) -> Persistence::DurableRecord
115
- def list_active: (String team_id) -> Array[Persistence::DurableRecord]
116
- def list: (String team_id, ?after: String?, ?limit: Integer) -> Array[Persistence::DurableRecord]
117
- def delete: (String team_execution_id) -> untyped
118
- def delete_for_team: (String team_id) -> untyped
119
- def assert_idle!: (String team_id) -> untyped
120
- end
121
-
122
- interface _BackendWatermark
123
- def assert_agent_watermark!: (agent_id: String, agent_revision: Integer, journal_position: Integer) -> true
124
- end
125
-
126
- interface _PersistenceTransactionView
127
- def contents: () -> _ContentRepository
128
- def agents: () -> _AgentRepository
129
- def journals: () -> _JournalRepository
130
- def executions: () -> _ExecutionRepository
131
- def workflow_states: () -> _WorkflowStateRepository
132
- def handoff_states: () -> _HandoffStateRepository
133
- def teams: () -> _TeamRepository
134
- def team_executions: () -> _TeamExecutionRepository
135
- def assert_agent_watermark!: (agent_id: String, agent_revision: Integer, journal_position: Integer) -> true
136
- end
137
-
138
2
  class Persistence
139
- class ConflictError < Phronomy::Error
140
- end
141
- class NotFoundError < Phronomy::Error
142
- end
143
- class UnsupportedBackendError < Phronomy::Error
144
- end
145
- class SerializationError < Phronomy::Error
146
- end
147
-
148
- class DurableRecord
149
- FORMAT_VERSION_PATTERN: Regexp
150
- attr_reader record_type: String
151
- attr_reader format_version: String
152
- attr_reader payload: Hash[String, untyped]
153
- def initialize: (record_type: String, format_version: String, payload: Hash[String, untyped]) -> void
154
- def copy: () -> DurableRecord
155
- end
156
-
157
- module Migration
158
- module InitialFormatMigration
159
- def self.agent_root: (Hash[untyped, untyped] hash) -> DurableRecord
160
- def self.agent_execution: (Hash[untyped, untyped] hash) -> DurableRecord
161
- def self.journal_record: (Hash[untyped, untyped] hash) -> DurableRecord
162
- def self.workflow_state: (workflow_instance_id: String, revision: Integer, snapshot: Hash[untyped, untyped]) -> DurableRecord
163
- def self.llm_input_manifest: (Hash[untyped, untyped] hash) -> Hash[String, untyped]
164
- end
165
- end
166
-
167
- REQUIRED_CAPABILITIES: Hash[Symbol, bool]
168
-
169
- attr_reader contents: _ContentRepository
170
- attr_reader agents: _AgentRepository
171
- attr_reader journals: _JournalRepository
172
- attr_reader executions: _ExecutionRepository
173
- attr_reader workflow_states: _WorkflowStateRepository
174
- attr_reader handoff_states: _HandoffStateRepository
175
- attr_reader teams: _TeamRepository
176
- attr_reader team_executions: _TeamExecutionRepository
177
- def handoff_result: (String execution_id, ?main_agent_id: String?) -> Hash[Symbol, untyped]
178
- def execution_result: (String execution_id) -> Hash[Symbol, untyped]
179
- def list_executions: (String agent_id, ?after: String?, ?limit: Integer) -> Array[untyped]
180
- def team_execution_result: (String team_execution_id) -> Hash[Symbol, untyped]
181
- def list_team_executions: (String team_id, ?after: String?, ?limit: Integer) -> Array[untyped]
182
-
183
- def initialize: (contents: _ContentRepository, agents: _BackendAgentRecordRepository, journals: _BackendJournalRecordRepository, executions: _BackendExecutionRecordRepository, workflow_states: _BackendWorkflowStateRecordRepository, handoff_states: _BackendHandoffStateRecordRepository, teams: _BackendTeamRecordRepository, team_executions: _BackendTeamExecutionRecordRepository) -> void
184
- def capabilities: () -> Hash[Symbol, bool]
185
- def transaction: () { (_PersistenceTransactionView) -> untyped } -> untyped
186
- def build_transaction_view: (contents: _ContentRepository, agents: _BackendAgentRecordRepository, journals: _BackendJournalRecordRepository, executions: _BackendExecutionRecordRepository, workflow_states: _BackendWorkflowStateRecordRepository, handoff_states: _BackendHandoffStateRecordRepository, teams: _BackendTeamRecordRepository, team_executions: _BackendTeamExecutionRecordRepository, watermark: _BackendWatermark) -> _PersistenceTransactionView
187
- def assert_agent_watermark!: (agent_id: String, agent_revision: Integer, journal_position: Integer) -> true
3
+ attr_reader backend: _StorageBackend
4
+ def initialize: (backend: _StorageBackend) -> void
5
+ def bind: [T] (_Participant[T] adapter) -> T
188
6
  end
189
7
  end
@@ -0,0 +1,19 @@
1
+ module Phronomy
2
+ module PersistenceComposition
3
+ class Stores < Data
4
+ attr_reader coordinator: ::Phronomy::Persistence
5
+ attr_reader agent: Agent::Store
6
+ attr_reader multi_agent: MultiAgent::Store
7
+ attr_reader workflow: _WorkflowStateRepository
8
+ def self.new: (coordinator: ::Phronomy::Persistence, agent: Agent::Store, multi_agent: MultiAgent::Store, workflow: _WorkflowStateRepository) -> instance
9
+ end
10
+
11
+ class Unit4Migration
12
+ def self.convert: (Hash[String, json_value] snapshot, quiescent: bool) -> Hash[String, json_value]
13
+ end
14
+
15
+ def self.agent: (?backend: _StorageBackend?) -> Agent::Store
16
+ def self.build: (backend: _StorageBackend) -> Stores
17
+ def self.in_memory: () -> Stores
18
+ end
19
+ end
@@ -0,0 +1,36 @@
1
+ module Phronomy
2
+ class ConfigurationError < Error
3
+ end
4
+
5
+ class HandoffError < Error
6
+ end
7
+
8
+ class CancellationError < Error
9
+ end
10
+
11
+ class EventLoopReentrancyError < Error
12
+ end
13
+
14
+ class AgentAlreadyExistsError < Error
15
+ end
16
+
17
+ class AgentPurgedError < Error
18
+ end
19
+
20
+ class PoolShutdownError < Error
21
+ end
22
+
23
+ class BackpressureError < Error
24
+ end
25
+
26
+ class Configuration
27
+ attr_accessor agent_store: Agent::Store?
28
+ attr_accessor multi_agent_store: MultiAgent::Store?
29
+ attr_accessor workflow_store: _WorkflowStateRepository?
30
+ attr_accessor llm_adapter: LLMAdapter::Base
31
+ attr_accessor before_llm_input: Agent::_BeforeLLMInputHook?
32
+ end
33
+
34
+ def self.configuration: () -> Configuration
35
+ def self.configure: () { (Configuration) -> void } -> void
36
+ end
@@ -0,0 +1,8 @@
1
+ module Phronomy
2
+ module Storage
3
+ class AsyncClient
4
+ def initialize: (backend: _StorageBackend, ?pool: untyped) -> void
5
+ def transaction_async: [T] (?cancellation_token: Concurrency::CancellationToken?, ?timeout: Numeric?) { (View) -> T } -> TaskResult[T]
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ module Phronomy
2
+ module Storage
3
+ module Backends
4
+ class InMemory < Backend
5
+ def initialize: (?resources: Array[Resource]) -> void
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,160 @@
1
+ module Phronomy
2
+ interface _StorageBackend
3
+ def view: () -> Storage::View
4
+ def capabilities: () -> Hash[Symbol, bool | Integer]
5
+ def transaction_open?: () -> bool
6
+ def transaction: [T] () { (Storage::View) -> T } -> T
7
+ end
8
+
9
+ module Storage
10
+ type attributes = Hash[Symbol, String | Integer | bool | nil]
11
+ type resource_ref = Resource | String
12
+ type condition = Condition::RevisionIs | Condition::StreamHeadIs | Condition::NoRows
13
+
14
+ class ConflictError < Phronomy::Error
15
+ end
16
+ class UniqueConstraintError < ConflictError
17
+ attr_reader resource: String
18
+ attr_reader constraint: Symbol
19
+ def initialize: (resource: Resource, constraint: Symbol) -> void
20
+ end
21
+ class ConditionFailedError < ConflictError
22
+ attr_reader condition: condition
23
+ def initialize: (condition) -> void
24
+ end
25
+ class BlobConflictError < ConflictError
26
+ end
27
+ class TransactionError < Phronomy::Error
28
+ end
29
+ class NotFoundError < Phronomy::Error
30
+ end
31
+ class UnsupportedBackendError < Phronomy::Error
32
+ end
33
+ class SerializationError < Phronomy::Error
34
+ end
35
+
36
+ class DurableRecord
37
+ FORMAT_VERSION_PATTERN: Regexp
38
+ attr_reader record_type: String
39
+ attr_reader format_version: String
40
+ attr_reader payload: Hash[String, untyped]
41
+ def initialize: (record_type: String, format_version: String, payload: Hash[String, untyped]) -> void
42
+ def copy: () -> DurableRecord
43
+ end
44
+
45
+ class Resource
46
+ attr_reader id: String
47
+ attr_reader kind: Symbol
48
+ attr_reader attributes: Hash[Symbol, Symbol]
49
+ attr_reader immutable_attributes: Array[Symbol]
50
+ attr_reader indexes: Hash[Symbol, Array[Symbol]]
51
+ attr_reader unique: Array[Hash[Symbol, untyped]]
52
+ attr_reader guard: Hash[Symbol, untyped]?
53
+ def initialize: (id: String, kind: Symbol, ?attributes: Hash[Symbol, Symbol], ?immutable_attributes: Array[Symbol], ?indexes: Hash[Symbol, Array[Symbol]], ?unique: Array[Hash[Symbol, untyped]], ?guard: Hash[Symbol, untyped]?) -> void
54
+ def validate_attributes: (attributes, ?partial: bool) -> attributes
55
+ def index_values: (Symbol, attributes) -> attributes
56
+ end
57
+
58
+ module Entry
59
+ class Record
60
+ attr_reader key: String
61
+ attr_reader revision: Integer
62
+ attr_reader attributes: attributes
63
+ attr_reader record: DurableRecord
64
+ def initialize: (key: String, revision: Integer, attributes: attributes, record: DurableRecord) -> void
65
+ def to_h: () -> Hash[Symbol, untyped]
66
+ end
67
+ class Append
68
+ attr_reader id: String
69
+ attr_reader record: DurableRecord
70
+ def initialize: (id: String, record: DurableRecord) -> void
71
+ def to_h: () -> Hash[Symbol, untyped]
72
+ end
73
+ class Stream
74
+ attr_reader position: Integer
75
+ attr_reader id: String
76
+ attr_reader record: DurableRecord
77
+ def initialize: (position: Integer, id: String, record: DurableRecord) -> void
78
+ def to_h: () -> Hash[Symbol, untyped]
79
+ end
80
+ class Blob
81
+ attr_reader key: String
82
+ attr_reader bytes: String
83
+ attr_reader attributes: attributes
84
+ def initialize: (key: String, bytes: String, attributes: attributes) -> void
85
+ def to_h: () -> Hash[Symbol, untyped]
86
+ end
87
+ end
88
+
89
+ class GuardRef
90
+ attr_reader resource: resource_ref
91
+ attr_reader key: String
92
+ def initialize: (resource: resource_ref, key: String) -> void
93
+ end
94
+ module Condition
95
+ class RevisionIs
96
+ attr_reader resource: resource_ref
97
+ attr_reader key: String
98
+ attr_reader expected: Integer
99
+ def initialize: (resource: resource_ref, key: String, expected: Integer) -> void
100
+ end
101
+ class StreamHeadIs
102
+ attr_reader resource: resource_ref
103
+ attr_reader stream: String
104
+ attr_reader expected: Integer
105
+ def initialize: (resource: resource_ref, stream: String, expected: Integer) -> void
106
+ end
107
+ class NoRows
108
+ attr_reader resource: resource_ref
109
+ attr_reader index: Symbol
110
+ attr_reader equals: attributes
111
+ def initialize: (resource: resource_ref, index: Symbol, equals: attributes) -> void
112
+ end
113
+ end
114
+
115
+ class Records
116
+ UNCHECKED: Object
117
+ attr_reader resource: Resource
118
+ def initialize: (View, Resource) -> void
119
+ def insert: (key: String, revision: Integer, attributes: attributes, record: DurableRecord) -> Entry::Record
120
+ def read: (String) -> Entry::Record?
121
+ def fetch: (String) -> Entry::Record
122
+ def replace: (key: String, expected_revision: Integer, next_revision: Integer, attributes: attributes, record: DurableRecord, ?expected_attributes: attributes) -> Entry::Record
123
+ def delete: (key: String, ?expected_revision: Integer | Object) -> nil
124
+ def scan: (index: Symbol, equals: attributes, ?after: String?, ?limit: Integer?) -> Array[Entry::Record]
125
+ def delete_matching: (index: Symbol, equals: attributes) -> nil
126
+ end
127
+ class Streams
128
+ attr_reader resource: Resource
129
+ def initialize: (View, Resource) -> void
130
+ def append: (stream: String, expected_head: Integer, entries: Array[Entry::Append]) -> Array[Entry::Stream]
131
+ def read: (stream: String, ?after: Integer, ?limit: Integer?) -> Array[Entry::Stream]
132
+ def head: (stream: String) -> Integer
133
+ def delete: (stream: String) -> nil
134
+ end
135
+ class Blobs
136
+ attr_reader resource: Resource
137
+ def initialize: (View, Resource) -> void
138
+ def put_if_absent: (key: String, bytes: String, attributes: attributes) -> Entry::Blob
139
+ def fetch: (String) -> Entry::Blob
140
+ def exist?: (String) -> bool
141
+ end
142
+ class View
143
+ def records: (resource_ref) -> Records
144
+ def streams: (resource_ref) -> Streams
145
+ def blobs: (resource_ref) -> Blobs
146
+ def check!: (guards: Array[GuardRef], conditions: Array[condition]) -> true
147
+ def atomic: [T] () { (View) -> T } -> T
148
+ end
149
+ class Backend
150
+ REQUIRED_CAPABILITIES: Hash[Symbol, bool | Integer]
151
+ attr_reader resources: Hash[String, Resource]
152
+ attr_reader view: View
153
+ def initialize: (resources: Array[Resource]) -> void
154
+ def self.validate_capabilities!: (_StorageBackend backend) -> void
155
+ def capabilities: () -> Hash[Symbol, bool | Integer]
156
+ def transaction_open?: () -> bool
157
+ def transaction: [T] () { (View) -> T } -> T
158
+ end
159
+ end
160
+ end
@@ -1,10 +1,34 @@
1
1
  module Phronomy
2
2
  module Tool
3
+ module Operation
4
+ def self.call_async: (tool: Base, args: Hash[untyped, untyped], ?cancellation_token: Concurrency::CancellationToken?, ?config: Hash[untyped, untyped], ?submitter: _ExecutionSubmitter, ?on_full: Symbol) -> _CompletionHandle[untyped]
5
+ def self.with_result_transform: (singleton(Base) tool_class) { (untyped, String, Hash[untyped, untyped]) -> untyped } -> singleton(Base)
6
+ end
7
+ class Schema
8
+ def initialize: (?untyped schema) ?{ () -> untyped } -> void
9
+ def json_schema: () -> Hash[String, untyped]
10
+ def validate: (Hash[String | Symbol, untyped] arguments, ?coerce: bool) -> [Hash[Symbol, untyped]?, String?]
11
+ end
12
+ class CallRequest
13
+ attr_reader id: String
14
+ attr_reader name: String
15
+ attr_reader arguments: Hash[String, json_value]
16
+ attr_reader metadata: Hash[String, json_value]
17
+ def initialize: (id: String, name: String, arguments: Hash[String | Symbol, untyped], ?metadata: Hash[String | Symbol, untyped]) -> void
18
+ def self.from_h: (Hash[String | Symbol, untyped] value) -> CallRequest
19
+ def to_h: () -> Hash[String, untyped]
20
+ end
3
21
  class Base
22
+ def self.parameter: (String | Symbol name, ?type: String | Symbol, ?description: String?, ?required: bool) -> untyped
4
23
  def self.tool_name: (?untyped value) -> String?
5
24
  def self.description: (?String text) -> String?
6
25
  def self.desc: (?String text) -> String?
7
- def self.parameters: () -> Hash[untyped, untyped]
26
+ def self.parameters: (?untyped schema) ?{ () -> untyped } -> untyped
27
+ def self.declared_parameters: () -> Hash[untyped, untyped]
28
+ def self.parameters_schema_definition: () -> untyped
29
+ def self.params: (?untyped schema) ?{ () -> untyped } -> untyped
30
+ def self.provider_options: (?untyped options) -> Hash[untyped, untyped]
31
+ def self.with_params: (**untyped options) -> untyped
8
32
  def self.params_schema_definition: () -> untyped
9
33
  def self.provider_params: () -> Hash[untyped, untyped]
10
34
  def self.param: (untyped name, ?enum: untyped, ?properties: untyped, **untyped options) -> untyped
@@ -18,22 +42,51 @@ module Phronomy
18
42
  def self.redact_params: (*untyped names) -> Array[Symbol]
19
43
  def self.max_result_size: (?untyped value) -> untyped
20
44
 
45
+ def description: () -> String?
21
46
  def name: () -> String
47
+ def parameters_schema: () -> untyped
48
+ def parameters: () -> Hash[untyped, untyped]
49
+ def provider_options: () -> Hash[untyped, untyped]
50
+ def provider_params: () -> Hash[untyped, untyped]
22
51
  def params_schema: () -> untyped
52
+ def validate_arguments: (Hash[String | Symbol, untyped]? args) -> [Hash[Symbol, untyped]?, String?]
23
53
  def call: (Hash[untyped, untyped] args, ?cancellation_token: Concurrency::CancellationToken?) -> untyped
24
54
  def call_async: (Hash[untyped, untyped] args, ?cancellation_token: Concurrency::CancellationToken?, ?config: Hash[untyped, untyped]) -> TaskResult[untyped]
25
55
  def requires_approval?: () -> untyped
26
56
  def tool_origin: () -> Symbol
27
57
  def approval_metadata: () -> Hash[untyped, untyped]
28
58
  def execute: (**untyped args) -> untyped
59
+
60
+ private
61
+
62
+ def call_async_operation: (Hash[untyped, untyped]? args, cancellation_token: Concurrency::CancellationToken?, operation_name: String) { (Hash[Symbol, untyped]) -> _CompletionHandle[untyped] } -> _CompletionHandle[untyped]
63
+ def async_error_value: (Exception error) -> untyped
29
64
  end
30
65
  end
31
66
 
32
- module Agent
33
- module Context
34
- module Capability
35
- class Base = ::Phronomy::Tool::Base
67
+ end
68
+
69
+ module Phronomy
70
+ module Tool
71
+ interface _AuthorizationRequest
72
+ def origin: () -> Symbol
73
+ def with: (?facts: Hash[untyped, untyped], ?default_decision: Symbol?) -> _AuthorizationRequest
74
+ end
75
+
76
+ module Authorization
77
+ class Decision
78
+ attr_reader decision: Symbol
79
+ attr_reader facts: Hash[untyped, untyped]
80
+ attr_reader reason: String?
36
81
  end
82
+ def self.call: (request: _AuthorizationRequest, arguments: Hash[untyped, untyped], context: Hash[untyped, untyped], ?facts: (^(Hash[untyped, untyped], Hash[untyped, untyped]) -> Hash[untyped, untyped]?)?, ?requirement: bool? | (^(_AuthorizationRequest) -> bool?), ?policy: (^(_AuthorizationRequest) -> Symbol)?) -> Decision
83
+ end
84
+
85
+ class DefinitionSet
86
+ attr_reader runtime_tools: Array[untyped]
87
+ attr_reader definitions: Array[Hash[String, untyped]]
88
+ def self.build: (tools: Array[untyped], ?runtime_tools: Array[untyped]) -> DefinitionSet
89
+ def select_definitions: (Array[Hash[String, untyped]] expected_definitions) -> DefinitionSet
37
90
  end
38
91
  end
39
92
  end
@@ -0,0 +1,7 @@
1
+ module Phronomy
2
+ module Tracing
3
+ module Observation
4
+ def self.trace: [A] (String name, ?input: untyped, **untyped meta) { (untyped span) -> [A, LLMAdapter::TokenUsage?] } -> A
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ module Phronomy
2
+ module VectorStore
3
+ class AsyncClient
4
+ # pool is an optional internal execution-pool injection; ordinary callers omit it.
5
+ def initialize: (backend: Base, ?pool: untyped) -> void
6
+ def add_async: (id: String, embedding: Array[Float], ?metadata: Hash[untyped, untyped], ?cancellation_token: Concurrency::CancellationToken?, ?timeout: Numeric?) -> TaskResult[untyped]
7
+ def search_async: (query_embedding: Array[Float], ?k: Integer, ?cancellation_token: Concurrency::CancellationToken?, ?timeout: Numeric?) -> TaskResult[Array[Hash[Symbol, untyped]]]
8
+ def remove_async: (id: String, ?cancellation_token: Concurrency::CancellationToken?, ?timeout: Numeric?) -> TaskResult[untyped]
9
+ def clear_async: (?cancellation_token: Concurrency::CancellationToken?, ?timeout: Numeric?) -> TaskResult[untyped]
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ module Phronomy
2
+ module VectorStore
3
+ class InvalidResultError < Phronomy::Error
4
+ end
5
+
6
+ class Base
7
+ def add: (id: String, embedding: Array[Numeric], ?metadata: Hash[untyped, untyped], ?cancellation_token: _CancellationSignal?) -> self
8
+ def search: (query_embedding: Array[Numeric], ?k: Integer | String, ?cancellation_token: _CancellationSignal?) -> Array[Hash[Symbol, untyped]]
9
+ def remove: (id: String) -> self
10
+ def clear: () -> self
11
+ def size: () -> Integer
12
+
13
+ # Protected extension SPI at runtime; RBS has no protected visibility.
14
+ private
15
+ def embedding_dimension: () -> Integer?
16
+ def perform_add: (id: String, embedding: Array[Float], metadata: Hash[untyped, untyped], cancellation_token: _CancellationSignal?) -> untyped
17
+ def perform_search: (query_embedding: Array[Float], k: Integer, cancellation_token: _CancellationSignal?) -> Array[Hash[Symbol, untyped]]
18
+ def perform_remove: (id: String) -> untyped
19
+ def perform_clear: () -> untyped
20
+ def perform_size: () -> Integer
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,14 @@
1
+ module Phronomy
2
+ # Private connection selected by composition, not a public application API.
3
+ class WorkflowExecutionEnvironment
4
+ def self.install_provider: (^() -> WorkflowExecutionEnvironment provider) -> untyped
5
+ def self.current: () -> WorkflowExecutionEnvironment
6
+ def registry: () -> untyped
7
+ def existing_registry: () -> untyped
8
+ def executing?: () -> bool
9
+ def submit: [V] (**untyped options) { () -> V } -> TaskResult[V]
10
+ def compile_transitions: (**untyped definition) -> untyped
11
+ def build_session: (**untyped options) -> untyped
12
+ def register_session: (untyped session, completion: TaskResult[untyped]) -> untyped
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ module Phronomy
2
+ class WorkflowTerminalPolicy
3
+ def start: (terminal_type: Symbol, context: untyped, event_sink: _FSMEventSink) -> untyped
4
+ def handles?: (Event event) -> bool
5
+ def decision_for: (Event event) -> TerminalDecision
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module Phronomy
2
+ interface _WorkflowStateRepository
3
+ def load: (String workflow_instance_id) -> Hash[untyped, untyped]?
4
+ def save: (String workflow_instance_id, expected_revision: Integer?, snapshot: Hash[untyped, untyped]) -> Integer
5
+ def delete: (String workflow_instance_id, expected_revision: Integer) -> untyped
6
+ end
7
+
8
+ end
@@ -8,7 +8,7 @@ module Phronomy
8
8
  end
9
9
 
10
10
  class Workflow
11
- def self.define: (Class context_class, ?persistence: Persistence?) { () -> void } -> Workflow
11
+ def self.define: (Class context_class, ?persistence: _WorkflowStateRepository?) { () -> void } -> Workflow
12
12
 
13
13
  def invoke: (untyped input, ?config: Hash[untyped, untyped], ?invocation_context: untyped) -> untyped
14
14
  def invoke_async: (untyped input, ?config: Hash[untyped, untyped], ?invocation_context: untyped) -> TaskResult[untyped]
data/sig/phronomy.rbs CHANGED
@@ -7,56 +7,7 @@ module Phronomy
7
7
  class ParseError < Error
8
8
  end
9
9
 
10
- class RecursionLimitError < Error
11
- end
12
-
13
10
  class ToolError < Error
14
11
  end
15
12
 
16
- class TimeoutError < Error
17
- end
18
-
19
- class ConfigurationError < Error
20
- end
21
-
22
- class HandoffError < Error
23
- end
24
-
25
- class TransportError < Error
26
- end
27
-
28
- class RateLimitError < TransportError
29
- end
30
-
31
- class AuthenticationError < TransportError
32
- end
33
-
34
- class ContextLengthError < Error
35
- end
36
-
37
- class CancellationError < Error
38
- end
39
-
40
- class EventLoopReentrancyError < Error
41
- end
42
-
43
- class AgentAlreadyExistsError < Error
44
- end
45
-
46
- class AgentPurgedError < Error
47
- end
48
-
49
- class PoolShutdownError < Error
50
- end
51
-
52
- class BackpressureError < Error
53
- end
54
-
55
- class Configuration
56
- attr_accessor llm_adapter: LLMAdapter::Base
57
- attr_accessor before_llm_input: Agent::_BeforeLLMInputHook?
58
- end
59
-
60
- def self.configuration: () -> Configuration
61
- def self.configure: () { (Configuration) -> void } -> void
62
13
  end