effect-agent 0.1.0-beta.9 → 0.1.0-beta.91
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.
- package/dist/Agent-CN0EWRsR.d.mts +226 -0
- package/dist/Agent-RklVROrm.mjs +83 -0
- package/dist/Agent-RklVROrm.mjs.map +1 -0
- package/dist/AgentError-CggcAQ7V.d.mts +101 -0
- package/dist/AgentPolicy-CetmQrf3.d.mts +96 -0
- package/dist/AgentRuntime-CHipL2jG.mjs +4598 -0
- package/dist/AgentRuntime-CHipL2jG.mjs.map +1 -0
- package/dist/AgentRuntime-uxR_a4VM.d.mts +346 -0
- package/dist/AgentUpdates-DMJ-_xow.d.mts +53 -0
- package/dist/ContextCompactor-Dxu5zhOL.d.mts +161 -0
- package/dist/ContextWindow-DRQ5Mbm2.d.mts +58 -0
- package/dist/DurableAgentRuntime-D7gDKGjH.mjs +6368 -0
- package/dist/DurableAgentRuntime-D7gDKGjH.mjs.map +1 -0
- package/dist/DurableFailpoint-Oinuuedm.d.mts +41 -0
- package/dist/DurableStep-Cry_iol4.d.mts +103 -0
- package/dist/Ephemeral.d.mts +22 -0
- package/dist/Ephemeral.mjs +22 -0
- package/dist/Ephemeral.mjs.map +1 -0
- package/dist/EventSource-OqS_P9ug.d.mts +51 -0
- package/dist/Identifiers-CN2s30fF.d.mts +40 -0
- package/dist/MemoryNamespace-BbRW5p71.d.mts +36 -0
- package/dist/MemoryReference-B8Q3UJoJ.d.mts +79 -0
- package/dist/Messaging-CkcIdt4I.d.mts +490 -0
- package/dist/MessagingHost-CRk0kXzT.d.mts +246 -0
- package/dist/MessagingHost-CWi_PP3g.mjs +137 -0
- package/dist/MessagingHost-CWi_PP3g.mjs.map +1 -0
- package/dist/OperationAuthorizer-TzcQtpX5.d.mts +61 -0
- package/dist/Output-D6SkedVx.d.mts +25 -0
- package/dist/PageCapture-Df8Xwskw.d.mts +583 -0
- package/dist/PageScreenshot-BpgZKAxl.d.mts +48 -0
- package/dist/PreparedInputAdmission-C4HbjHgl.d.mts +38 -0
- package/dist/Receipt-BAHyigAF.d.mts +33 -0
- package/dist/Records-BAGkekt8.d.mts +3570 -0
- package/dist/RunEvent-DIrzkjLr.d.mts +460 -0
- package/dist/RunEventSink-D5aVhISG.d.mts +108 -0
- package/dist/RunJournal-Cgg1kNvc.mjs +825 -0
- package/dist/RunJournal-Cgg1kNvc.mjs.map +1 -0
- package/dist/RunOptions-g1aigcKI.d.mts +915 -0
- package/dist/RunPolicyUsage-ClZxyR46.d.mts +21 -0
- package/dist/Sandbox-CEsDWBLq.d.mts +173 -0
- package/dist/Schedule-H3SEYX9g.d.mts +842 -0
- package/dist/Scheduling-C9aIP8zT.mjs +691 -0
- package/dist/Scheduling-C9aIP8zT.mjs.map +1 -0
- package/dist/Subagent-DyfzHNdv.d.mts +826 -0
- package/dist/Subagent-U5qXOFE8.mjs +1469 -0
- package/dist/Subagent-U5qXOFE8.mjs.map +1 -0
- package/dist/SubagentContract-DdT7Cqe6.d.mts +116 -0
- package/dist/SubagentHost-CJUBQlcc.d.mts +140 -0
- package/dist/Subscription-BEP8oQO5.d.mts +921 -0
- package/dist/SubscriptionInput-vAAOBrK7.d.mts +41 -0
- package/dist/Thread-DOBQ0QUY.d.mts +96 -0
- package/dist/ThreadHistory-tS1KwxHR.d.mts +60 -0
- package/dist/ToolBroker-DWs4tZra.d.mts +133 -0
- package/dist/ToolExposure-9uF_Yo0T.mjs +10 -0
- package/dist/ToolExposure-9uF_Yo0T.mjs.map +1 -0
- package/dist/ToolExposure-C93U1sPu.mjs +30 -0
- package/dist/ToolExposure-C93U1sPu.mjs.map +1 -0
- package/dist/ToolExposure-UCN12eCd.d.mts +39 -0
- package/dist/ToolExposure-r2eOWk4F.d.mts +46 -0
- package/dist/ToolExposure.d.mts +8 -0
- package/dist/ToolExposure.mjs +21 -0
- package/dist/ToolExposure.mjs.map +1 -0
- package/dist/ToolReconciler-DQVaJfpE.d.mts +76 -0
- package/dist/ToolResult-DmmgoChv.d.mts +61 -0
- package/dist/Usage-Dx0aknfk.d.mts +121 -0
- package/dist/WakeScheduler-EjUF-GhC.d.mts +56 -0
- package/dist/Worker-CaPYykpe.d.mts +228 -0
- package/dist/agent-registration-CWDMOAZA.mjs +172 -0
- package/dist/agent-registration-CWDMOAZA.mjs.map +1 -0
- package/dist/capabilities/Approval.d.mts +114 -0
- package/dist/capabilities/Approval.mjs +226 -0
- package/dist/capabilities/Approval.mjs.map +1 -0
- package/dist/capabilities/Budget.d.mts +112 -0
- package/dist/capabilities/Budget.mjs +346 -0
- package/dist/capabilities/Budget.mjs.map +1 -0
- package/dist/capabilities/CodeMode.d.mts +157 -0
- package/dist/capabilities/CodeMode.mjs +522 -0
- package/dist/capabilities/CodeMode.mjs.map +1 -0
- package/dist/capabilities/Commands.d.mts +55 -0
- package/dist/capabilities/Commands.mjs +57 -0
- package/dist/capabilities/Commands.mjs.map +1 -0
- package/dist/capabilities/ContextTools.d.mts +321 -0
- package/dist/capabilities/ContextTools.mjs +126 -0
- package/dist/capabilities/ContextTools.mjs.map +1 -0
- package/dist/capabilities/Mcp.d.mts +108 -0
- package/dist/capabilities/Mcp.mjs +260 -0
- package/dist/capabilities/Mcp.mjs.map +1 -0
- package/dist/capabilities/McpClient.d.mts +115 -0
- package/dist/capabilities/McpClient.mjs +506 -0
- package/dist/capabilities/McpClient.mjs.map +1 -0
- package/dist/capabilities/MemoryNotes.d.mts +424 -0
- package/dist/capabilities/MemoryNotes.mjs +128 -0
- package/dist/capabilities/MemoryNotes.mjs.map +1 -0
- package/dist/capabilities/Messaging.d.mts +3 -0
- package/dist/capabilities/Messaging.mjs +151 -0
- package/dist/capabilities/Messaging.mjs.map +1 -0
- package/dist/capabilities/ModelContext.d.mts +89 -0
- package/dist/capabilities/ModelContext.mjs +168 -0
- package/dist/capabilities/ModelContext.mjs.map +1 -0
- package/dist/capabilities/Redaction.d.mts +37 -0
- package/dist/capabilities/Redaction.mjs +104 -0
- package/dist/capabilities/Redaction.mjs.map +1 -0
- package/dist/capabilities/Remembering.d.mts +434 -0
- package/dist/capabilities/Remembering.mjs +290 -0
- package/dist/capabilities/Remembering.mjs.map +1 -0
- package/dist/capabilities/RunHooks.d.mts +82 -0
- package/dist/capabilities/RunHooks.mjs +144 -0
- package/dist/capabilities/RunHooks.mjs.map +1 -0
- package/dist/capabilities/SemanticMemory.d.mts +431 -0
- package/dist/capabilities/SemanticMemory.mjs +315 -0
- package/dist/capabilities/SemanticMemory.mjs.map +1 -0
- package/dist/capabilities/Subagent.d.mts +4 -0
- package/dist/capabilities/Subagent.mjs +5 -0
- package/dist/capabilities/SubagentReservations.d.mts +186 -0
- package/dist/capabilities/SubagentReservations.mjs +479 -0
- package/dist/capabilities/SubagentReservations.mjs.map +1 -0
- package/dist/capabilities/ToolDiscovery.d.mts +109 -0
- package/dist/capabilities/ToolDiscovery.mjs +211 -0
- package/dist/capabilities/ToolDiscovery.mjs.map +1 -0
- package/dist/capabilities/WebCapture.d.mts +163 -0
- package/dist/capabilities/WebCapture.mjs +335 -0
- package/dist/capabilities/WebCapture.mjs.map +1 -0
- package/dist/capabilities/WebSearch.d.mts +71 -0
- package/dist/capabilities/WebSearch.mjs +112 -0
- package/dist/capabilities/WebSearch.mjs.map +1 -0
- package/dist/compaction-C2OTceKw.mjs +505 -0
- package/dist/compaction-C2OTceKw.mjs.map +1 -0
- package/dist/core/Agent.d.mts +2 -0
- package/dist/core/Agent.mjs +2 -0
- package/dist/core/AgentError.d.mts +2 -0
- package/dist/core/AgentError.mjs +117 -0
- package/dist/core/AgentError.mjs.map +1 -0
- package/dist/core/AgentPolicy.d.mts +2 -0
- package/dist/core/AgentPolicy.mjs +94 -0
- package/dist/core/AgentPolicy.mjs.map +1 -0
- package/dist/core/AgentUpdates.d.mts +2 -0
- package/dist/core/AgentUpdates.mjs +63 -0
- package/dist/core/AgentUpdates.mjs.map +1 -0
- package/dist/core/IdGenerator.d.mts +26 -0
- package/dist/core/IdGenerator.mjs +27 -0
- package/dist/core/IdGenerator.mjs.map +1 -0
- package/dist/core/Identifiers.d.mts +2 -0
- package/dist/core/Identifiers.mjs +43 -0
- package/dist/core/Identifiers.mjs.map +1 -0
- package/dist/core/Memory.d.mts +57 -0
- package/dist/core/Memory.mjs +203 -0
- package/dist/core/Memory.mjs.map +1 -0
- package/dist/core/MemoryNamespace.d.mts +2 -0
- package/dist/core/MemoryNamespace.mjs +116 -0
- package/dist/core/MemoryNamespace.mjs.map +1 -0
- package/dist/core/MemoryReference.d.mts +2 -0
- package/dist/core/MemoryReference.mjs +109 -0
- package/dist/core/MemoryReference.mjs.map +1 -0
- package/dist/core/MemoryRevalidation.d.mts +65 -0
- package/dist/core/MemoryRevalidation.mjs +126 -0
- package/dist/core/MemoryRevalidation.mjs.map +1 -0
- package/dist/core/MemoryStore.d.mts +186 -0
- package/dist/core/MemoryStore.mjs +243 -0
- package/dist/core/MemoryStore.mjs.map +1 -0
- package/dist/core/Receipt.d.mts +2 -0
- package/dist/core/Receipt.mjs +36 -0
- package/dist/core/Receipt.mjs.map +1 -0
- package/dist/core/RememberingStore.d.mts +1562 -0
- package/dist/core/RememberingStore.mjs +190 -0
- package/dist/core/RememberingStore.mjs.map +1 -0
- package/dist/core/RunEvent.d.mts +2 -0
- package/dist/core/RunEvent.mjs +337 -0
- package/dist/core/RunEvent.mjs.map +1 -0
- package/dist/core/RunPolicyUsage.d.mts +2 -0
- package/dist/core/RunPolicyUsage.mjs +21 -0
- package/dist/core/RunPolicyUsage.mjs.map +1 -0
- package/dist/core/SemanticMemoryIndex.d.mts +826 -0
- package/dist/core/SemanticMemoryIndex.mjs +185 -0
- package/dist/core/SemanticMemoryIndex.mjs.map +1 -0
- package/dist/core/SemanticMemoryRevalidation.d.mts +45 -0
- package/dist/core/SemanticMemoryRevalidation.mjs +191 -0
- package/dist/core/SemanticMemoryRevalidation.mjs.map +1 -0
- package/dist/core/SubagentContract.d.mts +2 -0
- package/dist/core/SubagentContract.mjs +148 -0
- package/dist/core/SubagentContract.mjs.map +1 -0
- package/dist/core/Thread.d.mts +2 -0
- package/dist/core/Thread.mjs +250 -0
- package/dist/core/Thread.mjs.map +1 -0
- package/dist/core/ToolResult.d.mts +2 -0
- package/dist/core/ToolResult.mjs +140 -0
- package/dist/core/ToolResult.mjs.map +1 -0
- package/dist/core/Usage.d.mts +2 -0
- package/dist/core/Usage.mjs +319 -0
- package/dist/core/Usage.mjs.map +1 -0
- package/dist/core/Worker.d.mts +3 -0
- package/dist/core/Worker.mjs +147 -0
- package/dist/core/Worker.mjs.map +1 -0
- package/dist/durable/ActivityStore.d.mts +116 -0
- package/dist/durable/ActivityStore.mjs +131 -0
- package/dist/durable/ActivityStore.mjs.map +1 -0
- package/dist/durable/Admin.d.mts +2 -0
- package/dist/durable/Admin.mjs +328 -0
- package/dist/durable/Admin.mjs.map +1 -0
- package/dist/durable/AgentRegistration.d.mts +2 -0
- package/dist/durable/AgentRegistration.mjs +14 -0
- package/dist/durable/AgentRegistration.mjs.map +1 -0
- package/dist/durable/Certification.d.mts +111 -0
- package/dist/durable/Certification.mjs +159 -0
- package/dist/durable/Certification.mjs.map +1 -0
- package/dist/durable/CommittedActivity.d.mts +62 -0
- package/dist/durable/CommittedActivity.mjs +159 -0
- package/dist/durable/CommittedActivity.mjs.map +1 -0
- package/dist/durable/Digest.d.mts +2 -0
- package/dist/durable/Digest.mjs +50 -0
- package/dist/durable/Digest.mjs.map +1 -0
- package/dist/durable/DurableAgentRuntime.d.mts +3 -0
- package/dist/durable/DurableAgentRuntime.mjs +3 -0
- package/dist/durable/DurableFailpoint.d.mts +2 -0
- package/dist/durable/DurableFailpoint.mjs +94 -0
- package/dist/durable/DurableFailpoint.mjs.map +1 -0
- package/dist/durable/DurableFailpointTestControl.d.mts +15 -0
- package/dist/durable/DurableFailpointTestControl.mjs +19 -0
- package/dist/durable/DurableFailpointTestControl.mjs.map +1 -0
- package/dist/durable/EventSource.d.mts +2 -0
- package/dist/durable/EventSource.mjs +65 -0
- package/dist/durable/EventSource.mjs.map +1 -0
- package/dist/durable/GitHubWorkflowSource.d.mts +144 -0
- package/dist/durable/GitHubWorkflowSource.mjs +209 -0
- package/dist/durable/GitHubWorkflowSource.mjs.map +1 -0
- package/dist/durable/MessageDelivery.d.mts +492 -0
- package/dist/durable/MessageDelivery.mjs +495 -0
- package/dist/durable/MessageDelivery.mjs.map +1 -0
- package/dist/durable/MessageDeliveryStoreConformance.d.mts +358 -0
- package/dist/durable/MessageDeliveryStoreConformance.mjs +243 -0
- package/dist/durable/MessageDeliveryStoreConformance.mjs.map +1 -0
- package/dist/durable/OperationAuthorizer.d.mts +2 -0
- package/dist/durable/OperationAuthorizer.mjs +70 -0
- package/dist/durable/OperationAuthorizer.mjs.map +1 -0
- package/dist/durable/PersistentHistory.d.mts +16 -0
- package/dist/durable/PersistentHistory.mjs +125 -0
- package/dist/durable/PersistentHistory.mjs.map +1 -0
- package/dist/durable/PreparedInputAdmission.d.mts +2 -0
- package/dist/durable/PreparedInputAdmission.mjs +34 -0
- package/dist/durable/PreparedInputAdmission.mjs.map +1 -0
- package/dist/durable/Records.d.mts +2 -0
- package/dist/durable/Records.mjs +795 -0
- package/dist/durable/Records.mjs.map +1 -0
- package/dist/durable/Recovery.d.mts +2 -0
- package/dist/durable/Recovery.mjs +739 -0
- package/dist/durable/Recovery.mjs.map +1 -0
- package/dist/durable/RunJournal.d.mts +2 -0
- package/dist/durable/RunJournal.mjs +2 -0
- package/dist/durable/Schedule.d.mts +2 -0
- package/dist/durable/Schedule.mjs +382 -0
- package/dist/durable/Schedule.mjs.map +1 -0
- package/dist/durable/ScheduleStoreConformance.d.mts +18 -0
- package/dist/durable/ScheduleStoreConformance.mjs +420 -0
- package/dist/durable/ScheduleStoreConformance.mjs.map +1 -0
- package/dist/durable/ScheduleTransition.d.mts +24 -0
- package/dist/durable/ScheduleTransition.mjs +180 -0
- package/dist/durable/ScheduleTransition.mjs.map +1 -0
- package/dist/durable/Scheduling.d.mts +54 -0
- package/dist/durable/Scheduling.mjs +2 -0
- package/dist/durable/SqlMemoryStore.d.mts +30 -0
- package/dist/durable/SqlMemoryStore.mjs +436 -0
- package/dist/durable/SqlMemoryStore.mjs.map +1 -0
- package/dist/durable/SqlMessageDeliveryStore.d.mts +40 -0
- package/dist/durable/SqlMessageDeliveryStore.mjs +167 -0
- package/dist/durable/SqlMessageDeliveryStore.mjs.map +1 -0
- package/dist/durable/SqlStorageV2Upgrade.d.mts +22 -0
- package/dist/durable/SqlStorageV2Upgrade.mjs +459 -0
- package/dist/durable/SqlStorageV2Upgrade.mjs.map +1 -0
- package/dist/durable/SqlSubscriptionStore.d.mts +63 -0
- package/dist/durable/SqlSubscriptionStore.mjs +751 -0
- package/dist/durable/SqlSubscriptionStore.mjs.map +1 -0
- package/dist/durable/SubmissionLedger.d.mts +3 -0
- package/dist/durable/SubmissionLedger.mjs +914 -0
- package/dist/durable/SubmissionLedger.mjs.map +1 -0
- package/dist/durable/SubmissionLedgerConformance.d.mts +30 -0
- package/dist/durable/SubmissionLedgerConformance.mjs +1986 -0
- package/dist/durable/SubmissionLedgerConformance.mjs.map +1 -0
- package/dist/durable/SubmissionStatus.d.mts +2 -0
- package/dist/durable/SubmissionStatus.mjs +18 -0
- package/dist/durable/SubmissionStatus.mjs.map +1 -0
- package/dist/durable/Subscription.d.mts +2 -0
- package/dist/durable/Subscription.mjs +360 -0
- package/dist/durable/Subscription.mjs.map +1 -0
- package/dist/durable/SubscriptionInput.d.mts +2 -0
- package/dist/durable/SubscriptionInput.mjs +52 -0
- package/dist/durable/SubscriptionInput.mjs.map +1 -0
- package/dist/durable/SubscriptionStoreConformance.d.mts +17 -0
- package/dist/durable/SubscriptionStoreConformance.mjs +625 -0
- package/dist/durable/SubscriptionStoreConformance.mjs.map +1 -0
- package/dist/durable/SubscriptionTools.d.mts +273 -0
- package/dist/durable/SubscriptionTools.mjs +190 -0
- package/dist/durable/SubscriptionTools.mjs.map +1 -0
- package/dist/durable/SubscriptionTransition.d.mts +21 -0
- package/dist/durable/SubscriptionTransition.mjs +148 -0
- package/dist/durable/SubscriptionTransition.mjs.map +1 -0
- package/dist/durable/Subscriptions.d.mts +73 -0
- package/dist/durable/Subscriptions.mjs +627 -0
- package/dist/durable/Subscriptions.mjs.map +1 -0
- package/dist/durable/ThreadContextHistory.d.mts +32 -0
- package/dist/durable/ThreadContextHistory.mjs +152 -0
- package/dist/durable/ThreadContextHistory.mjs.map +1 -0
- package/dist/durable/ThreadContextHistoryProjection.d.mts +60 -0
- package/dist/durable/ThreadContextHistoryProjection.mjs +149 -0
- package/dist/durable/ThreadContextHistoryProjection.mjs.map +1 -0
- package/dist/durable/ThreadInvariants.d.mts +74 -0
- package/dist/durable/ThreadInvariants.mjs +200 -0
- package/dist/durable/ThreadInvariants.mjs.map +1 -0
- package/dist/durable/ThreadProjection.d.mts +78 -0
- package/dist/durable/ThreadProjection.mjs +158 -0
- package/dist/durable/ThreadProjection.mjs.map +1 -0
- package/dist/durable/ThreadProjectionMaintenance.d.mts +49 -0
- package/dist/durable/ThreadProjectionMaintenance.mjs +33 -0
- package/dist/durable/ThreadProjectionMaintenance.mjs.map +1 -0
- package/dist/durable/ThreadStore.d.mts +2 -0
- package/dist/durable/ThreadStore.mjs +147 -0
- package/dist/durable/ThreadStore.mjs.map +1 -0
- package/dist/durable/ThreadStoreConformance.d.mts +29 -0
- package/dist/durable/ThreadStoreConformance.mjs +248 -0
- package/dist/durable/ThreadStoreConformance.mjs.map +1 -0
- package/dist/durable/ToolReconciler.d.mts +2 -0
- package/dist/durable/ToolReconciler.mjs +81 -0
- package/dist/durable/ToolReconciler.mjs.map +1 -0
- package/dist/durable/WakeScheduler.d.mts +2 -0
- package/dist/durable/WakeScheduler.mjs +85 -0
- package/dist/durable/WakeScheduler.mjs.map +1 -0
- package/dist/durable/WorkerHost.d.mts +129 -0
- package/dist/durable/WorkerHost.mjs +77 -0
- package/dist/durable/WorkerHost.mjs.map +1 -0
- package/dist/engine/AgentRuntime.d.mts +2 -0
- package/dist/engine/AgentRuntime.mjs +2 -0
- package/dist/engine/Compaction.d.mts +7 -0
- package/dist/engine/Compaction.mjs +16 -0
- package/dist/engine/Compaction.mjs.map +1 -0
- package/dist/engine/ContextCompactor.d.mts +2 -0
- package/dist/engine/ContextCompactor.mjs +119 -0
- package/dist/engine/ContextCompactor.mjs.map +1 -0
- package/dist/engine/ContextHistory.d.mts +65 -0
- package/dist/engine/ContextHistory.mjs +76 -0
- package/dist/engine/ContextHistory.mjs.map +1 -0
- package/dist/engine/ContextWindow.d.mts +2 -0
- package/dist/engine/ContextWindow.mjs +59 -0
- package/dist/engine/ContextWindow.mjs.map +1 -0
- package/dist/engine/DurableStep.d.mts +2 -0
- package/dist/engine/DurableStep.mjs +62 -0
- package/dist/engine/DurableStep.mjs.map +1 -0
- package/dist/engine/MessagingHost.d.mts +2 -0
- package/dist/engine/MessagingHost.mjs +2 -0
- package/dist/engine/Output.d.mts +2 -0
- package/dist/engine/Output.mjs +8 -0
- package/dist/engine/Output.mjs.map +1 -0
- package/dist/engine/RunEventSink.d.mts +2 -0
- package/dist/engine/RunEventSink.mjs +22 -0
- package/dist/engine/RunEventSink.mjs.map +1 -0
- package/dist/engine/RunOptions.d.mts +2 -0
- package/dist/engine/RunOptions.mjs +122 -0
- package/dist/engine/RunOptions.mjs.map +1 -0
- package/dist/engine/SubagentHost.d.mts +2 -0
- package/dist/engine/SubagentHost.mjs +72 -0
- package/dist/engine/SubagentHost.mjs.map +1 -0
- package/dist/engine/ThreadHistory.d.mts +2 -0
- package/dist/engine/ThreadHistory.mjs +67 -0
- package/dist/engine/ThreadHistory.mjs.map +1 -0
- package/dist/engine/ToolBroker.d.mts +2 -0
- package/dist/engine/ToolBroker.mjs +42 -0
- package/dist/engine/ToolBroker.mjs.map +1 -0
- package/dist/foreign-diagnostic-DBQ1XHKh.mjs +37 -0
- package/dist/foreign-diagnostic-DBQ1XHKh.mjs.map +1 -0
- package/dist/index.d.mts +89 -6
- package/dist/index.mjs +98 -6
- package/dist/output-contract-BC7tjlGw.mjs +84 -0
- package/dist/output-contract-BC7tjlGw.mjs.map +1 -0
- package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
- package/dist/sandbox/CodeExecutor.d.mts +194 -0
- package/dist/sandbox/CodeExecutor.mjs +278 -0
- package/dist/sandbox/CodeExecutor.mjs.map +1 -0
- package/dist/sandbox/InteractiveBrowser.d.mts +142 -0
- package/dist/sandbox/InteractiveBrowser.mjs +165 -0
- package/dist/sandbox/InteractiveBrowser.mjs.map +1 -0
- package/dist/sandbox/PageCapture.d.mts +2 -0
- package/dist/sandbox/PageCapture.mjs +450 -0
- package/dist/sandbox/PageCapture.mjs.map +1 -0
- package/dist/sandbox/PageCrawl.d.mts +88 -0
- package/dist/sandbox/PageCrawl.mjs +124 -0
- package/dist/sandbox/PageCrawl.mjs.map +1 -0
- package/dist/sandbox/PageScreenshot.d.mts +2 -0
- package/dist/sandbox/PageScreenshot.mjs +53 -0
- package/dist/sandbox/PageScreenshot.mjs.map +1 -0
- package/dist/sandbox/ProtectedBrowser.d.mts +273 -0
- package/dist/sandbox/ProtectedBrowser.mjs +287 -0
- package/dist/sandbox/ProtectedBrowser.mjs.map +1 -0
- package/dist/sandbox/Sandbox.d.mts +2 -0
- package/dist/sandbox/Sandbox.mjs +208 -0
- package/dist/sandbox/Sandbox.mjs.map +1 -0
- package/dist/utf8-BYfhEkcj.mjs +11 -0
- package/dist/utf8-BYfhEkcj.mjs.map +1 -0
- package/dist/utf8-DchGZRBd.mjs +23 -0
- package/dist/utf8-DchGZRBd.mjs.map +1 -0
- package/package.json +1 -40
- package/src/Ephemeral.ts +17 -0
- package/src/ToolExposure.ts +2 -0
- package/src/capabilities/Approval.ts +352 -0
- package/src/capabilities/Budget.ts +536 -0
- package/src/capabilities/CodeMode.ts +1090 -0
- package/src/capabilities/Commands.ts +86 -0
- package/src/capabilities/ContextTools.ts +184 -0
- package/src/capabilities/Mcp.ts +427 -0
- package/src/capabilities/McpClient.ts +967 -0
- package/src/capabilities/MemoryNotes.ts +174 -0
- package/src/capabilities/Messaging.ts +261 -0
- package/src/capabilities/ModelContext.ts +354 -0
- package/src/capabilities/Redaction.ts +157 -0
- package/src/capabilities/Remembering.ts +550 -0
- package/src/capabilities/RunHooks.ts +280 -0
- package/src/capabilities/SemanticMemory.ts +447 -0
- package/src/capabilities/Subagent.ts +2277 -0
- package/src/capabilities/SubagentReservations.ts +850 -0
- package/src/capabilities/ToolDiscovery.ts +339 -0
- package/src/capabilities/WebCapture.ts +722 -0
- package/src/capabilities/WebSearch.ts +184 -0
- package/src/capabilities/internal/subagent-background.ts +1106 -0
- package/src/capabilities/internal/subagent-contract.ts +142 -0
- package/src/capabilities/internal/subagent-policy.ts +235 -0
- package/src/capabilities/internal/subagent-reporting.ts +261 -0
- package/src/capabilities/internal/utf8.ts +10 -0
- package/src/core/Agent.ts +575 -0
- package/src/core/AgentError.ts +152 -0
- package/src/core/AgentPolicy.ts +153 -0
- package/src/core/AgentUpdates.ts +100 -0
- package/src/core/IdGenerator.ts +39 -0
- package/src/core/Identifiers.ts +48 -0
- package/src/core/Memory.ts +290 -0
- package/src/core/MemoryNamespace.ts +196 -0
- package/src/core/MemoryReference.ts +121 -0
- package/src/core/MemoryRevalidation.ts +185 -0
- package/src/core/MemoryStore.ts +368 -0
- package/src/core/Messaging.ts +90 -0
- package/src/core/Receipt.ts +42 -0
- package/src/core/RememberingStore.ts +300 -0
- package/src/core/RunEvent.ts +366 -0
- package/src/core/RunPolicyUsage.ts +17 -0
- package/src/core/SemanticMemoryIndex.ts +250 -0
- package/src/core/SemanticMemoryRevalidation.ts +254 -0
- package/src/core/SubagentContract.ts +196 -0
- package/src/core/Thread.ts +371 -0
- package/src/core/ToolExposure.ts +74 -0
- package/src/core/ToolResult.ts +170 -0
- package/src/core/Usage.ts +529 -0
- package/src/core/Worker.ts +173 -0
- package/src/core/internal/agent-updates.ts +32 -0
- package/src/core/internal/utf8.ts +23 -0
- package/src/durable/ActivityStore.ts +160 -0
- package/src/durable/Admin.ts +496 -0
- package/src/durable/AgentRegistration.ts +13 -0
- package/src/durable/Certification.ts +210 -0
- package/src/durable/CommittedActivity.ts +296 -0
- package/src/durable/Digest.ts +93 -0
- package/src/durable/DurableAgentRuntime.ts +10340 -0
- package/src/durable/DurableFailpoint.ts +103 -0
- package/src/durable/DurableFailpointTestControl.ts +39 -0
- package/src/durable/EventSource.ts +172 -0
- package/src/durable/GitHubWorkflowSource.ts +453 -0
- package/src/durable/MessageDelivery.ts +708 -0
- package/src/durable/MessageDeliveryStoreConformance.ts +363 -0
- package/src/durable/OperationAuthorizer.ts +85 -0
- package/src/durable/PersistentHistory.ts +260 -0
- package/src/durable/PreparedInputAdmission.ts +44 -0
- package/src/durable/Records.ts +1010 -0
- package/src/durable/Recovery.ts +1018 -0
- package/src/durable/RunJournal.ts +1479 -0
- package/src/durable/Schedule.ts +504 -0
- package/src/durable/ScheduleStoreConformance.ts +638 -0
- package/src/durable/ScheduleTransition.ts +265 -0
- package/src/durable/Scheduling.ts +1077 -0
- package/src/durable/SqlMemoryStore.ts +778 -0
- package/src/durable/SqlMessageDeliveryStore.ts +302 -0
- package/src/durable/SqlStorageV2Upgrade.ts +500 -0
- package/src/durable/SqlSubscriptionStore.ts +1440 -0
- package/src/durable/SubmissionLedger.ts +1201 -0
- package/src/durable/SubmissionLedgerConformance.ts +4579 -0
- package/src/durable/SubmissionStatus.ts +14 -0
- package/src/durable/Subscription.ts +544 -0
- package/src/durable/SubscriptionInput.ts +144 -0
- package/src/durable/SubscriptionStoreConformance.ts +945 -0
- package/src/durable/SubscriptionTools.ts +327 -0
- package/src/durable/SubscriptionTransition.ts +302 -0
- package/src/durable/Subscriptions.ts +1210 -0
- package/src/durable/ThreadContextHistory.ts +227 -0
- package/src/durable/ThreadContextHistoryProjection.ts +216 -0
- package/src/durable/ThreadInvariants.ts +442 -0
- package/src/durable/ThreadProjection.ts +269 -0
- package/src/durable/ThreadProjectionMaintenance.ts +67 -0
- package/src/durable/ThreadStore.ts +242 -0
- package/src/durable/ThreadStoreConformance.ts +710 -0
- package/src/durable/ToolReconciler.ts +105 -0
- package/src/durable/WakeScheduler.ts +134 -0
- package/src/durable/WorkerHost.ts +171 -0
- package/src/durable/internal/agent-registration.ts +525 -0
- package/src/durable/internal/agent-updates.ts +302 -0
- package/src/durable/internal/foreign-diagnostic.ts +47 -0
- package/src/durable/internal/journal-checkpoint.ts +104 -0
- package/src/durable/internal/journal-metadata.ts +107 -0
- package/src/durable/internal/messaging-host.ts +608 -0
- package/src/durable/internal/schedule-time.ts +303 -0
- package/src/durable/internal/storage-v2-layout.ts +163 -0
- package/src/durable/internal/storage-v2.ts +73 -0
- package/src/durable/internal/worker-host.ts +2467 -0
- package/src/durable/internal/worker-runtime.ts +9 -0
- package/src/engine/AgentRuntime.ts +37 -0
- package/src/engine/Compaction.ts +11 -0
- package/src/engine/ContextCompactor.ts +277 -0
- package/src/engine/ContextHistory.ts +73 -0
- package/src/engine/ContextWindow.ts +72 -0
- package/src/engine/DurableStep.ts +132 -0
- package/src/engine/MessagingHost.ts +110 -0
- package/src/engine/Output.ts +2 -0
- package/src/engine/RunEventSink.ts +132 -0
- package/src/engine/RunOptions.ts +1077 -0
- package/src/engine/SubagentHost.ts +181 -0
- package/src/engine/ThreadHistory.ts +120 -0
- package/src/engine/ToolBroker.ts +157 -0
- package/src/engine/ToolExposure.ts +48 -0
- package/src/engine/internal/agent-runtime.ts +10162 -0
- package/src/engine/internal/bounded-value.ts +315 -0
- package/src/engine/internal/compaction.ts +678 -0
- package/src/engine/internal/error-diagnostic.ts +39 -0
- package/src/engine/internal/output-contract.ts +173 -0
- package/src/engine/internal/primitive-delta.ts +80 -0
- package/src/engine/internal/provider-result-staging.ts +211 -0
- package/src/engine/internal/tool-derivative.ts +106 -0
- package/src/engine/internal/tool-exposure.ts +224 -0
- package/src/engine/internal/tool-telemetry.ts +484 -0
- package/src/index.ts +97 -22
- package/src/sandbox/CodeExecutor.ts +352 -0
- package/src/sandbox/InteractiveBrowser.ts +257 -0
- package/src/sandbox/PageCapture.ts +692 -0
- package/src/sandbox/PageCrawl.ts +148 -0
- package/src/sandbox/PageScreenshot.ts +81 -0
- package/src/sandbox/ProtectedBrowser.ts +436 -0
- package/src/sandbox/Sandbox.ts +241 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
import { Clock, Context, DateTime, Effect, Layer, Schema, SynchronizedRef } from "effect";
|
|
2
|
+
import { Prompt } from "effect/unstable/ai";
|
|
3
|
+
|
|
4
|
+
import { ThreadId, RunId } from "./Identifiers.ts";
|
|
5
|
+
import { utf8ByteLength } from "./internal/utf8.ts";
|
|
6
|
+
|
|
7
|
+
/** Bound applied to one text projection before it can enter a model context. */
|
|
8
|
+
export const ThreadText = Schema.String.check(Schema.isMaxLength(64 * 1024));
|
|
9
|
+
const MAX_THREAD_MESSAGES = 1_024;
|
|
10
|
+
const MAX_THREAD_CONTENT_BYTES = 4 * 1024 * 1024;
|
|
11
|
+
const MAX_THREADS = 256;
|
|
12
|
+
const MAX_STORE_CONTENT_BYTES = 64 * 1024 * 1024;
|
|
13
|
+
|
|
14
|
+
/** One append-only native Effect AI message in a conversation. */
|
|
15
|
+
export class ThreadMessage extends Schema.Class<ThreadMessage>(
|
|
16
|
+
"@effect-agent/capabilities/ThreadMessage",
|
|
17
|
+
)({
|
|
18
|
+
threadId: ThreadId,
|
|
19
|
+
sequence: Schema.Natural,
|
|
20
|
+
runId: Schema.optionalKey(RunId),
|
|
21
|
+
message: Prompt.Message,
|
|
22
|
+
encodedBytes: Schema.Natural.check(Schema.isLessThanOrEqualTo(MAX_THREAD_CONTENT_BYTES)),
|
|
23
|
+
timestamp: Schema.DateTimeUtcFromString,
|
|
24
|
+
}) {}
|
|
25
|
+
|
|
26
|
+
/** An identified, ordered conversation snapshot. Storage and execution recovery are separate concerns. */
|
|
27
|
+
export class Thread extends Schema.Class<Thread>("@effect-agent/capabilities/ThreadSnapshot")({
|
|
28
|
+
version: Schema.Literal(1),
|
|
29
|
+
threadId: ThreadId,
|
|
30
|
+
nextSequence: Schema.Natural,
|
|
31
|
+
contentBytes: Schema.Natural.check(Schema.isLessThanOrEqualTo(MAX_THREAD_CONTENT_BYTES)),
|
|
32
|
+
messages: Schema.Array(ThreadMessage).check(Schema.isMaxLength(MAX_THREAD_MESSAGES)),
|
|
33
|
+
}) {}
|
|
34
|
+
|
|
35
|
+
/** Portable conversation snapshot. Its format is independent of the durable execution journal. */
|
|
36
|
+
export class ThreadExport extends Schema.Class<ThreadExport>(
|
|
37
|
+
"@effect-agent/capabilities/ThreadExport",
|
|
38
|
+
)({
|
|
39
|
+
format: Schema.Literal("effect-agent/ephemeral-thread@1"),
|
|
40
|
+
exportedAt: Schema.DateTimeUtcFromString,
|
|
41
|
+
snapshot: Thread,
|
|
42
|
+
}) {}
|
|
43
|
+
|
|
44
|
+
/** Native message accepted by the append-only thread. */
|
|
45
|
+
export class ThreadAppend extends Schema.Class<ThreadAppend>(
|
|
46
|
+
"@effect-agent/capabilities/ThreadAppend",
|
|
47
|
+
)({
|
|
48
|
+
runId: Schema.optionalKey(RunId),
|
|
49
|
+
message: Prompt.Message,
|
|
50
|
+
}) {}
|
|
51
|
+
|
|
52
|
+
/** The requested Thread has not been created in this store. */
|
|
53
|
+
export class ThreadNotFound extends Schema.TaggedError<ThreadNotFound>()("ThreadNotFound", {
|
|
54
|
+
threadId: ThreadId,
|
|
55
|
+
}) {}
|
|
56
|
+
|
|
57
|
+
/** A process-local Thread store reached an explicit count or encoded-content bound. */
|
|
58
|
+
export class ThreadLimitExceeded extends Schema.TaggedError<ThreadLimitExceeded>()(
|
|
59
|
+
"ThreadLimitExceeded",
|
|
60
|
+
{
|
|
61
|
+
threadId: ThreadId,
|
|
62
|
+
limit: Schema.Literals(["messages", "content-bytes", "threads", "store-content-bytes"]),
|
|
63
|
+
limitValue: Schema.Natural,
|
|
64
|
+
observedValue: Schema.Natural,
|
|
65
|
+
},
|
|
66
|
+
) {}
|
|
67
|
+
|
|
68
|
+
/** Engine history was not an append-only extension of the official snapshot. */
|
|
69
|
+
export class ThreadHistoryDiverged extends Schema.TaggedError<ThreadHistoryDiverged>()(
|
|
70
|
+
"ThreadHistoryDiverged",
|
|
71
|
+
{ threadId: ThreadId, message: Schema.String },
|
|
72
|
+
) {}
|
|
73
|
+
|
|
74
|
+
/** Native Prompt encoding failed before a bounded state mutation. */
|
|
75
|
+
export class ThreadEncodingError extends Schema.TaggedError<ThreadEncodingError>()(
|
|
76
|
+
"ThreadEncodingError",
|
|
77
|
+
{ threadId: ThreadId, message: Schema.String },
|
|
78
|
+
) {}
|
|
79
|
+
|
|
80
|
+
export type ThreadError =
|
|
81
|
+
| ThreadNotFound
|
|
82
|
+
| ThreadLimitExceeded
|
|
83
|
+
| ThreadHistoryDiverged
|
|
84
|
+
| ThreadEncodingError;
|
|
85
|
+
|
|
86
|
+
/** Reconstruct exact Effect AI Prompt history, including tools, reasoning, files, and options. */
|
|
87
|
+
export const toPrompt = (snapshot: Thread): Prompt.Prompt =>
|
|
88
|
+
Prompt.fromMessages(snapshot.messages.map((entry) => entry.message));
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Process-local state for conversation history. Updates remain visible even
|
|
92
|
+
* when a Run later fails; this service has no successful-Run commit boundary or durable recovery.
|
|
93
|
+
* ThreadHistory.layer uses this store for ordinary Runs and interactive history.
|
|
94
|
+
* Scope closure releases all in-memory state.
|
|
95
|
+
*/
|
|
96
|
+
export class Store extends Context.Service<
|
|
97
|
+
Store,
|
|
98
|
+
{
|
|
99
|
+
readonly create: (threadId: ThreadId) => Effect.Effect<Thread, ThreadLimitExceeded>;
|
|
100
|
+
readonly append: (
|
|
101
|
+
threadId: ThreadId,
|
|
102
|
+
message: ThreadAppend,
|
|
103
|
+
) => Effect.Effect<Thread, ThreadNotFound | ThreadLimitExceeded | ThreadEncodingError>;
|
|
104
|
+
/**
|
|
105
|
+
* Record an engine-emitted full history only when it is an append-only
|
|
106
|
+
* extension of the exact official Prompt already stored. The entire
|
|
107
|
+
* suffix commits in one transaction or not at all: concurrent writers are
|
|
108
|
+
* serialized, a writer whose history no longer extends the committed
|
|
109
|
+
* official history fails with ThreadHistoryDiverged, and a limit
|
|
110
|
+
* failure inside the suffix records nothing. Earlier updates remain committed if the Run
|
|
111
|
+
* later fails or is interrupted; this transaction covers one update, not the whole Run.
|
|
112
|
+
*/
|
|
113
|
+
readonly recordHistory: (
|
|
114
|
+
threadId: ThreadId,
|
|
115
|
+
runId: RunId,
|
|
116
|
+
history: Prompt.Prompt,
|
|
117
|
+
) => Effect.Effect<Thread, ThreadError>;
|
|
118
|
+
readonly snapshot: (threadId: ThreadId) => Effect.Effect<Thread, ThreadNotFound>;
|
|
119
|
+
readonly export: (threadId: ThreadId) => Effect.Effect<ThreadExport, ThreadNotFound>;
|
|
120
|
+
}
|
|
121
|
+
>()("@effect-agent/capabilities/EphemeralThreads") {}
|
|
122
|
+
|
|
123
|
+
const encodeMessage = (
|
|
124
|
+
threadId: ThreadId,
|
|
125
|
+
message: Prompt.Message,
|
|
126
|
+
): Effect.Effect<string, ThreadEncodingError> =>
|
|
127
|
+
Schema.encodeEffect(Prompt.Message)(message).pipe(
|
|
128
|
+
Effect.map((encoded) => JSON.stringify(encoded)),
|
|
129
|
+
Effect.mapError((error) =>
|
|
130
|
+
ThreadEncodingError.make({
|
|
131
|
+
threadId,
|
|
132
|
+
message: `Could not encode native Effect AI message: ${error.message}`,
|
|
133
|
+
}),
|
|
134
|
+
),
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
const findSnapshot = (
|
|
138
|
+
state: ReadonlyMap<ThreadId, Thread>,
|
|
139
|
+
threadId: ThreadId,
|
|
140
|
+
): Effect.Effect<Thread, ThreadNotFound> => {
|
|
141
|
+
const snapshot = state.get(threadId);
|
|
142
|
+
|
|
143
|
+
return snapshot === undefined
|
|
144
|
+
? Effect.fail(ThreadNotFound.make({ threadId }))
|
|
145
|
+
: Effect.succeed(snapshot);
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
const totalStoreBytes = (threads: ReadonlyMap<ThreadId, Thread>): number => {
|
|
149
|
+
let total = 0;
|
|
150
|
+
|
|
151
|
+
for (const snapshot of threads.values()) total += snapshot.contentBytes;
|
|
152
|
+
|
|
153
|
+
return total;
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
const appendEncoded = Effect.fn("Thread.Store.appendEncoded")(function* (
|
|
157
|
+
threads: ReadonlyMap<ThreadId, Thread>,
|
|
158
|
+
current: Thread,
|
|
159
|
+
append: ThreadAppend,
|
|
160
|
+
encoded: string,
|
|
161
|
+
timestamp: DateTime.Utc,
|
|
162
|
+
) {
|
|
163
|
+
const threadId = current.threadId;
|
|
164
|
+
|
|
165
|
+
if (current.messages.length >= MAX_THREAD_MESSAGES) {
|
|
166
|
+
return yield* ThreadLimitExceeded.make({
|
|
167
|
+
threadId,
|
|
168
|
+
limit: "messages",
|
|
169
|
+
limitValue: MAX_THREAD_MESSAGES,
|
|
170
|
+
observedValue: current.messages.length + 1,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
const messageBytes = utf8ByteLength(encoded);
|
|
174
|
+
const contentBytes = current.contentBytes + messageBytes;
|
|
175
|
+
|
|
176
|
+
if (contentBytes > MAX_THREAD_CONTENT_BYTES) {
|
|
177
|
+
return yield* ThreadLimitExceeded.make({
|
|
178
|
+
threadId,
|
|
179
|
+
limit: "content-bytes",
|
|
180
|
+
limitValue: MAX_THREAD_CONTENT_BYTES,
|
|
181
|
+
observedValue: contentBytes,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
const storeBytes = totalStoreBytes(threads) + messageBytes;
|
|
185
|
+
|
|
186
|
+
if (storeBytes > MAX_STORE_CONTENT_BYTES) {
|
|
187
|
+
return yield* ThreadLimitExceeded.make({
|
|
188
|
+
threadId,
|
|
189
|
+
limit: "store-content-bytes",
|
|
190
|
+
limitValue: MAX_STORE_CONTENT_BYTES,
|
|
191
|
+
observedValue: storeBytes,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const message = ThreadMessage.make({
|
|
196
|
+
threadId,
|
|
197
|
+
sequence: current.nextSequence,
|
|
198
|
+
...(append.runId === undefined ? {} : { runId: append.runId }),
|
|
199
|
+
message: append.message,
|
|
200
|
+
encodedBytes: messageBytes,
|
|
201
|
+
timestamp,
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
const next = Thread.make({
|
|
205
|
+
version: current.version,
|
|
206
|
+
threadId: current.threadId,
|
|
207
|
+
nextSequence: current.nextSequence + 1,
|
|
208
|
+
contentBytes,
|
|
209
|
+
messages: [...current.messages, message],
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
return [next, new Map(threads).set(threadId, next)] as const;
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
/** In-memory storage shared for the consumer's Scope; it does not survive process loss. */
|
|
216
|
+
export const layerMemory = Layer.effect(
|
|
217
|
+
Store,
|
|
218
|
+
Effect.gen(function* () {
|
|
219
|
+
const state = yield* SynchronizedRef.make<ReadonlyMap<ThreadId, Thread>>(new Map());
|
|
220
|
+
|
|
221
|
+
yield* Effect.addFinalizer(() => SynchronizedRef.set(state, new Map()));
|
|
222
|
+
|
|
223
|
+
return Store.of({
|
|
224
|
+
create: (threadId) =>
|
|
225
|
+
SynchronizedRef.modifyEffect(
|
|
226
|
+
state,
|
|
227
|
+
Effect.fn(function* (threads) {
|
|
228
|
+
const existing = threads.get(threadId);
|
|
229
|
+
|
|
230
|
+
if (existing !== undefined) return [existing, threads] as const;
|
|
231
|
+
if (threads.size >= MAX_THREADS) {
|
|
232
|
+
return yield* ThreadLimitExceeded.make({
|
|
233
|
+
threadId,
|
|
234
|
+
limit: "threads",
|
|
235
|
+
limitValue: MAX_THREADS,
|
|
236
|
+
observedValue: threads.size + 1,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
const created = Thread.make({
|
|
241
|
+
version: 1,
|
|
242
|
+
threadId,
|
|
243
|
+
nextSequence: 0,
|
|
244
|
+
contentBytes: 0,
|
|
245
|
+
messages: [],
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
return [created, new Map(threads).set(threadId, created)] as const;
|
|
249
|
+
}),
|
|
250
|
+
),
|
|
251
|
+
append: Effect.fn("Thread.Store.append")(function* (threadId, message) {
|
|
252
|
+
const encoded = yield* encodeMessage(threadId, message.message);
|
|
253
|
+
const timestamp = DateTime.toUtc(DateTime.makeUnsafe(yield* Clock.currentTimeMillis));
|
|
254
|
+
|
|
255
|
+
return yield* SynchronizedRef.modifyEffect(
|
|
256
|
+
state,
|
|
257
|
+
Effect.fn(function* (threads) {
|
|
258
|
+
const current = yield* findSnapshot(threads, threadId);
|
|
259
|
+
|
|
260
|
+
return yield* appendEncoded(threads, current, message, encoded, timestamp);
|
|
261
|
+
}),
|
|
262
|
+
);
|
|
263
|
+
}),
|
|
264
|
+
recordHistory: Effect.fn("Thread.Store.recordHistory")(
|
|
265
|
+
function* (threadId, historyRunId, history) {
|
|
266
|
+
const incoming = yield* Effect.forEach(history.content, (message) =>
|
|
267
|
+
encodeMessage(threadId, message).pipe(Effect.map((encoded) => ({ message, encoded }))),
|
|
268
|
+
);
|
|
269
|
+
|
|
270
|
+
// Publish the complete suffix only after verification and every bounded append succeed.
|
|
271
|
+
return yield* SynchronizedRef.modifyEffect(
|
|
272
|
+
state,
|
|
273
|
+
Effect.fn(function* (threads) {
|
|
274
|
+
const current = yield* findSnapshot(threads, threadId);
|
|
275
|
+
|
|
276
|
+
const currentEncoded = yield* Effect.forEach(current.messages, (entry) =>
|
|
277
|
+
encodeMessage(threadId, entry.message),
|
|
278
|
+
);
|
|
279
|
+
|
|
280
|
+
if (
|
|
281
|
+
incoming.length < currentEncoded.length ||
|
|
282
|
+
currentEncoded.some((encoded, index) => encoded !== incoming[index]?.encoded)
|
|
283
|
+
) {
|
|
284
|
+
return yield* ThreadHistoryDiverged.make({
|
|
285
|
+
threadId,
|
|
286
|
+
message: "Engine history is not an append-only extension of official history",
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
const timestamp = DateTime.toUtc(DateTime.makeUnsafe(yield* Clock.currentTimeMillis));
|
|
290
|
+
|
|
291
|
+
if (incoming.length === currentEncoded.length) return [current, threads] as const;
|
|
292
|
+
|
|
293
|
+
const messages = [...current.messages];
|
|
294
|
+
let contentBytes = current.contentBytes;
|
|
295
|
+
let storeBytes = totalStoreBytes(threads);
|
|
296
|
+
let nextSequence = current.nextSequence;
|
|
297
|
+
|
|
298
|
+
for (const entry of incoming.slice(currentEncoded.length)) {
|
|
299
|
+
const append = ThreadAppend.make({ runId: historyRunId, message: entry.message });
|
|
300
|
+
|
|
301
|
+
// Preserve append's first failing bound and observed value without publishing
|
|
302
|
+
// intermediate snapshots or rescanning the store for each suffix message.
|
|
303
|
+
if (messages.length >= MAX_THREAD_MESSAGES) {
|
|
304
|
+
return yield* ThreadLimitExceeded.make({
|
|
305
|
+
threadId,
|
|
306
|
+
limit: "messages",
|
|
307
|
+
limitValue: MAX_THREAD_MESSAGES,
|
|
308
|
+
observedValue: messages.length + 1,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
const messageBytes = utf8ByteLength(entry.encoded);
|
|
312
|
+
|
|
313
|
+
contentBytes += messageBytes;
|
|
314
|
+
if (contentBytes > MAX_THREAD_CONTENT_BYTES) {
|
|
315
|
+
return yield* ThreadLimitExceeded.make({
|
|
316
|
+
threadId,
|
|
317
|
+
limit: "content-bytes",
|
|
318
|
+
limitValue: MAX_THREAD_CONTENT_BYTES,
|
|
319
|
+
observedValue: contentBytes,
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
storeBytes += messageBytes;
|
|
323
|
+
if (storeBytes > MAX_STORE_CONTENT_BYTES) {
|
|
324
|
+
return yield* ThreadLimitExceeded.make({
|
|
325
|
+
threadId,
|
|
326
|
+
limit: "store-content-bytes",
|
|
327
|
+
limitValue: MAX_STORE_CONTENT_BYTES,
|
|
328
|
+
observedValue: storeBytes,
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
messages.push(
|
|
332
|
+
ThreadMessage.make({
|
|
333
|
+
threadId,
|
|
334
|
+
sequence: nextSequence,
|
|
335
|
+
...(append.runId === undefined ? {} : { runId: append.runId }),
|
|
336
|
+
message: append.message,
|
|
337
|
+
encodedBytes: messageBytes,
|
|
338
|
+
timestamp,
|
|
339
|
+
}),
|
|
340
|
+
);
|
|
341
|
+
nextSequence += 1;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
const snapshot = Thread.make({
|
|
345
|
+
version: current.version,
|
|
346
|
+
threadId,
|
|
347
|
+
nextSequence,
|
|
348
|
+
contentBytes,
|
|
349
|
+
messages,
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
return [snapshot, new Map(threads).set(threadId, snapshot)] as const;
|
|
353
|
+
}),
|
|
354
|
+
);
|
|
355
|
+
},
|
|
356
|
+
),
|
|
357
|
+
snapshot: (threadId) =>
|
|
358
|
+
SynchronizedRef.get(state).pipe(Effect.flatMap((all) => findSnapshot(all, threadId))),
|
|
359
|
+
export: (threadId) =>
|
|
360
|
+
Effect.gen(function* () {
|
|
361
|
+
const snapshot = yield* findSnapshot(yield* SynchronizedRef.get(state), threadId);
|
|
362
|
+
|
|
363
|
+
return ThreadExport.make({
|
|
364
|
+
format: "effect-agent/ephemeral-thread@1",
|
|
365
|
+
exportedAt: DateTime.toUtc(DateTime.makeUnsafe(yield* Clock.currentTimeMillis)),
|
|
366
|
+
snapshot,
|
|
367
|
+
});
|
|
368
|
+
}),
|
|
369
|
+
});
|
|
370
|
+
}),
|
|
371
|
+
);
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Context, Schema } from "effect";
|
|
2
|
+
import type { Tool } from "effect/unstable/ai";
|
|
3
|
+
|
|
4
|
+
/** Registered native names only. Empty selection deliberately clears non-pinned Tools. */
|
|
5
|
+
export const ToolNames = Schema.Array(
|
|
6
|
+
Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(256)),
|
|
7
|
+
).check(
|
|
8
|
+
Schema.isMaxLength(1_024),
|
|
9
|
+
Schema.makeFilter((names) => new Set(names).size === names.length, {
|
|
10
|
+
title: "Tool names are unique",
|
|
11
|
+
}),
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
/** One run-scoped replacement, independent of search and of model-visible result text. */
|
|
15
|
+
export class Selection extends Schema.Class<Selection>("@effect-agent/core/ToolExposure/Selection")(
|
|
16
|
+
{
|
|
17
|
+
toolNames: ToolNames,
|
|
18
|
+
},
|
|
19
|
+
) {}
|
|
20
|
+
|
|
21
|
+
/** Exact declarations used by one model request, with the selection that produced them. */
|
|
22
|
+
export class Snapshot extends Schema.Class<Snapshot>("@effect-agent/core/ToolExposure/Snapshot")({
|
|
23
|
+
exposedToolNames: ToolNames,
|
|
24
|
+
selection: Schema.optionalKey(Selection),
|
|
25
|
+
}) {}
|
|
26
|
+
|
|
27
|
+
export const Limits = Schema.Struct({
|
|
28
|
+
maxTools: Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(1_024)),
|
|
29
|
+
maxSchemaBytes: Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(4_194_304)),
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
/** Omission preserves eager exposure. Selection changes take effect only after a complete batch. */
|
|
33
|
+
export interface Configuration {
|
|
34
|
+
readonly initialToolNames?: ReadonlyArray<string> | undefined;
|
|
35
|
+
readonly maxTools?: number | undefined;
|
|
36
|
+
readonly maxSchemaBytes?: number | undefined;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Trusted grouping metadata; never inferred from a Tool's name. */
|
|
40
|
+
export const ToolNamespace = Context.Reference<string | undefined>(
|
|
41
|
+
"@effect-agent/core/ToolExposure/ToolNamespace",
|
|
42
|
+
{ defaultValue: () => undefined },
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
/** An ordinary readonly Tool whose successful result has a `toolNames` field of native names. */
|
|
46
|
+
export const DiscoveryTool = Context.Reference<boolean>(
|
|
47
|
+
"@effect-agent/core/ToolExposure/DiscoveryTool",
|
|
48
|
+
{ defaultValue: () => false },
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
/** Remains selected while eligible. Host visibility and inherited grants may hide an explicit
|
|
52
|
+
* pin without failing the Run; discovery, context rollover and required completion stay mandatory.
|
|
53
|
+
*/
|
|
54
|
+
export const PinnedTool = Context.Reference<boolean>("@effect-agent/core/ToolExposure/PinnedTool", {
|
|
55
|
+
defaultValue: () => false,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
/** Extra documentation candidates executed through their owning native Tool, such as Code Mode. */
|
|
59
|
+
export interface AdditionalCatalogEntry {
|
|
60
|
+
readonly tool: Tool.Any;
|
|
61
|
+
readonly namespace: string;
|
|
62
|
+
readonly method: string;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export const AdditionalToolCatalog = Context.Reference<ReadonlyArray<AdditionalCatalogEntry>>(
|
|
66
|
+
"@effect-agent/core/ToolExposure/AdditionalToolCatalog",
|
|
67
|
+
{ defaultValue: () => [] },
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
/** The owning Tool description embeds its complete additional catalogue. */
|
|
71
|
+
export const IncludesCatalogDocumentation = Context.Reference<boolean>(
|
|
72
|
+
"@effect-agent/core/ToolExposure/IncludesCatalogDocumentation",
|
|
73
|
+
{ defaultValue: () => false },
|
|
74
|
+
);
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import * as Schema from "effect/Schema";
|
|
2
|
+
|
|
3
|
+
import { codePointUtf8Length, utf8ByteLength } from "./internal/utf8.ts";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The minimal `TruncatedToolResult` envelope (empty head/tail, a 16-digit
|
|
7
|
+
* `originalBytes`) encodes to at most 81 UTF-8 bytes; 256 guarantees every
|
|
8
|
+
* accepted bound fits the envelope plus some real content, so the bound is a
|
|
9
|
+
* hard resource guard rather than a best-effort one.
|
|
10
|
+
*/
|
|
11
|
+
const ENVELOPE_FLOOR_BYTES = 256;
|
|
12
|
+
|
|
13
|
+
/** Byte bound applied to one encoded application Tool result before it enters history. */
|
|
14
|
+
export class ToolResultBounds extends Schema.Class<ToolResultBounds>("ToolResultBounds")({
|
|
15
|
+
maxBytes: Schema.Int.check(Schema.isGreaterThanOrEqualTo(ENVELOPE_FLOOR_BYTES)),
|
|
16
|
+
}) {}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Canonical envelope replacing an encoded Tool result that exceeded its
|
|
20
|
+
* policy bounds. `head` and `tail` are an exact prefix and suffix of the
|
|
21
|
+
* original encoded JSON text; the middle is dropped, never paraphrased.
|
|
22
|
+
*/
|
|
23
|
+
export class TruncatedToolResult extends Schema.Class<TruncatedToolResult>("TruncatedToolResult")({
|
|
24
|
+
truncatedToolResult: Schema.Literal(true),
|
|
25
|
+
originalBytes: Schema.Natural,
|
|
26
|
+
head: Schema.String,
|
|
27
|
+
tail: Schema.String,
|
|
28
|
+
}) {}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Canonical fail-closed sentinel replacing an encoded Tool result that could
|
|
32
|
+
* not be JSON-serialized at all (cyclic value, BigInt, `undefined`, throwing
|
|
33
|
+
* `toJSON`). The original value never enters history or durable records —
|
|
34
|
+
* an unserializable value is unbounded by construction, so the bound seam
|
|
35
|
+
* replaces it wholesale rather than passing it through (runtime spec §9).
|
|
36
|
+
*/
|
|
37
|
+
export class UnserializableToolResult extends Schema.Class<UnserializableToolResult>(
|
|
38
|
+
"UnserializableToolResult",
|
|
39
|
+
)({
|
|
40
|
+
unserializableToolResult: Schema.Literal(true),
|
|
41
|
+
reason: Schema.String.check(Schema.isMaxLength(256)),
|
|
42
|
+
}) {}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Build the encoded sentinel for a serialization failure. Total by
|
|
46
|
+
* construction — the cause is untrusted (a hostile `toString` or an
|
|
47
|
+
* accessor-backed `Error.message` can itself throw on this last-resort
|
|
48
|
+
* path) — and byte-bound: the complete encoded sentinel stays within the
|
|
49
|
+
* 256-byte `ToolResultBounds` schema floor, so it fits every accepted
|
|
50
|
+
* policy without the caller re-applying bounds.
|
|
51
|
+
*/
|
|
52
|
+
export const unserializableToolResult = (
|
|
53
|
+
cause: unknown,
|
|
54
|
+
): typeof UnserializableToolResult.Encoded => {
|
|
55
|
+
let reason: string;
|
|
56
|
+
|
|
57
|
+
try {
|
|
58
|
+
const message = cause instanceof Error ? cause.message : cause;
|
|
59
|
+
|
|
60
|
+
reason = typeof message === "string" ? message : String(message);
|
|
61
|
+
} catch {
|
|
62
|
+
reason = "unserializable value";
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const build = (clipped: string): typeof UnserializableToolResult.Encoded =>
|
|
66
|
+
Schema.encodeSync(UnserializableToolResult)(
|
|
67
|
+
UnserializableToolResult.make({
|
|
68
|
+
unserializableToolResult: true,
|
|
69
|
+
reason: clipped,
|
|
70
|
+
}),
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
// JSON escaping inflates bytes, so shrink by whole code points until the
|
|
74
|
+
// encoded sentinel fits the floor; the empty reason always fits.
|
|
75
|
+
let clipped = takePrefixWithinBytes(reason, 128);
|
|
76
|
+
let sentinel = build(clipped);
|
|
77
|
+
|
|
78
|
+
while (clipped.length > 0 && utf8ByteLength(JSON.stringify(sentinel)) > 256) {
|
|
79
|
+
const last = clipped.codePointAt(clipped.length - 1);
|
|
80
|
+
|
|
81
|
+
clipped = clipped.slice(0, clipped.length - (last !== undefined && last > 0xffff ? 2 : 1));
|
|
82
|
+
sentinel = build(clipped);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return sentinel;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const takePrefixWithinBytes = (value: string, maxBytes: number): string => {
|
|
89
|
+
let bytes = 0;
|
|
90
|
+
let index = 0;
|
|
91
|
+
|
|
92
|
+
while (index < value.length) {
|
|
93
|
+
const codePoint = value.codePointAt(index) ?? 0;
|
|
94
|
+
const width = codePointUtf8Length(codePoint);
|
|
95
|
+
|
|
96
|
+
if (bytes + width > maxBytes) break;
|
|
97
|
+
bytes += width;
|
|
98
|
+
index += codePoint > 0xffff ? 2 : 1;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return value.slice(0, index);
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
const takeSuffixWithinBytes = (value: string, maxBytes: number): string => {
|
|
105
|
+
let bytes = 0;
|
|
106
|
+
let index = value.length;
|
|
107
|
+
|
|
108
|
+
while (index > 0) {
|
|
109
|
+
const unit = value.charCodeAt(index - 1);
|
|
110
|
+
const isLowSurrogate = unit >= 0xdc00 && unit <= 0xdfff;
|
|
111
|
+
const pairStart = isLowSurrogate && index >= 2 ? index - 2 : index - 1;
|
|
112
|
+
const codePoint = value.codePointAt(pairStart) ?? 0;
|
|
113
|
+
const width = codePointUtf8Length(codePoint);
|
|
114
|
+
|
|
115
|
+
if (bytes + width > maxBytes) break;
|
|
116
|
+
bytes += width;
|
|
117
|
+
index = pairStart;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return value.slice(index);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Bound one encoded Tool result to `bounds.maxBytes` UTF-8 bytes.
|
|
125
|
+
*
|
|
126
|
+
* Within bounds the input is returned unchanged. Over bounds the result is
|
|
127
|
+
* the JSON-encoded `TruncatedToolResult` envelope preserving an exact prefix
|
|
128
|
+
* and suffix of the input, split ~50/50 across the byte budget left after
|
|
129
|
+
* the envelope's own overhead and shrunk deterministically until the encoded
|
|
130
|
+
* envelope itself fits. Slicing never splits a UTF-16 surrogate pair, so the
|
|
131
|
+
* envelope always re-encodes as valid JSON.
|
|
132
|
+
*
|
|
133
|
+
* The Schema-level 256-byte floor on `ToolResultBounds.maxBytes` guarantees
|
|
134
|
+
* every accepted bound fits the minimal envelope (at most 81 bytes), so the
|
|
135
|
+
* returned value never exceeds `maxBytes` for a decodable bound. The
|
|
136
|
+
* minimal-envelope fallback below survives purely as defense in depth.
|
|
137
|
+
*/
|
|
138
|
+
export const applyToolResultBounds = (encodedJson: string, bounds: ToolResultBounds): string => {
|
|
139
|
+
const originalBytes = utf8ByteLength(encodedJson);
|
|
140
|
+
|
|
141
|
+
if (originalBytes <= bounds.maxBytes) return encodedJson;
|
|
142
|
+
|
|
143
|
+
const render = (head: string, tail: string): string =>
|
|
144
|
+
JSON.stringify(
|
|
145
|
+
Schema.encodeSync(TruncatedToolResult)(
|
|
146
|
+
TruncatedToolResult.make({ truncatedToolResult: true, originalBytes, head, tail }),
|
|
147
|
+
),
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
const minimal = render("", "");
|
|
151
|
+
const contentBudget = bounds.maxBytes - utf8ByteLength(minimal);
|
|
152
|
+
|
|
153
|
+
if (contentBudget <= 0) return minimal;
|
|
154
|
+
let headBudget = Math.floor(contentBudget / 2);
|
|
155
|
+
let tailBudget = contentBudget - headBudget;
|
|
156
|
+
|
|
157
|
+
for (;;) {
|
|
158
|
+
const head = takePrefixWithinBytes(encodedJson, headBudget);
|
|
159
|
+
const tail = takeSuffixWithinBytes(encodedJson, tailBudget);
|
|
160
|
+
const output = render(head, tail);
|
|
161
|
+
const outputBytes = utf8ByteLength(output);
|
|
162
|
+
|
|
163
|
+
if (outputBytes <= bounds.maxBytes) return output;
|
|
164
|
+
if (headBudget === 0 && tailBudget === 0) return minimal;
|
|
165
|
+
const shrink = Math.max(1, Math.ceil((outputBytes - bounds.maxBytes) / 2));
|
|
166
|
+
|
|
167
|
+
headBudget = Math.max(0, headBudget - shrink);
|
|
168
|
+
tailBudget = Math.max(0, tailBudget - shrink);
|
|
169
|
+
}
|
|
170
|
+
};
|