effect-agent 0.1.0-beta.113 → 0.1.0-beta.115

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 (137) hide show
  1. package/dist/Agent-1DMSO_Fl.mjs.map +1 -1
  2. package/dist/{Agent-DriBcXBN.d.mts → Agent-D9cXqfF3.d.mts} +9 -2
  3. package/dist/{AgentRuntime-DLwPoEVH.mjs → AgentRuntime-Cp1hAb-W.mjs} +8 -4
  4. package/dist/AgentRuntime-Cp1hAb-W.mjs.map +1 -0
  5. package/dist/{AgentRuntime-CWkHuzyt.d.mts → AgentRuntime-DyZv8uu2.d.mts} +6 -6
  6. package/dist/{DurableAgentRuntime-BIrgxwRl.mjs → DurableAgentRuntime-tNrkJZNo.mjs} +254 -162
  7. package/dist/DurableAgentRuntime-tNrkJZNo.mjs.map +1 -0
  8. package/dist/{DurableFailpoint-mx3-nsxU.d.mts → DurableFailpoint-Cnr3wx1L.d.mts} +3 -3
  9. package/dist/{EventSource-ARs56eBq.d.mts → EventSource-DPRdlvhV.d.mts} +3 -3
  10. package/dist/{Messaging-DaZDlBqh.d.mts → Messaging-JYYN3oYS.d.mts} +3 -3
  11. package/dist/{MessagingHost-e1Sbzfao.d.mts → MessagingHost-CqzpxbGz.d.mts} +3 -3
  12. package/dist/{MessagingHost-D89X7ma8.mjs → MessagingHost-DfsbMPvq.mjs} +2 -2
  13. package/dist/{MessagingHost-D89X7ma8.mjs.map → MessagingHost-DfsbMPvq.mjs.map} +1 -1
  14. package/dist/{Output-CAFJTAbP.d.mts → Output-V-6YL1_Z.d.mts} +2 -2
  15. package/dist/{PreparedInputAdmission-_WYg-D0f.d.mts → PreparedInputAdmission-DqQUjA9k.d.mts} +4 -4
  16. package/dist/{Records-BtxMy8xD.d.mts → Records-Byeb70tt.d.mts} +89 -31
  17. package/dist/{RunOptions-BoESJrxw.d.mts → RunOptions-CSBsSj0X.d.mts} +3 -3
  18. package/dist/{Schedule-DGPyXBzK.d.mts → Schedule-krSnBcbU.d.mts} +2 -2
  19. package/dist/{Subagent-D9eYdGTl.mjs → Subagent-Di8EEjWZ.mjs} +67 -105
  20. package/dist/Subagent-Di8EEjWZ.mjs.map +1 -0
  21. package/dist/{Subagent-F72tuaxy.d.mts → Subagent-gw9KD6eb.d.mts} +310 -35
  22. package/dist/{SubagentHost-CmiNTOBZ.d.mts → SubagentHost-P9zB_TfV.d.mts} +24 -18
  23. package/dist/{Subscription-B9VszlF9.d.mts → Subscription-Xnwd42Sm.d.mts} +6 -3
  24. package/dist/{SubscriptionInput-BJWZqCWP.d.mts → SubscriptionInput-CqtJ58vl.d.mts} +3 -3
  25. package/dist/{Worker-T_3RbaKc.mjs → Worker-CfwzMZEK.mjs} +66 -5
  26. package/dist/Worker-CfwzMZEK.mjs.map +1 -0
  27. package/dist/{Worker-Du9dhVnp.d.mts → Worker-fwWkBg12.d.mts} +199 -6
  28. package/dist/{agent-registration-B5CI-Ygk.mjs → agent-registration-CKNsrpwo.mjs} +7 -7
  29. package/dist/agent-registration-CKNsrpwo.mjs.map +1 -0
  30. package/dist/capabilities/Commands.d.mts +1 -1
  31. package/dist/capabilities/Messaging.d.mts +1 -1
  32. package/dist/capabilities/Messaging.mjs +2 -2
  33. package/dist/capabilities/RunHooks.d.mts +1 -1
  34. package/dist/capabilities/Subagent.d.mts +3 -3
  35. package/dist/capabilities/Subagent.mjs +3 -3
  36. package/dist/core/Agent.d.mts +1 -1
  37. package/dist/core/Worker.d.mts +2 -2
  38. package/dist/core/Worker.mjs +2 -2
  39. package/dist/durable/ActivityStore.d.mts +1 -1
  40. package/dist/durable/Admin.d.mts +1 -1
  41. package/dist/durable/AgentRegistration.d.mts +1 -1
  42. package/dist/durable/AgentRegistration.mjs +1 -1
  43. package/dist/durable/Certification.d.mts +2 -2
  44. package/dist/durable/CommittedActivity.d.mts +1 -1
  45. package/dist/durable/Digest.d.mts +1 -1
  46. package/dist/durable/DurableAgentRuntime.d.mts +1 -1
  47. package/dist/durable/DurableAgentRuntime.mjs +1 -1
  48. package/dist/durable/DurableFailpoint.d.mts +1 -1
  49. package/dist/durable/DurableFailpoint.mjs +4 -0
  50. package/dist/durable/DurableFailpoint.mjs.map +1 -1
  51. package/dist/durable/DurableFailpointTestControl.d.mts +1 -1
  52. package/dist/durable/EventSource.d.mts +1 -1
  53. package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
  54. package/dist/durable/MessageDelivery.d.mts +20 -3
  55. package/dist/durable/MessageDelivery.mjs +12 -4
  56. package/dist/durable/MessageDelivery.mjs.map +1 -1
  57. package/dist/durable/MessageDeliveryStoreConformance.d.mts +41 -39
  58. package/dist/durable/MessageDeliveryStoreConformance.mjs +1 -1
  59. package/dist/durable/PersistentHistory.d.mts +1 -1
  60. package/dist/durable/PreparedInputAdmission.d.mts +1 -1
  61. package/dist/durable/Records.d.mts +2 -2
  62. package/dist/durable/Records.mjs +12 -5
  63. package/dist/durable/Records.mjs.map +1 -1
  64. package/dist/durable/Recovery.d.mts +1 -1
  65. package/dist/durable/RunJournal.d.mts +1 -1
  66. package/dist/durable/Schedule.d.mts +1 -1
  67. package/dist/durable/ScheduleStoreConformance.d.mts +1 -1
  68. package/dist/durable/ScheduleTransition.d.mts +1 -1
  69. package/dist/durable/Scheduling.d.mts +2 -2
  70. package/dist/durable/SqlMessageDeliveryStore.mjs +7 -1
  71. package/dist/durable/SqlMessageDeliveryStore.mjs.map +1 -1
  72. package/dist/durable/SqlStorageV2Upgrade.d.mts +2 -2
  73. package/dist/durable/SqlSubscriptionStore.d.mts +2 -2
  74. package/dist/durable/SqlThreadNativeReads.d.mts +5 -1
  75. package/dist/durable/SqlThreadNativeReads.mjs +6 -0
  76. package/dist/durable/SqlThreadNativeReads.mjs.map +1 -1
  77. package/dist/durable/SubmissionLedger.d.mts +2 -2
  78. package/dist/durable/SubmissionLedger.mjs +34 -4
  79. package/dist/durable/SubmissionLedger.mjs.map +1 -1
  80. package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
  81. package/dist/durable/SubmissionLedgerConformance.mjs +899 -706
  82. package/dist/durable/SubmissionLedgerConformance.mjs.map +1 -1
  83. package/dist/durable/SubmissionStatus.d.mts +1 -1
  84. package/dist/durable/Subscription.d.mts +1 -1
  85. package/dist/durable/Subscription.mjs +1 -1
  86. package/dist/durable/SubscriptionInput.d.mts +1 -1
  87. package/dist/durable/SubscriptionInput.mjs +1 -1
  88. package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
  89. package/dist/durable/SubscriptionTools.d.mts +3 -3
  90. package/dist/durable/SubscriptionTransition.d.mts +1 -1
  91. package/dist/durable/Subscriptions.d.mts +5 -5
  92. package/dist/durable/ThreadContextHistory.d.mts +1 -1
  93. package/dist/durable/ThreadContextHistoryProjection.d.mts +1 -1
  94. package/dist/durable/ThreadInvariants.d.mts +1 -1
  95. package/dist/durable/ThreadProjection.d.mts +1 -1
  96. package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
  97. package/dist/durable/ThreadStore.d.mts +1 -1
  98. package/dist/durable/ThreadStore.mjs +5 -0
  99. package/dist/durable/ThreadStore.mjs.map +1 -1
  100. package/dist/durable/ThreadStoreConformance.d.mts +1 -1
  101. package/dist/durable/WorkerHost.d.mts +3 -3
  102. package/dist/durable/WorkerHost.mjs +1 -1
  103. package/dist/engine/AgentRuntime.d.mts +1 -1
  104. package/dist/engine/AgentRuntime.mjs +1 -1
  105. package/dist/engine/MessagingHost.d.mts +1 -1
  106. package/dist/engine/MessagingHost.mjs +1 -1
  107. package/dist/engine/Output.d.mts +1 -1
  108. package/dist/engine/RunOptions.d.mts +1 -1
  109. package/dist/engine/SubagentHost.d.mts +2 -2
  110. package/dist/engine/SubagentHost.mjs +5 -1
  111. package/dist/engine/SubagentHost.mjs.map +1 -1
  112. package/dist/index.d.mts +16 -16
  113. package/dist/index.mjs +5 -5
  114. package/package.json +1 -1
  115. package/src/capabilities/Subagent.ts +2 -1
  116. package/src/capabilities/internal/subagent-background.ts +86 -57
  117. package/src/capabilities/internal/subagent-reporting.ts +3 -128
  118. package/src/core/Agent.ts +8 -1
  119. package/src/core/Worker.ts +58 -2
  120. package/src/durable/DurableAgentRuntime.ts +2 -0
  121. package/src/durable/DurableFailpoint.ts +4 -0
  122. package/src/durable/MessageDelivery.ts +17 -2
  123. package/src/durable/Records.ts +12 -2
  124. package/src/durable/SqlMessageDeliveryStore.ts +15 -1
  125. package/src/durable/SqlThreadNativeReads.ts +14 -0
  126. package/src/durable/SubmissionLedger.ts +48 -1
  127. package/src/durable/SubmissionLedgerConformance.ts +260 -42
  128. package/src/durable/ThreadStore.ts +5 -0
  129. package/src/durable/internal/agent-registration.ts +13 -48
  130. package/src/durable/internal/worker-host.ts +490 -341
  131. package/src/engine/SubagentHost.ts +37 -13
  132. package/src/engine/internal/agent-runtime.ts +17 -2
  133. package/dist/AgentRuntime-DLwPoEVH.mjs.map +0 -1
  134. package/dist/DurableAgentRuntime-BIrgxwRl.mjs.map +0 -1
  135. package/dist/Subagent-D9eYdGTl.mjs.map +0 -1
  136. package/dist/Worker-T_3RbaKc.mjs.map +0 -1
  137. package/dist/agent-registration-B5CI-Ygk.mjs.map +0 -1
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"effect-agent","version":"0.1.0-beta.113","devDependencies":{"@effect/platform-node":"4.0.0-rc.116","@effect/vitest":"4.0.0-rc.116","effect":"4.0.0-rc.116","typescript":"7.0.2","vite-plus":"0.3.2"},"peerDependencies":{"effect":"^4.0.0-rc.116"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./activity-store":{"types":"./dist/durable/ActivityStore.d.mts","default":"./dist/durable/ActivityStore.mjs"},"./admin":{"types":"./dist/durable/Admin.d.mts","default":"./dist/durable/Admin.mjs"},"./agent":{"types":"./dist/core/Agent.d.mts","default":"./dist/core/Agent.mjs"},"./agent-error":{"types":"./dist/core/AgentError.d.mts","default":"./dist/core/AgentError.mjs"},"./agent-policy":{"types":"./dist/core/AgentPolicy.d.mts","default":"./dist/core/AgentPolicy.mjs"},"./agent-registration":{"types":"./dist/durable/AgentRegistration.d.mts","default":"./dist/durable/AgentRegistration.mjs"},"./agent-runtime":{"types":"./dist/engine/AgentRuntime.d.mts","default":"./dist/engine/AgentRuntime.mjs"},"./agent-updates":{"types":"./dist/core/AgentUpdates.d.mts","default":"./dist/core/AgentUpdates.mjs"},"./approval":{"types":"./dist/capabilities/Approval.d.mts","default":"./dist/capabilities/Approval.mjs"},"./budget":{"types":"./dist/capabilities/Budget.d.mts","default":"./dist/capabilities/Budget.mjs"},"./code-executor":{"types":"./dist/sandbox/CodeExecutor.d.mts","default":"./dist/sandbox/CodeExecutor.mjs"},"./code-mode":{"types":"./dist/capabilities/CodeMode.d.mts","default":"./dist/capabilities/CodeMode.mjs"},"./commands":{"types":"./dist/capabilities/Commands.d.mts","default":"./dist/capabilities/Commands.mjs"},"./committed-activity":{"types":"./dist/durable/CommittedActivity.d.mts","default":"./dist/durable/CommittedActivity.mjs"},"./compaction":{"types":"./dist/engine/Compaction.d.mts","default":"./dist/engine/Compaction.mjs"},"./context-compactor":{"types":"./dist/engine/ContextCompactor.d.mts","default":"./dist/engine/ContextCompactor.mjs"},"./context-history":{"types":"./dist/engine/ContextHistory.d.mts","default":"./dist/engine/ContextHistory.mjs"},"./context-tools":{"types":"./dist/capabilities/ContextTools.d.mts","default":"./dist/capabilities/ContextTools.mjs"},"./context-window":{"types":"./dist/engine/ContextWindow.d.mts","default":"./dist/engine/ContextWindow.mjs"},"./digest":{"types":"./dist/durable/Digest.d.mts","default":"./dist/durable/Digest.mjs"},"./durable-agent-runtime":{"types":"./dist/durable/DurableAgentRuntime.d.mts","default":"./dist/durable/DurableAgentRuntime.mjs"},"./durable-failpoint":{"types":"./dist/durable/DurableFailpoint.d.mts","default":"./dist/durable/DurableFailpoint.mjs"},"./durable-step":{"types":"./dist/engine/DurableStep.d.mts","default":"./dist/engine/DurableStep.mjs"},"./event-source":{"types":"./dist/durable/EventSource.d.mts","default":"./dist/durable/EventSource.mjs"},"./failure-diagnostic":{"types":"./dist/core/FailureDiagnostic.d.mts","default":"./dist/core/FailureDiagnostic.mjs"},"./git-hub-workflow-source":{"types":"./dist/durable/GitHubWorkflowSource.d.mts","default":"./dist/durable/GitHubWorkflowSource.mjs"},"./id-generator":{"types":"./dist/core/IdGenerator.d.mts","default":"./dist/core/IdGenerator.mjs"},"./identifiers":{"types":"./dist/core/Identifiers.d.mts","default":"./dist/core/Identifiers.mjs"},"./in-memory":{"types":"./dist/InMemory.d.mts","default":"./dist/InMemory.mjs"},"./interactive-browser":{"types":"./dist/sandbox/InteractiveBrowser.d.mts","default":"./dist/sandbox/InteractiveBrowser.mjs"},"./mcp":{"types":"./dist/capabilities/Mcp.d.mts","default":"./dist/capabilities/Mcp.mjs"},"./mcp-client":{"types":"./dist/capabilities/McpClient.d.mts","default":"./dist/capabilities/McpClient.mjs"},"./memory":{"types":"./dist/core/Memory.d.mts","default":"./dist/core/Memory.mjs"},"./memory-namespace":{"types":"./dist/core/MemoryNamespace.d.mts","default":"./dist/core/MemoryNamespace.mjs"},"./memory-notes":{"types":"./dist/capabilities/MemoryNotes.d.mts","default":"./dist/capabilities/MemoryNotes.mjs"},"./memory-reference":{"types":"./dist/core/MemoryReference.d.mts","default":"./dist/core/MemoryReference.mjs"},"./memory-revalidation":{"types":"./dist/core/MemoryRevalidation.d.mts","default":"./dist/core/MemoryRevalidation.mjs"},"./memory-store":{"types":"./dist/core/MemoryStore.d.mts","default":"./dist/core/MemoryStore.mjs"},"./message-delivery":{"types":"./dist/durable/MessageDelivery.d.mts","default":"./dist/durable/MessageDelivery.mjs"},"./messaging":{"types":"./dist/capabilities/Messaging.d.mts","default":"./dist/capabilities/Messaging.mjs"},"./messaging-host":{"types":"./dist/engine/MessagingHost.d.mts","default":"./dist/engine/MessagingHost.mjs"},"./model-context":{"types":"./dist/capabilities/ModelContext.d.mts","default":"./dist/capabilities/ModelContext.mjs"},"./operation-authorizer":{"types":"./dist/durable/OperationAuthorizer.d.mts","default":"./dist/durable/OperationAuthorizer.mjs"},"./output":{"types":"./dist/engine/Output.d.mts","default":"./dist/engine/Output.mjs"},"./page-capture":{"types":"./dist/sandbox/PageCapture.d.mts","default":"./dist/sandbox/PageCapture.mjs"},"./page-crawl":{"types":"./dist/sandbox/PageCrawl.d.mts","default":"./dist/sandbox/PageCrawl.mjs"},"./page-screenshot":{"types":"./dist/sandbox/PageScreenshot.d.mts","default":"./dist/sandbox/PageScreenshot.mjs"},"./persistent-history":{"types":"./dist/durable/PersistentHistory.d.mts","default":"./dist/durable/PersistentHistory.mjs"},"./prepared-input-admission":{"types":"./dist/durable/PreparedInputAdmission.d.mts","default":"./dist/durable/PreparedInputAdmission.mjs"},"./protected-browser":{"types":"./dist/sandbox/ProtectedBrowser.d.mts","default":"./dist/sandbox/ProtectedBrowser.mjs"},"./receipt":{"types":"./dist/core/Receipt.d.mts","default":"./dist/core/Receipt.mjs"},"./records":{"types":"./dist/durable/Records.d.mts","default":"./dist/durable/Records.mjs"},"./recovery":{"types":"./dist/durable/Recovery.d.mts","default":"./dist/durable/Recovery.mjs"},"./redaction":{"types":"./dist/capabilities/Redaction.d.mts","default":"./dist/capabilities/Redaction.mjs"},"./remembering":{"types":"./dist/capabilities/Remembering.d.mts","default":"./dist/capabilities/Remembering.mjs"},"./remembering-store":{"types":"./dist/core/RememberingStore.d.mts","default":"./dist/core/RememberingStore.mjs"},"./run-event":{"types":"./dist/core/RunEvent.d.mts","default":"./dist/core/RunEvent.mjs"},"./run-event-sink":{"types":"./dist/engine/RunEventSink.d.mts","default":"./dist/engine/RunEventSink.mjs"},"./run-hooks":{"types":"./dist/capabilities/RunHooks.d.mts","default":"./dist/capabilities/RunHooks.mjs"},"./run-journal":{"types":"./dist/durable/RunJournal.d.mts","default":"./dist/durable/RunJournal.mjs"},"./run-options":{"types":"./dist/engine/RunOptions.d.mts","default":"./dist/engine/RunOptions.mjs"},"./run-policy-usage":{"types":"./dist/core/RunPolicyUsage.d.mts","default":"./dist/core/RunPolicyUsage.mjs"},"./sandbox":{"types":"./dist/sandbox/Sandbox.d.mts","default":"./dist/sandbox/Sandbox.mjs"},"./schedule":{"types":"./dist/durable/Schedule.d.mts","default":"./dist/durable/Schedule.mjs"},"./schedule-transition":{"types":"./dist/durable/ScheduleTransition.d.mts","default":"./dist/durable/ScheduleTransition.mjs"},"./scheduling":{"types":"./dist/durable/Scheduling.d.mts","default":"./dist/durable/Scheduling.mjs"},"./semantic-memory":{"types":"./dist/capabilities/SemanticMemory.d.mts","default":"./dist/capabilities/SemanticMemory.mjs"},"./semantic-memory-index":{"types":"./dist/core/SemanticMemoryIndex.d.mts","default":"./dist/core/SemanticMemoryIndex.mjs"},"./semantic-memory-revalidation":{"types":"./dist/core/SemanticMemoryRevalidation.d.mts","default":"./dist/core/SemanticMemoryRevalidation.mjs"},"./sql-thread-native-reads":{"types":"./dist/durable/SqlThreadNativeReads.d.mts","default":"./dist/durable/SqlThreadNativeReads.mjs"},"./sql-memory-store":{"types":"./dist/durable/SqlMemoryStore.d.mts","default":"./dist/durable/SqlMemoryStore.mjs"},"./sql-message-delivery-store":{"types":"./dist/durable/SqlMessageDeliveryStore.d.mts","default":"./dist/durable/SqlMessageDeliveryStore.mjs"},"./sql-storage-v2-upgrade":{"types":"./dist/durable/SqlStorageV2Upgrade.d.mts","default":"./dist/durable/SqlStorageV2Upgrade.mjs"},"./sql-subscription-store":{"types":"./dist/durable/SqlSubscriptionStore.d.mts","default":"./dist/durable/SqlSubscriptionStore.mjs"},"./subagent":{"types":"./dist/capabilities/Subagent.d.mts","default":"./dist/capabilities/Subagent.mjs"},"./subagent-contract":{"types":"./dist/core/SubagentContract.d.mts","default":"./dist/core/SubagentContract.mjs"},"./subagent-host":{"types":"./dist/engine/SubagentHost.d.mts","default":"./dist/engine/SubagentHost.mjs"},"./subagent-reservations":{"types":"./dist/capabilities/SubagentReservations.d.mts","default":"./dist/capabilities/SubagentReservations.mjs"},"./submission-ledger":{"types":"./dist/durable/SubmissionLedger.d.mts","default":"./dist/durable/SubmissionLedger.mjs"},"./submission-status":{"types":"./dist/durable/SubmissionStatus.d.mts","default":"./dist/durable/SubmissionStatus.mjs"},"./subscription":{"types":"./dist/durable/Subscription.d.mts","default":"./dist/durable/Subscription.mjs"},"./subscription-input":{"types":"./dist/durable/SubscriptionInput.d.mts","default":"./dist/durable/SubscriptionInput.mjs"},"./subscription-tools":{"types":"./dist/durable/SubscriptionTools.d.mts","default":"./dist/durable/SubscriptionTools.mjs"},"./subscription-transition":{"types":"./dist/durable/SubscriptionTransition.d.mts","default":"./dist/durable/SubscriptionTransition.mjs"},"./subscriptions":{"types":"./dist/durable/Subscriptions.d.mts","default":"./dist/durable/Subscriptions.mjs"},"./testing/certification":{"types":"./dist/durable/Certification.d.mts","default":"./dist/durable/Certification.mjs"},"./testing/durable-failpoint-test-control":{"types":"./dist/durable/DurableFailpointTestControl.d.mts","default":"./dist/durable/DurableFailpointTestControl.mjs"},"./testing/message-delivery-store-conformance":{"types":"./dist/durable/MessageDeliveryStoreConformance.d.mts","default":"./dist/durable/MessageDeliveryStoreConformance.mjs"},"./testing/schedule-store-conformance":{"types":"./dist/durable/ScheduleStoreConformance.d.mts","default":"./dist/durable/ScheduleStoreConformance.mjs"},"./testing/submission-ledger-conformance":{"types":"./dist/durable/SubmissionLedgerConformance.d.mts","default":"./dist/durable/SubmissionLedgerConformance.mjs"},"./testing/subscription-store-conformance":{"types":"./dist/durable/SubscriptionStoreConformance.d.mts","default":"./dist/durable/SubscriptionStoreConformance.mjs"},"./testing/thread-store-conformance":{"types":"./dist/durable/ThreadStoreConformance.d.mts","default":"./dist/durable/ThreadStoreConformance.mjs"},"./thread":{"types":"./dist/core/Thread.d.mts","default":"./dist/core/Thread.mjs"},"./thread-context-history":{"types":"./dist/durable/ThreadContextHistory.d.mts","default":"./dist/durable/ThreadContextHistory.mjs"},"./thread-context-history-projection":{"types":"./dist/durable/ThreadContextHistoryProjection.d.mts","default":"./dist/durable/ThreadContextHistoryProjection.mjs"},"./thread-history":{"types":"./dist/engine/ThreadHistory.d.mts","default":"./dist/engine/ThreadHistory.mjs"},"./thread-invariants":{"types":"./dist/durable/ThreadInvariants.d.mts","default":"./dist/durable/ThreadInvariants.mjs"},"./thread-projection":{"types":"./dist/durable/ThreadProjection.d.mts","default":"./dist/durable/ThreadProjection.mjs"},"./thread-projection-maintenance":{"types":"./dist/durable/ThreadProjectionMaintenance.d.mts","default":"./dist/durable/ThreadProjectionMaintenance.mjs"},"./thread-store":{"types":"./dist/durable/ThreadStore.d.mts","default":"./dist/durable/ThreadStore.mjs"},"./tool-broker":{"types":"./dist/engine/ToolBroker.d.mts","default":"./dist/engine/ToolBroker.mjs"},"./tool-discovery":{"types":"./dist/capabilities/ToolDiscovery.d.mts","default":"./dist/capabilities/ToolDiscovery.mjs"},"./tool-exposure":{"types":"./dist/ToolExposure.d.mts","default":"./dist/ToolExposure.mjs"},"./tool-reconciler":{"types":"./dist/durable/ToolReconciler.d.mts","default":"./dist/durable/ToolReconciler.mjs"},"./tool-result":{"types":"./dist/core/ToolResult.d.mts","default":"./dist/core/ToolResult.mjs"},"./usage":{"types":"./dist/core/Usage.d.mts","default":"./dist/core/Usage.mjs"},"./wake-scheduler":{"types":"./dist/durable/WakeScheduler.d.mts","default":"./dist/durable/WakeScheduler.mjs"},"./web-capture":{"types":"./dist/capabilities/WebCapture.d.mts","default":"./dist/capabilities/WebCapture.mjs"},"./web-search":{"types":"./dist/capabilities/WebSearch.d.mts","default":"./dist/capabilities/WebSearch.mjs"},"./worker":{"types":"./dist/core/Worker.d.mts","default":"./dist/core/Worker.mjs"},"./worker-host":{"types":"./dist/durable/WorkerHost.d.mts","default":"./dist/durable/WorkerHost.mjs"}},"description":"Effect-native agents, execution, subagents, and sandbox contracts in one tree-shakeable package.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/danieljvdm/effect-agent.git","directory":"packages/effect-agent"},"files":["dist","src"],"type":"module","sideEffects":[],"publishConfig":{"access":"public"},"scripts":{"build":"vp pack","check":"tsc --noEmit -p tsconfig.json","test":"vp test --passWithNoTests"}}
1
+ {"name":"effect-agent","version":"0.1.0-beta.115","devDependencies":{"@effect/platform-node":"4.0.0-rc.116","@effect/vitest":"4.0.0-rc.116","effect":"4.0.0-rc.116","typescript":"7.0.2","vite-plus":"0.3.2"},"peerDependencies":{"effect":"^4.0.0-rc.116"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./activity-store":{"types":"./dist/durable/ActivityStore.d.mts","default":"./dist/durable/ActivityStore.mjs"},"./admin":{"types":"./dist/durable/Admin.d.mts","default":"./dist/durable/Admin.mjs"},"./agent":{"types":"./dist/core/Agent.d.mts","default":"./dist/core/Agent.mjs"},"./agent-error":{"types":"./dist/core/AgentError.d.mts","default":"./dist/core/AgentError.mjs"},"./agent-policy":{"types":"./dist/core/AgentPolicy.d.mts","default":"./dist/core/AgentPolicy.mjs"},"./agent-registration":{"types":"./dist/durable/AgentRegistration.d.mts","default":"./dist/durable/AgentRegistration.mjs"},"./agent-runtime":{"types":"./dist/engine/AgentRuntime.d.mts","default":"./dist/engine/AgentRuntime.mjs"},"./agent-updates":{"types":"./dist/core/AgentUpdates.d.mts","default":"./dist/core/AgentUpdates.mjs"},"./approval":{"types":"./dist/capabilities/Approval.d.mts","default":"./dist/capabilities/Approval.mjs"},"./budget":{"types":"./dist/capabilities/Budget.d.mts","default":"./dist/capabilities/Budget.mjs"},"./code-executor":{"types":"./dist/sandbox/CodeExecutor.d.mts","default":"./dist/sandbox/CodeExecutor.mjs"},"./code-mode":{"types":"./dist/capabilities/CodeMode.d.mts","default":"./dist/capabilities/CodeMode.mjs"},"./commands":{"types":"./dist/capabilities/Commands.d.mts","default":"./dist/capabilities/Commands.mjs"},"./committed-activity":{"types":"./dist/durable/CommittedActivity.d.mts","default":"./dist/durable/CommittedActivity.mjs"},"./compaction":{"types":"./dist/engine/Compaction.d.mts","default":"./dist/engine/Compaction.mjs"},"./context-compactor":{"types":"./dist/engine/ContextCompactor.d.mts","default":"./dist/engine/ContextCompactor.mjs"},"./context-history":{"types":"./dist/engine/ContextHistory.d.mts","default":"./dist/engine/ContextHistory.mjs"},"./context-tools":{"types":"./dist/capabilities/ContextTools.d.mts","default":"./dist/capabilities/ContextTools.mjs"},"./context-window":{"types":"./dist/engine/ContextWindow.d.mts","default":"./dist/engine/ContextWindow.mjs"},"./digest":{"types":"./dist/durable/Digest.d.mts","default":"./dist/durable/Digest.mjs"},"./durable-agent-runtime":{"types":"./dist/durable/DurableAgentRuntime.d.mts","default":"./dist/durable/DurableAgentRuntime.mjs"},"./durable-failpoint":{"types":"./dist/durable/DurableFailpoint.d.mts","default":"./dist/durable/DurableFailpoint.mjs"},"./durable-step":{"types":"./dist/engine/DurableStep.d.mts","default":"./dist/engine/DurableStep.mjs"},"./event-source":{"types":"./dist/durable/EventSource.d.mts","default":"./dist/durable/EventSource.mjs"},"./failure-diagnostic":{"types":"./dist/core/FailureDiagnostic.d.mts","default":"./dist/core/FailureDiagnostic.mjs"},"./git-hub-workflow-source":{"types":"./dist/durable/GitHubWorkflowSource.d.mts","default":"./dist/durable/GitHubWorkflowSource.mjs"},"./id-generator":{"types":"./dist/core/IdGenerator.d.mts","default":"./dist/core/IdGenerator.mjs"},"./identifiers":{"types":"./dist/core/Identifiers.d.mts","default":"./dist/core/Identifiers.mjs"},"./in-memory":{"types":"./dist/InMemory.d.mts","default":"./dist/InMemory.mjs"},"./interactive-browser":{"types":"./dist/sandbox/InteractiveBrowser.d.mts","default":"./dist/sandbox/InteractiveBrowser.mjs"},"./mcp":{"types":"./dist/capabilities/Mcp.d.mts","default":"./dist/capabilities/Mcp.mjs"},"./mcp-client":{"types":"./dist/capabilities/McpClient.d.mts","default":"./dist/capabilities/McpClient.mjs"},"./memory":{"types":"./dist/core/Memory.d.mts","default":"./dist/core/Memory.mjs"},"./memory-namespace":{"types":"./dist/core/MemoryNamespace.d.mts","default":"./dist/core/MemoryNamespace.mjs"},"./memory-notes":{"types":"./dist/capabilities/MemoryNotes.d.mts","default":"./dist/capabilities/MemoryNotes.mjs"},"./memory-reference":{"types":"./dist/core/MemoryReference.d.mts","default":"./dist/core/MemoryReference.mjs"},"./memory-revalidation":{"types":"./dist/core/MemoryRevalidation.d.mts","default":"./dist/core/MemoryRevalidation.mjs"},"./memory-store":{"types":"./dist/core/MemoryStore.d.mts","default":"./dist/core/MemoryStore.mjs"},"./message-delivery":{"types":"./dist/durable/MessageDelivery.d.mts","default":"./dist/durable/MessageDelivery.mjs"},"./messaging":{"types":"./dist/capabilities/Messaging.d.mts","default":"./dist/capabilities/Messaging.mjs"},"./messaging-host":{"types":"./dist/engine/MessagingHost.d.mts","default":"./dist/engine/MessagingHost.mjs"},"./model-context":{"types":"./dist/capabilities/ModelContext.d.mts","default":"./dist/capabilities/ModelContext.mjs"},"./operation-authorizer":{"types":"./dist/durable/OperationAuthorizer.d.mts","default":"./dist/durable/OperationAuthorizer.mjs"},"./output":{"types":"./dist/engine/Output.d.mts","default":"./dist/engine/Output.mjs"},"./page-capture":{"types":"./dist/sandbox/PageCapture.d.mts","default":"./dist/sandbox/PageCapture.mjs"},"./page-crawl":{"types":"./dist/sandbox/PageCrawl.d.mts","default":"./dist/sandbox/PageCrawl.mjs"},"./page-screenshot":{"types":"./dist/sandbox/PageScreenshot.d.mts","default":"./dist/sandbox/PageScreenshot.mjs"},"./persistent-history":{"types":"./dist/durable/PersistentHistory.d.mts","default":"./dist/durable/PersistentHistory.mjs"},"./prepared-input-admission":{"types":"./dist/durable/PreparedInputAdmission.d.mts","default":"./dist/durable/PreparedInputAdmission.mjs"},"./protected-browser":{"types":"./dist/sandbox/ProtectedBrowser.d.mts","default":"./dist/sandbox/ProtectedBrowser.mjs"},"./receipt":{"types":"./dist/core/Receipt.d.mts","default":"./dist/core/Receipt.mjs"},"./records":{"types":"./dist/durable/Records.d.mts","default":"./dist/durable/Records.mjs"},"./recovery":{"types":"./dist/durable/Recovery.d.mts","default":"./dist/durable/Recovery.mjs"},"./redaction":{"types":"./dist/capabilities/Redaction.d.mts","default":"./dist/capabilities/Redaction.mjs"},"./remembering":{"types":"./dist/capabilities/Remembering.d.mts","default":"./dist/capabilities/Remembering.mjs"},"./remembering-store":{"types":"./dist/core/RememberingStore.d.mts","default":"./dist/core/RememberingStore.mjs"},"./run-event":{"types":"./dist/core/RunEvent.d.mts","default":"./dist/core/RunEvent.mjs"},"./run-event-sink":{"types":"./dist/engine/RunEventSink.d.mts","default":"./dist/engine/RunEventSink.mjs"},"./run-hooks":{"types":"./dist/capabilities/RunHooks.d.mts","default":"./dist/capabilities/RunHooks.mjs"},"./run-journal":{"types":"./dist/durable/RunJournal.d.mts","default":"./dist/durable/RunJournal.mjs"},"./run-options":{"types":"./dist/engine/RunOptions.d.mts","default":"./dist/engine/RunOptions.mjs"},"./run-policy-usage":{"types":"./dist/core/RunPolicyUsage.d.mts","default":"./dist/core/RunPolicyUsage.mjs"},"./sandbox":{"types":"./dist/sandbox/Sandbox.d.mts","default":"./dist/sandbox/Sandbox.mjs"},"./schedule":{"types":"./dist/durable/Schedule.d.mts","default":"./dist/durable/Schedule.mjs"},"./schedule-transition":{"types":"./dist/durable/ScheduleTransition.d.mts","default":"./dist/durable/ScheduleTransition.mjs"},"./scheduling":{"types":"./dist/durable/Scheduling.d.mts","default":"./dist/durable/Scheduling.mjs"},"./semantic-memory":{"types":"./dist/capabilities/SemanticMemory.d.mts","default":"./dist/capabilities/SemanticMemory.mjs"},"./semantic-memory-index":{"types":"./dist/core/SemanticMemoryIndex.d.mts","default":"./dist/core/SemanticMemoryIndex.mjs"},"./semantic-memory-revalidation":{"types":"./dist/core/SemanticMemoryRevalidation.d.mts","default":"./dist/core/SemanticMemoryRevalidation.mjs"},"./sql-thread-native-reads":{"types":"./dist/durable/SqlThreadNativeReads.d.mts","default":"./dist/durable/SqlThreadNativeReads.mjs"},"./sql-memory-store":{"types":"./dist/durable/SqlMemoryStore.d.mts","default":"./dist/durable/SqlMemoryStore.mjs"},"./sql-message-delivery-store":{"types":"./dist/durable/SqlMessageDeliveryStore.d.mts","default":"./dist/durable/SqlMessageDeliveryStore.mjs"},"./sql-storage-v2-upgrade":{"types":"./dist/durable/SqlStorageV2Upgrade.d.mts","default":"./dist/durable/SqlStorageV2Upgrade.mjs"},"./sql-subscription-store":{"types":"./dist/durable/SqlSubscriptionStore.d.mts","default":"./dist/durable/SqlSubscriptionStore.mjs"},"./subagent":{"types":"./dist/capabilities/Subagent.d.mts","default":"./dist/capabilities/Subagent.mjs"},"./subagent-contract":{"types":"./dist/core/SubagentContract.d.mts","default":"./dist/core/SubagentContract.mjs"},"./subagent-host":{"types":"./dist/engine/SubagentHost.d.mts","default":"./dist/engine/SubagentHost.mjs"},"./subagent-reservations":{"types":"./dist/capabilities/SubagentReservations.d.mts","default":"./dist/capabilities/SubagentReservations.mjs"},"./submission-ledger":{"types":"./dist/durable/SubmissionLedger.d.mts","default":"./dist/durable/SubmissionLedger.mjs"},"./submission-status":{"types":"./dist/durable/SubmissionStatus.d.mts","default":"./dist/durable/SubmissionStatus.mjs"},"./subscription":{"types":"./dist/durable/Subscription.d.mts","default":"./dist/durable/Subscription.mjs"},"./subscription-input":{"types":"./dist/durable/SubscriptionInput.d.mts","default":"./dist/durable/SubscriptionInput.mjs"},"./subscription-tools":{"types":"./dist/durable/SubscriptionTools.d.mts","default":"./dist/durable/SubscriptionTools.mjs"},"./subscription-transition":{"types":"./dist/durable/SubscriptionTransition.d.mts","default":"./dist/durable/SubscriptionTransition.mjs"},"./subscriptions":{"types":"./dist/durable/Subscriptions.d.mts","default":"./dist/durable/Subscriptions.mjs"},"./testing/certification":{"types":"./dist/durable/Certification.d.mts","default":"./dist/durable/Certification.mjs"},"./testing/durable-failpoint-test-control":{"types":"./dist/durable/DurableFailpointTestControl.d.mts","default":"./dist/durable/DurableFailpointTestControl.mjs"},"./testing/message-delivery-store-conformance":{"types":"./dist/durable/MessageDeliveryStoreConformance.d.mts","default":"./dist/durable/MessageDeliveryStoreConformance.mjs"},"./testing/schedule-store-conformance":{"types":"./dist/durable/ScheduleStoreConformance.d.mts","default":"./dist/durable/ScheduleStoreConformance.mjs"},"./testing/submission-ledger-conformance":{"types":"./dist/durable/SubmissionLedgerConformance.d.mts","default":"./dist/durable/SubmissionLedgerConformance.mjs"},"./testing/subscription-store-conformance":{"types":"./dist/durable/SubscriptionStoreConformance.d.mts","default":"./dist/durable/SubscriptionStoreConformance.mjs"},"./testing/thread-store-conformance":{"types":"./dist/durable/ThreadStoreConformance.d.mts","default":"./dist/durable/ThreadStoreConformance.mjs"},"./thread":{"types":"./dist/core/Thread.d.mts","default":"./dist/core/Thread.mjs"},"./thread-context-history":{"types":"./dist/durable/ThreadContextHistory.d.mts","default":"./dist/durable/ThreadContextHistory.mjs"},"./thread-context-history-projection":{"types":"./dist/durable/ThreadContextHistoryProjection.d.mts","default":"./dist/durable/ThreadContextHistoryProjection.mjs"},"./thread-history":{"types":"./dist/engine/ThreadHistory.d.mts","default":"./dist/engine/ThreadHistory.mjs"},"./thread-invariants":{"types":"./dist/durable/ThreadInvariants.d.mts","default":"./dist/durable/ThreadInvariants.mjs"},"./thread-projection":{"types":"./dist/durable/ThreadProjection.d.mts","default":"./dist/durable/ThreadProjection.mjs"},"./thread-projection-maintenance":{"types":"./dist/durable/ThreadProjectionMaintenance.d.mts","default":"./dist/durable/ThreadProjectionMaintenance.mjs"},"./thread-store":{"types":"./dist/durable/ThreadStore.d.mts","default":"./dist/durable/ThreadStore.mjs"},"./tool-broker":{"types":"./dist/engine/ToolBroker.d.mts","default":"./dist/engine/ToolBroker.mjs"},"./tool-discovery":{"types":"./dist/capabilities/ToolDiscovery.d.mts","default":"./dist/capabilities/ToolDiscovery.mjs"},"./tool-exposure":{"types":"./dist/ToolExposure.d.mts","default":"./dist/ToolExposure.mjs"},"./tool-reconciler":{"types":"./dist/durable/ToolReconciler.d.mts","default":"./dist/durable/ToolReconciler.mjs"},"./tool-result":{"types":"./dist/core/ToolResult.d.mts","default":"./dist/core/ToolResult.mjs"},"./usage":{"types":"./dist/core/Usage.d.mts","default":"./dist/core/Usage.mjs"},"./wake-scheduler":{"types":"./dist/durable/WakeScheduler.d.mts","default":"./dist/durable/WakeScheduler.mjs"},"./web-capture":{"types":"./dist/capabilities/WebCapture.d.mts","default":"./dist/capabilities/WebCapture.mjs"},"./web-search":{"types":"./dist/capabilities/WebSearch.d.mts","default":"./dist/capabilities/WebSearch.mjs"},"./worker":{"types":"./dist/core/Worker.d.mts","default":"./dist/core/Worker.mjs"},"./worker-host":{"types":"./dist/durable/WorkerHost.d.mts","default":"./dist/durable/WorkerHost.mjs"}},"description":"Effect-native agents, execution, subagents, and sandbox contracts in one tree-shakeable package.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/danieljvdm/effect-agent.git","directory":"packages/effect-agent"},"files":["dist","src"],"type":"module","sideEffects":[],"publishConfig":{"access":"public"},"scripts":{"build":"vp pack","check":"tsc --noEmit -p tsconfig.json","test":"vp test --passWithNoTests"}}
@@ -2374,7 +2374,7 @@ export function layer<
2374
2374
  return toolkit.toLayer(build);
2375
2375
  }
2376
2376
 
2377
- export { reporting, reportingToWorker, WorkerReport } from "./internal/subagent-reporting.ts";
2377
+ export { WorkerReport } from "./internal/subagent-reporting.ts";
2378
2378
 
2379
2379
  export {
2380
2380
  Worker,
@@ -2386,6 +2386,7 @@ export {
2386
2386
  awaitWorker as await,
2387
2387
  list,
2388
2388
  cancel,
2389
+ stop,
2389
2390
  type BackgroundOptions,
2390
2391
  type BackgroundTools,
2391
2392
  } from "./internal/subagent-background.ts";
@@ -22,6 +22,8 @@ import {
22
22
  WorkerPage,
23
23
  WorkerRef,
24
24
  WorkerStarted,
25
+ WorkerStop,
26
+ WorkerStopped,
25
27
  WorkerSummary,
26
28
  } from "../../core/Worker.ts";
27
29
  import {
@@ -221,10 +223,6 @@ const operations = <
221
223
  parameters: Parameters["Type"],
222
224
  caller: WorkerContext,
223
225
  ) {
224
- const encodedParameters = yield* Schema.encodeEffect(declaration.parameters)(parameters).pipe(
225
- Effect.mapError((cause) => projectionFailure("input", cause)),
226
- );
227
-
228
226
  const source = caller.source;
229
227
 
230
228
  const preparation: SubagentPrepareContext =
@@ -247,7 +245,7 @@ const operations = <
247
245
  Effect.mapError((cause) => projectionFailure("input", cause)),
248
246
  );
249
247
 
250
- return { encodedParameters, encodedInput };
248
+ return encodedInput;
251
249
  });
252
250
 
253
251
  const validateKey = (key: IdempotencyKey, operation: "start" | "followUp") =>
@@ -284,23 +282,8 @@ const operations = <
284
282
  });
285
283
  }
286
284
 
287
- const prepared = yield* prepare(parameters, caller);
288
-
289
- const effectiveTarget = yield* service.resolveTargetPolicy({
290
- target: declaration.target,
291
- encodedInput: prepared.encodedInput,
292
- });
293
-
294
- const resolvedTarget = Option.getOrUndefined(effectiveTarget);
295
-
296
- const resolved = resolveSubagentPolicy(
297
- declaration,
298
- options.budgetScope === "worker-run"
299
- ? (resolvedTarget ?? declaration.target.policy)
300
- : caller.policy,
301
- undefined,
302
- options.budgetScope === "worker-run" ? "root-attached" : "conserved",
303
- resolvedTarget,
285
+ const encodedParameters = yield* Schema.encodeEffect(declaration.parameters)(parameters).pipe(
286
+ Effect.mapError((cause) => projectionFailure("input", cause)),
304
287
  );
305
288
 
306
289
  const encodedGrant = yield* Schema.encodeEffect(SubagentGrant)(grant).pipe(
@@ -308,26 +291,50 @@ const operations = <
308
291
  );
309
292
 
310
293
  const started = yield* service.start({
311
- ...prepared,
312
294
  delegationId: declaration.delegationId,
313
295
  target: declaration.target,
314
296
  idempotencyKey: key,
315
- ...(options.budgetScope === undefined ? {} : { budgetScope: options.budgetScope }),
297
+ encodedParameters,
316
298
  encodedGrant,
317
- policy: resolved.childPolicy,
318
- budget: SubagentBudgetReservation.make({
319
- caps: resolved.caps,
320
- allocation: resolved.allocation,
321
- ...(resolved.policy.descendantInvocations === undefined
322
- ? {}
323
- : { descendantInvocations: resolved.policy.descendantInvocations }),
299
+ ...(options.budgetScope === undefined ? {} : { budgetScope: options.budgetScope }),
300
+ prepare: Effect.gen(function* () {
301
+ const encodedInput = yield* prepare(parameters, caller);
302
+
303
+ const effectiveTarget = yield* service.resolveTargetPolicy({
304
+ target: declaration.target,
305
+ encodedInput,
306
+ });
307
+
308
+ const resolvedTarget = Option.getOrUndefined(effectiveTarget);
309
+
310
+ const resolved = resolveSubagentPolicy(
311
+ declaration,
312
+ options.budgetScope === "worker-run"
313
+ ? (resolvedTarget ?? declaration.target.policy)
314
+ : caller.policy,
315
+ undefined,
316
+ options.budgetScope === "worker-run" ? "root-attached" : "conserved",
317
+ resolvedTarget,
318
+ );
319
+
320
+ return {
321
+ encodedInput,
322
+ policy: resolved.childPolicy,
323
+ budget: SubagentBudgetReservation.make({
324
+ caps: resolved.caps,
325
+ allocation: resolved.allocation,
326
+ ...(resolved.policy.descendantInvocations === undefined
327
+ ? {}
328
+ : { descendantInvocations: resolved.policy.descendantInvocations }),
329
+ }),
330
+ toolCallAllowance: resolveToolCallAllowance(
331
+ declaration.toolCallAllowance,
332
+ parameters,
333
+ resolved.policy,
334
+ resolved.childPolicy,
335
+ ),
336
+ };
324
337
  }),
325
- toolCallAllowance: resolveToolCallAllowance(
326
- declaration.toolCallAllowance,
327
- parameters,
328
- resolved.policy,
329
- resolved.childPolicy,
330
- ),
331
338
  });
332
339
 
333
340
  const validated = yield* Schema.decodeEffect(WorkerStarted)(started).pipe(
@@ -354,12 +361,18 @@ const operations = <
354
361
  const validated = yield* validateWorker(worker, "followUp");
355
362
  const caller = yield* context;
356
363
  const key = yield* validateKey(options.idempotencyKey, "followUp");
357
- const prepared = yield* prepare(parameters, caller);
364
+
365
+ const encodedParameters = yield* Schema.encodeEffect(declaration.parameters)(parameters).pipe(
366
+ Effect.mapError((cause) => projectionFailure("input", cause)),
367
+ );
368
+
369
+ const encodedInput = yield* prepare(parameters, caller);
358
370
 
359
371
  const delivery = yield* validateDelivery(
360
372
  validated,
361
373
  yield* service.followUp({
362
- ...prepared,
374
+ encodedParameters,
375
+ encodedInput,
363
376
  worker: validated,
364
377
  target: declaration.target,
365
378
  idempotencyKey: key,
@@ -738,6 +751,35 @@ export const observe = <const Name extends string>(
738
751
  }),
739
752
  );
740
753
 
754
+ /** Seal a continuing worker, retaining a stable command identity across retries and Runs. */
755
+ export const stop = <const Name extends string>(
756
+ declaration: WorkerDeclaration<Name> & { readonly target: AnyDefinition },
757
+ worker: Worker<Name>,
758
+ options: { readonly idempotencyKey: IdempotencyKey },
759
+ ) =>
760
+ Effect.gen(function* () {
761
+ const service = yield* host;
762
+
763
+ const command = yield* Schema.decodeEffect(WorkerStop)({ worker, ...options }).pipe(
764
+ Effect.mapError((cause) => WorkerError.make({ operation: "stop", reason: "corrupt", cause })),
765
+ );
766
+
767
+ if (
768
+ worker.delegationId !== declaration.delegationId ||
769
+ worker.targetAgentId !== declaration.target.id
770
+ )
771
+ return yield* WorkerError.make({ operation: "stop", reason: "worker-mismatch" });
772
+
773
+ return yield* service.stop({ ...command, target: declaration.target }).pipe(
774
+ Effect.flatMap(Schema.decodeEffect(WorkerStopped)),
775
+ Effect.mapError((cause) =>
776
+ Schema.is(WorkerError)(cause)
777
+ ? cause
778
+ : WorkerError.make({ operation: "stop", reason: "corrupt", cause }),
779
+ ),
780
+ );
781
+ });
782
+
741
783
  /** Wait for the exact Receipt. Interrupting this Effect never cancels accepted work. */
742
784
  export const awaitWorker = <
743
785
  const Name extends string,
@@ -787,8 +829,8 @@ export const cancel = <
787
829
 
788
830
  /** Opt in to each model-facing operation. Waiting remains programmatic only. */
789
831
  export interface BackgroundOptions {
790
- /** Deliver a standard completion, or use an optional application input mapper. */
791
- readonly reportToParent?: true | WorkerReporting<unknown, unknown>;
832
+ /** Deliver standard completion and progress messages to the parent. */
833
+ readonly reportToParent?: true;
792
834
  readonly start?: true;
793
835
  readonly followUp?: true;
794
836
  readonly inspect?: true;
@@ -832,9 +874,8 @@ const WorkerParameters = <Name extends string>(declaration: WorkerDeclaration<Na
832
874
 
833
875
  const Summary = <Name extends string>(declaration: WorkerDeclaration<Name>) =>
834
876
  Schema.Struct({
877
+ ...WorkerSummary.fields,
835
878
  worker: Worker(declaration),
836
- latestReceipt: Schema.NullOr(Receipt),
837
- state: Schema.Literals(["starting", "active", "idle"]),
838
879
  });
839
880
 
840
881
  const FollowUpParameters = <Name extends string, Parameters extends Schema.Top>(
@@ -1021,14 +1062,7 @@ export const background = <
1021
1062
  declaration: Declaration<Name, Input, Output, Parameters, Success, Failure, Prepare, Project>,
1022
1063
  selected: Selected,
1023
1064
  ) => {
1024
- const report =
1025
- selected.reportToParent === true ? automaticReporting(declaration) : selected.reportToParent;
1026
-
1027
- if (
1028
- report !== undefined &&
1029
- (report.delegationId !== declaration.delegationId || report.target !== declaration.target)
1030
- )
1031
- throw new TypeError("Background reporting must use the same subagent declaration and target");
1065
+ const report = selected.reportToParent === true ? automaticReporting(declaration) : undefined;
1032
1066
 
1033
1067
  const reportService = Context.Service<WorkerReporting<WorkerReportPreparationFailure>>(
1034
1068
  `@effect-agent/capabilities/BackgroundReport/${declaration.name}/${reportingServiceId++}`,
@@ -1131,11 +1165,6 @@ export const background = <
1131
1165
  | Parameters["DecodingServices"]
1132
1166
  | Output["DecodingServices"]
1133
1167
  | Success["EncodingServices"];
1134
- type ReportServices<Report> = Report extends true
1135
- ? Exclude<ProjectServices, Scope.Scope>
1136
- : Report extends WorkerReporting<infer _E, infer R>
1137
- ? Exclude<R, Scope.Scope>
1138
- : never;
1139
1168
  type Services = PrepareServices | ProjectServices;
1140
1169
  type SelectionServices<Flag, Requirements> = Flag extends true ? Requirements : never;
1141
1170
 
@@ -1211,7 +1240,7 @@ export const background = <
1211
1240
  | SelectionServices<Selected["start"], PrepareServices>
1212
1241
  | SelectionServices<Selected["followUp"], PrepareServices>
1213
1242
  | SelectionServices<Selected["inspect"], ProjectServices>
1214
- | ReportServices<Selected["reportToParent"]>;
1243
+ | SelectionServices<Selected["reportToParent"], Exclude<ProjectServices, Scope.Scope>>;
1215
1244
 
1216
1245
  // Unselected handlers are never installed. Only selected operations consume projection services.
1217
1246
  const reportingLayer =
@@ -3,11 +3,7 @@ import { Effect, Schema } from "effect";
3
3
  import { utf8ByteLength } from "../../core/internal/utf8.ts";
4
4
  import { Receipt } from "../../core/Receipt.ts";
5
5
  import { type WorkerReport, WorkerCompletion } from "../../core/Worker.ts";
6
- import {
7
- WorkerReportPreparationFailure,
8
- type WorkerReporting,
9
- type WorkerRunReport,
10
- } from "../../engine/SubagentHost.ts";
6
+ import { WorkerReportPreparationFailure, type WorkerRunReport } from "../../engine/SubagentHost.ts";
11
7
  import { type Declaration } from "./subagent-background.ts";
12
8
  import { SubagentExecutionFailure } from "./subagent-contract.ts";
13
9
 
@@ -100,7 +96,7 @@ const projectReport = <
100
96
  return { projected, encodedResult };
101
97
  });
102
98
 
103
- /** Framework reporting shares the same bounded declaration projection as custom mapping. */
99
+ /** Project a canonical child outcome into the bounded standard completion message. */
104
100
  export const automaticReporting = <
105
101
  const Name extends string,
106
102
  Input extends Schema.Top,
@@ -115,7 +111,6 @@ export const automaticReporting = <
115
111
  ) => ({
116
112
  delegationId: declaration.delegationId,
117
113
  target: declaration.target,
118
- mode: "standard" as const,
119
114
  prepare: Effect.fn("Subagent.automaticReport")(function* (report: WorkerRunReport) {
120
115
  const { projected, encodedResult } = yield* projectReport(declaration)(report);
121
116
 
@@ -136,126 +131,6 @@ export const automaticReporting = <
136
131
  budgetExhausted: report.observation.budgetExhausted,
137
132
  }).pipe(Effect.mapError(() => WorkerReportPreparationFailure.make({ stage: "projection" })));
138
133
 
139
- return { encodedInput: null, message };
134
+ return { message };
140
135
  }),
141
136
  });
142
-
143
- /**
144
- * Define an optional application-specific conversion for `background({ reportToParent: report })`.
145
- * Existing Agent Registration `reporting` arrays remain supported. The input Schema must be the coordinator Definition's exact input Schema.
146
- * Preparation is bounded by the durable host; a retained prepared envelope is never reprojected
147
- * during delivery retries. The callback should be deterministic and have no external side effects.
148
- */
149
- export const reporting = <
150
- const Name extends string,
151
- Input extends Schema.Top,
152
- Output extends Schema.Top,
153
- Parameters extends Schema.Top,
154
- Success extends Schema.Top,
155
- Failure extends Schema.Top,
156
- Prepare,
157
- Project,
158
- CoordinatorInput extends Schema.Top,
159
- ReportFailure extends Schema.Top = typeof Schema.Never,
160
- ReportRequirements = never,
161
- >(
162
- declaration: Declaration<Name, Input, Output, Parameters, Success, Failure, Prepare, Project>,
163
- options: {
164
- readonly input: CoordinatorInput;
165
- readonly failure?: ReportFailure;
166
- readonly prepare: (
167
- report: WorkerReport<Success>,
168
- ) => Effect.Effect<CoordinatorInput["Type"], ReportFailure["Type"], ReportRequirements>;
169
- },
170
- ): WorkerReporting<
171
- Failure["Type"] | ReportFailure["Type"],
172
- | Parameters["DecodingServices"]
173
- | Output["DecodingServices"]
174
- | Success["EncodingServices"]
175
- | CoordinatorInput["EncodingServices"]
176
- | Project
177
- | ReportRequirements
178
- > => {
179
- const prepare = Effect.fn("Subagent.reporting.prepare")(function* (report: WorkerRunReport) {
180
- const { projected } = yield* projectReport(declaration)(report);
181
- const input = yield* options.prepare(projected);
182
-
183
- const encoded = yield* Schema.encodeEffect(options.input)(input).pipe(
184
- Effect.mapError(() => WorkerReportPreparationFailure.make({ stage: "input" })),
185
- );
186
-
187
- const encodedInput = yield* Schema.decodeUnknownEffect(Schema.Json)(encoded).pipe(
188
- Effect.mapError(() => WorkerReportPreparationFailure.make({ stage: "input" })),
189
- );
190
-
191
- return { encodedInput };
192
- });
193
-
194
- return Object.freeze({
195
- delegationId: declaration.delegationId,
196
- target: declaration.target,
197
- input: options.input,
198
- prepare,
199
- });
200
- };
201
-
202
- /**
203
- * Adapt a report expressed in a receiving worker declaration's Parameters to its Agent input.
204
- * Use this on that worker's registration when it can itself launch reporting workers. This
205
- * explicit conversion preserves custom Parameters and charges the next input to its ancestor.
206
- */
207
- export const reportingToWorker = <
208
- E,
209
- R,
210
- const Name extends string,
211
- Input extends Schema.Top,
212
- Output extends Schema.Top,
213
- Parameters extends Schema.Top,
214
- Success extends Schema.Top,
215
- Failure extends Schema.Top,
216
- Prepare,
217
- Project,
218
- >(
219
- report: WorkerReporting<E, R>,
220
- destination: Declaration<Name, Input, Output, Parameters, Success, Failure, Prepare, Project>,
221
- ): WorkerReporting<
222
- E | Failure["Type"],
223
- R | Prepare | Parameters["DecodingServices"] | Input["EncodingServices"]
224
- > => {
225
- if (report.input !== destination.parameters) {
226
- throw new TypeError(
227
- "Worker reporting must use the destination declaration's Parameters Schema",
228
- );
229
- }
230
-
231
- return Object.freeze({
232
- delegationId: report.delegationId,
233
- target: report.target,
234
- input: destination.target.input,
235
- destination: { delegationId: destination.delegationId, target: destination.target },
236
- prepare: Effect.fn("Subagent.reportingToWorker.prepare")(function* (run: WorkerRunReport) {
237
- const encodedParameters = (yield* report.prepare(run)).encodedInput;
238
- const invalid = () => WorkerReportPreparationFailure.make({ stage: "input" });
239
-
240
- const parameters = yield* Schema.decodeEffect(destination.parameters)(encodedParameters).pipe(
241
- Effect.mapError(invalid),
242
- );
243
-
244
- const input = yield* destination.prepareInput(parameters, {
245
- source: "programmatic",
246
- delegationId: destination.delegationId,
247
- parent: { agentId: run.context.source.agentId, threadId: run.context.source.threadId },
248
- });
249
-
250
- const encoded = yield* Schema.encodeEffect(destination.target.input)(input).pipe(
251
- Effect.mapError(invalid),
252
- );
253
-
254
- const encodedInput = yield* Schema.decodeUnknownEffect(Schema.Json)(encoded).pipe(
255
- Effect.mapError(invalid),
256
- );
257
-
258
- return { encodedInput, encodedParameters };
259
- }),
260
- });
261
- };
package/src/core/Agent.ts CHANGED
@@ -63,9 +63,16 @@ export type NativeModel<ModelValue> =
63
63
 
64
64
  /** Definition-owned boundary for selecting and validating an application run disposition. */
65
65
  export interface RunDispositionDeclaration<Output, DispositionSchema extends Schema.Top> {
66
+ /**
67
+ * Opt background workers into one retained assignment. The encoded disposition must be
68
+ * Worker.AssignmentDisposition: completed seals the worker, waiting leaves it steerable.
69
+ * Failures and exhausted Runs seal as failed; aborting an active Run seals as cancelled.
70
+ * The worker origin retains this choice. Omission preserves reusable workers.
71
+ */
72
+ readonly workerLifecycle?: "assignment" | undefined;
66
73
  /** Canonical Schema used to validate and encode the selected disposition. */
67
74
  readonly schema: DispositionSchema;
68
- /** Pure selection from decoded output; `undefined` means this ordinary Run declares none. */
75
+ /** Pure selection from decoded output. `undefined` declares none, except for assignments. */
69
76
  readonly fromOutput: (output: Output) => unknown;
70
77
  }
71
78
 
@@ -5,9 +5,17 @@ import { Update } from "./AgentUpdates.ts";
5
5
  import * as FailureDiagnostic from "./FailureDiagnostic.ts";
6
6
  import { AgentId, DelegationId, RunId, SettlementId, ThreadId, ToolCallId } from "./Identifiers.ts";
7
7
  import { MessageStatus } from "./internal/message-status.ts";
8
- import { Receipt } from "./Receipt.ts";
8
+ import { IdempotencyKey, Receipt } from "./Receipt.ts";
9
9
  import { SubagentExecutionFailure, SubagentGrant } from "./SubagentContract.ts";
10
10
 
11
+ /** Assignment output selected through the Definition's runDisposition declaration. */
12
+ export const AssignmentDisposition = Schema.Literals(["completed", "waiting"]);
13
+ export type AssignmentDisposition = typeof AssignmentDisposition.Type;
14
+
15
+ /** A permanent destination outcome; an ordinary Run completion does not imply this. */
16
+ export const AssignmentTerminal = Schema.Literals(["completed", "failed", "cancelled"]);
17
+ export type AssignmentTerminal = typeof AssignmentTerminal.Type;
18
+
11
19
  /** A reusable child Thread, correlated with its declaration. This value grants no authority. */
12
20
  export const WorkerRef = Schema.Struct({
13
21
  schemaVersion: Schema.Literal(1),
@@ -31,6 +39,14 @@ export const WorkerStarted = Schema.Struct({
31
39
 
32
40
  export type WorkerStarted = typeof WorkerStarted.Type;
33
41
 
42
+ /** Stable owner command. Reusing its key for a different worker conflicts. */
43
+ export const WorkerStop = Schema.Struct({ worker: WorkerRef, idempotencyKey: IdempotencyKey });
44
+ export type WorkerStop = typeof WorkerStop.Type;
45
+
46
+ /** The inbox is sealed and active execution has released ownership. External actions are not undone. */
47
+ export const WorkerStopped = WorkerStop;
48
+ export type WorkerStopped = typeof WorkerStopped.Type;
49
+
34
50
  /** A host-authorized Run allowance is independent of the immutable delegation lineage. */
35
51
  export const WorkerBudgetScope = Schema.Literals(["source-subtree", "worker-run"]);
36
52
  export type WorkerBudgetScope = typeof WorkerBudgetScope.Type;
@@ -63,11 +79,50 @@ export const WorkerContext = Schema.Struct({
63
79
 
64
80
  export type WorkerContext = typeof WorkerContext.Type;
65
81
 
82
+ /** Admission identity is distinct from canonical input application. */
83
+ export const WorkerInput = Schema.Struct({ receipt: Receipt, messageId: IdempotencyKey });
84
+ export type WorkerInput = typeof WorkerInput.Type;
85
+
86
+ export const WorkerAppliedInput = Schema.Struct({
87
+ ...WorkerInput.fields,
88
+ runId: RunId,
89
+ sequence: Schema.Natural,
90
+ });
91
+
92
+ /** A Run outcome is not assignment completion. Interpret only a Definition's disposition. */
93
+ export const WorkerRun = Schema.Struct({
94
+ runId: RunId,
95
+ hostReceipt: Receipt,
96
+ outcome: Schema.NullOr(Schema.Literals(["completed", "failed", "aborted"])),
97
+ disposition: Schema.NullOr(Schema.Json),
98
+ });
99
+
66
100
  /** Bounded durable listing data; a latest Receipt never substitutes for a requested Receipt. */
67
101
  export const WorkerSummary = Schema.Struct({
68
102
  worker: WorkerRef,
69
103
  latestReceipt: Schema.NullOr(Receipt),
70
- state: Schema.Literals(["starting", "active", "idle"]),
104
+ /** stopping/stopped identify an owner-issued worker stop, never an ordinary Receipt abort. */
105
+ state: Schema.Literals([
106
+ "starting",
107
+ "active",
108
+ "idle",
109
+ "stopping",
110
+ "stopped",
111
+ "completed",
112
+ "failed",
113
+ "cancelled",
114
+ ]),
115
+ acceptedInput: Schema.NullOr(WorkerInput),
116
+ appliedInput: Schema.NullOr(WorkerAppliedInput),
117
+ run: Schema.NullOr(WorkerRun),
118
+ /** One retained unadmitted input, if any; its state is independent of destination execution. */
119
+ pendingDelivery: Schema.NullOr(MessageStatus),
120
+ /** Consistent destination facts; pending delivery has its own source-owned version. */
121
+ watermark: Schema.Struct({
122
+ canonicalSequence: Schema.Natural,
123
+ acceptedQueueSequence: Schema.Natural,
124
+ pendingDeliveryVersion: Schema.NullOr(Schema.Natural),
125
+ }),
71
126
  });
72
127
 
73
128
  export type WorkerSummary = typeof WorkerSummary.Type;
@@ -107,6 +162,7 @@ export class WorkerError extends Schema.TaggedError<WorkerError>()("WorkerError"
107
162
  "await",
108
163
  "list",
109
164
  "cancel",
165
+ "stop",
110
166
  ]),
111
167
  reason: Schema.Literals([
112
168
  "denied",
@@ -6965,6 +6965,8 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
6965
6965
  history: pending === undefined ? journal.historyBefore : resumeProjection.historyBefore,
6966
6966
  onHistory,
6967
6967
  input,
6968
+ // Worker corrections drain together at safe seams, bounded by MAX_JOIN_DRAIN.
6969
+ commandDrainPolicy: submission.workerAdmission === undefined ? "one" : "all",
6968
6970
  ...(journal.committedTurns > 0 || Schema.is(FrameworkMessage)(submission.messageAdmission)
6969
6971
  ? { retainedInput: submission.inputPayload }
6970
6972
  : {}),
@@ -57,6 +57,10 @@ export const DurableRuntimeFailpointLocation = Schema.Literals([
57
57
  "subagent:after-join-append",
58
58
  "subagent:after-release-pending",
59
59
  "subagent:after-release",
60
+ "worker:before-stop-append",
61
+ "worker:after-stop-append",
62
+ "worker:before-stop-seal",
63
+ "worker:after-stop-seal",
60
64
  "worker:before-source-append",
61
65
  "worker:after-source-append",
62
66
  "worker:before-origin-append",