@n8n/agents 0.27.4 → 0.28.1

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 (84) hide show
  1. package/dist/build.tsbuildinfo +1 -1
  2. package/dist/index.d.ts +4 -2
  3. package/dist/index.js +7 -4
  4. package/dist/index.js.map +1 -1
  5. package/dist/runtime/guardrails/budget-guardrail.d.ts +27 -0
  6. package/dist/runtime/guardrails/budget-guardrail.js +71 -0
  7. package/dist/runtime/guardrails/budget-guardrail.js.map +1 -0
  8. package/dist/runtime/guardrails/guardrail-runner.d.ts +18 -0
  9. package/dist/runtime/guardrails/guardrail-runner.js +51 -0
  10. package/dist/runtime/guardrails/guardrail-runner.js.map +1 -0
  11. package/dist/runtime/loop/agent-runtime.d.ts +3 -1
  12. package/dist/runtime/loop/agent-runtime.js +158 -26
  13. package/dist/runtime/loop/agent-runtime.js.map +1 -1
  14. package/dist/runtime/loop/generate-sink.js +2 -1
  15. package/dist/runtime/loop/generate-sink.js.map +1 -1
  16. package/dist/runtime/loop/hydrate-file-parts.js +14 -6
  17. package/dist/runtime/loop/hydrate-file-parts.js.map +1 -1
  18. package/dist/runtime/loop/side-call-cost.d.ts +2 -0
  19. package/dist/runtime/loop/side-call-cost.js +14 -0
  20. package/dist/runtime/loop/side-call-cost.js.map +1 -0
  21. package/dist/runtime/loop/stream-sink.d.ts +3 -1
  22. package/dist/runtime/loop/stream-sink.js +19 -1
  23. package/dist/runtime/loop/stream-sink.js.map +1 -1
  24. package/dist/runtime/mcp/mcp-connection.js +14 -6
  25. package/dist/runtime/mcp/mcp-connection.js.map +1 -1
  26. package/dist/runtime/mcp/mcp-tool-resolver.js +1 -0
  27. package/dist/runtime/mcp/mcp-tool-resolver.js.map +1 -1
  28. package/dist/runtime/memory/episodic-memory-capture.d.ts +8 -1
  29. package/dist/runtime/memory/episodic-memory-capture.js +53 -11
  30. package/dist/runtime/memory/episodic-memory-capture.js.map +1 -1
  31. package/dist/runtime/memory/episodic-memory-defaults.js +7 -1
  32. package/dist/runtime/memory/episodic-memory-defaults.js.map +1 -1
  33. package/dist/runtime/memory/forward-usage.d.ts +2 -0
  34. package/dist/runtime/memory/forward-usage.js +14 -0
  35. package/dist/runtime/memory/forward-usage.js.map +1 -0
  36. package/dist/runtime/memory/memory-orchestrator.d.ts +2 -1
  37. package/dist/runtime/memory/memory-orchestrator.js +54 -23
  38. package/dist/runtime/memory/memory-orchestrator.js.map +1 -1
  39. package/dist/runtime/memory/observation-log-defaults.d.ts +2 -0
  40. package/dist/runtime/memory/observation-log-defaults.js +36 -32
  41. package/dist/runtime/memory/observation-log-defaults.js.map +1 -1
  42. package/dist/runtime/memory/observation-log-observer.d.ts +4 -1
  43. package/dist/runtime/memory/observation-log-observer.js +48 -14
  44. package/dist/runtime/memory/observation-log-observer.js.map +1 -1
  45. package/dist/runtime/memory/observation-log-reflector.d.ts +4 -1
  46. package/dist/runtime/memory/observation-log-reflector.js +8 -1
  47. package/dist/runtime/memory/observation-log-reflector.js.map +1 -1
  48. package/dist/runtime/memory/title-generation.d.ts +5 -2
  49. package/dist/runtime/memory/title-generation.js +31 -5
  50. package/dist/runtime/memory/title-generation.js.map +1 -1
  51. package/dist/runtime/memory/tool-result-memory.js.map +1 -1
  52. package/dist/runtime/model/message-list.d.ts +1 -1
  53. package/dist/runtime/model/message-list.js +8 -3
  54. package/dist/runtime/model/message-list.js.map +1 -1
  55. package/dist/runtime/streaming/stream-writer-guard.d.ts +2 -0
  56. package/dist/runtime/streaming/stream-writer-guard.js +8 -4
  57. package/dist/runtime/streaming/stream-writer-guard.js.map +1 -1
  58. package/dist/runtime/tools/tool-adapter.js +1 -0
  59. package/dist/runtime/tools/tool-adapter.js.map +1 -1
  60. package/dist/runtime/tools/tool-call-executor.js +7 -0
  61. package/dist/runtime/tools/tool-call-executor.js.map +1 -1
  62. package/dist/runtime/tools/tool-call-runner.js +21 -3
  63. package/dist/runtime/tools/tool-call-runner.js.map +1 -1
  64. package/dist/runtime/tools/tool-result-guard.js.map +1 -1
  65. package/dist/runtime/tools/untrusted-tool-output.js.map +1 -1
  66. package/dist/sdk/agent.d.ts +1 -0
  67. package/dist/sdk/agent.js +12 -1
  68. package/dist/sdk/agent.js.map +1 -1
  69. package/dist/sdk/tool.d.ts +6 -0
  70. package/dist/sdk/tool.js +21 -3
  71. package/dist/sdk/tool.js.map +1 -1
  72. package/dist/types/index.d.ts +5 -4
  73. package/dist/types/index.js.map +1 -1
  74. package/dist/types/runtime/agent-loop.d.ts +6 -1
  75. package/dist/types/runtime/tool-execution.d.ts +6 -1
  76. package/dist/types/sdk/agent.d.ts +33 -2
  77. package/dist/types/sdk/agent.js +2 -0
  78. package/dist/types/sdk/agent.js.map +1 -1
  79. package/dist/types/sdk/guardrail.d.ts +37 -0
  80. package/dist/types/sdk/mcp.d.ts +14 -5
  81. package/dist/types/sdk/memory.d.ts +7 -2
  82. package/dist/types/sdk/observation-log.d.ts +12 -2
  83. package/dist/types/sdk/tool.d.ts +11 -0
  84. package/package.json +9 -6
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type { BuiltTool, BuiltProviderTool, BuiltAgent, BuiltMemory, BuiltEpisodicMemoryCaptureStore, BuiltEpisodicMemoryStore, BuiltGuardrail, PiiDetectionType, BuiltEval, RunOptions, AgentResult, GenerateResult, StreamResult, EvalInput, EvalScore, EvalRunResult, EvalResults, ToolContext, ToolCancellationContext, ToolExecutionContext, InterruptibleToolContext, ToolSuspendOptions, CheckpointStore, StreamChunk, Provider, ThinkingConfig, ThinkingConfigFor, AnthropicThinkingEffort, AnthropicThinkingConfig, OpenAIReasoningEffort, OpenAIThinkingConfig, GoogleThinkingConfig, XaiThinkingConfig, ReasoningLevel, SerializableAgentState, AgentRunState, MemoryConfig, ObservationLogMemoryConfig, MemoryDescriptor, ObservationCapableMemory, TitleGenerationConfig, Thread, EpisodicMemoryConfig, EpisodicMemoryCaptureCandidate, EpisodicMemoryCaptureKind, EpisodicMemoryCaptureMethods, EpisodicMemoryCaptureStatus, EpisodicMemoryEmbeddingProviderOptions, EpisodicMemoryEntry, EpisodicMemoryEntrySource, EpisodicMemoryMethods, EpisodicMemoryPrompts, EpisodicMemoryReflectFn, EpisodicMemoryReflection, EpisodicMemoryReflectionApply, EpisodicMemoryReflectionApplyMerge, EpisodicMemoryReflectionMerge, EpisodicMemoryReflectionResult, EpisodicMemoryReflectorInput, EpisodicMemoryScope, EpisodicMemorySearchOptions, EpisodicMemoryStatus, EpisodicMemoryTaskLockHandle, EpisodicMemoryTaskLockMethods, NewEpisodicMemoryCaptureCandidate, NewEpisodicMemoryEntry, NewEpisodicMemoryEntrySource, NewEpisodicMemoryEntrySourceForEntry, RetrievedEpisodicMemoryEntry, ResumeOptions, McpServerConfig, McpToolCallSettledEvent, McpConnectionFailedEvent, McpVerifyResult, ModelConfig, ExecutionOptions, SmoothStreamOptions, TokenUsage, AgentExecutionCounter, PersistedExecutionOptions, AnthropicPromptCachingConfig, OpenAIPromptCachingConfig, PromptCachingConfig, BuiltTelemetry, AttributeValue, ObservationCursor, ObservationalMemoryConfig, BuiltObservationLogStore, BuiltObservationLogTaskLockStore, MemoryTaskUsageReport, NewObservationLogEntry, ObservationLogEntry, ObservationLogMarker, ObservationLogMerge, ObservationLogReadOptions, ObservationLogReflection, ObservationLogReflectionResult, ObservationLogScope, ObservationLogStatus, ObservationLogTaskKind, ObservationLogTaskLockHandle, FinishReason, } from './types';
1
+ export type { BuiltTool, BuiltProviderTool, BuiltAgent, BuiltMemory, BuiltEpisodicMemoryCaptureStore, BuiltEpisodicMemoryStore, BuiltGuardrail, GuardrailDecision, GuardrailModelCallContext, GuardrailModelCallSource, GuardrailStop, GuardrailToolCallContext, GuardrailsOptions, ModelGuardrail, PiiDetectionType, BuiltEval, RunOptions, AgentResult, GenerateResult, StreamResult, EvalInput, EvalScore, EvalRunResult, EvalResults, ToolContext, ToolCancellationContext, ToolExecutionContext, ToolApprovalContext, InterruptibleToolContext, ToolSuspendOptions, CheckpointStore, StreamChunk, Provider, ThinkingConfig, ThinkingConfigFor, AnthropicThinkingEffort, AnthropicThinkingConfig, OpenAIReasoningEffort, OpenAIThinkingConfig, GoogleThinkingConfig, XaiThinkingConfig, ReasoningLevel, SerializableAgentState, AgentRunState, MemoryConfig, ObservationLogMemoryConfig, MemoryDescriptor, ObservationCapableMemory, TitleGenerationConfig, Thread, EpisodicMemoryConfig, EpisodicMemoryCaptureCandidate, EpisodicMemoryCaptureKind, EpisodicMemoryCaptureMethods, EpisodicMemoryCaptureStatus, EpisodicMemoryEmbeddingProviderOptions, EpisodicMemoryEntry, EpisodicMemoryEntrySource, EpisodicMemoryMethods, EpisodicMemoryPrompts, EpisodicMemoryReflectFn, EpisodicMemoryReflectResult, EpisodicMemoryReflection, EpisodicMemoryReflectionApply, EpisodicMemoryReflectionApplyMerge, EpisodicMemoryReflectionMerge, EpisodicMemoryReflectionResult, EpisodicMemoryReflectorInput, EpisodicMemoryScope, EpisodicMemorySearchOptions, EpisodicMemoryStatus, EpisodicMemoryTaskLockHandle, EpisodicMemoryTaskLockMethods, NewEpisodicMemoryCaptureCandidate, NewEpisodicMemoryEntry, NewEpisodicMemoryEntrySource, NewEpisodicMemoryEntrySourceForEntry, RetrievedEpisodicMemoryEntry, ResumeOptions, McpServerConfig, McpToolCallSettledEvent, McpConnectionFailedEvent, McpVerifyResult, ModelConfig, ExecutionOptions, AgentInputBoundary, SmoothStreamOptions, TokenUsage, AgentExecutionCounter, SideCallTask, SideCallUsageReport, PersistedExecutionOptions, AnthropicPromptCachingConfig, OpenAIPromptCachingConfig, PromptCachingConfig, BuiltTelemetry, AttributeValue, ObservationCursor, ObservationalMemoryConfig, BuiltObservationLogStore, BuiltObservationLogTaskLockStore, MemoryTaskUsageReport, NewObservationLogEntry, ObservationLogEntry, ObservationLogMarker, ObservationLogMerge, ObservationLogObserveResult, ObservationLogReadOptions, ObservationLogReflection, ObservationLogReflectResult, ObservationLogReflectionResult, ObservationLogScope, ObservationLogStatus, ObservationLogTaskKind, ObservationLogTaskLockHandle, FinishReason, } from './types';
2
2
  export { FINISH_REASONS, isFinishReason } from './types';
3
3
  export type { ProviderOptions } from '@ai-sdk/provider-utils';
4
4
  export { AgentEvent } from './types';
@@ -17,6 +17,8 @@ export { VectorStore } from './sdk/vector-store';
17
17
  export { FILTER_OPERATORS, normalizeFilterInput, assertValidFilter, buildFilterInputSchema, } from './sdk/vector-store-filter';
18
18
  export type { VectorFilterInput } from './sdk/vector-store-filter';
19
19
  export { Guardrail } from './sdk/guardrail';
20
+ export { budgetMonthKey, createBudgetGuardrail } from './runtime/guardrails/budget-guardrail';
21
+ export type { BudgetGuardrailOptions, SpendEntry, SpendLedger, SpendTotal, } from './runtime/guardrails/budget-guardrail';
20
22
  export { redactText, redactDeep, redactionOptionsFromGuardrail, DEFAULT_PLACEHOLDER, StreamingRedactor, resolvePatterns, passesLuhn, SUPPORTED_PII_CATEGORIES, } from './sdk/guardrails';
21
23
  export type { RedactionOptions, RedactionResult, DeepRedactionResult, RedactionCategory, RedactionPattern, } from './sdk/guardrails';
22
24
  export { Eval } from './sdk/eval';
@@ -66,7 +68,7 @@ export { generateTitleFromMessage } from './runtime/memory/title-generation';
66
68
  export { activeLifecycleState, droppedLifecycleState, markLifecycleActive, markLifecycleDropped, markLifecycleSuperseded, normalizeFlatReflectionActions, supersededLifecycleState, uniqueStrings, } from './runtime/memory/memory-lifecycle';
67
69
  export { RECALL_MEMORY_TOOL_NAME, createRecallMemoryTool, getEpisodicMemoryScope, hashEpisodicMemoryContent, hashEpisodicMemoryEvidence, hasEpisodicMemoryCaptureStore, hasEpisodicMemoryStore, isEpisodicMemoryEnabled, rankEpisodicMemoryEntries, withEpisodicMemoryDefaults, } from './runtime/memory/episodic-memory';
68
70
  export { FLAG_MEMORY_TOOL_NAME, createFlagMemoryTool, runEpisodicMemoryCandidateProcessor, } from './runtime/memory/episodic-memory-capture';
69
- export type { RunEpisodicMemoryCandidateProcessorOpts, RunEpisodicMemoryCandidateProcessorResult, } from './runtime/memory/episodic-memory-capture';
71
+ export type { RunEpisodicMemoryCandidateProcessorOpts, RunEpisodicMemoryCandidateProcessorResult, EpisodicMemoryUsageReport, } from './runtime/memory/episodic-memory-capture';
70
72
  export { DEFAULT_EPISODIC_MEMORY_CAPTURE_TOOL_INSTRUCTION, DEFAULT_EPISODIC_MEMORY_EMBEDDING_MODEL, DEFAULT_EPISODIC_MEMORY_MAX_ENTRIES_PER_RUN, DEFAULT_EPISODIC_MEMORY_RECALL_TOOL_INSTRUCTION, DEFAULT_EPISODIC_MEMORY_REFLECTION_PROMPT, DEFAULT_EPISODIC_MEMORY_TOP_K, buildEpisodicMemoryReflectorPrompt, createEpisodicMemoryReflectFn, } from './runtime/memory/episodic-memory-defaults';
71
73
  export type { CreateEpisodicMemoryReflectFnOptions } from './runtime/memory/episodic-memory-defaults';
72
74
  export type { MemoryLifecycleState, MemoryLifecycleStatus, } from './runtime/memory/memory-lifecycle';
package/dist/index.js CHANGED
@@ -33,10 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.createRuntimeSkillTools = exports.createRuntimeSkillSource = exports.createRuntimeSkillRegistry = exports.appendSkillCatalogToInstructions = exports.Agent = exports.LangSmithTelemetry = exports.deriveSubAgentTelemetry = exports.Telemetry = exports.evals = exports.evaluate = exports.Eval = exports.SUPPORTED_PII_CATEGORIES = exports.passesLuhn = exports.resolvePatterns = exports.StreamingRedactor = exports.DEFAULT_PLACEHOLDER = exports.redactionOptionsFromGuardrail = exports.redactDeep = exports.redactText = exports.Guardrail = exports.buildFilterInputSchema = exports.assertValidFilter = exports.normalizeFilterInput = exports.FILTER_OPERATORS = exports.VectorStore = exports.Memory = exports.wrapUntrustedData = exports.UNTRUSTED_OUTPUT_DOCTRINE = exports.stripInvisibleUnicode = exports.sanitizeToolName = exports.wrapToolForApproval = exports.Tool = exports.APPROVAL_SUSPEND_SCHEMA = exports.APPROVAL_RESUME_SCHEMA = exports.ModelStreamStallError = exports.DEFAULT_MODEL_STREAM_IDLE_TIMEOUT_MS = exports.DEFAULT_MODEL_STREAM_FIRST_OUTPUT_TIMEOUT_MS = exports.throwIfAborted = exports.raceWithAbort = exports.isAbortError = exports.createAbortError = exports.CANCELLATION_TYPE = exports.isCancellation = exports.createCancellation = exports.estimateObservationTokens = exports.OBSERVATION_LOG_STATUSES = exports.OBSERVATION_LOG_MARKERS = exports.AgentEvent = exports.isFinishReason = exports.FINISH_REASONS = void 0;
37
- exports.createPlannerTodosTool = exports.createWriteTodosTool = exports.WRITE_TODOS_TOOL_NAME = exports.renderDelegateSubAgentPrompt = exports.parseDelegateSubAgentContinuation = exports.isDelegateSubAgentTool = exports.getInlineDelegateSubAgentToolOptions = exports.generateResultToDelegateSubAgentOutput = exports.failedDelegatedChildSuspendOutput = exports.createDelegateSubAgentTool = exports.SUB_AGENT_TASK_DIFFICULTIES = exports.INLINE_SUB_AGENT_ID = exports.DELEGATED_CHILD_SUSPEND_UNSUPPORTED_MESSAGE = exports.DELEGATE_SUB_AGENT_TOOL_NAME = exports.sanitizeSubAgentTaskName = exports.isSubAgentTaskPath = exports.createChildSubAgentTaskPath = exports.assertSubAgentTaskPath = exports.ROOT_SUB_AGENT_TASK_PATH = exports.DEFAULT_SUB_AGENT_MAX_CHILDREN = exports.createModel = exports.BaseVectorStore = exports.BaseMemory = exports.fetchProviderCatalog = exports.isLlmMessage = exports.getCreatedAt = exports.filterLlmMessages = exports.stripHydratedFileData = exports.verify = exports.providerTools = exports.mcpContentToModelParts = exports.mcpContentToMessageParts = exports.hasMcpMediaContent = exports.McpClient = exports.validateRuntimeSkill = exports.SKILL_LOAD_TOOL_NAME = exports.RUNTIME_SKILL_REGISTRY_SCHEMA_VERSION = exports.RUNTIME_SKILL_NAME_PATTERN = exports.RUNTIME_SKILL_LINKED_FILE_GROUPS = exports.RUNTIME_SKILL_MAX_OUTPUT_BYTES = exports.RUNTIME_SKILL_FILE_NAME = exports.RUNTIME_SKILL_TOOL_NAMES = exports.renderSkillCatalogPrompt = exports.parseRuntimeSkillMarkdown = exports.loadRuntimeSkillSourceFromDirectory = exports.loadRuntimeSkillsFromDirectory = exports.InvalidRuntimeSkillError = exports.formatSkillValidationErrors = exports.filterRuntimeSkillSource = exports.createSkillLoadTool = void 0;
38
- exports.DEFAULT_OBSERVATION_LOG_REFLECTOR_THRESHOLD_TOKENS = exports.DEFAULT_OBSERVATION_LOG_REFLECTOR_PROMPT = exports.DEFAULT_OBSERVATION_LOG_OBSERVER_THRESHOLD_TOKENS = exports.DEFAULT_OBSERVATION_LOG_OBSERVER_PROMPT = exports.DEFAULT_OBSERVATION_LOG_LOCK_TTL_MS = exports.createObservationLogObserveFn = exports.createObservationLogReflectFn = exports.buildObservationLogObserverPrompt = exports.buildObservationLogReflectorPrompt = exports.ScopedMemoryTaskRunner = exports.runObservationLogReflector = exports.renderObservationLogForReflection = exports.parseObservationLogReflectionJson = exports.normalizeObservationLogReflection = exports.wrapUntrustedObserverData = exports.runObservationLogObserver = exports.renderObserverTranscript = exports.parseObservationLogMarkdown = exports.createEpisodicMemoryReflectFn = exports.buildEpisodicMemoryReflectorPrompt = exports.DEFAULT_EPISODIC_MEMORY_TOP_K = exports.DEFAULT_EPISODIC_MEMORY_REFLECTION_PROMPT = exports.DEFAULT_EPISODIC_MEMORY_RECALL_TOOL_INSTRUCTION = exports.DEFAULT_EPISODIC_MEMORY_MAX_ENTRIES_PER_RUN = exports.DEFAULT_EPISODIC_MEMORY_EMBEDDING_MODEL = exports.DEFAULT_EPISODIC_MEMORY_CAPTURE_TOOL_INSTRUCTION = exports.runEpisodicMemoryCandidateProcessor = exports.createFlagMemoryTool = exports.FLAG_MEMORY_TOOL_NAME = exports.withEpisodicMemoryDefaults = exports.rankEpisodicMemoryEntries = exports.isEpisodicMemoryEnabled = exports.hasEpisodicMemoryStore = exports.hasEpisodicMemoryCaptureStore = exports.hashEpisodicMemoryEvidence = exports.hashEpisodicMemoryContent = exports.getEpisodicMemoryScope = exports.createRecallMemoryTool = exports.RECALL_MEMORY_TOOL_NAME = exports.uniqueStrings = exports.supersededLifecycleState = exports.normalizeFlatReflectionActions = exports.markLifecycleSuperseded = exports.markLifecycleDropped = exports.markLifecycleActive = exports.droppedLifecycleState = exports.activeLifecycleState = exports.generateTitleFromMessage = exports.createEmbeddingModel = exports.isAttachmentValidationError = void 0;
39
- exports.zodToJsonSchema = exports.isZodSchema = exports.modelConfigToId = exports.ProcessHandle = exports.SandboxProcessManager = exports.reconcileToolResultRuns = exports.createWorkspaceTools = exports.createScopedWorkspace = exports.CORE_WORKSPACE_TOOL_NAMES = exports.BaseSandbox = exports.BaseFilesystem = exports.Workspace = exports.DEFAULT_OBSERVATION_LOG_TAIL_LIMIT = exports.DEFAULT_OBSERVATION_LOG_RENDER_TOKEN_BUDGET = void 0;
36
+ exports.createRuntimeSkillRegistry = exports.appendSkillCatalogToInstructions = exports.Agent = exports.LangSmithTelemetry = exports.deriveSubAgentTelemetry = exports.Telemetry = exports.evals = exports.evaluate = exports.Eval = exports.SUPPORTED_PII_CATEGORIES = exports.passesLuhn = exports.resolvePatterns = exports.StreamingRedactor = exports.DEFAULT_PLACEHOLDER = exports.redactionOptionsFromGuardrail = exports.redactDeep = exports.redactText = exports.createBudgetGuardrail = exports.budgetMonthKey = exports.Guardrail = exports.buildFilterInputSchema = exports.assertValidFilter = exports.normalizeFilterInput = exports.FILTER_OPERATORS = exports.VectorStore = exports.Memory = exports.wrapUntrustedData = exports.UNTRUSTED_OUTPUT_DOCTRINE = exports.stripInvisibleUnicode = exports.sanitizeToolName = exports.wrapToolForApproval = exports.Tool = exports.APPROVAL_SUSPEND_SCHEMA = exports.APPROVAL_RESUME_SCHEMA = exports.ModelStreamStallError = exports.DEFAULT_MODEL_STREAM_IDLE_TIMEOUT_MS = exports.DEFAULT_MODEL_STREAM_FIRST_OUTPUT_TIMEOUT_MS = exports.throwIfAborted = exports.raceWithAbort = exports.isAbortError = exports.createAbortError = exports.CANCELLATION_TYPE = exports.isCancellation = exports.createCancellation = exports.estimateObservationTokens = exports.OBSERVATION_LOG_STATUSES = exports.OBSERVATION_LOG_MARKERS = exports.AgentEvent = exports.isFinishReason = exports.FINISH_REASONS = void 0;
37
+ exports.WRITE_TODOS_TOOL_NAME = exports.renderDelegateSubAgentPrompt = exports.parseDelegateSubAgentContinuation = exports.isDelegateSubAgentTool = exports.getInlineDelegateSubAgentToolOptions = exports.generateResultToDelegateSubAgentOutput = exports.failedDelegatedChildSuspendOutput = exports.createDelegateSubAgentTool = exports.SUB_AGENT_TASK_DIFFICULTIES = exports.INLINE_SUB_AGENT_ID = exports.DELEGATED_CHILD_SUSPEND_UNSUPPORTED_MESSAGE = exports.DELEGATE_SUB_AGENT_TOOL_NAME = exports.sanitizeSubAgentTaskName = exports.isSubAgentTaskPath = exports.createChildSubAgentTaskPath = exports.assertSubAgentTaskPath = exports.ROOT_SUB_AGENT_TASK_PATH = exports.DEFAULT_SUB_AGENT_MAX_CHILDREN = exports.createModel = exports.BaseVectorStore = exports.BaseMemory = exports.fetchProviderCatalog = exports.isLlmMessage = exports.getCreatedAt = exports.filterLlmMessages = exports.stripHydratedFileData = exports.verify = exports.providerTools = exports.mcpContentToModelParts = exports.mcpContentToMessageParts = exports.hasMcpMediaContent = exports.McpClient = exports.validateRuntimeSkill = exports.SKILL_LOAD_TOOL_NAME = exports.RUNTIME_SKILL_REGISTRY_SCHEMA_VERSION = exports.RUNTIME_SKILL_NAME_PATTERN = exports.RUNTIME_SKILL_LINKED_FILE_GROUPS = exports.RUNTIME_SKILL_MAX_OUTPUT_BYTES = exports.RUNTIME_SKILL_FILE_NAME = exports.RUNTIME_SKILL_TOOL_NAMES = exports.renderSkillCatalogPrompt = exports.parseRuntimeSkillMarkdown = exports.loadRuntimeSkillSourceFromDirectory = exports.loadRuntimeSkillsFromDirectory = exports.InvalidRuntimeSkillError = exports.formatSkillValidationErrors = exports.filterRuntimeSkillSource = exports.createSkillLoadTool = exports.createRuntimeSkillTools = exports.createRuntimeSkillSource = void 0;
38
+ exports.DEFAULT_OBSERVATION_LOG_OBSERVER_THRESHOLD_TOKENS = exports.DEFAULT_OBSERVATION_LOG_OBSERVER_PROMPT = exports.DEFAULT_OBSERVATION_LOG_LOCK_TTL_MS = exports.createObservationLogObserveFn = exports.createObservationLogReflectFn = exports.buildObservationLogObserverPrompt = exports.buildObservationLogReflectorPrompt = exports.ScopedMemoryTaskRunner = exports.runObservationLogReflector = exports.renderObservationLogForReflection = exports.parseObservationLogReflectionJson = exports.normalizeObservationLogReflection = exports.wrapUntrustedObserverData = exports.runObservationLogObserver = exports.renderObserverTranscript = exports.parseObservationLogMarkdown = exports.createEpisodicMemoryReflectFn = exports.buildEpisodicMemoryReflectorPrompt = exports.DEFAULT_EPISODIC_MEMORY_TOP_K = exports.DEFAULT_EPISODIC_MEMORY_REFLECTION_PROMPT = exports.DEFAULT_EPISODIC_MEMORY_RECALL_TOOL_INSTRUCTION = exports.DEFAULT_EPISODIC_MEMORY_MAX_ENTRIES_PER_RUN = exports.DEFAULT_EPISODIC_MEMORY_EMBEDDING_MODEL = exports.DEFAULT_EPISODIC_MEMORY_CAPTURE_TOOL_INSTRUCTION = exports.runEpisodicMemoryCandidateProcessor = exports.createFlagMemoryTool = exports.FLAG_MEMORY_TOOL_NAME = exports.withEpisodicMemoryDefaults = exports.rankEpisodicMemoryEntries = exports.isEpisodicMemoryEnabled = exports.hasEpisodicMemoryStore = exports.hasEpisodicMemoryCaptureStore = exports.hashEpisodicMemoryEvidence = exports.hashEpisodicMemoryContent = exports.getEpisodicMemoryScope = exports.createRecallMemoryTool = exports.RECALL_MEMORY_TOOL_NAME = exports.uniqueStrings = exports.supersededLifecycleState = exports.normalizeFlatReflectionActions = exports.markLifecycleSuperseded = exports.markLifecycleDropped = exports.markLifecycleActive = exports.droppedLifecycleState = exports.activeLifecycleState = exports.generateTitleFromMessage = exports.createEmbeddingModel = exports.isAttachmentValidationError = exports.createPlannerTodosTool = exports.createWriteTodosTool = void 0;
39
+ exports.zodToJsonSchema = exports.isZodSchema = exports.modelConfigToId = exports.ProcessHandle = exports.SandboxProcessManager = exports.reconcileToolResultRuns = exports.createWorkspaceTools = exports.createScopedWorkspace = exports.CORE_WORKSPACE_TOOL_NAMES = exports.BaseSandbox = exports.BaseFilesystem = exports.Workspace = exports.DEFAULT_OBSERVATION_LOG_TAIL_LIMIT = exports.DEFAULT_OBSERVATION_LOG_RENDER_TOKEN_BUDGET = exports.DEFAULT_OBSERVATION_LOG_REFLECTOR_THRESHOLD_TOKENS = exports.DEFAULT_OBSERVATION_LOG_REFLECTOR_PROMPT = void 0;
40
40
  var types_1 = require("./types");
41
41
  Object.defineProperty(exports, "FINISH_REASONS", { enumerable: true, get: function () { return types_1.FINISH_REASONS; } });
42
42
  Object.defineProperty(exports, "isFinishReason", { enumerable: true, get: function () { return types_1.isFinishReason; } });
@@ -81,6 +81,9 @@ Object.defineProperty(exports, "assertValidFilter", { enumerable: true, get: fun
81
81
  Object.defineProperty(exports, "buildFilterInputSchema", { enumerable: true, get: function () { return vector_store_filter_1.buildFilterInputSchema; } });
82
82
  var guardrail_1 = require("./sdk/guardrail");
83
83
  Object.defineProperty(exports, "Guardrail", { enumerable: true, get: function () { return guardrail_1.Guardrail; } });
84
+ var budget_guardrail_1 = require("./runtime/guardrails/budget-guardrail");
85
+ Object.defineProperty(exports, "budgetMonthKey", { enumerable: true, get: function () { return budget_guardrail_1.budgetMonthKey; } });
86
+ Object.defineProperty(exports, "createBudgetGuardrail", { enumerable: true, get: function () { return budget_guardrail_1.createBudgetGuardrail; } });
84
87
  var guardrails_1 = require("./sdk/guardrails");
85
88
  Object.defineProperty(exports, "redactText", { enumerable: true, get: function () { return guardrails_1.redactText; } });
86
89
  Object.defineProperty(exports, "redactDeep", { enumerable: true, get: function () { return guardrails_1.redactDeep; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ModelGuardrail } from '../../types';
2
+ export interface SpendEntry {
3
+ key: string;
4
+ usd: number;
5
+ }
6
+ export interface SpendTotal {
7
+ key: string;
8
+ totalUsd: number;
9
+ previousUsd: number;
10
+ }
11
+ export interface SpendLedger {
12
+ add(callId: string, entries: SpendEntry[]): Promise<SpendTotal[]>;
13
+ read(key: string): Promise<number>;
14
+ }
15
+ export interface BudgetGuardrailOptions {
16
+ ledger: SpendLedger;
17
+ sessionId?: string;
18
+ agentId?: string;
19
+ sessionCostCapUsd?: number;
20
+ monthlyBudgetUsd?: number;
21
+ alertThresholdPercent?: number;
22
+ onNotice?: (notice: {
23
+ code: 'budget.alert';
24
+ }) => void;
25
+ }
26
+ export declare function budgetMonthKey(agentId: string, now?: Date): string;
27
+ export declare function createBudgetGuardrail(options: BudgetGuardrailOptions): ModelGuardrail;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.budgetMonthKey = budgetMonthKey;
4
+ exports.createBudgetGuardrail = createBudgetGuardrail;
5
+ const SESSION_STOP = { action: 'stop', code: 'budget.session' };
6
+ const MONTHLY_STOP = { action: 'stop', code: 'budget.monthly' };
7
+ const MISCONFIGURED = { action: 'stop', code: 'budget.misconfigured' };
8
+ const ALLOW = { action: 'allow' };
9
+ function budgetMonthKey(agentId, now = new Date()) {
10
+ return `${agentId}:${now.toISOString().slice(0, 7)}`;
11
+ }
12
+ function hasId(value) {
13
+ return value !== undefined && value.length > 0;
14
+ }
15
+ function positiveUsd(value) {
16
+ if (value === undefined || !Number.isFinite(value) || value <= 0)
17
+ return undefined;
18
+ return value;
19
+ }
20
+ function createBudgetGuardrail(options) {
21
+ const { ledger, sessionId, agentId, alertThresholdPercent, onNotice } = options;
22
+ const sessionCostCapUsd = positiveUsd(options.sessionCostCapUsd);
23
+ const monthlyBudgetUsd = positiveUsd(options.monthlyBudgetUsd);
24
+ const alertLine = monthlyBudgetUsd !== undefined && alertThresholdPercent !== undefined
25
+ ? (monthlyBudgetUsd * alertThresholdPercent) / 100
26
+ : undefined;
27
+ return {
28
+ async before() {
29
+ if (sessionCostCapUsd !== undefined && !hasId(sessionId))
30
+ return MISCONFIGURED;
31
+ if (monthlyBudgetUsd !== undefined && !hasId(agentId))
32
+ return MISCONFIGURED;
33
+ if (sessionCostCapUsd !== undefined && hasId(sessionId)) {
34
+ const spent = await ledger.read(sessionId);
35
+ if (spent >= sessionCostCapUsd)
36
+ return SESSION_STOP;
37
+ }
38
+ if (monthlyBudgetUsd !== undefined && hasId(agentId)) {
39
+ const spent = await ledger.read(budgetMonthKey(agentId));
40
+ if (spent >= monthlyBudgetUsd)
41
+ return MONTHLY_STOP;
42
+ }
43
+ return ALLOW;
44
+ },
45
+ async after(ctx, usage) {
46
+ const cost = usage?.cost;
47
+ if (cost === undefined)
48
+ return;
49
+ const entries = [];
50
+ if (sessionCostCapUsd !== undefined && hasId(sessionId)) {
51
+ entries.push({ key: sessionId, usd: cost });
52
+ }
53
+ const month = hasId(agentId) ? budgetMonthKey(agentId) : undefined;
54
+ if (monthlyBudgetUsd !== undefined && month !== undefined) {
55
+ entries.push({ key: month, usd: cost });
56
+ }
57
+ if (entries.length === 0)
58
+ return;
59
+ const totals = await ledger.add(ctx.callId, entries);
60
+ if (alertLine === undefined || month === undefined)
61
+ return;
62
+ const monthTotal = totals.find((total) => total.key === month);
63
+ if (!monthTotal)
64
+ return;
65
+ if (monthTotal.previousUsd < alertLine && monthTotal.totalUsd >= alertLine) {
66
+ onNotice?.({ code: 'budget.alert' });
67
+ }
68
+ },
69
+ };
70
+ }
71
+ //# sourceMappingURL=budget-guardrail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget-guardrail.js","sourceRoot":"","sources":["../../../src/runtime/guardrails/budget-guardrail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { GuardrailModelCallContext, GuardrailModelCallSource, GuardrailStop, GuardrailToolCallContext, GuardrailsOptions, TokenUsage } from '../../types';
2
+ export declare class GuardrailRunner {
3
+ private readonly hooks;
4
+ private readonly ids;
5
+ private constructor();
6
+ static from(options: GuardrailsOptions | undefined): GuardrailRunner | undefined;
7
+ modelCallContext(source: GuardrailModelCallSource, model: string): GuardrailModelCallContext;
8
+ toolCallContext(call: {
9
+ toolCallId: string;
10
+ toolName: string;
11
+ input: unknown;
12
+ runId: string;
13
+ }): GuardrailToolCallContext;
14
+ before(ctx: GuardrailModelCallContext): Promise<GuardrailStop | undefined>;
15
+ after(ctx: GuardrailModelCallContext, usage: TokenUsage | undefined): Promise<void>;
16
+ beforeTool(ctx: GuardrailToolCallContext): Promise<GuardrailStop | undefined>;
17
+ afterTool(ctx: GuardrailToolCallContext, result: unknown): Promise<void>;
18
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GuardrailRunner = void 0;
4
+ class GuardrailRunner {
5
+ constructor(hooks, ids) {
6
+ this.hooks = hooks;
7
+ this.ids = ids;
8
+ }
9
+ static from(options) {
10
+ if (!options || options.hooks.length === 0)
11
+ return undefined;
12
+ return new GuardrailRunner(options.hooks, {
13
+ agentId: options.agentId,
14
+ threadId: options.threadId,
15
+ });
16
+ }
17
+ modelCallContext(source, model) {
18
+ return { callId: crypto.randomUUID(), ...this.ids, model, source };
19
+ }
20
+ toolCallContext(call) {
21
+ return { ...call, ...this.ids };
22
+ }
23
+ async before(ctx) {
24
+ for (const hook of this.hooks) {
25
+ const decision = await hook.before?.(ctx);
26
+ if (decision?.action === 'stop')
27
+ return { code: decision.code };
28
+ }
29
+ return undefined;
30
+ }
31
+ async after(ctx, usage) {
32
+ for (const hook of this.hooks) {
33
+ await hook.after?.(ctx, usage);
34
+ }
35
+ }
36
+ async beforeTool(ctx) {
37
+ for (const hook of this.hooks) {
38
+ const decision = await hook.beforeTool?.(ctx);
39
+ if (decision?.action === 'stop')
40
+ return { code: decision.code };
41
+ }
42
+ return undefined;
43
+ }
44
+ async afterTool(ctx, result) {
45
+ for (const hook of this.hooks) {
46
+ await hook.afterTool?.(ctx, result);
47
+ }
48
+ }
49
+ }
50
+ exports.GuardrailRunner = GuardrailRunner;
51
+ //# sourceMappingURL=guardrail-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrail-runner.js","sourceRoot":"","sources":["../../../src/runtime/guardrails/guardrail-runner.ts"],"names":[],"mappings":";;;AAiBA;IACC,YACkB,KAAuB,EACvB,GAAiB;qBADjB,KAAK;mBACL,GAAG;IAClB,CAAC;IAGJ,MAAM,CAAC,IAAI,CAAC,OAAsC;QACjD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC7D,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE;YACzC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC1B,CAAC,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,MAAgC,EAAE,KAAa;QAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACpE,CAAC;IAED,eAAe,CAAC,IAKf;QACA,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAA8B;QAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,QAAQ,EAAE,MAAM,KAAK,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;QACjE,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAA8B,EAAE,KAA6B;QACxE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;IACF,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAA6B;QAC7C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,QAAQ,EAAE,MAAM,KAAK,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;QACjE,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAA6B,EAAE,MAAe;QAC7D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;IACF,CAAC;CACD"}
@@ -26,6 +26,7 @@ export declare class AgentRuntime {
26
26
  stream(input: AgentMessage[] | string, options?: RunOptions & ExecutionOptions): Promise<StreamResult>;
27
27
  resume(method: 'generate', data: unknown, options: ResumeOptions & ExecutionOptions): Promise<GenerateResult>;
28
28
  resume(method: 'stream', data: unknown, options: ResumeOptions & ExecutionOptions): Promise<StreamResult>;
29
+ resumePaused(options: Omit<ResumeOptions, 'toolCallId'> & ExecutionOptions): Promise<StreamResult>;
29
30
  crashResume(options: {
30
31
  runId: string;
31
32
  contextNotes?: string[];
@@ -45,8 +46,9 @@ export declare class AgentRuntime {
45
46
  private createRunServices;
46
47
  private maybeGenerateTitle;
47
48
  private runAgentLoop;
49
+ private consumeAdditionalInput;
48
50
  private prepareLoop;
49
- private canDiscardRejectedInput;
51
+ private getRejectableInputIds;
50
52
  private buildToolBatchContext;
51
53
  private resumePendingTools;
52
54
  private runLoopIteration;
@@ -11,8 +11,10 @@ const stream_sink_1 = require("./stream-sink");
11
11
  const catalog_1 = require("../../sdk/catalog");
12
12
  const model_1 = require("../../utils/model");
13
13
  const workspace_1 = require("../../workspace");
14
+ const guardrail_runner_1 = require("../guardrails/guardrail-runner");
14
15
  const logger_1 = require("../logger");
15
16
  const memory_orchestrator_1 = require("../memory/memory-orchestrator");
17
+ const tool_result_memory_1 = require("../memory/tool-result-memory");
16
18
  const title_generation_1 = require("../memory/title-generation");
17
19
  const message_list_1 = require("../model/message-list");
18
20
  const model_token_counter_1 = require("../model/model-token-counter");
@@ -138,6 +140,7 @@ class AgentRuntime {
138
140
  const { state, list, resumeData } = await this.prepareToolResume(data, options);
139
141
  let abortScope;
140
142
  let resumeClaimed = false;
143
+ let resumeAdmitted = false;
141
144
  try {
142
145
  const { runId: _rid, toolCallId: _tcid, onResumeClaimed: _onResumeClaimed, hostMetadata, ...callerExecOptions } = options;
143
146
  const mergedExecOptions = (0, checkpoint_data_1.mergeResumeExecutionOptions)(state, callerExecOptions);
@@ -152,6 +155,7 @@ class AgentRuntime {
152
155
  };
153
156
  this.updateState({ persistence: resumeOptions.persistence });
154
157
  await options.onResumeClaimed?.();
158
+ resumeAdmitted = true;
155
159
  abortScope = this.eventBus.createAbortScope(resumeOptions.abortSignal);
156
160
  const activeAbortScope = abortScope;
157
161
  const pendingResume = {
@@ -171,9 +175,52 @@ class AgentRuntime {
171
175
  return this.createResumedStream(ctx);
172
176
  }
173
177
  catch (error) {
178
+ if (resumeClaimed && !resumeAdmitted) {
179
+ const suspendedState = { ...state, persistence: this.currentState.persistence };
180
+ await this.runState.suspend(this.runId, suspendedState);
181
+ this.updateState(suspendedState);
182
+ throw error;
183
+ }
174
184
  return await this.handleResumeFailure(method, error, abortScope, resumeClaimed);
175
185
  }
176
186
  }
187
+ async resumePaused(options) {
188
+ this.runId = options.runId;
189
+ const state = await this.runState.resume(this.runId);
190
+ if (!state || state.finishReason !== 'paused' || Object.keys(state.pendingToolCalls).length) {
191
+ throw new run_state_1.StaleResumeError('This run is not paused');
192
+ }
193
+ if (options.hostMetadata !== undefined && !state.persistence) {
194
+ throw new Error('Cannot update host metadata without persistence');
195
+ }
196
+ const { runId: _runId, hostMetadata, onResumeClaimed, ...executionOptions } = options;
197
+ const resumeOptions = {
198
+ ...(0, checkpoint_data_1.mergeResumeExecutionOptions)(state, executionOptions),
199
+ persistence: (0, checkpoint_data_1.mergeResumePersistence)(state.persistence, hostMetadata),
200
+ };
201
+ const list = await this.restoreCheckpointMessages(state);
202
+ if (!(await this.runState.claimResume(this.runId, state))) {
203
+ throw new run_state_1.StaleResumeError('This run has already resumed');
204
+ }
205
+ this.updateState({
206
+ status: 'running',
207
+ finishReason: undefined,
208
+ persistence: resumeOptions.persistence,
209
+ });
210
+ const abortScope = this.eventBus.createAbortScope(resumeOptions.abortSignal);
211
+ try {
212
+ await onResumeClaimed?.();
213
+ await this.prepareResumeMemory(list, state.persistence);
214
+ return this.createResumedStream({ list, options: resumeOptions, abortScope });
215
+ }
216
+ catch (error) {
217
+ abortScope.dispose();
218
+ const suspendedState = { ...state, persistence: resumeOptions.persistence };
219
+ await this.runState.suspend(this.runId, suspendedState);
220
+ this.updateState(suspendedState);
221
+ throw error;
222
+ }
223
+ }
177
224
  async crashResume(options) {
178
225
  this.runId = options.runId;
179
226
  const state = await this.loadStepCheckpoint();
@@ -318,7 +365,7 @@ class AgentRuntime {
318
365
  result.runId = this.runId;
319
366
  result.usage = this.applyCost(result.usage);
320
367
  result.model = this.modelIdString;
321
- if (!result.pendingSuspend?.length) {
368
+ if (!result.pendingSuspend?.length && result.finishReason !== 'paused') {
322
369
  this.updateState({ status: 'success', messageList: list.serialize() });
323
370
  this.eventBus.emit({ type: "agent_end", messages: result.messages });
324
371
  }
@@ -329,7 +376,8 @@ class AgentRuntime {
329
376
  ...this.telemetry.buildTelemetryOptions(options),
330
377
  ...(options?.onStepStart ? { onStepStart: options.onStepStart } : {}),
331
378
  ...(options?.onStepEnd || options?.onStepFinish
332
- ? { onStepEnd: options.onStepEnd ?? options.onStepFinish }
379
+ ?
380
+ { onStepEnd: options.onStepEnd ?? options.onStepFinish }
333
381
  : {}),
334
382
  repairToolCall: async (options) => {
335
383
  return await (0, fix_tool_call_1.fixToolCall)({
@@ -372,6 +420,8 @@ class AgentRuntime {
372
420
  modelFetch: this.config.modelFetch,
373
421
  turnDelta: list.turnDelta(),
374
422
  executionCounter: options.executionCounter,
423
+ onSideCallUsage: options.onSideCallUsage,
424
+ promptCaching: this.config.promptCaching,
375
425
  });
376
426
  this.backgroundTasks.track(titlePromise);
377
427
  if (this.config.titleGeneration.sync) {
@@ -386,12 +436,33 @@ class AgentRuntime {
386
436
  return settlement.result;
387
437
  }
388
438
  for (; state.iterationCount < state.maxIterations; state.iterationCount++) {
439
+ const hasInput = await this.consumeAdditionalInput(prepared, sink, state);
440
+ if (state.guardrailStop)
441
+ break;
442
+ if (state.reachedStopCondition && !hasInput)
443
+ break;
444
+ this.assertNotAborted(prepared.abortScope);
445
+ if (await prepared.options?.shouldPause?.()) {
446
+ await this.persistSuspension({}, prepared.options, prepared.list, state.totalUsage, state.maxIterations, state.iterationCount, 'paused');
447
+ this.assertNotAborted(prepared.abortScope);
448
+ return await sink.finishSuspended({
449
+ suspendRunId: this.runId,
450
+ list: prepared.list,
451
+ usage: state.totalUsage,
452
+ suspensions: [],
453
+ finishReason: 'paused',
454
+ });
455
+ }
456
+ state.reachedStopCondition = false;
389
457
  const settlement = await this.runLoopIteration(prepared, sink, state);
390
458
  if (settlement.suspended)
391
459
  return settlement.result;
392
- if (state.reachedStopCondition)
460
+ if (state.reachedStopCondition && !prepared.options?.onInputBoundary)
393
461
  break;
394
462
  }
463
+ if (state.iterationCount >= state.maxIterations) {
464
+ await this.consumeAdditionalInput(prepared, sink, state);
465
+ }
395
466
  if (!state.reachedStopCondition && state.iterationCount >= state.maxIterations) {
396
467
  state.lastFinishReason = 'max-iterations';
397
468
  }
@@ -401,8 +472,34 @@ class AgentRuntime {
401
472
  finishReason: state.lastFinishReason,
402
473
  usage: state.totalUsage,
403
474
  structuredOutput: state.structuredOutput,
475
+ guardrail: state.guardrailStop,
404
476
  });
405
477
  }
478
+ async consumeAdditionalInput(ctx, sink, state) {
479
+ const receive = ctx.options?.onInputBoundary;
480
+ if (!receive || state.lastFinishReason === 'error')
481
+ return false;
482
+ this.assertNotAborted(ctx.abortScope);
483
+ await sink.inputBoundary?.(ctx.abortScope.signal);
484
+ this.assertNotAborted(ctx.abortScope);
485
+ const messages = await receive({
486
+ messages: (0, tool_result_memory_1.sanitizeOffloadedToolResultsForMemory)(ctx.list.turnDelta()),
487
+ lastCreatedAt: ctx.list.messages().at(-1)?.createdAt.getTime() ?? 0,
488
+ completing: state.reachedStopCondition,
489
+ canContinue: state.iterationCount < state.maxIterations && !state.guardrailStop,
490
+ });
491
+ ctx.list.addInput(messages);
492
+ for (const message of messages)
493
+ await sink.emitInput?.(message);
494
+ this.assertNotAborted(ctx.abortScope);
495
+ if (messages.length > 0) {
496
+ state.structuredOutput = undefined;
497
+ await (0, hydrate_file_parts_1.hydrateFileParts)(ctx.list.messages(), this.config.fileStore, {
498
+ threadId: ctx.options?.persistence?.threadId,
499
+ });
500
+ }
501
+ return messages.length > 0;
502
+ }
406
503
  async prepareLoop(ctx) {
407
504
  const { list, options } = ctx;
408
505
  await this.activeSkills?.restore(list, options?.persistence);
@@ -428,22 +525,23 @@ class AgentRuntime {
428
525
  runTelemetry,
429
526
  staticContext,
430
527
  instructionProviderOptions,
431
- canDiscardRejectedInput: this.canDiscardRejectedInput(ctx),
528
+ acceptedInputIds: new Set(ctx.isFreshRun ? [] : list.inputDelta().map((message) => message.id)),
432
529
  },
433
530
  state,
434
531
  };
435
532
  }
436
- canDiscardRejectedInput(ctx) {
437
- const inputMessages = new Set(ctx.list.inputDelta());
533
+ getRejectableInputIds(ctx) {
534
+ const inputMessages = new Set(ctx.list.inputDelta().filter((message) => !ctx.acceptedInputIds.has(message.id)));
438
535
  const inputIds = new Set([...inputMessages].map((message) => message.id));
439
- return (ctx.isFreshRun === true &&
440
- [...inputMessages].some((message) => 'role' in message &&
441
- message.role === 'user' &&
442
- Array.isArray(message.content) &&
443
- message.content.some((part) => part.type === 'file' && part.data !== undefined)) &&
444
- !ctx.list
445
- .messages()
446
- .some((message) => !inputMessages.has(message) && inputIds.has(message.id)));
536
+ const hasFiles = [...inputMessages].some((message) => 'role' in message &&
537
+ message.role === 'user' &&
538
+ Array.isArray(message.content) &&
539
+ message.content.some((part) => part.type === 'file' && part.data !== undefined));
540
+ if (!hasFiles)
541
+ return [];
542
+ if (ctx.list.messages().some((message) => !inputMessages.has(message) && inputIds.has(message.id)))
543
+ return [];
544
+ return [...inputIds];
447
545
  }
448
546
  buildToolBatchContext(ctx, toolMap) {
449
547
  return {
@@ -453,6 +551,8 @@ class AgentRuntime {
453
551
  persistence: ctx.options?.persistence,
454
552
  telemetry: ctx.runTelemetry,
455
553
  executionCounter: ctx.options?.executionCounter,
554
+ guardrails: ctx.options?.guardrails,
555
+ approvalContext: ctx.options?.approvalContext,
456
556
  abortSignal: ctx.abortScope.signal,
457
557
  isAborted: () => ctx.abortScope.isAborted,
458
558
  };
@@ -472,9 +572,16 @@ class AgentRuntime {
472
572
  async runLoopIteration(ctx, sink, state) {
473
573
  this.assertNotAborted(ctx.abortScope);
474
574
  this.eventBus.emit({ type: "turn_start" });
475
- const { toolMap, modelCallContext } = await this.prepareModelCall(ctx, state.iterationCount);
575
+ const { toolMap, modelCallContext } = await this.prepareModelCall(ctx);
476
576
  const turn = await this.callModelWithRetries(ctx, sink, state, modelCallContext);
577
+ if (!turn) {
578
+ state.lastFinishReason = 'guardrail';
579
+ state.reachedStopCondition = true;
580
+ return { suspended: false };
581
+ }
477
582
  this.assertNotAborted(ctx.abortScope);
583
+ for (const message of ctx.list.inputDelta())
584
+ ctx.acceptedInputIds.add(message.id);
478
585
  state.lastFinishReason = turn.finishReason;
479
586
  if (!(0, runtime_helpers_1.isReasoningOnlyStop)(turn))
480
587
  ctx.list.addResponse(turn.newMessages);
@@ -497,7 +604,7 @@ class AgentRuntime {
497
604
  await this.completeToolTurn(ctx, state, turn);
498
605
  return settlement;
499
606
  }
500
- async prepareModelCall(ctx, iterationCount) {
607
+ async prepareModelCall(ctx) {
501
608
  const { list, options, abortScope, staticContext } = ctx;
502
609
  const tools = this.context.buildToolLoopContext(staticContext.aiProviderTools, options?.persistence, options?.executionCounter, list);
503
610
  const hostVolatileInstructions = await this.resolveVolatileInstructions(options?.persistence);
@@ -513,34 +620,53 @@ class AgentRuntime {
513
620
  system: prompt.system,
514
621
  messages: prompt.messages,
515
622
  abortSignal: abortScope.signal,
516
- hasTools: tools.hasTools,
623
+ hasTools: options?.toolsEnabled !== false && tools.hasTools,
517
624
  aiTools: prompt.aiTools,
518
625
  reasoning: staticContext.reasoning,
519
626
  providerOptions: staticContext.providerOptions,
520
627
  outputSpec: staticContext.outputSpec,
521
628
  maxOutputTokens: staticContext.maxOutputTokens,
522
629
  aiSdkOptions: this.buildAiSdkOptions(tools.toolMap, options),
523
- onInputRejected: this.createInputRejectionHandler(ctx, iterationCount),
630
+ onInputRejected: this.createInputRejectionHandler(ctx),
524
631
  };
525
632
  return { toolMap: tools.toolMap, modelCallContext };
526
633
  }
527
- createInputRejectionHandler(ctx, iterationCount) {
528
- if (!ctx.canDiscardRejectedInput || iterationCount !== 0)
634
+ createInputRejectionHandler(ctx) {
635
+ const messageIds = this.getRejectableInputIds(ctx);
636
+ if (messageIds.length === 0)
529
637
  return undefined;
530
638
  return async () => {
531
639
  if (ctx.abortScope.isAborted)
532
640
  return;
533
- await this.memory.discardRejectedInput(ctx.list, ctx.options);
641
+ await this.memory.discardRejectedInput(ctx.list, messageIds, ctx.options);
534
642
  this.updateState({ messageList: ctx.list.serialize() });
535
643
  };
536
644
  }
537
645
  async callModelWithRetries(ctx, sink, state, modelCallContext) {
538
- let turn = await sink.callModel(modelCallContext);
539
- for (let retry = 0; retry < MAX_EMPTY_TURN_RETRIES && (0, runtime_helpers_1.isEmptyModelTurn)(turn); retry++) {
646
+ const guardrails = guardrail_runner_1.GuardrailRunner.from(ctx.options?.guardrails);
647
+ const callModel = async () => {
648
+ const guardCtx = guardrails?.modelCallContext('turn', this.modelIdString);
649
+ if (guardrails && guardCtx) {
650
+ const stop = await guardrails.before(guardCtx);
651
+ if (stop) {
652
+ state.guardrailStop = stop;
653
+ return undefined;
654
+ }
655
+ }
656
+ const turn = await sink.callModel(modelCallContext);
657
+ turn.usage = this.applyCost(turn.usage);
658
+ if (guardrails && guardCtx)
659
+ await guardrails.after(guardCtx, turn.usage);
660
+ return turn;
661
+ };
662
+ let turn = await callModel();
663
+ for (let retry = 0; turn && retry < MAX_EMPTY_TURN_RETRIES && (0, runtime_helpers_1.isEmptyModelTurn)(turn); retry++) {
540
664
  this.recordTurnUsage(ctx, sink, state, turn);
541
665
  this.assertNotAborted(ctx.abortScope);
542
- turn = await sink.callModel(modelCallContext);
666
+ turn = await callModel();
543
667
  }
668
+ if (!turn)
669
+ return undefined;
544
670
  this.recordTurnUsage(ctx, sink, state, turn);
545
671
  return turn;
546
672
  }
@@ -650,7 +776,7 @@ class AgentRuntime {
650
776
  });
651
777
  }
652
778
  }
653
- async persistSuspension(pendingToolCalls, options, list, totalUsage, maxIterations, iterationCount) {
779
+ async persistSuspension(pendingToolCalls, options, list, totalUsage, maxIterations, iterationCount, finishReason) {
654
780
  const checkpointOptions = (0, checkpoint_data_1.buildCheckpointOptions)(options, maxIterations, iterationCount);
655
781
  (0, checkpoint_data_1.markSuspendedToolCalls)(list, pendingToolCalls);
656
782
  const state = {
@@ -659,10 +785,16 @@ class AgentRuntime {
659
785
  messageList: list.serialize(),
660
786
  pendingToolCalls,
661
787
  usage: totalUsage,
788
+ finishReason,
662
789
  ...checkpointOptions,
663
790
  };
664
791
  await this.runState.suspend(this.runId, state);
665
- this.updateState({ status: 'suspended', pendingToolCalls, messageList: list.serialize() });
792
+ this.updateState({
793
+ status: 'suspended',
794
+ pendingToolCalls,
795
+ messageList: list.serialize(),
796
+ finishReason,
797
+ });
666
798
  await this.memory.persistTurnDelta(list, options);
667
799
  }
668
800
  async persistStepCheckpoint(list, totalUsage, options, maxIterations, iterationCount) {