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

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 (67) hide show
  1. package/dist/{AgentRuntime-DyZv8uu2.d.mts → AgentRuntime-BUxDdLpw.d.mts} +2 -2
  2. package/dist/{DurableAgentRuntime-tNrkJZNo.mjs → DurableAgentRuntime-DQqxmn2h.mjs} +39 -10
  3. package/dist/DurableAgentRuntime-DQqxmn2h.mjs.map +1 -0
  4. package/dist/{EventSource-DPRdlvhV.d.mts → EventSource-hk1sVGsO.d.mts} +3 -3
  5. package/dist/{PreparedInputAdmission-DqQUjA9k.d.mts → PreparedInputAdmission-DXvFh8zZ.d.mts} +4 -4
  6. package/dist/{Records-Byeb70tt.d.mts → Records-3uLornLz.d.mts} +3 -3
  7. package/dist/{Schedule-krSnBcbU.d.mts → Schedule-yVT2CmKT.d.mts} +2 -2
  8. package/dist/{Subagent-gw9KD6eb.d.mts → Subagent-CNik9RiA.d.mts} +3 -3
  9. package/dist/{Subagent-Di8EEjWZ.mjs → Subagent-DCrB7an7.mjs} +2 -3
  10. package/dist/Subagent-DCrB7an7.mjs.map +1 -0
  11. package/dist/{SubagentHost-P9zB_TfV.d.mts → SubagentHost-4WB8Hj0C.d.mts} +13 -4
  12. package/dist/{Subscription-Xnwd42Sm.d.mts → Subscription-CCvcJGlB.d.mts} +3 -3
  13. package/dist/{SubscriptionInput-CqtJ58vl.d.mts → SubscriptionInput-BlE85a8M.d.mts} +3 -3
  14. package/dist/capabilities/Subagent.d.mts +1 -1
  15. package/dist/capabilities/Subagent.mjs +1 -1
  16. package/dist/durable/ActivityStore.d.mts +1 -1
  17. package/dist/durable/Admin.d.mts +1 -1
  18. package/dist/durable/AgentRegistration.d.mts +1 -1
  19. package/dist/durable/Certification.d.mts +1 -1
  20. package/dist/durable/CommittedActivity.d.mts +1 -1
  21. package/dist/durable/Digest.d.mts +1 -1
  22. package/dist/durable/DurableAgentRuntime.d.mts +1 -1
  23. package/dist/durable/DurableAgentRuntime.mjs +1 -1
  24. package/dist/durable/EventSource.d.mts +1 -1
  25. package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
  26. package/dist/durable/MessageDelivery.d.mts +3 -3
  27. package/dist/durable/MessageDeliveryStoreConformance.d.mts +39 -39
  28. package/dist/durable/PersistentHistory.d.mts +1 -1
  29. package/dist/durable/PreparedInputAdmission.d.mts +1 -1
  30. package/dist/durable/Records.d.mts +1 -1
  31. package/dist/durable/Recovery.d.mts +1 -1
  32. package/dist/durable/RunJournal.d.mts +1 -1
  33. package/dist/durable/Schedule.d.mts +1 -1
  34. package/dist/durable/ScheduleStoreConformance.d.mts +1 -1
  35. package/dist/durable/ScheduleTransition.d.mts +1 -1
  36. package/dist/durable/Scheduling.d.mts +2 -2
  37. package/dist/durable/SqlStorageV2Upgrade.d.mts +2 -2
  38. package/dist/durable/SqlSubscriptionStore.d.mts +2 -2
  39. package/dist/durable/SqlThreadNativeReads.d.mts +1 -1
  40. package/dist/durable/SubmissionLedger.d.mts +1 -1
  41. package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
  42. package/dist/durable/SubmissionStatus.d.mts +1 -1
  43. package/dist/durable/Subscription.d.mts +1 -1
  44. package/dist/durable/SubscriptionInput.d.mts +1 -1
  45. package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
  46. package/dist/durable/SubscriptionTools.d.mts +3 -3
  47. package/dist/durable/SubscriptionTransition.d.mts +1 -1
  48. package/dist/durable/Subscriptions.d.mts +5 -5
  49. package/dist/durable/ThreadContextHistory.d.mts +1 -1
  50. package/dist/durable/ThreadContextHistoryProjection.d.mts +1 -1
  51. package/dist/durable/ThreadInvariants.d.mts +1 -1
  52. package/dist/durable/ThreadProjection.d.mts +1 -1
  53. package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
  54. package/dist/durable/ThreadStore.d.mts +1 -1
  55. package/dist/durable/ThreadStoreConformance.d.mts +1 -1
  56. package/dist/durable/WorkerHost.d.mts +1 -1
  57. package/dist/engine/AgentRuntime.d.mts +1 -1
  58. package/dist/engine/SubagentHost.d.mts +2 -2
  59. package/dist/engine/SubagentHost.mjs.map +1 -1
  60. package/dist/index.d.mts +9 -9
  61. package/dist/index.mjs +2 -2
  62. package/package.json +1 -1
  63. package/src/capabilities/internal/subagent-background.ts +1 -3
  64. package/src/durable/internal/worker-host.ts +76 -18
  65. package/src/engine/SubagentHost.ts +16 -3
  66. package/dist/DurableAgentRuntime-tNrkJZNo.mjs.map +0 -1
  67. package/dist/Subagent-Di8EEjWZ.mjs.map +0 -1
package/dist/index.d.mts CHANGED
@@ -46,28 +46,28 @@ import { t as MemoryRevalidation_d_exports } from "./core/MemoryRevalidation.mjs
46
46
  import { t as SemanticMemoryIndex_d_exports } from "./core/SemanticMemoryIndex.mjs";
47
47
  import { t as SemanticMemoryRevalidation_d_exports } from "./core/SemanticMemoryRevalidation.mjs";
48
48
  import { t as SemanticMemory_d_exports } from "./capabilities/SemanticMemory.mjs";
49
- import { o as SubagentHost_d_exports } from "./SubagentHost-P9zB_TfV.mjs";
50
- import { t as AgentRuntime_d_exports } from "./AgentRuntime-DyZv8uu2.mjs";
49
+ import { s as SubagentHost_d_exports } from "./SubagentHost-4WB8Hj0C.mjs";
50
+ import { t as AgentRuntime_d_exports } from "./AgentRuntime-BUxDdLpw.mjs";
51
51
  import { i as RunEventSink_d_exports } from "./RunEventSink-D5aVhISG.mjs";
52
- import { v as Subagent_d_exports } from "./Subagent-gw9KD6eb.mjs";
52
+ import { v as Subagent_d_exports } from "./Subagent-CNik9RiA.mjs";
53
53
  import { t as ToolDiscovery_d_exports } from "./capabilities/ToolDiscovery.mjs";
54
54
  import { D as PageCapture_d_exports } from "./PageCapture-Df8Xwskw.mjs";
55
55
  import { t as WebCapture_d_exports } from "./capabilities/WebCapture.mjs";
56
56
  import { t as WebSearch_d_exports } from "./capabilities/WebSearch.mjs";
57
57
  import { t as IdGenerator_d_exports } from "./core/IdGenerator.mjs";
58
58
  import { t as Memory_d_exports } from "./core/Memory.mjs";
59
- import { Bn as RunJournal_d_exports, Br as Admin_d_exports, Co as SubmissionLedger_d_exports, Fn as SubmissionStatus_d_exports, N as Records_d_exports, Qi as Recovery_d_exports, Si as Digest_d_exports, li as AgentRegistration_d_exports, wn as ThreadStore_d_exports, yt as DurableAgentRuntime_d_exports } from "./Records-Byeb70tt.mjs";
59
+ import { Bn as RunJournal_d_exports, Br as Admin_d_exports, Co as SubmissionLedger_d_exports, Fn as SubmissionStatus_d_exports, N as Records_d_exports, Qi as Recovery_d_exports, Si as Digest_d_exports, li as AgentRegistration_d_exports, wn as ThreadStore_d_exports, yt as DurableAgentRuntime_d_exports } from "./Records-3uLornLz.mjs";
60
60
  import { t as DurableFailpoint_d_exports } from "./DurableFailpoint-Cnr3wx1L.mjs";
61
61
  import { a as OperationAuthorizer_d_exports } from "./OperationAuthorizer-TzcQtpX5.mjs";
62
62
  import { l as ToolReconciler_d_exports } from "./ToolReconciler-BmVRAHKs.mjs";
63
63
  import { n as WakeScheduler_d_exports } from "./WakeScheduler-EjUF-GhC.mjs";
64
64
  import { t as ActivityStore_d_exports } from "./durable/ActivityStore.mjs";
65
65
  import { t as CommittedActivity_d_exports } from "./durable/CommittedActivity.mjs";
66
- import { R as Schedule_d_exports } from "./Schedule-krSnBcbU.mjs";
67
- import { k as Subscription_d_exports } from "./Subscription-Xnwd42Sm.mjs";
68
- import { n as EventSource_d_exports } from "./EventSource-DPRdlvhV.mjs";
69
- import { n as PreparedInputAdmission_d_exports } from "./PreparedInputAdmission-DqQUjA9k.mjs";
70
- import { r as SubscriptionInput_d_exports } from "./SubscriptionInput-CqtJ58vl.mjs";
66
+ import { R as Schedule_d_exports } from "./Schedule-yVT2CmKT.mjs";
67
+ import { k as Subscription_d_exports } from "./Subscription-CCvcJGlB.mjs";
68
+ import { n as EventSource_d_exports } from "./EventSource-hk1sVGsO.mjs";
69
+ import { n as PreparedInputAdmission_d_exports } from "./PreparedInputAdmission-DXvFh8zZ.mjs";
70
+ import { r as SubscriptionInput_d_exports } from "./SubscriptionInput-BlE85a8M.mjs";
71
71
  import { t as Subscriptions_d_exports } from "./durable/Subscriptions.mjs";
72
72
  import { t as MessageDelivery_d_exports } from "./durable/MessageDelivery.mjs";
73
73
  import { t as PersistentHistory_d_exports } from "./durable/PersistentHistory.mjs";
package/dist/index.mjs CHANGED
@@ -57,7 +57,7 @@ import { t as RunHooks_exports } from "./capabilities/RunHooks.mjs";
57
57
  import { t as SemanticMemoryIndex_exports } from "./core/SemanticMemoryIndex.mjs";
58
58
  import { t as SemanticMemoryRevalidation_exports } from "./core/SemanticMemoryRevalidation.mjs";
59
59
  import { t as SemanticMemory_exports } from "./capabilities/SemanticMemory.mjs";
60
- import { r as Subagent_exports } from "./Subagent-Di8EEjWZ.mjs";
60
+ import { r as Subagent_exports } from "./Subagent-DCrB7an7.mjs";
61
61
  import { t as ToolDiscovery_exports } from "./capabilities/ToolDiscovery.mjs";
62
62
  import { t as ToolExposure_exports } from "./ToolExposure.mjs";
63
63
  import { t as WebCapture_exports } from "./capabilities/WebCapture.mjs";
@@ -69,7 +69,7 @@ import { t as Recovery_exports } from "./durable/Recovery.mjs";
69
69
  import { t as Admin_exports } from "./durable/Admin.mjs";
70
70
  import { t as Digest_exports } from "./durable/Digest.mjs";
71
71
  import { t as AgentRegistration_exports } from "./durable/AgentRegistration.mjs";
72
- import { n as DurableAgentRuntime_exports } from "./DurableAgentRuntime-tNrkJZNo.mjs";
72
+ import { n as DurableAgentRuntime_exports } from "./DurableAgentRuntime-DQqxmn2h.mjs";
73
73
  import { n as RunJournal_exports } from "./RunJournal-BXrq0VIK.mjs";
74
74
  import { t as ThreadStore_exports } from "./durable/ThreadStore.mjs";
75
75
  import { t as CommittedActivity_exports } from "./durable/CommittedActivity.mjs";
package/package.json CHANGED
@@ -1 +1 @@
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"}}
1
+ {"name":"effect-agent","version":"0.1.0-beta.116","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"}}
@@ -366,13 +366,11 @@ const operations = <
366
366
  Effect.mapError((cause) => projectionFailure("input", cause)),
367
367
  );
368
368
 
369
- const encodedInput = yield* prepare(parameters, caller);
370
-
371
369
  const delivery = yield* validateDelivery(
372
370
  validated,
373
371
  yield* service.followUp({
374
372
  encodedParameters,
375
- encodedInput,
373
+ prepare: prepare(parameters, caller).pipe(Effect.map((encodedInput) => ({ encodedInput }))),
376
374
  worker: validated,
377
375
  target: declaration.target,
378
376
  idempotencyKey: key,
@@ -15,7 +15,7 @@ import type * as Agent from "../../core/Agent.ts";
15
15
  import { AgentPolicy } from "../../core/AgentPolicy.ts";
16
16
  import { Update, UpdateError } from "../../core/AgentUpdates.ts";
17
17
  import { ThreadId, type AgentId, type SubmissionId } from "../../core/Identifiers.ts";
18
- import { MessageRef } from "../../core/Messaging.ts";
18
+ import { MessageRef, type MessageStatus } from "../../core/Messaging.ts";
19
19
  import { IdempotencyKey, Receipt } from "../../core/Receipt.ts";
20
20
  import { SubagentDelegationCaps, SubagentGrant } from "../../core/SubagentContract.ts";
21
21
  import {
@@ -33,6 +33,8 @@ import {
33
33
  import {
34
34
  type SubagentHost,
35
35
  type DeferredStartWorkerRequest,
36
+ type DeferredFollowUpWorkerRequest,
37
+ type FollowUpWorkerRequest,
36
38
  type StartWorkerRequest,
37
39
  type WorkerObservation,
38
40
  type WorkerReceiptRequest,
@@ -2363,36 +2365,92 @@ export const makeWorkerRuntime = Effect.fn("WorkerHost.make")(function* (
2363
2365
  ),
2364
2366
  );
2365
2367
  }),
2366
- followUp: Effect.fn("WorkerHost.followUp")(function* (request) {
2367
- const principal = yield* authorize("followUp", "send", request.worker);
2368
- const origin = yield* findOrigin(request.worker, request.target, "followUp");
2368
+ followUp: Effect.fn("WorkerHost.followUp")(function* <E = never, R = never>(
2369
+ command: FollowUpWorkerRequest | DeferredFollowUpWorkerRequest<E, R>,
2370
+ ): Effect.fn.Return<MessageStatus, WorkerError | E, R> {
2371
+ const principal = yield* authorize("followUp", "send", command.worker);
2372
+ const origin = yield* findOrigin(command.worker, command.target, "followUp");
2369
2373
 
2370
- yield* resolveTargetPolicy({
2374
+ const currentPolicy = resolveTargetPolicy({
2371
2375
  _tag: "RetainedWorker",
2372
- definition: request.target,
2376
+ definition: command.target,
2373
2377
  definitions: origin.targetDigests,
2374
2378
  source: origin.source,
2375
2379
  origin,
2376
2380
  });
2377
2381
 
2378
- yield* Schema.decodeUnknownEffect(Schema.toEncoded(request.target.input))(
2379
- request.encodedInput,
2380
- ).pipe(Effect.mapError((cause) => failure("followUp", "corrupt", cause)));
2382
+ yield* currentPolicy;
2381
2383
 
2382
2384
  const messageId = yield* messageIdFor([
2383
2385
  context.source.threadId,
2384
- request.worker.threadId,
2386
+ command.worker.threadId,
2385
2387
  "followUp",
2386
- request.idempotencyKey,
2388
+ command.idempotencyKey,
2387
2389
  ]);
2388
2390
 
2389
- return yield* send(
2390
- origin,
2391
- messageId,
2392
- request.encodedInput,
2393
- request.encodedParameters,
2394
- principal,
2395
- "followUp",
2391
+ if (Option.isNone(deps.deliveries)) return yield* failure("followUp", "unavailable");
2392
+ const deliveries = deps.deliveries.value;
2393
+
2394
+ const retained = () =>
2395
+ deliveries
2396
+ .get({ ownerThreadId: context.source.threadId, messageId })
2397
+ .pipe(Effect.mapError(storageFailure("followUp")));
2398
+
2399
+ const replay = (saved: MessageDeliveryRecord) =>
2400
+ Effect.gen(function* () {
2401
+ const replayPrincipal = yield* authorize("followUp", "send", command.worker);
2402
+
2403
+ yield* currentPolicy;
2404
+
2405
+ return yield* send(
2406
+ origin,
2407
+ messageId,
2408
+ saved.envelope.input,
2409
+ command.encodedParameters,
2410
+ replayPrincipal,
2411
+ "followUp",
2412
+ );
2413
+ });
2414
+
2415
+ const existing = "prepare" in command ? yield* retained() : null;
2416
+
2417
+ if (existing !== null) return yield* replay(existing);
2418
+
2419
+ return yield* Effect.gen(function* () {
2420
+ const request =
2421
+ "prepare" in command ? { ...(yield* command.prepare), ...command } : command;
2422
+
2423
+ yield* Schema.decodeUnknownEffect(Schema.toEncoded(request.target.input))(
2424
+ request.encodedInput,
2425
+ ).pipe(Effect.mapError((cause) => failure("followUp", "corrupt", cause)));
2426
+
2427
+ let sendPrincipal = principal;
2428
+
2429
+ if ("prepare" in command) {
2430
+ // Preparation can yield while authority changes, even when another writer saves equal input.
2431
+ sendPrincipal = yield* authorize("followUp", "send", command.worker);
2432
+ yield* currentPolicy;
2433
+ }
2434
+
2435
+ return yield* send(
2436
+ origin,
2437
+ messageId,
2438
+ request.encodedInput,
2439
+ request.encodedParameters,
2440
+ sendPrincipal,
2441
+ "followUp",
2442
+ );
2443
+ }).pipe(
2444
+ Effect.catch((error) =>
2445
+ Effect.gen(function* () {
2446
+ if (!("prepare" in command)) return yield* Effect.fail(error);
2447
+ // A concurrent first writer can retain the original correction during preparation.
2448
+ // Replay rechecks current authority before reusing its immutable envelope.
2449
+ const saved = yield* retained();
2450
+
2451
+ return saved === null ? yield* Effect.fail(error) : yield* replay(saved);
2452
+ }),
2453
+ ),
2396
2454
  );
2397
2455
  }),
2398
2456
  inspect: Effect.fn("WorkerHost.inspect")(function* (request) {
@@ -70,6 +70,18 @@ export interface FollowUpWorkerRequest {
70
70
  readonly encodedParameters: unknown;
71
71
  }
72
72
 
73
+ /**
74
+ * Like deferred starts, follow-ups prepare only after current authorization and retained-command
75
+ * lookup. Replays compare declared parameters and reuse the original input and worker authority.
76
+ * Preparation must be free of external effects because concurrent first admissions can prepare.
77
+ */
78
+ export interface DeferredFollowUpWorkerRequest<E = never, R = never> extends Omit<
79
+ FollowUpWorkerRequest,
80
+ "encodedInput"
81
+ > {
82
+ readonly prepare: Effect.Effect<Pick<FollowUpWorkerRequest, "encodedInput">, E, R>;
83
+ }
84
+
73
85
  export interface WorkerReceiptRequest {
74
86
  readonly worker: WorkerRef;
75
87
  readonly target: Agent.AnyDefinition;
@@ -157,9 +169,10 @@ export class SubagentHost extends Context.Service<
157
169
  readonly start: <E = never, R = never>(
158
170
  request: StartWorkerRequest | DeferredStartWorkerRequest<E, R>,
159
171
  ) => Effect.Effect<WorkerStarted, WorkerError | E, R>;
160
- readonly followUp: (
161
- request: FollowUpWorkerRequest,
162
- ) => Effect.Effect<MessageStatus, WorkerError>;
172
+ /** Prepared callers retain strict input conflicts; deferred callers replay the saved capture. */
173
+ readonly followUp: <E = never, R = never>(
174
+ request: FollowUpWorkerRequest | DeferredFollowUpWorkerRequest<E, R>,
175
+ ) => Effect.Effect<MessageStatus, WorkerError | E, R>;
163
176
  readonly inspect: (
164
177
  request: WorkerReceiptRequest | WorkerMessageRequest,
165
178
  ) => Effect.Effect<WorkerObservation | MessageStatus, WorkerError>;