effect-agent 0.1.0-beta.152 → 0.1.0-beta.154
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/{Admin-CKIdJoP8.d.mts → Admin-BjmupLN3.d.mts} +36 -17
- package/dist/{Agent-Cjd_ZveM.d.mts → Agent-BCyrGaWg.d.mts} +2 -2
- package/dist/{AgentPolicy-BqDoSXO6.d.mts → AgentPolicy-CnXWWwdg.d.mts} +5 -1
- package/dist/{AgentRuntime-sXpKcyxu.d.mts → AgentRuntime-BAjT5gXl.d.mts} +10 -10
- package/dist/{AgentRuntime-D8U9gl9Q.mjs → AgentRuntime-IF_1GoUf.mjs} +54 -11
- package/dist/AgentRuntime-IF_1GoUf.mjs.map +1 -0
- package/dist/{ContextCompactor-WwSIG_Z2.d.mts → ContextCompactor-CPlStZRc.d.mts} +2 -2
- package/dist/{Digest-U69rDHuO.d.mts → Digest-CaJ2RIsF.d.mts} +2 -2
- package/dist/{DurableAgentRuntime-DQFV26SB.mjs → DurableAgentRuntime-BQzYkFVy.mjs} +185 -88
- package/dist/DurableAgentRuntime-BQzYkFVy.mjs.map +1 -0
- package/dist/{EventSource-CMbXXmwe.d.mts → EventSource-C8CKwQy5.d.mts} +3 -3
- package/dist/InMemory.d.mts +1 -1
- package/dist/{Messaging-ccQURKCf.d.mts → Messaging-B1zumorg.d.mts} +3 -3
- package/dist/{MessagingHost-D04wE-7W.d.mts → MessagingHost-B4jqlJmx.d.mts} +3 -3
- package/dist/{Output-CFD1CPfU.d.mts → Output-WL7JexCm.d.mts} +2 -2
- package/dist/{PreparedInputAdmission-Bt6rgtVu.d.mts → PreparedInputAdmission-CU1PzUVD.d.mts} +4 -4
- package/dist/{Records-B5GFWCpn.d.mts → Records-BrEpibum.d.mts} +17 -6
- package/dist/{RunEvent-DIrzkjLr.d.mts → RunEvent-DV_llBcq.d.mts} +18 -4
- package/dist/{RunJournal-Gd83HYqG.mjs → RunJournal-ixFRCyW3.mjs} +29 -7
- package/dist/RunJournal-ixFRCyW3.mjs.map +1 -0
- package/dist/{RunOptions-Bv9NpkPZ.d.mts → RunOptions-CkRYnlJa.d.mts} +22 -8
- package/dist/{RunPolicyUsage-ClZxyR46.d.mts → RunPolicyUsage-CUudVtg_.d.mts} +3 -1
- package/dist/{Schedule-CtYREFnz.d.mts → Schedule-B_z7PMg-.d.mts} +2 -2
- package/dist/{Subagent-hG9lJ7tJ.mjs → Subagent-CmFtZaeI.mjs} +2 -2
- package/dist/{Subagent-hG9lJ7tJ.mjs.map → Subagent-CmFtZaeI.mjs.map} +1 -1
- package/dist/{Subagent-VHrANXFy.d.mts → Subagent-Dld4W1BY.d.mts} +7 -7
- package/dist/{SubagentHost-C-4A7tA2.d.mts → SubagentHost--HBuY8fF.d.mts} +4 -4
- package/dist/{Subscription-BJAzYNw1.d.mts → Subscription-BomcQ9_W.d.mts} +5 -5
- package/dist/{SubscriptionInput-CkBJt0AS.d.mts → SubscriptionInput-gpZSR9vB.d.mts} +3 -3
- package/dist/{ThreadHistory-tS1KwxHR.d.mts → ThreadHistory-ZEu_ja6L.d.mts} +2 -2
- package/dist/{Worker-fwWkBg12.d.mts → Worker-2r2zGDkh.d.mts} +2 -2
- package/dist/{WorkerAdmission-CJ_oWRuS.mjs → WorkerAdmission-CNbm4o_x.mjs} +3 -3
- package/dist/{WorkerAdmission-CJ_oWRuS.mjs.map → WorkerAdmission-CNbm4o_x.mjs.map} +1 -1
- package/dist/{agent-registration-CKNsrpwo.mjs → agent-registration-U3kmV7nW.mjs} +18 -18
- package/dist/agent-registration-U3kmV7nW.mjs.map +1 -0
- package/dist/capabilities/BrowserUse.d.mts +545 -0
- package/dist/capabilities/BrowserUse.mjs +254 -0
- package/dist/capabilities/BrowserUse.mjs.map +1 -0
- package/dist/capabilities/Commands.d.mts +1 -1
- package/dist/capabilities/Messaging.d.mts +1 -1
- package/dist/capabilities/Redaction.d.mts +1 -1
- package/dist/capabilities/RunHooks.d.mts +1 -1
- package/dist/capabilities/Subagent.d.mts +2 -2
- package/dist/capabilities/Subagent.mjs +1 -1
- package/dist/core/Agent.d.mts +1 -1
- package/dist/core/AgentPolicy.d.mts +1 -1
- package/dist/core/AgentPolicy.mjs +2 -0
- package/dist/core/AgentPolicy.mjs.map +1 -1
- package/dist/core/RunEvent.d.mts +2 -2
- package/dist/core/RunEvent.mjs +10 -1
- package/dist/core/RunEvent.mjs.map +1 -1
- package/dist/core/RunPolicyUsage.d.mts +1 -1
- package/dist/core/RunPolicyUsage.mjs +6 -1
- package/dist/core/RunPolicyUsage.mjs.map +1 -1
- package/dist/core/Worker.d.mts +1 -1
- package/dist/durable/ActivityStore.d.mts +1 -1
- package/dist/durable/Admin.d.mts +1 -1
- package/dist/durable/AgentRegistration.d.mts +2 -2
- package/dist/durable/AgentRegistration.mjs +3 -2
- package/dist/durable/AgentRegistration.mjs.map +1 -1
- package/dist/durable/Certification.d.mts +1 -1
- package/dist/durable/CommittedActivity.d.mts +3 -3
- package/dist/durable/Digest.d.mts +1 -1
- package/dist/durable/DurableAgentRuntime.d.mts +1 -1
- package/dist/durable/DurableAgentRuntime.mjs +2 -2
- package/dist/durable/EventSource.d.mts +1 -1
- package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
- package/dist/durable/LifecyclePublication.d.mts +1 -1
- package/dist/durable/MessageDelivery.d.mts +5 -5
- package/dist/durable/MessageDeliveryStoreConformance.d.mts +42 -42
- package/dist/durable/PersistentHistory.d.mts +2 -2
- package/dist/durable/PersistentHistory.mjs +1 -1
- package/dist/durable/PreparedInputAdmission.d.mts +1 -1
- package/dist/durable/Records.d.mts +2 -2
- package/dist/durable/Records.mjs +16 -1
- package/dist/durable/Records.mjs.map +1 -1
- package/dist/durable/Recovery.d.mts +1 -1
- package/dist/durable/RunJournal.d.mts +1 -1
- package/dist/durable/RunJournal.mjs +1 -1
- package/dist/durable/Schedule.d.mts +1 -1
- package/dist/durable/ScheduleStoreConformance.d.mts +1 -1
- package/dist/durable/ScheduleTransition.d.mts +1 -1
- package/dist/durable/Scheduling.d.mts +3 -3
- package/dist/durable/SubmissionLedger.d.mts +1 -1
- package/dist/durable/SubmissionLedgerConformance.d.mts +2 -2
- package/dist/durable/SubmissionLedgerConformance.mjs +1 -1
- package/dist/durable/SubmissionStatus.d.mts +1 -1
- package/dist/durable/Subscription.d.mts +1 -1
- package/dist/durable/SubscriptionInput.d.mts +1 -1
- package/dist/durable/SubscriptionInput.mjs +1 -1
- package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
- package/dist/durable/SubscriptionTools.d.mts +4 -4
- package/dist/durable/SubscriptionTransition.d.mts +1 -1
- package/dist/durable/Subscriptions.d.mts +6 -6
- package/dist/durable/ThreadContextHistory.d.mts +1 -1
- package/dist/durable/ThreadContextHistoryProjection.d.mts +1 -1
- package/dist/durable/ThreadInvariants.d.mts +2 -2
- package/dist/durable/ThreadInvariants.mjs +1 -1
- package/dist/durable/ThreadProjection.d.mts +1 -1
- package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
- package/dist/durable/ThreadStore.d.mts +1 -1
- package/dist/durable/ThreadStore.mjs +1 -1
- package/dist/durable/ThreadStoreConformance.d.mts +1 -1
- package/dist/durable/ThreadStoreConformance.mjs +1 -1
- package/dist/durable/WorkerAdmission.d.mts +3 -3
- package/dist/durable/WorkerAdmission.mjs +1 -1
- package/dist/durable/WorkerHost.d.mts +5 -5
- package/dist/engine/AgentRuntime.d.mts +1 -1
- package/dist/engine/AgentRuntime.mjs +1 -1
- package/dist/engine/Compaction.d.mts +1 -1
- package/dist/engine/ContextCompactor.d.mts +1 -1
- package/dist/engine/MessagingHost.d.mts +1 -1
- package/dist/engine/Output.d.mts +1 -1
- package/dist/engine/RunOptions.d.mts +1 -1
- package/dist/engine/RunOptions.mjs.map +1 -1
- package/dist/engine/SubagentHost.d.mts +1 -1
- package/dist/engine/ThreadHistory.d.mts +1 -1
- package/dist/index.d.mts +24 -23
- package/dist/index.mjs +7 -6
- package/package.json +1 -1
- package/src/capabilities/BrowserUse.ts +367 -0
- package/src/core/AgentPolicy.ts +2 -0
- package/src/core/RunEvent.ts +9 -0
- package/src/core/RunPolicyUsage.ts +2 -0
- package/src/durable/AgentRegistration.ts +2 -0
- package/src/durable/DurableAgentRuntime.ts +320 -137
- package/src/durable/Records.ts +12 -0
- package/src/durable/RunJournal.ts +88 -27
- package/src/durable/internal/agent-registration.ts +58 -35
- package/src/engine/RunOptions.ts +17 -2
- package/src/engine/internal/agent-runtime.ts +115 -8
- package/src/index.ts +1 -0
- package/dist/AgentRuntime-D8U9gl9Q.mjs.map +0 -1
- package/dist/DurableAgentRuntime-DQFV26SB.mjs.map +0 -1
- package/dist/RunJournal-Gd83HYqG.mjs.map +0 -1
- package/dist/agent-registration-CKNsrpwo.mjs.map +0 -1
|
@@ -4,14 +4,14 @@ import { SubagentBudgetExhausted, SubagentReservations } from "./capabilities/Su
|
|
|
4
4
|
import { a as Receipt, n as JoinedToHost, t as IdempotencyKey } from "./Receipt-BAHyigAF.mjs";
|
|
5
5
|
import { r as Update } from "./AgentUpdates-DMJ-_xow.mjs";
|
|
6
6
|
import { s as RunTotals } from "./Usage-Dx0aknfk.mjs";
|
|
7
|
-
import { t as ThreadHistory } from "./ThreadHistory-
|
|
7
|
+
import { t as ThreadHistory } from "./ThreadHistory-ZEu_ja6L.mjs";
|
|
8
8
|
import { a as FailureDiagnostic_d_exports, r as Diagnostic } from "./FailureDiagnostic-CaAkzGHL.mjs";
|
|
9
|
-
import { E as RunDispositionDeclaration, _ as InstructionSource, c as Definition, m as InputPromptSource, r as AnyDefinition, y as ModelServices } from "./Agent-
|
|
10
|
-
import { a as WorkerBudgetScope, c as WorkerError, f as WorkerRef, o as WorkerCompletion, p as WorkerReport } from "./Worker-
|
|
11
|
-
import { V as RunSubagentDigests, x as RunContextPreparation } from "./RunOptions-
|
|
9
|
+
import { E as RunDispositionDeclaration, _ as InstructionSource, c as Definition, m as InputPromptSource, r as AnyDefinition, y as ModelServices } from "./Agent-BCyrGaWg.mjs";
|
|
10
|
+
import { a as WorkerBudgetScope, c as WorkerError, f as WorkerRef, o as WorkerCompletion, p as WorkerReport } from "./Worker-2r2zGDkh.mjs";
|
|
11
|
+
import { V as RunSubagentDigests, x as RunContextPreparation } from "./RunOptions-CkRYnlJa.mjs";
|
|
12
12
|
import { c as MessageRef, l as MessageStatus } from "./Messaging-Dkg87ebg.mjs";
|
|
13
|
-
import { f as WorkerReporting, o as SubagentHost } from "./SubagentHost
|
|
14
|
-
import { S as ToolCallWaiting, _ as SubagentDurability, b as SubagentDurabilityError, c as AgentSpawner, h as SpawnRunOptions, l as AgentSpawnerParent, o as AgentRuntimeFailure, p as RuntimeBinding, s as AgentRuntimeRequirements } from "./AgentRuntime-
|
|
13
|
+
import { f as WorkerReporting, o as SubagentHost } from "./SubagentHost--HBuY8fF.mjs";
|
|
14
|
+
import { S as ToolCallWaiting, _ as SubagentDurability, b as SubagentDurabilityError, c as AgentSpawner, h as SpawnRunOptions, l as AgentSpawnerParent, o as AgentRuntimeFailure, p as RuntimeBinding, s as AgentRuntimeRequirements } from "./AgentRuntime-BAjT5gXl.mjs";
|
|
15
15
|
import { t as RunEventSink } from "./RunEventSink-D5aVhISG.mjs";
|
|
16
16
|
import { Tool, Toolkit } from "effect/unstable/ai";
|
|
17
17
|
import { Crypto, Duration, Effect, Layer, Schema, Scope, Stream } from "effect";
|
|
@@ -1649,4 +1649,4 @@ declare function background<const Name extends string, Input extends Schema.Top,
|
|
|
1649
1649
|
declare function background<const Name extends string, Input extends Schema.Top, Output extends Schema.Top, Parameters extends Schema.Top, Success extends Schema.Top, Failure extends Schema.Top, Prepare, Project, const Selected extends BackgroundOptions>(declaration: Declaration<Name, Input, Output, Parameters, Success, Failure, Prepare, Project>, selected: Selected): ReturnType<typeof background$1<Name, Input, Output, Parameters, Success, Failure, Prepare, Project, Selected>>;
|
|
1650
1650
|
//#endregion
|
|
1651
1651
|
export { inspect as A, delegationCapsFromPolicy as B, BackgroundOptions as C, awaitWorker as D, WorkerObservation as E, SubagentPolicy as F, SubagentPolicyInput as I, SubagentPrestartDenied as L, observe as M, start as N, cancel as O, stop as P, SubagentProjectionFailure as R, make as S, Worker as T, SubagentTools as _, SubagentDelegation as a, define as b, SubagentFailureMode as c, SubagentResult as d, SubagentResultContext as f, SubagentToolFailure as g, SubagentTool as h, SubagentDefineOptions as i, list as j, followUp as k, SubagentLayerRequirements as l, SubagentRuntimeOptions as m, SubagentContainedFailure as n, SubagentDurableAccounting as o, SubagentReturnModeFailure as p, SubagentDeclarationOptions as r, SubagentDurableOptions as s, SubagentChildRunFailure as t, SubagentPrepareContext as u, Subagent_d_exports as v, BackgroundTools as w, layer as x, background as y, delegationAllocationFromPolicy as z };
|
|
1652
|
-
//# sourceMappingURL=Subagent-
|
|
1652
|
+
//# sourceMappingURL=Subagent-Dld4W1BY.d.mts.map
|
|
@@ -3,9 +3,9 @@ import { i as SubagentBudgetReservation } from "./SubagentContract-DdT7Cqe6.mjs"
|
|
|
3
3
|
import { a as Receipt, n as JoinedToHost, t as IdempotencyKey } from "./Receipt-BAHyigAF.mjs";
|
|
4
4
|
import { r as Update } from "./AgentUpdates-DMJ-_xow.mjs";
|
|
5
5
|
import { a as FailureDiagnostic_d_exports, i as Failure } from "./FailureDiagnostic-CaAkzGHL.mjs";
|
|
6
|
-
import { t as AgentPolicy } from "./AgentPolicy-
|
|
7
|
-
import { r as AnyDefinition, t as Agent_d_exports } from "./Agent-
|
|
8
|
-
import { _ as WorkerStop, a as WorkerBudgetScope, c as WorkerError, d as WorkerPage, f as WorkerRef, g as WorkerStarted, h as WorkerSource, l as WorkerHistoryEntry, o as WorkerCompletion, s as WorkerContext, v as WorkerStopped, y as WorkerSummary } from "./Worker-
|
|
6
|
+
import { t as AgentPolicy } from "./AgentPolicy-CnXWWwdg.mjs";
|
|
7
|
+
import { r as AnyDefinition, t as Agent_d_exports } from "./Agent-BCyrGaWg.mjs";
|
|
8
|
+
import { _ as WorkerStop, a as WorkerBudgetScope, c as WorkerError, d as WorkerPage, f as WorkerRef, g as WorkerStarted, h as WorkerSource, l as WorkerHistoryEntry, o as WorkerCompletion, s as WorkerContext, v as WorkerStopped, y as WorkerSummary } from "./Worker-2r2zGDkh.mjs";
|
|
9
9
|
import { c as MessageRef, l as MessageStatus } from "./Messaging-Dkg87ebg.mjs";
|
|
10
10
|
import { Context, Effect, Option, Schema, Stream } from "effect";
|
|
11
11
|
declare namespace SubagentHost_d_exports {
|
|
@@ -169,4 +169,4 @@ declare class SubagentHost extends SubagentHost_base {
|
|
|
169
169
|
}
|
|
170
170
|
//#endregion
|
|
171
171
|
export { StartWorkerRequest as a, WorkerMessageRequest as c, WorkerReportPreparationFailure as d, WorkerReporting as f, FollowUpWorkerRequest as i, WorkerObservation as l, DeferredFollowUpWorkerRequest as n, SubagentHost as o, WorkerRunReport as p, DeferredStartWorkerRequest as r, SubagentHost_d_exports as s, BackgroundReporting as t, WorkerReceiptRequest as u };
|
|
172
|
-
//# sourceMappingURL=SubagentHost
|
|
172
|
+
//# sourceMappingURL=SubagentHost--HBuY8fF.d.mts.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { d as SubagentReservationAmounts, l as SubagentGrant, o as SubagentDelegationCaps, s as SubagentExecutionFailure } from "./SubagentContract-DdT7Cqe6.mjs";
|
|
2
2
|
import { a as Receipt, r as Principal } from "./Receipt-BAHyigAF.mjs";
|
|
3
3
|
import { r as Update } from "./AgentUpdates-DMJ-_xow.mjs";
|
|
4
|
-
import { t as AgentPolicy } from "./AgentPolicy-
|
|
5
|
-
import { _ as Digest, h as DefinitionDigests } from "./Records-
|
|
6
|
-
import "./Admin-
|
|
7
|
-
import { t as ScheduleAuthorizationDecision } from "./Schedule-
|
|
4
|
+
import { t as AgentPolicy } from "./AgentPolicy-CnXWWwdg.mjs";
|
|
5
|
+
import { _ as Digest, h as DefinitionDigests } from "./Records-BrEpibum.mjs";
|
|
6
|
+
import "./Admin-BjmupLN3.mjs";
|
|
7
|
+
import { t as ScheduleAuthorizationDecision } from "./Schedule-B_z7PMg-.mjs";
|
|
8
8
|
import { Context, Effect, Schema } from "effect";
|
|
9
9
|
declare namespace Subscription_d_exports {
|
|
10
10
|
export { AcceptedEvent, DeliveryChange, EventAcknowledgement, EventSourceVersion, PreparedInput, SourcePartition, SourceRecovery, SubscriptionAuthorizer, SubscriptionChange, SubscriptionConfiguration, SubscriptionDelivery, SubscriptionDeliveryKey, SubscriptionDeliverySnapshot, SubscriptionError, SubscriptionFailpoint, SubscriptionFailpointError, SubscriptionKey, SubscriptionLimits, SubscriptionName, SubscriptionRecord, SubscriptionRefusal, SubscriptionRetentionPolicy, SubscriptionScanCursors, SubscriptionScope, SubscriptionSnapshot, SubscriptionSourceError, SubscriptionStore, SubscriptionStoreFailure, defaultSubscriptionLimits, subscriptionDeliveryKeyString, subscriptionKeyString };
|
|
@@ -976,4 +976,4 @@ declare const subscriptionKeyString: (key: SubscriptionKey) => string;
|
|
|
976
976
|
declare const subscriptionDeliveryKeyString: (key: SubscriptionDeliveryKey) => string;
|
|
977
977
|
//#endregion
|
|
978
978
|
export { defaultSubscriptionLimits as A, SubscriptionScanCursors as C, SubscriptionStore as D, SubscriptionSourceError as E, subscriptionKeyString as M, SubscriptionStoreFailure as O, SubscriptionRetentionPolicy as S, SubscriptionSnapshot as T, SubscriptionKey as _, PreparedInput as a, SubscriptionRecord as b, SubscriptionAuthorizer as c, SubscriptionDelivery as d, SubscriptionDeliveryKey as f, SubscriptionFailpointError as g, SubscriptionFailpoint as h, EventSourceVersion as i, subscriptionDeliveryKeyString as j, Subscription_d_exports as k, SubscriptionChange as l, SubscriptionError as m, DeliveryChange as n, SourcePartition as o, SubscriptionDeliverySnapshot as p, EventAcknowledgement as r, SourceRecovery as s, AcceptedEvent as t, SubscriptionConfiguration as u, SubscriptionLimits as v, SubscriptionScope as w, SubscriptionRefusal as x, SubscriptionName as y };
|
|
979
|
-
//# sourceMappingURL=Subscription-
|
|
979
|
+
//# sourceMappingURL=Subscription-BomcQ9_W.d.mts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as AgentId } from "./Identifiers-CN2s30fF.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { E as SubscriptionSourceError, b as SubscriptionRecord, i as EventSourceVersion, m as SubscriptionError, t as AcceptedEvent, u as SubscriptionConfiguration } from "./Subscription-
|
|
2
|
+
import { h as DefinitionDigests, k as PersistedJson } from "./Records-BrEpibum.mjs";
|
|
3
|
+
import { E as SubscriptionSourceError, b as SubscriptionRecord, i as EventSourceVersion, m as SubscriptionError, t as AcceptedEvent, u as SubscriptionConfiguration } from "./Subscription-BomcQ9_W.mjs";
|
|
4
4
|
import { Context, Effect, Schema, Scope } from "effect";
|
|
5
5
|
declare namespace SubscriptionInput_d_exports {
|
|
6
6
|
export { SubscriptionInputBinding, SubscriptionInputBindings, makeSubscriptionInputBinding, resolveSubscriptionInput };
|
|
@@ -38,4 +38,4 @@ declare const makeSubscriptionInputBinding: <Event extends Schema.Top, Parameter
|
|
|
38
38
|
}) => Effect.Effect<SubscriptionInputBinding, never, Exclude<R, Scope.Scope> | Exclude<Continuation["DecodingServices"], Scope.Scope> | Exclude<Continuation["EncodingServices"], Scope.Scope> | Exclude<Event["DecodingServices"], Scope.Scope> | Exclude<Input["EncodingServices"], Scope.Scope> | Exclude<Parameters["DecodingServices"], Scope.Scope>>;
|
|
39
39
|
//#endregion
|
|
40
40
|
export { resolveSubscriptionInput as a, makeSubscriptionInputBinding as i, SubscriptionInputBindings as n, SubscriptionInput_d_exports as r, SubscriptionInputBinding as t };
|
|
41
|
-
//# sourceMappingURL=SubscriptionInput-
|
|
41
|
+
//# sourceMappingURL=SubscriptionInput-gpZSR9vB.d.mts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { s as RunId, u as ThreadId } from "./Identifiers-CN2s30fF.mjs";
|
|
2
2
|
import { t as Store } from "./Thread-DOBQ0QUY.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { l as RunCompleted } from "./RunEvent-DV_llBcq.mjs";
|
|
4
4
|
import { Prompt } from "effect/unstable/ai";
|
|
5
5
|
import { Context, Effect, Layer, Schema } from "effect";
|
|
6
6
|
declare namespace ThreadHistory_d_exports {
|
|
@@ -57,4 +57,4 @@ declare class ThreadHistory extends ThreadHistory_base {
|
|
|
57
57
|
declare const layer: Layer.Layer<Store | ThreadHistory, never, never>;
|
|
58
58
|
//#endregion
|
|
59
59
|
export { layer as a, ThreadHistory_d_exports as i, ThreadHistoryError as n, ThreadHistoryRun as r, ThreadHistory as t };
|
|
60
|
-
//# sourceMappingURL=ThreadHistory-
|
|
60
|
+
//# sourceMappingURL=ThreadHistory-ZEu_ja6L.d.mts.map
|
|
@@ -2,7 +2,7 @@ import { l as SubagentGrant, p as WorkerOperationTool, s as SubagentExecutionFai
|
|
|
2
2
|
import { a as Receipt } from "./Receipt-BAHyigAF.mjs";
|
|
3
3
|
import { r as Update } from "./AgentUpdates-DMJ-_xow.mjs";
|
|
4
4
|
import { a as FailureDiagnostic_d_exports, r as Diagnostic } from "./FailureDiagnostic-CaAkzGHL.mjs";
|
|
5
|
-
import { t as AgentPolicy } from "./AgentPolicy-
|
|
5
|
+
import { t as AgentPolicy } from "./AgentPolicy-CnXWWwdg.mjs";
|
|
6
6
|
import { Schema } from "effect";
|
|
7
7
|
declare namespace Worker_d_exports {
|
|
8
8
|
export { AssignmentDisposition, AssignmentTerminal, FrameworkMessage, WorkerAppliedInput, WorkerBudgetScope, WorkerCompletion, WorkerContext, WorkerError, WorkerHistoryEntry, WorkerInput, WorkerOperationTool, WorkerPage, WorkerRef, WorkerReport, WorkerRun, WorkerSource, WorkerStarted, WorkerStop, WorkerStopped, WorkerSummary, WorkerUpdate };
|
|
@@ -469,4 +469,4 @@ declare const FrameworkMessage: Schema.Union<readonly [Schema.Struct<{
|
|
|
469
469
|
type FrameworkMessage = typeof FrameworkMessage.Type;
|
|
470
470
|
//#endregion
|
|
471
471
|
export { WorkerStop as _, WorkerBudgetScope as a, WorkerUpdate as b, WorkerError as c, WorkerPage as d, WorkerRef as f, WorkerStarted as g, WorkerSource as h, WorkerAppliedInput as i, WorkerHistoryEntry as l, WorkerRun as m, AssignmentTerminal as n, WorkerCompletion as o, WorkerReport as p, FrameworkMessage as r, WorkerContext as s, AssignmentDisposition as t, WorkerInput as u, WorkerStopped as v, Worker_d_exports as x, WorkerSummary as y };
|
|
472
|
-
//# sourceMappingURL=Worker-
|
|
472
|
+
//# sourceMappingURL=Worker-2r2zGDkh.d.mts.map
|
|
@@ -2,8 +2,8 @@ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
|
2
2
|
import { c as WorkerError } from "./Worker-CfwzMZEK.mjs";
|
|
3
3
|
import { BatchId, CanonicalBatch, ProducerEpoch, ProducerId, RecordEnvelope, RecordId, ThreadCreated, WorkerAdmission, WorkerOrigin, WorkerOriginRecorded } from "./durable/Records.mjs";
|
|
4
4
|
import { AdmissionConflict, AdmissionPolicyError, AdmissionRequest, LedgerError, MarkReadyRequest, SubmissionLedger } from "./durable/SubmissionLedger.mjs";
|
|
5
|
-
import {
|
|
6
|
-
import { $ as workerOriginRecordId } from "./RunJournal-
|
|
5
|
+
import { o as definitionDigestsEqual } from "./agent-registration-U3kmV7nW.mjs";
|
|
6
|
+
import { $ as workerOriginRecordId } from "./RunJournal-ixFRCyW3.mjs";
|
|
7
7
|
import { AppendConflict, FenceRejected, FencedAppendRequest, ThreadIdentityRequest, ThreadMaterialization, ThreadNotMaterialized, ThreadStore, ThreadStoreError, ThreadTailRequest } from "./durable/ThreadStore.mjs";
|
|
8
8
|
import { DurableRuntimeFailpoint, DurableRuntimeFailpointError } from "./durable/DurableFailpoint.mjs";
|
|
9
9
|
import { WakeScheduler } from "./durable/WakeScheduler.mjs";
|
|
@@ -168,4 +168,4 @@ const WorkerAdmissionPort = Context.Reference("@effect-agent/thread/WorkerAdmiss
|
|
|
168
168
|
//#endregion
|
|
169
169
|
export { admitWorker as a, threadCreatedBatchId as c, WorkerAdmission_exports as i, threadCreatedRecordId as l, WorkerAdmissionPort as n, ensureThreadCreated as o, WorkerAdmissionRequest as r, ensureWorkerOrigin as s, WorkerAdmissionFailure as t };
|
|
170
170
|
|
|
171
|
-
//# sourceMappingURL=WorkerAdmission-
|
|
171
|
+
//# sourceMappingURL=WorkerAdmission-CNbm4o_x.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerAdmission-CJ_oWRuS.mjs","names":[],"sources":["../src/durable/internal/thread-initialization.ts","../src/durable/WorkerAdmission.ts"],"sourcesContent":["import { DateTime, Effect, Schema } from \"effect\";\n\nimport type { AgentId, ThreadId } from \"../../core/Identifiers.ts\";\nimport { WorkerError } from \"../../core/Worker.ts\";\nimport { DurableRuntimeFailpoint } from \"../DurableFailpoint.ts\";\nimport {\n BatchId,\n CanonicalBatch,\n RecordEnvelope,\n RecordId,\n ThreadCreated,\n WorkerOrigin,\n WorkerOriginRecorded,\n type DefinitionDigests,\n type DeploymentId,\n type ProducerId,\n} from \"../Records.ts\";\nimport { workerOriginRecordId } from \"../RunJournal.ts\";\nimport type {\n AppendConflict,\n FenceRejected,\n ThreadNotMaterialized,\n ThreadStoreError,\n} from \"../ThreadStore.ts\";\nimport {\n FencedAppendRequest,\n ThreadIdentityRequest,\n ThreadTailRequest,\n ThreadStore,\n} from \"../ThreadStore.ts\";\nimport { WakeScheduler } from \"../WakeScheduler.ts\";\nimport { definitionDigestsEqual } from \"./agent-registration.ts\";\n\ninterface InitializationConfig {\n readonly producerId: ProducerId;\n readonly deploymentId: DeploymentId;\n}\n\n/** Stable identities retained across admission retries and recovery. */\nexport const threadCreatedBatchId = (threadId: ThreadId): BatchId =>\n Schema.decodeSync(BatchId)(`thread-created:${threadId}`);\n\nexport const threadCreatedRecordId = (threadId: ThreadId): RecordId =>\n Schema.decodeSync(RecordId)(`thread-created:${threadId}`);\n\n/**\n * Coordinator invariant: every Thread's first canonical record is `ThreadCreated`,\n * so `tailSequence >= 1` is the deterministic already-created check. A lost race (conflict or\n * fence) is verified against that invariant instead of being trusted blindly. An admitted\n * child can be claimed before it is runnable; that advances the shared storage fence without\n * appending anything. Re-read and retry that initialization race with the current fence.\n */\nexport const ensureThreadCreated = Effect.fn(\"DurableAgentRuntime.ensureThreadCreated\")(\n function* (\n config: InitializationConfig,\n threadId: ThreadId,\n agentId: AgentId,\n definitions: DefinitionDigests,\n ): Effect.fn.Return<\n void,\n ThreadStoreError | ThreadNotMaterialized | AppendConflict | FenceRejected,\n ThreadStore | WakeScheduler\n > {\n const store = yield* ThreadStore;\n const wake = yield* WakeScheduler;\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n if (tail.tailSequence > 0) return;\n\n const record = yield* Effect.map(DateTime.now, (createdAt) =>\n RecordEnvelope.make({\n recordId: threadCreatedRecordId(threadId),\n family: \"thread\",\n schemaVersion: 1,\n createdAt,\n deploymentId: config.deploymentId,\n payload: ThreadCreated.make({ agentId, definitions }),\n }),\n );\n\n yield* store\n .append(\n FencedAppendRequest.make({\n threadId,\n batch: CanonicalBatch.make({\n batchId: threadCreatedBatchId(threadId),\n producerId: config.producerId,\n records: [record],\n }),\n expectedTailSequence: tail.tailSequence,\n expectedTailDigest: tail.tailDigest,\n producerEpoch: tail.producerEpoch,\n }),\n )\n .pipe(\n Effect.catchTag([\"AppendConflict\", \"FenceRejected\"], (error) =>\n store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(\n Effect.flatMap((current) =>\n current.tailSequence > 0 ? Effect.void : Effect.fail(error),\n ),\n ),\n ),\n Effect.andThen(wake.notify(threadId)),\n Effect.asVoid,\n );\n },\n (effect) =>\n effect.pipe(\n Effect.retry({\n times: 7,\n while: (error) => error._tag === \"AppendConflict\" || error._tag === \"FenceRejected\",\n }),\n ),\n);\n\nconst sameOrigin = Schema.toEquivalence(WorkerOrigin);\n\nexport const ensureWorkerOrigin = Effect.fn(\"WorkerHost.ensureOrigin\")(\n function* (config: InitializationConfig, origin: WorkerOrigin) {\n const store = yield* ThreadStore;\n const failpoint = yield* DurableRuntimeFailpoint;\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const current = yield* store.readIdentity(\n ThreadIdentityRequest.make({ threadId: origin.worker.threadId }),\n );\n\n const existing = current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n if (existing?._tag === \"WorkerOriginRecorded\") {\n if (!sameOrigin(existing.origin, origin))\n return yield* WorkerError.make({ operation: \"start\", reason: \"worker-mismatch\" });\n\n return;\n }\n const first = current.records[0]?.record.payload;\n\n if (\n first?._tag !== \"ThreadCreated\" ||\n first.agentId !== origin.worker.targetAgentId ||\n !definitionDigestsEqual(first.definitions, origin.targetDigests) ||\n current.records.some(({ record }) => record.payload._tag === \"SubagentLineageRecorded\")\n )\n return yield* WorkerError.make({ operation: \"start\", reason: \"worker-mismatch\" });\n const id = workerOriginRecordId(origin.worker.threadId);\n\n yield* failpoint.hit(\"worker:before-origin-append\");\n\n const appended = yield* store\n .append(\n FencedAppendRequest.make({\n threadId: origin.worker.threadId,\n producerEpoch: current.producerEpoch,\n expectedTailSequence: current.tailSequence,\n expectedTailDigest: current.tailDigest,\n batch: CanonicalBatch.make({\n batchId: Schema.decodeSync(BatchId)(id),\n producerId: config.producerId,\n records: [\n RecordEnvelope.make({\n recordId: id,\n family: \"thread\",\n schemaVersion: 1,\n createdAt: DateTime.makeUnsafe(origin.createdAtMillis),\n deploymentId: config.deploymentId,\n payload: WorkerOriginRecorded.make({ origin }),\n }),\n ],\n }),\n }),\n )\n .pipe(\n Effect.as(true),\n Effect.catchTag([\"AppendConflict\", \"FenceRejected\"], () => Effect.succeed(false)),\n );\n\n if (appended) {\n yield* failpoint.hit(\"worker:after-origin-append\");\n\n return;\n }\n }\n\n return yield* WorkerError.make({ operation: \"start\", reason: \"storage\" });\n },\n Effect.mapError((cause) =>\n cause._tag === \"WorkerError\"\n ? cause\n : WorkerError.make({ operation: \"start\", reason: \"storage\", cause }),\n ),\n);\n","import { Context, Effect, Schema } from \"effect\";\n\nimport { DurableRuntimeFailpoint, DurableRuntimeFailpointError } from \"./DurableFailpoint.ts\";\nimport { ensureThreadCreated, ensureWorkerOrigin } from \"./internal/thread-initialization.ts\";\nimport { ProducerEpoch, ProducerId, WorkerAdmission } from \"./Records.ts\";\nimport {\n AdmissionConflict,\n AdmissionPolicyError,\n AdmissionRequest,\n LedgerError,\n MarkReadyRequest,\n SubmissionLedger,\n} from \"./SubmissionLedger.ts\";\nimport {\n AppendConflict,\n FenceRejected,\n ThreadMaterialization,\n ThreadNotMaterialized,\n ThreadStore,\n ThreadStoreError,\n} from \"./ThreadStore.ts\";\nimport { WakeScheduler } from \"./WakeScheduler.ts\";\n\n/**\n * Storage admission after source authorization, input validation and capacity reservation.\n * This is an internal host port, not an authorization entrypoint. Hosts route the whole\n * operation to the destination owner and enroll recovery before executing it.\n */\nexport class WorkerAdmissionRequest extends Schema.Class<WorkerAdmissionRequest>(\n \"@effect-agent/thread/WorkerAdmissionRequest\",\n)({\n ...AdmissionRequest.fields,\n workerAdmission: WorkerAdmission,\n producerId: ProducerId,\n}) {}\n\nexport const WorkerAdmissionFailure = Schema.Union([\n AdmissionConflict,\n AdmissionPolicyError,\n LedgerError,\n ThreadStoreError,\n ThreadNotMaterialized,\n AppendConflict,\n FenceRejected,\n DurableRuntimeFailpointError,\n]);\n\n/** Local implementation shared by every host; retries finish the same admitted row. */\nexport const admitWorker = Effect.fn(\"WorkerAdmission.admitWorker\")(function* (\n request: WorkerAdmissionRequest,\n) {\n const origin = request.workerAdmission.origin;\n\n if (\n origin.worker.threadId !== request.threadId ||\n origin.worker.targetAgentId !== request.agentId ||\n request.parentLinkage !== undefined\n )\n return yield* LedgerError.make({\n operation: \"admit worker\",\n message: \"Worker admission does not belong to the destination Thread\",\n });\n\n const ledger = yield* SubmissionLedger;\n const store = yield* ThreadStore;\n const wake = yield* WakeScheduler;\n const failpoint = yield* DurableRuntimeFailpoint;\n const admitted = yield* ledger.admit(AdmissionRequest.make(request));\n\n yield* failpoint.hit(\"submit:after-admit\");\n if (admitted.replayed && admitted.state !== \"admitted\") return admitted;\n\n yield* store\n .materialize(\n ThreadMaterialization.make({\n threadId: request.threadId,\n producerEpoch: Schema.decodeSync(ProducerEpoch)(0),\n }),\n )\n .pipe(Effect.catchTag(\"FenceRejected\", () => Effect.void));\n\n const config = {\n producerId: request.producerId,\n deploymentId: request.deploymentId,\n };\n\n yield* ensureThreadCreated(config, request.threadId, request.agentId, request.agentDigests);\n yield* ensureWorkerOrigin(config, origin).pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-origin\", message: cause.reason, cause }),\n ),\n );\n yield* failpoint.hit(\"submit:after-materialize\");\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: admitted.submissionId }));\n yield* wake.notify(request.threadId);\n\n return admitted;\n});\n\n/** Placement adapter for the composite operation; local hosts use the same implementation. */\nexport const WorkerAdmissionPort = Context.Reference<{ readonly admit: typeof admitWorker }>(\n \"@effect-agent/thread/WorkerAdmissionPort\",\n { defaultValue: () => ({ admit: admitWorker }) },\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkerAdmission-CNbm4o_x.mjs","names":[],"sources":["../src/durable/internal/thread-initialization.ts","../src/durable/WorkerAdmission.ts"],"sourcesContent":["import { DateTime, Effect, Schema } from \"effect\";\n\nimport type { AgentId, ThreadId } from \"../../core/Identifiers.ts\";\nimport { WorkerError } from \"../../core/Worker.ts\";\nimport { DurableRuntimeFailpoint } from \"../DurableFailpoint.ts\";\nimport {\n BatchId,\n CanonicalBatch,\n RecordEnvelope,\n RecordId,\n ThreadCreated,\n WorkerOrigin,\n WorkerOriginRecorded,\n type DefinitionDigests,\n type DeploymentId,\n type ProducerId,\n} from \"../Records.ts\";\nimport { workerOriginRecordId } from \"../RunJournal.ts\";\nimport type {\n AppendConflict,\n FenceRejected,\n ThreadNotMaterialized,\n ThreadStoreError,\n} from \"../ThreadStore.ts\";\nimport {\n FencedAppendRequest,\n ThreadIdentityRequest,\n ThreadTailRequest,\n ThreadStore,\n} from \"../ThreadStore.ts\";\nimport { WakeScheduler } from \"../WakeScheduler.ts\";\nimport { definitionDigestsEqual } from \"./agent-registration.ts\";\n\ninterface InitializationConfig {\n readonly producerId: ProducerId;\n readonly deploymentId: DeploymentId;\n}\n\n/** Stable identities retained across admission retries and recovery. */\nexport const threadCreatedBatchId = (threadId: ThreadId): BatchId =>\n Schema.decodeSync(BatchId)(`thread-created:${threadId}`);\n\nexport const threadCreatedRecordId = (threadId: ThreadId): RecordId =>\n Schema.decodeSync(RecordId)(`thread-created:${threadId}`);\n\n/**\n * Coordinator invariant: every Thread's first canonical record is `ThreadCreated`,\n * so `tailSequence >= 1` is the deterministic already-created check. A lost race (conflict or\n * fence) is verified against that invariant instead of being trusted blindly. An admitted\n * child can be claimed before it is runnable; that advances the shared storage fence without\n * appending anything. Re-read and retry that initialization race with the current fence.\n */\nexport const ensureThreadCreated = Effect.fn(\"DurableAgentRuntime.ensureThreadCreated\")(\n function* (\n config: InitializationConfig,\n threadId: ThreadId,\n agentId: AgentId,\n definitions: DefinitionDigests,\n ): Effect.fn.Return<\n void,\n ThreadStoreError | ThreadNotMaterialized | AppendConflict | FenceRejected,\n ThreadStore | WakeScheduler\n > {\n const store = yield* ThreadStore;\n const wake = yield* WakeScheduler;\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n if (tail.tailSequence > 0) return;\n\n const record = yield* Effect.map(DateTime.now, (createdAt) =>\n RecordEnvelope.make({\n recordId: threadCreatedRecordId(threadId),\n family: \"thread\",\n schemaVersion: 1,\n createdAt,\n deploymentId: config.deploymentId,\n payload: ThreadCreated.make({ agentId, definitions }),\n }),\n );\n\n yield* store\n .append(\n FencedAppendRequest.make({\n threadId,\n batch: CanonicalBatch.make({\n batchId: threadCreatedBatchId(threadId),\n producerId: config.producerId,\n records: [record],\n }),\n expectedTailSequence: tail.tailSequence,\n expectedTailDigest: tail.tailDigest,\n producerEpoch: tail.producerEpoch,\n }),\n )\n .pipe(\n Effect.catchTag([\"AppendConflict\", \"FenceRejected\"], (error) =>\n store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(\n Effect.flatMap((current) =>\n current.tailSequence > 0 ? Effect.void : Effect.fail(error),\n ),\n ),\n ),\n Effect.andThen(wake.notify(threadId)),\n Effect.asVoid,\n );\n },\n (effect) =>\n effect.pipe(\n Effect.retry({\n times: 7,\n while: (error) => error._tag === \"AppendConflict\" || error._tag === \"FenceRejected\",\n }),\n ),\n);\n\nconst sameOrigin = Schema.toEquivalence(WorkerOrigin);\n\nexport const ensureWorkerOrigin = Effect.fn(\"WorkerHost.ensureOrigin\")(\n function* (config: InitializationConfig, origin: WorkerOrigin) {\n const store = yield* ThreadStore;\n const failpoint = yield* DurableRuntimeFailpoint;\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const current = yield* store.readIdentity(\n ThreadIdentityRequest.make({ threadId: origin.worker.threadId }),\n );\n\n const existing = current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n if (existing?._tag === \"WorkerOriginRecorded\") {\n if (!sameOrigin(existing.origin, origin))\n return yield* WorkerError.make({ operation: \"start\", reason: \"worker-mismatch\" });\n\n return;\n }\n const first = current.records[0]?.record.payload;\n\n if (\n first?._tag !== \"ThreadCreated\" ||\n first.agentId !== origin.worker.targetAgentId ||\n !definitionDigestsEqual(first.definitions, origin.targetDigests) ||\n current.records.some(({ record }) => record.payload._tag === \"SubagentLineageRecorded\")\n )\n return yield* WorkerError.make({ operation: \"start\", reason: \"worker-mismatch\" });\n const id = workerOriginRecordId(origin.worker.threadId);\n\n yield* failpoint.hit(\"worker:before-origin-append\");\n\n const appended = yield* store\n .append(\n FencedAppendRequest.make({\n threadId: origin.worker.threadId,\n producerEpoch: current.producerEpoch,\n expectedTailSequence: current.tailSequence,\n expectedTailDigest: current.tailDigest,\n batch: CanonicalBatch.make({\n batchId: Schema.decodeSync(BatchId)(id),\n producerId: config.producerId,\n records: [\n RecordEnvelope.make({\n recordId: id,\n family: \"thread\",\n schemaVersion: 1,\n createdAt: DateTime.makeUnsafe(origin.createdAtMillis),\n deploymentId: config.deploymentId,\n payload: WorkerOriginRecorded.make({ origin }),\n }),\n ],\n }),\n }),\n )\n .pipe(\n Effect.as(true),\n Effect.catchTag([\"AppendConflict\", \"FenceRejected\"], () => Effect.succeed(false)),\n );\n\n if (appended) {\n yield* failpoint.hit(\"worker:after-origin-append\");\n\n return;\n }\n }\n\n return yield* WorkerError.make({ operation: \"start\", reason: \"storage\" });\n },\n Effect.mapError((cause) =>\n cause._tag === \"WorkerError\"\n ? cause\n : WorkerError.make({ operation: \"start\", reason: \"storage\", cause }),\n ),\n);\n","import { Context, Effect, Schema } from \"effect\";\n\nimport { DurableRuntimeFailpoint, DurableRuntimeFailpointError } from \"./DurableFailpoint.ts\";\nimport { ensureThreadCreated, ensureWorkerOrigin } from \"./internal/thread-initialization.ts\";\nimport { ProducerEpoch, ProducerId, WorkerAdmission } from \"./Records.ts\";\nimport {\n AdmissionConflict,\n AdmissionPolicyError,\n AdmissionRequest,\n LedgerError,\n MarkReadyRequest,\n SubmissionLedger,\n} from \"./SubmissionLedger.ts\";\nimport {\n AppendConflict,\n FenceRejected,\n ThreadMaterialization,\n ThreadNotMaterialized,\n ThreadStore,\n ThreadStoreError,\n} from \"./ThreadStore.ts\";\nimport { WakeScheduler } from \"./WakeScheduler.ts\";\n\n/**\n * Storage admission after source authorization, input validation and capacity reservation.\n * This is an internal host port, not an authorization entrypoint. Hosts route the whole\n * operation to the destination owner and enroll recovery before executing it.\n */\nexport class WorkerAdmissionRequest extends Schema.Class<WorkerAdmissionRequest>(\n \"@effect-agent/thread/WorkerAdmissionRequest\",\n)({\n ...AdmissionRequest.fields,\n workerAdmission: WorkerAdmission,\n producerId: ProducerId,\n}) {}\n\nexport const WorkerAdmissionFailure = Schema.Union([\n AdmissionConflict,\n AdmissionPolicyError,\n LedgerError,\n ThreadStoreError,\n ThreadNotMaterialized,\n AppendConflict,\n FenceRejected,\n DurableRuntimeFailpointError,\n]);\n\n/** Local implementation shared by every host; retries finish the same admitted row. */\nexport const admitWorker = Effect.fn(\"WorkerAdmission.admitWorker\")(function* (\n request: WorkerAdmissionRequest,\n) {\n const origin = request.workerAdmission.origin;\n\n if (\n origin.worker.threadId !== request.threadId ||\n origin.worker.targetAgentId !== request.agentId ||\n request.parentLinkage !== undefined\n )\n return yield* LedgerError.make({\n operation: \"admit worker\",\n message: \"Worker admission does not belong to the destination Thread\",\n });\n\n const ledger = yield* SubmissionLedger;\n const store = yield* ThreadStore;\n const wake = yield* WakeScheduler;\n const failpoint = yield* DurableRuntimeFailpoint;\n const admitted = yield* ledger.admit(AdmissionRequest.make(request));\n\n yield* failpoint.hit(\"submit:after-admit\");\n if (admitted.replayed && admitted.state !== \"admitted\") return admitted;\n\n yield* store\n .materialize(\n ThreadMaterialization.make({\n threadId: request.threadId,\n producerEpoch: Schema.decodeSync(ProducerEpoch)(0),\n }),\n )\n .pipe(Effect.catchTag(\"FenceRejected\", () => Effect.void));\n\n const config = {\n producerId: request.producerId,\n deploymentId: request.deploymentId,\n };\n\n yield* ensureThreadCreated(config, request.threadId, request.agentId, request.agentDigests);\n yield* ensureWorkerOrigin(config, origin).pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-origin\", message: cause.reason, cause }),\n ),\n );\n yield* failpoint.hit(\"submit:after-materialize\");\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: admitted.submissionId }));\n yield* wake.notify(request.threadId);\n\n return admitted;\n});\n\n/** Placement adapter for the composite operation; local hosts use the same implementation. */\nexport const WorkerAdmissionPort = Context.Reference<{ readonly admit: typeof admitWorker }>(\n \"@effect-agent/thread/WorkerAdmissionPort\",\n { defaultValue: () => ({ admit: admitWorker }) },\n);\n"],"mappings":"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"}
|
|
@@ -14,6 +14,8 @@ var BindingUnavailable = class extends Schema.TaggedError()("BindingUnavailable"
|
|
|
14
14
|
agentId: AgentId,
|
|
15
15
|
message: Schema.String
|
|
16
16
|
}) {};
|
|
17
|
+
/** Captured at runtime construction; callers cannot replace routing during an Attempt. */
|
|
18
|
+
const CurrentBindingSelection = Context.Reference("@effect-agent/thread/CurrentBindingSelection", { defaultValue: () => void 0 });
|
|
17
19
|
/** Exact immutable admission, lineage and delivery evidence; never an executable-code gate. */
|
|
18
20
|
const definitionDigestsEqual = (left, right) => left.agent === right.agent && left.model === right.model && left.tools === right.tools && Schema.toEquivalence(Schema.UndefinedOr(ReplayContract))(left.replay, right.replay);
|
|
19
21
|
/** Hash current operation contracts; no historical definitions or schemas are retained. */
|
|
@@ -100,27 +102,25 @@ const DurableWorkerBinding = { make: (agent, digests) => Effect.gen(function* ()
|
|
|
100
102
|
}) };
|
|
101
103
|
/** INTERNAL identity-only capture retained for the legacy direct worker path. */
|
|
102
104
|
const makeLegacyWorkerBinding = capture;
|
|
103
|
-
const resolveWorkerBinding = (bindings,
|
|
104
|
-
const
|
|
105
|
+
const resolveWorkerBinding = Effect.fnUntraced(function* (bindings, submission) {
|
|
106
|
+
const selection = yield* CurrentBindingSelection;
|
|
107
|
+
const definition = selection === void 0 ? void 0 : yield* selection.select(submission);
|
|
108
|
+
const registered = bindings.filter((binding) => binding.agentId === submission.agentId && (definition === void 0 || Object.is(binding.definition, definition)));
|
|
105
109
|
const binding = registered[0];
|
|
106
|
-
|
|
107
|
-
agentId,
|
|
108
|
-
message:
|
|
109
|
-
})
|
|
110
|
-
|
|
111
|
-
|
|
110
|
+
if (registered.length !== 1 || binding === void 0) return yield* BindingUnavailable.make({
|
|
111
|
+
agentId: submission.agentId,
|
|
112
|
+
message: "Exactly one current Agent Binding must match the accepted Submission"
|
|
113
|
+
});
|
|
114
|
+
return binding;
|
|
115
|
+
});
|
|
116
|
+
/** Resolve authoring-time admission through exact host registration, never by identity alone. */
|
|
112
117
|
const resolveDefinitionBinding = (bindings, definition) => {
|
|
113
|
-
const candidates = bindings.filter((binding) => binding.agentId === definition.id);
|
|
118
|
+
const candidates = bindings.filter((binding) => binding.agentId === definition.id && Object.is(binding.definition, definition));
|
|
114
119
|
const binding = candidates[0];
|
|
115
|
-
|
|
116
|
-
agentId: definition.id,
|
|
117
|
-
message: "Registered admission requires exactly one binding for the Agent identity"
|
|
118
|
-
}));
|
|
119
|
-
if (!Object.is(binding.definition, definition)) return Effect.fail(BindingUnavailable.make({
|
|
120
|
+
return candidates.length === 1 && binding !== void 0 ? Effect.succeed(binding) : Effect.fail(BindingUnavailable.make({
|
|
120
121
|
agentId: definition.id,
|
|
121
|
-
message: "Registered admission requires the exact Agent Definition
|
|
122
|
+
message: "Registered admission requires exactly one registration of the exact Agent Definition"
|
|
122
123
|
}));
|
|
123
|
-
return Effect.succeed(binding);
|
|
124
124
|
};
|
|
125
125
|
const registrationDefinitions = (entry) => {
|
|
126
126
|
const definition = entry.model === void 0 ? entry.agent.definition : entry.agent;
|
|
@@ -196,6 +196,6 @@ const compileRegistrations = (entries) => {
|
|
|
196
196
|
return Effect.forEach(entries, compileEntry);
|
|
197
197
|
};
|
|
198
198
|
//#endregion
|
|
199
|
-
export {
|
|
199
|
+
export { compileRegistrations as a, resolveDefinitionBinding as c, compileBindingContracts as i, resolveWorkerBinding as l, CurrentBindingSelection as n, definitionDigestsEqual as o, DurableWorkerBinding as r, makeLegacyWorkerBinding as s, BindingUnavailable as t, toolReplayContracts as u };
|
|
200
200
|
|
|
201
|
-
//# sourceMappingURL=agent-registration-
|
|
201
|
+
//# sourceMappingURL=agent-registration-U3kmV7nW.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-registration-U3kmV7nW.mjs","names":["run"],"sources":["../src/durable/internal/agent-registration.ts"],"sourcesContent":["import {\n type Crypto,\n type Option,\n type Scope,\n Context,\n Effect,\n Layer,\n References,\n Schema,\n Tracer,\n} from \"effect\";\nimport { Tool } from \"effect/unstable/ai\";\n\nimport type * as Agent from \"../../core/Agent.ts\";\nimport {\n type InputPromptSource,\n type InstructionSource,\n type ModelServices,\n type RunDispositionDeclaration,\n} from \"../../core/Agent.ts\";\nimport { type ThreadId, AgentId } from \"../../core/Identifiers.ts\";\nimport { getToolExecutionKind } from \"../../core/SubagentContract.ts\";\nimport {\n AdditionalToolCatalog,\n DiscoveryTool,\n IncludesCatalogDocumentation,\n PinnedTool,\n ToolNamespace,\n} from \"../../core/ToolExposure.ts\";\nimport { type RuntimeBinding } from \"../../engine/AgentRuntime.ts\";\nimport { ContextRolloverTool } from \"../../engine/ContextWindow.ts\";\nimport { getToolExecutionClass } from \"../../engine/DurableStep.ts\";\nimport {\n BackgroundReporting,\n WorkerReportPreparationFailure,\n type WorkerReporting,\n} from \"../../engine/SubagentHost.ts\";\nimport { digestDefinitions, digestJson, DigestError } from \"../Digest.ts\";\nimport type { DurableWorkerFailure, DurableWorkerRequirements } from \"../DurableAgentRuntime.ts\";\nimport type { DefinitionDigestInput, PersistedJson } from \"../Records.ts\";\nimport { DefinitionDigests, ReplayContract } from \"../Records.ts\";\nimport type { Claim, Settlement, SubmissionSnapshot } from \"../SubmissionLedger.ts\";\n\n/** No unique current executable is registered for the stable Agent identity. */\nexport class BindingUnavailable extends Schema.TaggedError<BindingUnavailable>()(\n \"BindingUnavailable\",\n { agentId: AgentId, message: Schema.String },\n) {}\n\nexport type DurableBindingFailure = BindingUnavailable;\n\n/**\n * Submission execution/recovery routing for stable identities shared by current Definitions.\n * Worker declarations and peer-messaging endpoints still require unique Agent identities.\n */\nexport interface BindingSelection {\n /** Change when routing changes, so hosts can retry parked work without rewriting admission. */\n readonly key: string;\n /**\n * Select an exact registered Definition using the canonical Submission and authoritative host\n * state. Undefined retains unique-identity resolution. Never grant authority or mutate here;\n * input decoding, replay contracts and current Tool authorization still apply after selection.\n */\n readonly select: (\n submission: SubmissionSnapshot,\n ) => Effect.Effect<Agent.AnyDefinition | undefined, DurableWorkerFailure | BindingUnavailable>;\n}\n\n/** Captured at runtime construction; callers cannot replace routing during an Attempt. */\nexport const CurrentBindingSelection = Context.Reference<BindingSelection | undefined>(\n \"@effect-agent/thread/CurrentBindingSelection\",\n { defaultValue: () => undefined },\n);\n\n/** Exact immutable admission, lineage and delivery evidence; never an executable-code gate. */\nexport const definitionDigestsEqual = (\n left: DefinitionDigests,\n right: DefinitionDigests,\n): boolean =>\n left.agent === right.agent &&\n left.model === right.model &&\n left.tools === right.tools &&\n Schema.toEquivalence(Schema.UndefinedOr(ReplayContract))(left.replay, right.replay);\n\n/** Change an operation version when its meaning, durable Steps or idempotency keys change. */\nexport interface ReplayVersions {\n readonly tools: Readonly<Record<string, PersistedJson>>;\n}\n\n/** Hash current operation contracts; no historical definitions or schemas are retained. */\nexport const toolReplayContracts = Effect.fn(\"AgentRegistration.toolReplayContracts\")(function* (\n definition: Agent.AnyDefinition,\n versions?: ReplayVersions,\n fallbackVersion: PersistedJson = null,\n) {\n const declarations = yield* Effect.try({\n try: () => {\n const jsonSchema = (schema: Schema.Top) =>\n Schema.decodeUnknownSync(Schema.Json)(Tool.getJsonSchemaFromSchema(schema));\n\n return Object.values(definition.toolkit.tools).map((tool) => {\n const version = versions === undefined ? fallbackVersion : versions.tools[tool.name];\n\n if (\n version === undefined ||\n (versions !== undefined && !Object.hasOwn(versions.tools, tool.name))\n )\n throw new Error(\"Every Tool needs an explicit replay semantic version\");\n\n return {\n name: tool.name,\n contract: {\n version,\n parameters: jsonSchema(tool.parametersSchema),\n success: jsonSchema(tool.successSchema),\n failure: jsonSchema(tool.failureSchema),\n failureMode: tool.failureMode,\n needsApproval:\n typeof tool.needsApproval === \"function\" ? \"dynamic\" : (tool.needsApproval ?? false),\n executionClass: getToolExecutionClass(tool),\n executionKind: getToolExecutionKind(tool.annotations),\n contextRollover: Context.get(tool.annotations, ContextRolloverTool),\n completion: definition.completion?.tool === tool.name,\n completionFromTool:\n definition.completionFromTools?.some(\n (declaration) => declaration.tool === tool.name,\n ) ?? false,\n },\n };\n });\n },\n catch: () =>\n DigestError.make({\n message: \"Operation contracts require serializable codecs and a version for every Tool\",\n }),\n });\n\n return Object.fromEntries(\n yield* Effect.forEach(declarations, ({ name, contract }) =>\n digestJson(contract).pipe(Effect.map((digest) => [name, digest] as const)),\n ),\n );\n});\n\n/** Compile current metadata without acquiring executable services. */\nexport const compileBindingContracts = Effect.fn(\"AgentRegistration.compileBindingContracts\")(\n function* (\n definition: Agent.AnyDefinition,\n definitions: DefinitionDigestInput,\n versions?: ReplayVersions,\n ): Effect.fn.Return<Pick<ResolvedBinding, \"digests\">, DigestError, Crypto.Crypto> {\n const digests = yield* digestDefinitions(definitions);\n const tools = yield* toolReplayContracts(definition, versions, definitions.tools);\n\n return {\n digests: DefinitionDigests.make({\n ...digests,\n replay: ReplayContract.make({ agent: digests.agent, tools }),\n }),\n };\n },\n);\n\ntype ExecutableDefinition = Agent.AnyDefinition & {\n readonly instructions: InstructionSource<never, unknown, unknown>;\n readonly inputPrompt?: InputPromptSource<never, unknown, unknown> | undefined;\n};\n\n/** Executable model Binding accepted by durable registration descriptors. */\nexport type ExecutableAgentBinding = {\n readonly definition: ExecutableDefinition;\n readonly model: Layer.Layer<ModelServices, never, unknown>;\n};\n\n/**\n * Internal coordinator entry point for one fenced Attempt over an already-granted claim.\n * The generic signature matches `runAttempt` and is specialized for each captured Agent.\n */\ntype ResolvedAttemptDriver = <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined,\n InputPromptValue extends InputPromptSource<InputSchema[\"Type\"], unknown, unknown> | undefined,\n UpdatesSchema extends Schema.Top | undefined,\n>(\n agent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n threadId: ThreadId,\n claim: Claim,\n) => Effect.Effect<\n Option.Option<Settlement>,\n DurableWorkerFailure,\n DurableWorkerRequirements<\n RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n InstructionRequirements\n >\n>;\n\ntype CapturedAttempt<A extends ExecutableAgentBinding> = (\n agent: A,\n threadId: ThreadId,\n claim: Claim,\n) => Effect.Effect<Option.Option<Settlement>, DurableWorkerFailure, DurableWorkerRequirements<A>>;\n\n/**\n * An Agent with its worker services captured, ready to drive a fenced Attempt.\n * Concrete Schema and model types stay inside this closure when registrations are collected.\n */\ninterface CapturedBinding {\n readonly agentId: AgentId;\n /** Exact immutable definition whose codecs and behavior the worker captured. */\n readonly definition: Agent.AnyDefinition;\n /** Captured independently from per-Attempt services: report preparation has no fenced Claim. */\n readonly reporting?: ReadonlyArray<WorkerReporting<WorkerReportPreparationFailure>>;\n readonly attempt: (\n driver: ResolvedAttemptDriver,\n threadId: ThreadId,\n claim: Claim,\n ) => Effect.Effect<Option.Option<Settlement>, DurableWorkerFailure>;\n}\n\n// Registrations outlive their construction span. Dependencies remain captured,\n// while every attempt/report inherits the invoking fiber's tracing state.\nconst omitTraceContext = Context.omit(\n Tracer.ParentSpan,\n Tracer.Tracer,\n Tracer.MinimumTraceLevel,\n Tracer.CurrentTraceLevel,\n References.TracerEnabled,\n References.TracerTimingEnabled,\n References.TracerSpanAnnotations,\n References.TracerSpanLinks,\n);\n\n// R describes captured application services; ParentSpan is supplied by the\n// live invocation rather than stored as a registration dependency.\nconst withoutTraceContext = <R>(context: Context.Context<R>): Context.Context<R> =>\n omitTraceContext(context) as Context.Context<R>;\n\nconst captureReporting = <R>(reports: ReadonlyArray<WorkerReporting<unknown, R>>) =>\n Effect.map(\n Effect.context<Exclude<R, Scope.Scope>>().pipe(Effect.map(withoutTraceContext)),\n (context) =>\n reports.map((report): WorkerReporting<WorkerReportPreparationFailure> => ({\n ...report,\n prepare: (value) =>\n Effect.scoped(Effect.suspend(() => report.prepare(value))).pipe(\n Effect.provide(context),\n Effect.mapError((error) =>\n Schema.is(WorkerReportPreparationFailure)(error)\n ? error\n : WorkerReportPreparationFailure.make({ stage: \"preparation\" }),\n ),\n ),\n })),\n );\n\nconst backgroundReports = (definition: Agent.AnyDefinition) => [\n ...new Set(\n Object.values(definition.toolkit.tools).flatMap((tool) => {\n const report = Context.get(tool.annotations, BackgroundReporting);\n\n return report === undefined ? [] : [report];\n }),\n ),\n];\n\n/** One exact executable registration used by durable claim-time resolution. */\nexport interface ResolvedBinding extends CapturedBinding {\n readonly digests: DefinitionDigests;\n}\n\n/** Trusted claim identity for resolving per-Attempt application services. Not model input. */\nexport interface AgentAttemptContext {\n readonly threadId: ThreadId;\n readonly submissionId: Claim[\"submissionId\"];\n readonly attemptId: Claim[\"attemptId\"];\n}\n\nconst capture = <A extends ExecutableAgentBinding, Provides = never, Requires = never>(\n agent: A,\n attemptLayer?: (context: AgentAttemptContext) => Layer.Layer<Provides, never, Requires>,\n): Effect.Effect<\n CapturedBinding,\n never,\n Exclude<DurableWorkerRequirements<A>, Provides> | Requires\n> =>\n Effect.map(\n Effect.context<Exclude<DurableWorkerRequirements<A>, Provides> | Requires>().pipe(\n Effect.map(withoutTraceContext),\n ),\n (context): CapturedBinding => ({\n agentId: agent.definition.id,\n definition: agent.definition,\n attempt: (driver, threadId, claim) => {\n // Registration closes one concrete Binding before heterogeneous registrations are\n // collected. TypeScript cannot instantiate the higher-rank RuntimeBinding parameters\n // from the intentionally erased public shape, so specialize the driver back to A here.\n const run = driver as unknown as CapturedAttempt<A>;\n const execute = run(agent, threadId, claim);\n\n const scoped =\n attemptLayer === undefined\n ? execute\n : execute.pipe(\n Effect.provide(\n Layer.fresh(\n attemptLayer({\n threadId,\n submissionId: claim.submissionId,\n attemptId: claim.attemptId,\n }),\n ),\n ),\n );\n\n return scoped.pipe(Effect.provide(context)) as Effect.Effect<\n Option.Option<Settlement>,\n DurableWorkerFailure\n >;\n },\n }),\n );\n\n/**\n * Build one exact worker registration from an executable Agent Binding and\n * its already-computed definition digests.\n *\n * `make(agent, digests)` captures the binding plus its worker-requirement\n * Context at Layer/effect construction time. Hosts that start from application\n * version declarations should use `compileRegistrations`; low-level fixtures\n * may supply a previously computed digest triple directly.\n */\nexport const DurableWorkerBinding = {\n make: <A extends ExecutableAgentBinding>(\n agent: A,\n digests: DefinitionDigests,\n ): Effect.Effect<ResolvedBinding, never, DurableWorkerRequirements<A>> =>\n Effect.gen(function* () {\n const binding = yield* capture(agent);\n const reporting = yield* captureReporting(backgroundReports(agent.definition));\n\n return { ...binding, digests, reporting };\n }),\n} as const;\n\n/** INTERNAL identity-only capture retained for the legacy direct worker path. */\nexport const makeLegacyWorkerBinding = capture;\n\nexport const resolveWorkerBinding = Effect.fnUntraced(function* (\n bindings: ReadonlyArray<ResolvedBinding>,\n submission: SubmissionSnapshot,\n) {\n const selection = yield* CurrentBindingSelection;\n const definition = selection === undefined ? undefined : yield* selection.select(submission);\n\n const registered = bindings.filter(\n (binding) =>\n binding.agentId === submission.agentId &&\n (definition === undefined || Object.is(binding.definition, definition)),\n );\n\n const binding = registered[0];\n\n if (registered.length !== 1 || binding === undefined)\n return yield* BindingUnavailable.make({\n agentId: submission.agentId,\n message: \"Exactly one current Agent Binding must match the accepted Submission\",\n });\n\n return binding;\n});\n\n/** Resolve authoring-time admission through exact host registration, never by identity alone. */\nexport const resolveDefinitionBinding = (\n bindings: ReadonlyArray<ResolvedBinding>,\n definition: Pick<Agent.AnyDefinition, \"id\">,\n): Effect.Effect<ResolvedBinding, BindingUnavailable> => {\n const candidates = bindings.filter(\n (binding) => binding.agentId === definition.id && Object.is(binding.definition, definition),\n );\n\n const binding = candidates[0];\n\n return candidates.length === 1 && binding !== undefined\n ? Effect.succeed(binding)\n : Effect.fail(\n BindingUnavailable.make({\n agentId: definition.id,\n message:\n \"Registered admission requires exactly one registration of the exact Agent Definition\",\n }),\n );\n};\n\n/** Application versions and a model Layer, supplied directly or through an existing Binding. */\nexport type AgentRegistration<A extends ExecutableAgentBinding = ExecutableAgentBinding> = (\n | { readonly agent: A; readonly model?: never; readonly definitions: DefinitionDigestInput }\n | {\n readonly agent: A[\"definition\"];\n readonly model: A[\"model\"];\n readonly definitions: DefinitionDigestInput;\n }\n) & {\n /** Explicit operation versions let unchanged unfinished handlers survive toolbox changes. */\n readonly continuity?: {\n readonly versions: ReplayVersions;\n };\n /**\n * Build fresh services for exactly one fenced Attempt, across all its Tool/model turns.\n * Finalizes on completion, suspension, failure and interruption. Never reused after eviction.\n * Resolve invocation authority from the trusted claim identity, not captured caller state.\n * Keep fallible resource acquisition lazy in typed Tool operations; this Layer cannot fail.\n * Provide DurableApprovalSuspension here when resources need retention before approval waits.\n */\n readonly attemptLayer?: (context: AgentAttemptContext) => Layer.Layer<never, never, unknown>;\n};\n\ntype EntryWorkerRequirements<Entry> = Entry extends {\n readonly agent: infer A extends ExecutableAgentBinding;\n}\n ? DurableWorkerRequirements<A>\n : Entry extends {\n readonly agent: infer D extends ExecutableDefinition;\n readonly model: infer M extends ExecutableAgentBinding[\"model\"];\n }\n ? DurableWorkerRequirements<{ readonly definition: D; readonly model: M }>\n : never;\n\ntype AttemptLayerRequirements<Requirements, AttemptLayer> = AttemptLayer extends (\n context: AgentAttemptContext,\n) => Layer.Layer<infer Provides, never, infer Requires>\n ? Exclude<Requirements, Provides> | Requires\n : Requirements;\n\n// Conditional options retain every service they may consume. An absent attempt Layer\n// still needs the original worker services; only a definite Layer can remove them.\ntype EntryRequirements<Entry> = Entry extends unknown\n ? AttemptLayerRequirements<\n EntryWorkerRequirements<Entry>,\n \"attemptLayer\" extends keyof Entry ? Entry[\"attemptLayer\"] : undefined\n >\n : never;\n\ntype RegistrationRequirements<Entries extends ReadonlyArray<AgentRegistration>> = [\n Entries[number],\n] extends [never]\n ? never\n : EntryRequirements<Entries[number]>;\n\nconst registrationDefinitions = (entry: AgentRegistration): DefinitionDigestInput => {\n const definition = entry.model === undefined ? entry.agent.definition : entry.agent;\n const automatic = backgroundReports(definition);\n\n const declaredDefinitions =\n definition.updates === undefined\n ? entry.definitions\n : {\n ...entry.definitions,\n agent: {\n declaration: entry.definitions.agent,\n updates: Schema.decodeUnknownSync(Schema.Json)(\n Tool.getJsonSchemaFromSchema(definition.updates),\n ),\n updateProtocol: { schemaVersion: 1, tool: \"emit_update\" },\n },\n };\n\n const definitions =\n automatic.length === 0\n ? declaredDefinitions\n : {\n ...declaredDefinitions,\n agent: {\n declaration: declaredDefinitions.agent,\n backgroundReporting: automatic.map((report) => ({\n delegationId: report.delegationId,\n targetAgentId: report.target.id,\n mode: \"standard\",\n // Preserve the fingerprint of existing standard registrations.\n destinationDelegationId: null,\n })),\n },\n };\n\n const exposure = definition.toolExposure;\n\n if (\n exposure === undefined &&\n !Object.values(definition.toolkit.tools).some(\n (tool) =>\n Context.get(tool.annotations, DiscoveryTool) || Context.get(tool.annotations, PinnedTool),\n )\n )\n return definitions;\n\n return {\n ...definitions,\n agent: {\n declaration: definitions.agent,\n toolExposure: {\n initialToolNames: exposure === undefined ? null : [...(exposure.initialToolNames ?? [])],\n maxTools: exposure?.maxTools ?? 64,\n maxSchemaBytes: exposure?.maxSchemaBytes ?? 262_144,\n requiredCompletion:\n definition.completion?.required === true ? definition.completion.tool : null,\n tools: Object.values(definition.toolkit.tools).map((tool) => ({\n name: tool.name,\n pinned: Context.get(tool.annotations, PinnedTool),\n discovery: Context.get(tool.annotations, DiscoveryTool),\n namespace: Context.get(tool.annotations, ToolNamespace) ?? null,\n includesCatalogDocumentation: Context.get(tool.annotations, IncludesCatalogDocumentation),\n additional: Context.get(tool.annotations, AdditionalToolCatalog).map((entry) => ({\n name: entry.tool.name,\n namespace: entry.namespace,\n method: entry.method,\n })),\n })),\n },\n },\n };\n};\n\nconst compileRegistration = <Entry extends AgentRegistration>(\n entry: Entry,\n): Effect.Effect<ResolvedBinding, DigestError, Crypto.Crypto | EntryRequirements<Entry>> =>\n Effect.flatMap(\n Effect.try({\n try: () => registrationDefinitions(entry),\n catch: () =>\n DigestError.make({ message: \"Agent update schema has no serializable wire contract\" }),\n }),\n (definitions) =>\n Effect.gen(function* () {\n const binding = yield* capture(\n entry.model === undefined ? entry.agent : { definition: entry.agent, model: entry.model },\n entry.attemptLayer,\n );\n\n const reporting = yield* captureReporting(backgroundReports(binding.definition));\n\n return {\n ...binding,\n ...(yield* compileBindingContracts(\n binding.definition,\n definitions,\n entry.continuity?.versions,\n )),\n reporting,\n };\n }),\n // The erased descriptor accepts arbitrary provided services. Restore the concrete entry's\n // Exclude<worker requirements, provided services> | layer requirements at this collection seam.\n ) as Effect.Effect<ResolvedBinding, DigestError, Crypto.Crypto | EntryRequirements<Entry>>;\n\n/** Compile heterogeneous Agent descriptors into exact, dependency-closed worker registrations. */\nexport const compileRegistrations = <const Entries extends ReadonlyArray<AgentRegistration>>(\n entries: Entries,\n): Effect.Effect<\n ReadonlyArray<ResolvedBinding>,\n DigestError,\n Crypto.Crypto | RegistrationRequirements<Entries>\n> => {\n // `Effect.forEach` instantiates a generic callback at its constraint. Specialize the callback to\n // this tuple's distributed requirement union before collection so empty and heterogeneous tuples\n // retain their exact service requirements.\n const compileEntry = compileRegistration as unknown as (\n entry: Entries[number],\n ) => Effect.Effect<\n ResolvedBinding,\n DigestError,\n Crypto.Crypto | RegistrationRequirements<Entries>\n >;\n\n return Effect.forEach(entries, compileEntry);\n};\n"],"mappings":"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"}
|