effect-agent 0.1.0-beta.140 → 0.1.0-beta.142

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/{AgentRuntime-RdmnK_aD.mjs → AgentRuntime-xeCUXutN.mjs} +10 -9
  2. package/dist/AgentRuntime-xeCUXutN.mjs.map +1 -0
  3. package/dist/{DurableAgentRuntime-BmG_UVZG.mjs → DurableAgentRuntime-DQXDcPKQ.mjs} +2 -2
  4. package/dist/{DurableAgentRuntime-BmG_UVZG.mjs.map → DurableAgentRuntime-DQXDcPKQ.mjs.map} +1 -1
  5. package/dist/{Subagent-Bnc7I-kb.mjs → Subagent-8RzJkqJ9.mjs} +2 -2
  6. package/dist/{Subagent-Bnc7I-kb.mjs.map → Subagent-8RzJkqJ9.mjs.map} +1 -1
  7. package/dist/capabilities/Subagent.mjs +1 -1
  8. package/dist/durable/DurableAgentRuntime.mjs +1 -1
  9. package/dist/engine/AgentRuntime.mjs +1 -1
  10. package/dist/index.d.mts +1 -2
  11. package/dist/index.mjs +4 -5
  12. package/package.json +1 -1
  13. package/src/engine/internal/agent-runtime.ts +49 -19
  14. package/src/index.ts +0 -2
  15. package/dist/AgentRuntime-RdmnK_aD.mjs.map +0 -1
  16. package/dist/durable/SqlMessageDeliveryStore.d.mts +0 -42
  17. package/dist/durable/SqlMessageDeliveryStore.mjs +0 -179
  18. package/dist/durable/SqlMessageDeliveryStore.mjs.map +0 -1
  19. package/dist/durable/SqlStorageV2Upgrade.d.mts +0 -21
  20. package/dist/durable/SqlStorageV2Upgrade.mjs +0 -459
  21. package/dist/durable/SqlStorageV2Upgrade.mjs.map +0 -1
  22. package/dist/durable/SqlSubscriptionStore.d.mts +0 -62
  23. package/dist/durable/SqlSubscriptionStore.mjs +0 -751
  24. package/dist/durable/SqlSubscriptionStore.mjs.map +0 -1
  25. package/dist/durable/SqlThreadNativeReads.d.mts +0 -55
  26. package/dist/durable/SqlThreadNativeReads.mjs +0 -196
  27. package/dist/durable/SqlThreadNativeReads.mjs.map +0 -1
  28. package/src/durable/SqlMessageDeliveryStore.ts +0 -335
  29. package/src/durable/SqlStorageV2Upgrade.ts +0 -500
  30. package/src/durable/SqlSubscriptionStore.ts +0 -1440
  31. package/src/durable/SqlThreadNativeReads.ts +0 -343
  32. package/src/durable/internal/storage-v2-layout.ts +0 -163
  33. package/src/durable/internal/storage-v2.ts +0 -73
@@ -24,7 +24,7 @@ import { CompactionDecision, CompactionError, ContextCompactor } from "./engine/
24
24
  import { RunEventSink, RunEventSinkClosedError } from "./engine/RunEventSink.mjs";
25
25
  import { AgentUpdateAcceptance, CurrentToolFailureObserver, ModelUsageAccounting, RunContextPreparation, RunResumeUsageSchema, RunToolAuthorization, RunToolScheduling, RunTurnResumeSettledCallSchema } from "./engine/RunOptions.mjs";
26
26
  import { ToolBroker, ToolBrokerConfigurationError, ToolBrokerUnavailableError } from "./engine/ToolBroker.mjs";
27
- import { AiError, LanguageModel, Model, Prompt, Response, Tool, Toolkit } from "effect/unstable/ai";
27
+ import { AiError, LanguageModel, Model, Prompt, Response, ResponseIdTracker, Tool, Toolkit } from "effect/unstable/ai";
28
28
  import { Cause, Channel, Clock, Context, DateTime, Duration, Effect, Equal, ErrorReporter, Exit, Fiber, Layer, Metric, Option, PubSub, Queue, Redacted, Result, Schema, SchemaAST, SchemaGetter, Scope, Semaphore, Stream, Tracer } from "effect";
29
29
  //#region src/engine/internal/bounded-value.ts
30
30
  const DEFAULT_MAX_DEPTH = 128;
@@ -1860,11 +1860,13 @@ const formatRunStatus = (view) => {
1860
1860
  /**
1861
1861
  * The run-status message is derived per request and appended only to the
1862
1862
  * OUTGOING prompt: official history and durable commits never carry it, so it
1863
- * can never accumulate or replay.
1863
+ * can never accumulate or replay. OpenAI receives it as trailing system guidance,
1864
+ * leaving the last user/tool result as the implicit cache-write boundary.
1864
1865
  */
1865
1866
  const outgoingModelPrompt = (policy, context, prepared, turn, declaredToolCalls) => Effect.gen(function* () {
1866
1867
  if (policy.runStatus !== "appended") return prepared;
1867
1868
  const now = yield* Clock.currentTimeMillis;
1869
+ const provider = yield* Model.ProviderName;
1868
1870
  const status = formatRunStatus({
1869
1871
  turn,
1870
1872
  maxTurns: policy.maxTurns,
@@ -1877,7 +1879,7 @@ const outgoingModelPrompt = (policy, context, prepared, turn, declaredToolCalls)
1877
1879
  elapsedSeconds: Math.max(0, Math.floor((now - context.startedAtMillis) / 1e3)),
1878
1880
  maxDurationSeconds: Math.floor(Duration.toMillis(policy.maxDuration) / 1e3)
1879
1881
  });
1880
- return Prompt.fromMessages([...prepared.content, Prompt.makeMessage("user", { content: [Prompt.makePart("text", { text: status })] })]);
1882
+ return Prompt.fromMessages([...prepared.content, provider === "openai" ? Prompt.systemMessage({ content: status }) : Prompt.userMessage({ content: [Prompt.textPart({ text: status })] })]);
1881
1883
  });
1882
1884
  const ProviderUsage = Schema.Struct({
1883
1885
  inputTokens: Schema.Struct({
@@ -2900,7 +2902,7 @@ const makeTurn = (agent, context, prompt, turn, priorToolCalls, options) => Stre
2900
2902
  }));
2901
2903
  const admissionRequired = contextTokenLimit !== void 0 || !context.finalizing && !finalAnswerOnly && policy.tokenBudget !== void 0;
2902
2904
  const outputContractTokens = !admissionRequired || outputContractMessage === void 0 ? 0 : yield* estimateCallTokens([Prompt.makeMessage("system", { content: outputContractMessage })]);
2903
- const canonicalDecoration = !admissionRequired ? Prompt.empty : yield* outgoingModelPrompt(policy, context, Prompt.empty, turn, priorToolCalls);
2905
+ const canonicalDecoration = !admissionRequired ? Prompt.empty : yield* outgoingModelPrompt(policy, context, Prompt.empty, turn, priorToolCalls).pipe(withCallModel);
2904
2906
  const estimateToolSchemaTokens = Effect.suspend(() => {
2905
2907
  const choice = modelToolChoice();
2906
2908
  const tools = typeof choice === "object" && "oneOf" in choice ? catalog.filter((entry) => entry.kind === "native" && choice.oneOf.includes(entry.nativeToolName)).map((entry) => entry.tool) : Object.values(modelToolkit.tools);
@@ -3006,7 +3008,7 @@ const makeTurn = (agent, context, prompt, turn, priorToolCalls, options) => Stre
3006
3008
  });
3007
3009
  }
3008
3010
  const transientContext = options.transientContext === void 0 ? Prompt.empty : yield* options.transientContext.load(contextRequest).pipe(Effect.flatMap(transientInputToPrompt));
3009
- const derivedPrompt = options.transientContext === void 0 ? canonicalDecoration : yield* outgoingModelPrompt(policy, context, transientContext, turn, priorToolCalls);
3011
+ const derivedPrompt = options.transientContext === void 0 ? canonicalDecoration : yield* outgoingModelPrompt(policy, context, transientContext, turn, priorToolCalls).pipe(withCallModel);
3010
3012
  const derivedPromptContentTokens = !admissionRequired ? 0 : options.transientContext === void 0 ? canonicalDecorationPromptTokens : outputContractTokens + (yield* estimateCallTokens(derivedPrompt.content));
3011
3013
  const derivedPromptTokens = () => toolSchemaTokens + derivedPromptContentTokens;
3012
3014
  if (!context.finalizing && admissionRequired && options.transientContext !== void 0) {
@@ -3078,7 +3080,7 @@ const makeTurn = (agent, context, prompt, turn, priorToolCalls, options) => Stre
3078
3080
  if (trace.usage === void 0) return yield* noteIncompleteUsage(context, turn);
3079
3081
  yield* consumeTurnUsage(0).pipe(Effect.exit);
3080
3082
  });
3081
- const attempt = (basis) => Stream.unwrap(outgoingModelPrompt(policy, context, Prompt.fromMessages([...basis.content, ...transientContext.content]), turn, priorToolCalls).pipe(Effect.flatMap((outgoing) => Effect.gen(function* () {
3083
+ const attempt = (basis) => Stream.unwrap(outgoingModelPrompt(policy, context, prepareModelPrompt(Prompt.fromMessages([...basis.content, ...transientContext.content]), outputContract._tag === "rendered" ? outputContract.part : void 0), turn, priorToolCalls).pipe(withCallModel, Effect.flatMap((providerPrompt) => Effect.gen(function* () {
3082
3084
  const toolChoice = modelToolChoice();
3083
3085
  let requestToolkit = modelToolkit;
3084
3086
  snapshot = selectionSnapshot;
@@ -3092,7 +3094,6 @@ const makeTurn = (agent, context, prompt, turn, priorToolCalls, options) => Stre
3092
3094
  }));
3093
3095
  }
3094
3096
  context.toolExposure = snapshot;
3095
- const providerPrompt = prepareModelPrompt(outgoing, outputContract._tag === "rendered" ? outputContract.part : void 0);
3096
3097
  return yield* estimateCallTokens(providerPrompt.content).pipe(Effect.map((tokens) => tokens + toolSchemaTokens), Effect.tap((estimatedTokens) => contextTokenLimit !== void 0 && (options.context !== void 0 || options.transientContext !== void 0) && estimatedTokens > contextTokenLimit ? ContextBudgetError.make({
3097
3098
  message: `Prepared context could not fit the next model prompt inside the ${contextTokenLimit} token context target`,
3098
3099
  estimatedTokens,
@@ -3105,7 +3106,7 @@ const makeTurn = (agent, context, prompt, turn, priorToolCalls, options) => Stre
3105
3106
  toolkit: deferredToolParameterToolkit(requestToolkit),
3106
3107
  disableToolCallResolution: true,
3107
3108
  ...toolChoice === void 0 ? {} : { toolChoice }
3108
- }), options.budget).pipe(Stream.provideServiceEffect(Tracer.Tracer, modelTelemetryTracer(context, turnId)), Stream.onStart(Effect.sync(() => {
3109
+ }), options.budget).pipe((stream) => policy.runStatus === "appended" || options.context !== void 0 || options.transientContext !== void 0 ? stream.pipe(Stream.provideServiceEffect(ResponseIdTracker.ResponseIdTracker, ResponseIdTracker.make)) : stream, Stream.provideServiceEffect(Tracer.Tracer, modelTelemetryTracer(context, turnId)), Stream.onStart(Effect.sync(() => {
3109
3110
  trace.usageConsumed = false;
3110
3111
  })), Stream.mapEffect((part) => ownModelResponsePart(part, agent.definition.toolkit, trace, context.bufferLimits).pipe(Effect.flatMap((owned) => eventsForPart(context, turnId, turn, agent.definition.toolkit.tools, trace, owned.ownedPart, owned.retainedBytes)))), Stream.flatMap(Stream.fromIterable), Stream.tapCause(() => retainFailedUsage()))));
3111
3112
  }))));
@@ -4736,4 +4737,4 @@ var AgentRuntime_exports = /* @__PURE__ */ __exportAll({
4736
4737
  //#endregion
4737
4738
  export { stream as _, SubagentDurability as a, withTerminalDefectEvent as b, decodeFinalOutput as c, projectCompletionOutput as d, renderInputPrompt as f, startUnknown as g, start as h, AgentSpawner as i, encodeRunDisposition as l, runUnknown as m, AgentChildPending as n, SubagentDurabilityError as o, run as p, AgentResultSchema as r, ToolCallWaiting as s, AgentRuntime_exports as t, projectCompletionFromToolOutput as u, streamUnknown as v, streamWithUsageAccountingUnknown as y };
4738
4739
 
4739
- //# sourceMappingURL=AgentRuntime-RdmnK_aD.mjs.map
4740
+ //# sourceMappingURL=AgentRuntime-xeCUXutN.mjs.map