effect-agent 0.1.0-beta.95 → 0.1.0-beta.97

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 (124) hide show
  1. package/dist/{AgentRuntime-CufqQ4JM.d.mts → AgentRuntime-B64362Id.d.mts} +2 -2
  2. package/dist/AgentRuntime-Cdvqw7l_.mjs.map +1 -1
  3. package/dist/{DurableAgentRuntime-BaGsWDHO.mjs → DurableAgentRuntime-DbUvZHDZ.mjs} +82 -66
  4. package/dist/DurableAgentRuntime-DbUvZHDZ.mjs.map +1 -0
  5. package/dist/DurableFailpoint-DQJet828.d.mts +41 -0
  6. package/dist/{EventSource-DVfX1GRH.d.mts → EventSource-D6PAAEyK.d.mts} +3 -3
  7. package/dist/{PreparedInputAdmission-DoWaMC2R.d.mts → PreparedInputAdmission-omMbwd--.d.mts} +4 -4
  8. package/dist/{Records-CsEsSW2o.mjs → Records-BAutSSnJ.mjs} +18 -5
  9. package/dist/Records-BAutSSnJ.mjs.map +1 -0
  10. package/dist/{Records-B84j3Jq_.d.mts → Records-CV49DgQK.d.mts} +90 -16
  11. package/dist/{RunJournal-yYpUlTOE.mjs → RunJournal-DRRRZmG7.mjs} +8 -3
  12. package/dist/RunJournal-DRRRZmG7.mjs.map +1 -0
  13. package/dist/{RunOptions-CE-G3niT.d.mts → RunOptions-Clj8cLsp.d.mts} +4 -4
  14. package/dist/{Schedule-DCYBfhgT.d.mts → Schedule-DePbGfgd.d.mts} +2 -2
  15. package/dist/{Scheduling-CUuYc3-D.mjs → Scheduling-C3QpYn0W.mjs} +2 -2
  16. package/dist/{Scheduling-CUuYc3-D.mjs.map → Scheduling-C3QpYn0W.mjs.map} +1 -1
  17. package/dist/{Subagent-DscbtbNY.d.mts → Subagent-Bm1dRecN.d.mts} +3 -3
  18. package/dist/{Subscription-C8IHdmFk.d.mts → Subscription-BR_8Cxh3.d.mts} +3 -3
  19. package/dist/{SubscriptionInput-DhM3jUW2.d.mts → SubscriptionInput-B95sQbuk.d.mts} +3 -3
  20. package/dist/agent-registration-CXGDwvJH.mjs +379 -0
  21. package/dist/agent-registration-CXGDwvJH.mjs.map +1 -0
  22. package/dist/capabilities/Commands.d.mts +1 -1
  23. package/dist/capabilities/RunHooks.d.mts +1 -1
  24. package/dist/capabilities/Subagent.d.mts +1 -1
  25. package/dist/durable/ActivityStore.d.mts +1 -1
  26. package/dist/durable/ActivityStore.mjs +1 -1
  27. package/dist/durable/Admin.d.mts +1 -1
  28. package/dist/durable/Admin.mjs +1 -1
  29. package/dist/durable/AgentRegistration.d.mts +2 -2
  30. package/dist/durable/AgentRegistration.mjs +7 -3
  31. package/dist/durable/AgentRegistration.mjs.map +1 -1
  32. package/dist/durable/Certification.d.mts +2 -2
  33. package/dist/durable/CommittedActivity.d.mts +1 -1
  34. package/dist/durable/CommittedActivity.mjs +1 -1
  35. package/dist/durable/Digest.d.mts +1 -1
  36. package/dist/durable/Digest.mjs +1 -1
  37. package/dist/durable/DurableAgentRuntime.d.mts +1 -1
  38. package/dist/durable/DurableAgentRuntime.mjs +1 -1
  39. package/dist/durable/DurableFailpoint.d.mts +1 -1
  40. package/dist/durable/DurableFailpoint.mjs +2 -0
  41. package/dist/durable/DurableFailpoint.mjs.map +1 -1
  42. package/dist/durable/DurableFailpointTestControl.d.mts +1 -1
  43. package/dist/durable/EventSource.d.mts +1 -1
  44. package/dist/durable/EventSource.mjs +1 -1
  45. package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
  46. package/dist/durable/GitHubWorkflowSource.mjs +1 -1
  47. package/dist/durable/MessageDelivery.d.mts +3 -3
  48. package/dist/durable/MessageDelivery.mjs +1 -1
  49. package/dist/durable/MessageDeliveryStoreConformance.d.mts +39 -39
  50. package/dist/durable/MessageDeliveryStoreConformance.mjs +1 -1
  51. package/dist/durable/PersistentHistory.d.mts +1 -1
  52. package/dist/durable/PersistentHistory.mjs +2 -2
  53. package/dist/durable/PreparedInputAdmission.d.mts +1 -1
  54. package/dist/durable/Records.d.mts +2 -2
  55. package/dist/durable/Records.mjs +2 -2
  56. package/dist/durable/Recovery.d.mts +1 -1
  57. package/dist/durable/Recovery.mjs +1 -1
  58. package/dist/durable/RunJournal.d.mts +2 -2
  59. package/dist/durable/RunJournal.mjs +2 -2
  60. package/dist/durable/Schedule.d.mts +1 -1
  61. package/dist/durable/Schedule.mjs +1 -1
  62. package/dist/durable/ScheduleStoreConformance.d.mts +1 -1
  63. package/dist/durable/ScheduleStoreConformance.mjs +1 -1
  64. package/dist/durable/ScheduleTransition.d.mts +1 -1
  65. package/dist/durable/ScheduleTransition.mjs +1 -1
  66. package/dist/durable/Scheduling.d.mts +2 -2
  67. package/dist/durable/Scheduling.mjs +1 -1
  68. package/dist/durable/SqlStorageV2Upgrade.d.mts +2 -2
  69. package/dist/durable/SqlStorageV2Upgrade.mjs +1 -1
  70. package/dist/durable/SqlSubscriptionStore.d.mts +2 -2
  71. package/dist/durable/SqlSubscriptionStore.mjs +1 -1
  72. package/dist/durable/SubmissionLedger.d.mts +1 -1
  73. package/dist/durable/SubmissionLedger.mjs +1 -1
  74. package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
  75. package/dist/durable/SubmissionLedgerConformance.mjs +1 -1
  76. package/dist/durable/SubmissionStatus.d.mts +1 -1
  77. package/dist/durable/Subscription.d.mts +1 -1
  78. package/dist/durable/Subscription.mjs +1 -1
  79. package/dist/durable/SubscriptionInput.d.mts +1 -1
  80. package/dist/durable/SubscriptionInput.mjs +2 -2
  81. package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
  82. package/dist/durable/SubscriptionStoreConformance.mjs +1 -1
  83. package/dist/durable/SubscriptionTools.d.mts +3 -3
  84. package/dist/durable/SubscriptionTransition.d.mts +1 -1
  85. package/dist/durable/SubscriptionTransition.mjs +1 -1
  86. package/dist/durable/Subscriptions.d.mts +5 -5
  87. package/dist/durable/Subscriptions.mjs +1 -1
  88. package/dist/durable/ThreadContextHistory.d.mts +1 -1
  89. package/dist/durable/ThreadContextHistory.mjs +1 -1
  90. package/dist/durable/ThreadContextHistoryProjection.d.mts +1 -1
  91. package/dist/durable/ThreadContextHistoryProjection.mjs +1 -1
  92. package/dist/durable/ThreadInvariants.d.mts +1 -1
  93. package/dist/durable/ThreadInvariants.mjs +1 -1
  94. package/dist/durable/ThreadProjection.d.mts +1 -1
  95. package/dist/durable/ThreadProjection.mjs +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 +1 -1
  99. package/dist/durable/ThreadStoreConformance.d.mts +1 -1
  100. package/dist/durable/ThreadStoreConformance.mjs +1 -1
  101. package/dist/durable/ToolReconciler.mjs +1 -1
  102. package/dist/durable/WorkerHost.d.mts +1 -1
  103. package/dist/engine/AgentRuntime.d.mts +1 -1
  104. package/dist/engine/RunOptions.d.mts +1 -1
  105. package/dist/engine/RunOptions.mjs.map +1 -1
  106. package/dist/index.d.mts +10 -10
  107. package/dist/index.mjs +4 -4
  108. package/package.json +1 -1
  109. package/src/durable/AgentRegistration.ts +5 -0
  110. package/src/durable/DurableAgentRuntime.ts +155 -84
  111. package/src/durable/DurableFailpoint.ts +2 -0
  112. package/src/durable/Records.ts +19 -2
  113. package/src/durable/RunJournal.ts +6 -0
  114. package/src/durable/internal/agent-registration.ts +427 -14
  115. package/src/durable/internal/messaging-host.ts +3 -6
  116. package/src/durable/internal/worker-host.ts +114 -88
  117. package/src/engine/RunOptions.ts +3 -3
  118. package/src/engine/internal/agent-runtime.ts +3 -4
  119. package/dist/DurableAgentRuntime-BaGsWDHO.mjs.map +0 -1
  120. package/dist/DurableFailpoint-Oinuuedm.d.mts +0 -41
  121. package/dist/Records-CsEsSW2o.mjs.map +0 -1
  122. package/dist/RunJournal-yYpUlTOE.mjs.map +0 -1
  123. package/dist/agent-registration-CWDMOAZA.mjs +0 -172
  124. package/dist/agent-registration-CWDMOAZA.mjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -61,7 +61,7 @@ import { t as ToolDiscovery_exports } from "./capabilities/ToolDiscovery.mjs";
61
61
  import { t as ToolExposure_exports } from "./ToolExposure.mjs";
62
62
  import { t as WebCapture_exports } from "./capabilities/WebCapture.mjs";
63
63
  import { t as WebSearch_exports } from "./capabilities/WebSearch.mjs";
64
- import { A as Records_exports } from "./Records-CsEsSW2o.mjs";
64
+ import { A as Records_exports } from "./Records-BAutSSnJ.mjs";
65
65
  import { t as ActivityStore_exports } from "./durable/ActivityStore.mjs";
66
66
  import { t as SubmissionLedger_exports } from "./durable/SubmissionLedger.mjs";
67
67
  import { t as Recovery_exports } from "./durable/Recovery.mjs";
@@ -75,8 +75,8 @@ import { t as Schedule_exports } from "./durable/Schedule.mjs";
75
75
  import { t as PreparedInputAdmission_exports } from "./durable/PreparedInputAdmission.mjs";
76
76
  import { t as Subscription_exports } from "./durable/Subscription.mjs";
77
77
  import { t as MessageDelivery_exports } from "./durable/MessageDelivery.mjs";
78
- import { n as DurableAgentRuntime_exports } from "./DurableAgentRuntime-BaGsWDHO.mjs";
79
- import { n as RunJournal_exports } from "./RunJournal-yYpUlTOE.mjs";
78
+ import { n as DurableAgentRuntime_exports } from "./DurableAgentRuntime-DbUvZHDZ.mjs";
79
+ import { n as RunJournal_exports } from "./RunJournal-DRRRZmG7.mjs";
80
80
  import { t as WorkerHost_exports } from "./durable/WorkerHost.mjs";
81
81
  import { t as OperationAuthorizer_exports } from "./durable/OperationAuthorizer.mjs";
82
82
  import { t as SubmissionStatus_exports } from "./durable/SubmissionStatus.mjs";
@@ -86,7 +86,7 @@ import { t as WakeScheduler_exports } from "./durable/WakeScheduler.mjs";
86
86
  import { t as EventSource_exports } from "./durable/EventSource.mjs";
87
87
  import { t as PersistentHistory_exports } from "./durable/PersistentHistory.mjs";
88
88
  import { t as ScheduleTransition_exports } from "./durable/ScheduleTransition.mjs";
89
- import { i as Scheduling_exports } from "./Scheduling-CUuYc3-D.mjs";
89
+ import { i as Scheduling_exports } from "./Scheduling-C3QpYn0W.mjs";
90
90
  import { t as SubscriptionInput_exports } from "./durable/SubscriptionInput.mjs";
91
91
  import { t as Subscriptions_exports } from "./durable/Subscriptions.mjs";
92
92
  import { t as SubscriptionTools_exports } from "./durable/SubscriptionTools.mjs";
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"effect-agent","version":"0.1.0-beta.95","devDependencies":{"@effect/platform-node":"4.0.0-rc.115","@effect/vitest":"4.0.0-rc.115","effect":"4.0.0-rc.115","typescript":"7.0.2","vite-plus":"0.3.0"},"peerDependencies":{"effect":"^4.0.0-rc.115"},"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"},"./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-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.97","devDependencies":{"@effect/platform-node":"4.0.0-rc.115","@effect/vitest":"4.0.0-rc.115","effect":"4.0.0-rc.115","typescript":"7.0.2","vite-plus":"0.3.0"},"peerDependencies":{"effect":"^4.0.0-rc.115"},"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"},"./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-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"}}
@@ -5,6 +5,11 @@ export {
5
5
  DurableWorkerBinding,
6
6
  compileRegistrations,
7
7
  definitionDigestsEqual,
8
+ bindingSupports,
9
+ BindingManifest,
10
+ makeBindingManifest,
11
+ compileBindingManifest,
12
+ type ReplayVersions,
8
13
  type AgentRegistration,
9
14
  type AgentAttemptContext,
10
15
  type ExecutableAgentBinding,
@@ -139,6 +139,7 @@ import {
139
139
  BindingUnavailable,
140
140
  compileRegistrations,
141
141
  definitionDigestsEqual,
142
+ bindingSupports,
142
143
  type AgentRegistration,
143
144
  type DurableBindingFailure,
144
145
  makeLegacyWorkerBinding,
@@ -184,6 +185,7 @@ import {
184
185
  RecordId,
185
186
  RepairAnnotated,
186
187
  RunStartedRecord,
188
+ RunDurationExhausted,
187
189
  SettlementFailureDiagnostic,
188
190
  SubagentJoined,
189
191
  SubagentLineageRecorded,
@@ -235,6 +237,8 @@ import {
235
237
  runIdForSubmission,
236
238
  runStartedBatchId,
237
239
  runStartedRecordId,
240
+ runDurationRecordId,
241
+ runDurationBatchId,
238
242
  subagentJoinBatchId,
239
243
  subagentJoinedRecordId,
240
244
  subagentLineageBatchId,
@@ -2551,13 +2555,10 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
2551
2555
  const recordId = runStartedRecordId(runId);
2552
2556
  const existing = yield* canonicalRunStartFromRecords(records, runId);
2553
2557
  let start: RecordEnvelope;
2558
+ let allowance = maxDurationMillis;
2554
2559
 
2555
2560
  if (existing !== undefined && existing.payload._tag === "RunStarted") {
2556
- if (existing.payload.maxDurationMillis !== maxDurationMillis) {
2557
- return yield* RunJournalError.make({
2558
- message: `Run ${runId} started with a ${existing.payload.maxDurationMillis}ms duration allowance; the replacement Binding supplies ${maxDurationMillis}ms`,
2559
- });
2560
- }
2561
+ allowance = existing.payload.maxDurationMillis;
2561
2562
  start = existing;
2562
2563
  } else {
2563
2564
  const executionStarted = records.some(
@@ -2567,7 +2568,7 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
2567
2568
 
2568
2569
  if (executionStarted) {
2569
2570
  return yield* RunJournalError.make({
2570
- message: `Run ${runId} has execution records but no canonical start; reset incompatible private-development data`,
2571
+ message: `Run ${runId} has execution records but no canonical start; retain the request for evidence repair`,
2571
2572
  });
2572
2573
  }
2573
2574
  start = yield* makeEnvelope(
@@ -2588,7 +2589,14 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
2588
2589
 
2589
2590
  return {
2590
2591
  startedAt: start.createdAt,
2591
- deadline: DateTime.addDuration(start.createdAt, Duration.millis(maxDurationMillis)),
2592
+ // Downtime is not execution. Reuse the original per-Attempt allowance without
2593
+ // moving the Run start or resetting journaled turn, Tool or cost accounting.
2594
+ deadline: records.some(
2595
+ ({ record }) =>
2596
+ record.payload._tag === "RunDurationExhausted" && record.payload.runId === runId,
2597
+ )
2598
+ ? start.createdAt
2599
+ : DateTime.addDuration(yield* DateTime.now, Duration.millis(allowance)),
2592
2600
  };
2593
2601
  });
2594
2602
 
@@ -7565,6 +7573,27 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
7565
7573
  // lane would strand the repair); a reserved row WITHOUT a canonical join is an open
7566
7574
  // attached-child obligation and the parent never settles across it (spec §13).
7567
7575
  if (outcome._tag === "failed" && outcome.policyLimit === "duration") {
7576
+ const exhaustedId = runDurationRecordId(runIdForSubmission(submissionId));
7577
+
7578
+ if (!(yield* refreshControl()).some(({ record }) => record.recordId === exhaustedId)) {
7579
+ yield* hit("run:before-duration-append");
7580
+ yield* appendBatch(
7581
+ ctx,
7582
+ CanonicalBatch.make({
7583
+ batchId: runDurationBatchId(runIdForSubmission(submissionId)),
7584
+ producerId: config.producerId,
7585
+ records: [
7586
+ yield* makeEnvelope(
7587
+ exhaustedId,
7588
+ RunDurationExhausted.make({
7589
+ runId: runIdForSubmission(submissionId),
7590
+ }),
7591
+ ),
7592
+ ],
7593
+ }),
7594
+ );
7595
+ yield* hit("run:after-duration-append");
7596
+ }
7568
7597
  yield* reconcileExpiredChildren(ctx, submission, yield* Ref.get(tokenRef));
7569
7598
  }
7570
7599
  const openObligation = yield* completeJoinedReleases(submission);
@@ -7601,60 +7630,7 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
7601
7630
  }
7602
7631
  }).pipe(Effect.scoped);
7603
7632
 
7604
- /**
7605
- * Framework-owned Schema-stable `ChildCompatibilityFailure` Settlement for a parent-linked
7606
- * child whose exact Binding cannot be resolved at claim time (spec §11, SUB-023/SUB-032): no
7607
- * application code runs, the child never executes, and the parent joins the bounded failure
7608
- * through the normal verification path. A pre-existing reservation or canonical settlement is
7609
- * completed instead of re-decided.
7610
- */
7611
- const settleChildCompatibility = Effect.fn("DurableAgentRuntime.settleChildCompatibility")(
7612
- function* (
7613
- claim: Claim,
7614
- submission: SubmissionSnapshot,
7615
- failure: DurableBindingFailure,
7616
- ): Effect.fn.Return<Settlement, DurableWorkerFailure> {
7617
- yield* store.materialize(
7618
- ThreadMaterialization.make({
7619
- threadId: submission.threadId,
7620
- producerEpoch: claim.producerEpoch,
7621
- }),
7622
- );
7623
- yield* ensureThreadCreated(submission.threadId, submission.agentId, submission.agentDigests);
7624
- const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);
7625
- const tokenRef = yield* Ref.make(claim.ownershipToken);
7626
- const records = yield* readControl(submission.threadId, [submission.submissionId]);
7627
-
7628
- const recorded = records.some(
7629
- (envelope) =>
7630
- envelope.record.recordId === submissionSettlementRecordId(submission.submissionId),
7631
- );
7632
-
7633
- const snapshot = yield* ledger.loadRecoverySnapshot(
7634
- RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),
7635
- );
7636
-
7637
- if (snapshot.reservation !== undefined) {
7638
- // An earlier pass already reserved the one exact outcome: complete it, never re-decide.
7639
- return yield* completeReservation(ctx, submission, snapshot.reservation, recorded);
7640
- }
7641
-
7642
- const result = yield* Schema.decodeEffect(SettlementFailureDiagnostic)({
7643
- errorTag: "ChildCompatibilityFailure",
7644
- message: boundedText(failure.message),
7645
- }).pipe(Effect.orDie);
7646
-
7647
- return yield* terminalize(ctx, submission, tokenRef, { _tag: "failed", result }, false);
7648
- },
7649
- );
7650
-
7651
- /**
7652
- * Drain one Thread lane under claim-time Binding resolution (plan §1.7): every claimed
7653
- * head resolves through the selected private binding path before any code runs. A refusal
7654
- * writes the framework `ChildCompatibilityFailure` Settlement for a
7655
- * parent-linked child and surfaces the typed refusal (after releasing the claim) for a root —
7656
- * a worker never runs a claimed head against different code (SUB-023).
7657
- */
7633
+ /** A missing compatible binding leaves both roots and children owed, with their claims released. */
7658
7634
  type CapturedWorkerBinding = Effect.Success<ReturnType<typeof makeLegacyWorkerBinding>>;
7659
7635
 
7660
7636
  // Register cleanup before any interruptible work can observe a granted claim. The token
@@ -7692,7 +7668,7 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
7692
7668
  const processThreadHead = (
7693
7669
  resolve: (
7694
7670
  submission: SubmissionSnapshot,
7695
- ) => Effect.Effect<CapturedWorkerBinding, DurableBindingFailure>,
7671
+ ) => Effect.Effect<CapturedWorkerBinding, DurableBindingFailure | DurableWorkerFailure>,
7696
7672
  threadId: ThreadId,
7697
7673
  options?: { readonly yieldAfter?: DateTime.Utc },
7698
7674
  ): Effect.Effect<Option.Option<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>
@@ -7772,14 +7748,6 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
7772
7748
  );
7773
7749
 
7774
7750
  if (resolution._tag === "refused") {
7775
- if (submission.parentLinkage !== undefined) {
7776
- return Option.some(
7777
- yield* settleChildCompatibility(claim, submission, resolution.failure),
7778
- );
7779
- }
7780
-
7781
- // Root Submission: release the claim and surface the typed refusal — the obligation
7782
- // stays visible and no different code ever runs (spec §11).
7783
7751
  return yield* resolution.failure;
7784
7752
  }
7785
7753
 
@@ -7795,7 +7763,7 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
7795
7763
  const drainThread = (
7796
7764
  resolve: (
7797
7765
  submission: SubmissionSnapshot,
7798
- ) => Effect.Effect<CapturedWorkerBinding, DurableBindingFailure>,
7766
+ ) => Effect.Effect<CapturedWorkerBinding, DurableBindingFailure | DurableWorkerFailure>,
7799
7767
  threadId: ThreadId,
7800
7768
  ): Effect.Effect<ReadonlyArray<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>
7801
7769
  Effect.gen(function* () {
@@ -7867,25 +7835,85 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
7867
7835
  );
7868
7836
  });
7869
7837
 
7838
+ const resolveRetainedBinding = Effect.fn("DurableAgentRuntime.resolveRetainedBinding")(function* (
7839
+ submission: SubmissionSnapshot,
7840
+ ) {
7841
+ const exact = registeredBindings.find(
7842
+ (binding) =>
7843
+ binding.agentId === submission.agentId &&
7844
+ definitionDigestsEqual(binding.digests, submission.agentDigests),
7845
+ );
7846
+
7847
+ if (exact !== undefined) return exact;
7848
+
7849
+ const candidates = registeredBindings.filter(
7850
+ (binding) => binding.agentId === submission.agentId,
7851
+ );
7852
+
7853
+ const candidate = candidates[0];
7854
+
7855
+ // A missing/ambiguous registration needs no history read. If every retained Tool contract
7856
+ // is supported, neither does an ordinary additive deployment.
7857
+ if (candidate === undefined || candidates.length !== 1)
7858
+ return yield* resolveWorkerBinding(
7859
+ registeredBindings,
7860
+ submission.agentId,
7861
+ submission.agentDigests,
7862
+ );
7863
+ if (bindingSupports(candidate, submission.agentDigests, undefined, submission.inputPayload))
7864
+ return candidate;
7865
+
7866
+ // A checkpoint can omit a settled batch that still supplies completion projection.
7867
+ // Compatibility reads the bounded authoritative prefix, never a reduced checkpoint.
7868
+ const records = yield* Effect.gen(function* () {
7869
+ const tail = yield* store.inspectTail(
7870
+ ThreadTailRequest.make({ threadId: submission.threadId }),
7871
+ );
7872
+
7873
+ return yield* Stream.runCollect(
7874
+ canonicalRange(submission.threadId, tail.tailSequence).pipe(
7875
+ Stream.filter(controlRecords([submission.submissionId])),
7876
+ ),
7877
+ );
7878
+ }).pipe(Effect.catchTag("ThreadNotMaterialized", () => Effect.succeed([])));
7879
+
7880
+ const completionTools =
7881
+ candidate === undefined
7882
+ ? []
7883
+ : [
7884
+ ...(candidate.definition.completion === undefined
7885
+ ? []
7886
+ : [candidate.definition.completion.tool]),
7887
+ ...(candidate.definition.completionFromTools?.map((entry) => entry.tool) ?? []),
7888
+ ];
7889
+
7890
+ const pending = yield* pendingToolBatchFor(
7891
+ records,
7892
+ runIdForSubmission(submission.submissionId),
7893
+ completionTools,
7894
+ );
7895
+
7896
+ return yield* resolveWorkerBinding(
7897
+ registeredBindings,
7898
+ submission.agentId,
7899
+ submission.agentDigests,
7900
+ pending?.calls
7901
+ .filter((call) => call.providerExecuted !== true || completionTools.includes(call.name))
7902
+ .map((call) => call.name) ?? [],
7903
+ submission.inputPayload,
7904
+ );
7905
+ });
7906
+
7870
7907
  const processThreadResolvedImpl = (
7871
7908
  threadId: ThreadId,
7872
7909
  ): Effect.Effect<ReadonlyArray<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>
7873
- drainThread(
7874
- (submission) =>
7875
- resolveWorkerBinding(registeredBindings, submission.agentId, submission.agentDigests),
7876
- threadId,
7877
- );
7910
+ drainThread(resolveRetainedBinding, threadId);
7878
7911
 
7879
7912
  const processThreadHeadImpl = (
7880
7913
  threadId: ThreadId,
7881
7914
  options?: { readonly yieldAfter?: DateTime.Utc },
7882
7915
  ): Effect.Effect<Option.Option<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>
7883
- processThreadHead(
7884
- (submission) =>
7885
- resolveWorkerBinding(registeredBindings, submission.agentId, submission.agentDigests),
7886
- threadId,
7887
- options,
7888
- );
7916
+ processThreadHead(resolveRetainedBinding, threadId, options);
7889
7917
 
7890
7918
  const claimFor = Effect.fn("DurableAgentRuntime.claimFor")(function* (
7891
7919
  submission: SubmissionSnapshot,
@@ -8311,8 +8339,13 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
8311
8339
  if (
8312
8340
  start?.payload._tag === "RunStarted" &&
8313
8341
  start.payload.runId === runId &&
8314
- (yield* Clock.currentTimeMillis) >=
8315
- DateTime.toEpochMillis(start.createdAt) + start.payload.maxDurationMillis &&
8342
+ (records.some(
8343
+ ({ record }) =>
8344
+ record.payload._tag === "RunDurationExhausted" && record.payload.runId === runId,
8345
+ ) ||
8346
+ (submission.workerAdmission !== undefined &&
8347
+ (yield* Clock.currentTimeMillis) >=
8348
+ submission.workerAdmission.origin.expiresAtMillis)) &&
8316
8349
  (decision._tag === "CompleteChildAdmission" ||
8317
8350
  decision._tag === "RepairSubagentStartLink" ||
8318
8351
  decision._tag === "AwaitChildAdmissionResolution" ||
@@ -9088,6 +9121,44 @@ const make = Effect.fn("DurableAgentRuntime.make")(function* (
9088
9121
  ),
9089
9122
  );
9090
9123
 
9124
+ // Replay metadata is registration authority, never a caller's compatibility assertion.
9125
+ // Frozen native deliveries already proved their original envelope above. Root retries may
9126
+ // reuse only the original row; a new root must name a host-owned contract.
9127
+ if (
9128
+ options.definitions.replay !== undefined &&
9129
+ workerAdmission === undefined &&
9130
+ messageAdmission === undefined &&
9131
+ !registeredBindings.some(
9132
+ (binding) =>
9133
+ binding.agentId === agent.definition.id &&
9134
+ (definitionDigestsEqual(binding.digests, options.definitions) ||
9135
+ binding.retainedManifests?.some((retained) =>
9136
+ definitionDigestsEqual(
9137
+ DefinitionDigests.make({ ...retained.digests, replay: retained.replay }),
9138
+ options.definitions,
9139
+ ),
9140
+ )),
9141
+ )
9142
+ ) {
9143
+ const retained = yield* ledger.lookup(
9144
+ SubmissionLookupByKey.make({
9145
+ threadId: options.threadId,
9146
+ principal: options.principal,
9147
+ idempotencyKey: options.idempotencyKey,
9148
+ }),
9149
+ );
9150
+
9151
+ if (
9152
+ Option.isNone(retained) ||
9153
+ retained.value.agentId !== agent.definition.id ||
9154
+ !definitionDigestsEqual(retained.value.agentDigests, options.definitions)
9155
+ )
9156
+ return yield* AdmissionPolicyError.make({
9157
+ reason: "refused",
9158
+ code: "unregistered-replay-contract",
9159
+ });
9160
+ }
9161
+
9091
9162
  const admitted = yield* ledger.admit(
9092
9163
  yield* Schema.decodeEffect(AdmissionRequest)({
9093
9164
  threadId: options.threadId,
@@ -21,6 +21,8 @@ export const DurableRuntimeFailpointLocation = Schema.Literals([
21
21
  "input:after-canonical-append",
22
22
  "run:before-start-append",
23
23
  "run:after-start-append",
24
+ "run:before-duration-append",
25
+ "run:after-duration-append",
24
26
  "turn:after-canonical-append",
25
27
  "turn:after-response-append",
26
28
  "turn:after-results-append",
@@ -200,13 +200,24 @@ export class DefinitionDigestInput extends Schema.Class<DefinitionDigestInput>(
200
200
  tools: PersistedJson,
201
201
  }) {}
202
202
 
203
- /** Digests make a replay-visible definition/configuration change explicit. */
203
+ /** The contracts a retained Run may decode or execute, independent of its deployment. */
204
+ export class ReplayContract extends Schema.Class<ReplayContract>(
205
+ "@effect-agent/thread/ReplayContract",
206
+ )({
207
+ agent: Digest,
208
+ /** Agent semantics and output/completion codecs; the saved input is checked separately. */
209
+ agentBehavior: Schema.optionalKey(Digest),
210
+ tools: Schema.Record(Schema.String, Digest),
211
+ }) {}
212
+
213
+ /** Digests identify admission exactly; replay contracts separately authorize continuation. */
204
214
  export class DefinitionDigests extends Schema.Class<DefinitionDigests>(
205
215
  "@effect-agent/thread/DefinitionDigests",
206
216
  )({
207
217
  agent: Digest,
208
218
  model: Digest,
209
219
  tools: Digest,
220
+ replay: Schema.optionalKey(ReplayContract),
210
221
  }) {}
211
222
 
212
223
  export class ThreadCreated extends Schema.TaggedClass<ThreadCreated>(
@@ -230,7 +241,7 @@ export class UserInputRecorded extends Schema.TaggedClass<UserInputRecorded>(
230
241
  messageAdmission: Schema.optionalKey(InputMessage),
231
242
  }) {}
232
243
 
233
- /** Immutable clock and duration allowance for one logical Run, before any agent execution. */
244
+ /** Immutable Run start and per-Attempt duration allowance, before any agent execution. */
234
245
  export class RunStartedRecord extends Schema.TaggedClass<RunStartedRecord>(
235
246
  "@effect-agent/thread/RunStartedRecord",
236
247
  )("RunStarted", {
@@ -240,6 +251,11 @@ export class RunStartedRecord extends Schema.TaggedClass<RunStartedRecord>(
240
251
  maxDurationMillis: Schema.Finite.check(Schema.isGreaterThan(0)),
241
252
  }) {}
242
253
 
254
+ /** An active Attempt exhausted its execution allowance; downtime alone never writes this. */
255
+ export class RunDurationExhausted extends Schema.TaggedClass<RunDurationExhausted>(
256
+ "@effect-agent/thread/RunDurationExhausted",
257
+ )("RunDurationExhausted", { runId: RunId }) {}
258
+
243
259
  const PersistedPromptMessages = Schema.toEncoded(Prompt.Prompt);
244
260
  const isPersistedPromptMessages = Schema.is(PersistedPromptMessages);
245
261
 
@@ -940,6 +956,7 @@ export const CanonicalRecordPayload = Schema.Union([
940
956
  ThreadCreated,
941
957
  UserInputRecorded,
942
958
  RunStartedRecord,
959
+ RunDurationExhausted,
943
960
  RunPolicyUsageReserved,
944
961
  ModelCompleted,
945
962
  ModelResponseRecorded,
@@ -62,6 +62,11 @@ export const runStartedRecordId = (runId: RunId): RecordId => decodeRecordId(`ru
62
62
 
63
63
  export const runStartedBatchId = (runId: RunId): BatchId => decodeBatchId(`run-start:${runId}`);
64
64
 
65
+ export const runDurationRecordId = (runId: RunId): RecordId =>
66
+ decodeRecordId(`run-duration:${runId}`);
67
+
68
+ export const runDurationBatchId = (runId: RunId): BatchId => decodeBatchId(`run-duration:${runId}`);
69
+
65
70
  /** Deterministic Turn identity: Attempt-independent for one (Run, canonical turn) pair. */
66
71
  export const turnIdForRun = (runId: RunId, turn: number): TurnId =>
67
72
  decodeTurnId(`turn:${runId}:${turn}`);
@@ -488,6 +493,7 @@ const withoutApplicationToolCallMessages = (prompt: Prompt.Prompt): ReadonlyArra
488
493
  const PROMPT_TRANSPARENT_TAGS: ReadonlySet<string> = new Set([
489
494
  "RunPolicyUsageReserved",
490
495
  "RunStarted",
496
+ "RunDurationExhausted",
491
497
  "ToolCallPrepared",
492
498
  "ToolCallUnknown",
493
499
  "ToolCallResolved",