@agent-native/core 0.7.21 → 0.7.23

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 (163) hide show
  1. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  2. package/dist/agent/engine/ai-sdk-engine.js +43 -1
  3. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  4. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  5. package/dist/agent/engine/anthropic-engine.js +8 -0
  6. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  7. package/dist/agent/engine/builder-engine.d.ts +1 -1
  8. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  9. package/dist/agent/engine/builder-engine.js +9 -4
  10. package/dist/agent/engine/builder-engine.js.map +1 -1
  11. package/dist/agent/engine/translate-ai-sdk.d.ts.map +1 -1
  12. package/dist/agent/engine/translate-ai-sdk.js +31 -1
  13. package/dist/agent/engine/translate-ai-sdk.js.map +1 -1
  14. package/dist/agent/engine/translate-anthropic.d.ts.map +1 -1
  15. package/dist/agent/engine/translate-anthropic.js +16 -0
  16. package/dist/agent/engine/translate-anthropic.js.map +1 -1
  17. package/dist/agent/engine/types.d.ts +16 -1
  18. package/dist/agent/engine/types.d.ts.map +1 -1
  19. package/dist/agent/engine/types.js.map +1 -1
  20. package/dist/agent/production-agent.d.ts +4 -0
  21. package/dist/agent/production-agent.d.ts.map +1 -1
  22. package/dist/agent/production-agent.js +96 -4
  23. package/dist/agent/production-agent.js.map +1 -1
  24. package/dist/agent/types.d.ts +3 -0
  25. package/dist/agent/types.d.ts.map +1 -1
  26. package/dist/agent/types.js.map +1 -1
  27. package/dist/cli/create.d.ts +2 -1
  28. package/dist/cli/create.d.ts.map +1 -1
  29. package/dist/cli/create.js +21 -14
  30. package/dist/cli/create.js.map +1 -1
  31. package/dist/client/AgentPanel.d.ts.map +1 -1
  32. package/dist/client/AgentPanel.js +5 -5
  33. package/dist/client/AgentPanel.js.map +1 -1
  34. package/dist/client/AssistantChat.d.ts +5 -0
  35. package/dist/client/AssistantChat.d.ts.map +1 -1
  36. package/dist/client/AssistantChat.js +54 -2
  37. package/dist/client/AssistantChat.js.map +1 -1
  38. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  39. package/dist/client/MultiTabAssistantChat.js +33 -2
  40. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  41. package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
  42. package/dist/client/NewWorkspaceAppFlow.js +10 -1
  43. package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
  44. package/dist/client/agent-chat-adapter.d.ts +4 -0
  45. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  46. package/dist/client/agent-chat-adapter.js +5 -1
  47. package/dist/client/agent-chat-adapter.js.map +1 -1
  48. package/dist/client/composer/TiptapComposer.d.ts +6 -1
  49. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  50. package/dist/client/composer/TiptapComposer.js +25 -17
  51. package/dist/client/composer/TiptapComposer.js.map +1 -1
  52. package/dist/client/composer/useVoiceDictation.d.ts +6 -5
  53. package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
  54. package/dist/client/composer/useVoiceDictation.js +54 -21
  55. package/dist/client/composer/useVoiceDictation.js.map +1 -1
  56. package/dist/client/org/OrgSwitcher.d.ts +3 -1
  57. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  58. package/dist/client/org/OrgSwitcher.js +12 -7
  59. package/dist/client/org/OrgSwitcher.js.map +1 -1
  60. package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
  61. package/dist/client/settings/AutomationsSection.js +2 -2
  62. package/dist/client/settings/AutomationsSection.js.map +1 -1
  63. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
  64. package/dist/client/settings/VoiceTranscriptionSection.js +46 -15
  65. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  66. package/dist/client/tools/ToolViewer.d.ts.map +1 -1
  67. package/dist/client/tools/ToolViewer.js +2 -2
  68. package/dist/client/tools/ToolViewer.js.map +1 -1
  69. package/dist/client/tools/ToolsListPage.d.ts.map +1 -1
  70. package/dist/client/tools/ToolsListPage.js +4 -4
  71. package/dist/client/tools/ToolsListPage.js.map +1 -1
  72. package/dist/client/tools/ToolsSidebarSection.d.ts.map +1 -1
  73. package/dist/client/tools/ToolsSidebarSection.js +2 -2
  74. package/dist/client/tools/ToolsSidebarSection.js.map +1 -1
  75. package/dist/client/transcription/use-live-transcription.d.ts +1 -0
  76. package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
  77. package/dist/client/transcription/use-live-transcription.js +41 -0
  78. package/dist/client/transcription/use-live-transcription.js.map +1 -1
  79. package/dist/integrations/adapters/email.js +81 -5
  80. package/dist/integrations/adapters/email.js.map +1 -1
  81. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  82. package/dist/integrations/adapters/slack.js +4 -1
  83. package/dist/integrations/adapters/slack.js.map +1 -1
  84. package/dist/integrations/plugin.d.ts.map +1 -1
  85. package/dist/integrations/plugin.js +2 -1
  86. package/dist/integrations/plugin.js.map +1 -1
  87. package/dist/integrations/types.d.ts +2 -0
  88. package/dist/integrations/types.d.ts.map +1 -1
  89. package/dist/integrations/types.js.map +1 -1
  90. package/dist/integrations/webhook-handler.js +12 -2
  91. package/dist/integrations/webhook-handler.js.map +1 -1
  92. package/dist/oauth-tokens/store.d.ts.map +1 -1
  93. package/dist/oauth-tokens/store.js +34 -16
  94. package/dist/oauth-tokens/store.js.map +1 -1
  95. package/dist/scripts/db/exec.d.ts.map +1 -1
  96. package/dist/scripts/db/exec.js +32 -23
  97. package/dist/scripts/db/exec.js.map +1 -1
  98. package/dist/scripts/db/patch.d.ts.map +1 -1
  99. package/dist/scripts/db/patch.js +48 -35
  100. package/dist/scripts/db/patch.js.map +1 -1
  101. package/dist/scripts/db/query.d.ts.map +1 -1
  102. package/dist/scripts/db/query.js +22 -13
  103. package/dist/scripts/db/query.js.map +1 -1
  104. package/dist/scripts/db/safety.d.ts +2 -0
  105. package/dist/scripts/db/safety.d.ts.map +1 -0
  106. package/dist/scripts/db/safety.js +67 -0
  107. package/dist/scripts/db/safety.js.map +1 -0
  108. package/dist/scripts/db/scoping.js +4 -4
  109. package/dist/scripts/db/scoping.js.map +1 -1
  110. package/dist/server/email-template.d.ts +5 -0
  111. package/dist/server/email-template.d.ts.map +1 -1
  112. package/dist/server/email-template.js +7 -4
  113. package/dist/server/email-template.js.map +1 -1
  114. package/dist/server/google-auth-plugin.d.ts.map +1 -1
  115. package/dist/server/google-auth-plugin.js +1 -8
  116. package/dist/server/google-auth-plugin.js.map +1 -1
  117. package/dist/server/index.d.ts +3 -2
  118. package/dist/server/index.d.ts.map +1 -1
  119. package/dist/server/index.js +3 -2
  120. package/dist/server/index.js.map +1 -1
  121. package/dist/server/onboarding-html.d.ts.map +1 -1
  122. package/dist/server/onboarding-html.js +3 -10
  123. package/dist/server/onboarding-html.js.map +1 -1
  124. package/dist/server/transcribe-voice.d.ts +9 -9
  125. package/dist/server/transcribe-voice.d.ts.map +1 -1
  126. package/dist/server/transcribe-voice.js +405 -51
  127. package/dist/server/transcribe-voice.js.map +1 -1
  128. package/dist/server/voice-providers-status.d.ts.map +1 -1
  129. package/dist/server/voice-providers-status.js +13 -1
  130. package/dist/server/voice-providers-status.js.map +1 -1
  131. package/dist/settings/store.d.ts.map +1 -1
  132. package/dist/settings/store.js +14 -6
  133. package/dist/settings/store.js.map +1 -1
  134. package/dist/shared/reasoning-effort.d.ts +8 -0
  135. package/dist/shared/reasoning-effort.d.ts.map +1 -0
  136. package/dist/shared/reasoning-effort.js +94 -0
  137. package/dist/shared/reasoning-effort.js.map +1 -0
  138. package/dist/templates/default/public/favicon.svg +1 -13
  139. package/dist/templates/default/public/icon-180.svg +1 -13
  140. package/dist/templates/default/public/icon-192.svg +1 -13
  141. package/dist/templates/default/public/icon-512.svg +1 -13
  142. package/dist/templates/workspace-root/.github/workflows/ci.yml +32 -0
  143. package/dist/templates/workspace-root/.prettierignore +19 -0
  144. package/dist/templates/workspace-root/_gitignore +5 -0
  145. package/dist/templates/workspace-root/package.json +13 -2
  146. package/dist/templates/workspace-root/pnpm-workspace.yaml +1 -0
  147. package/dist/templates/workspace-root/scripts/workspace-dev.ts +2 -0
  148. package/dist/transcription/builder-transcription.d.ts +2 -0
  149. package/dist/transcription/builder-transcription.d.ts.map +1 -1
  150. package/dist/transcription/builder-transcription.js +4 -0
  151. package/dist/transcription/builder-transcription.js.map +1 -1
  152. package/docs/content/voice-input.md +14 -13
  153. package/package.json +1 -1
  154. package/src/templates/default/public/favicon.svg +1 -13
  155. package/src/templates/default/public/icon-180.svg +1 -13
  156. package/src/templates/default/public/icon-192.svg +1 -13
  157. package/src/templates/default/public/icon-512.svg +1 -13
  158. package/src/templates/workspace-root/.github/workflows/ci.yml +32 -0
  159. package/src/templates/workspace-root/.prettierignore +19 -0
  160. package/src/templates/workspace-root/_gitignore +5 -0
  161. package/src/templates/workspace-root/package.json +13 -2
  162. package/src/templates/workspace-root/pnpm-workspace.yaml +1 -0
  163. package/src/templates/workspace-root/scripts/workspace-dev.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"translate-ai-sdk.js","sourceRoot":"","sources":["../../../src/agent/engine/translate-ai-sdk.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Translation helpers between AgentEngine normalized types and\n * Vercel AI SDK (`ai` package, v6+) types.\n *\n * The framework keeps a provider-neutral content/event model (see ./types.ts).\n * These helpers convert in both directions against the v6 `TextStreamPart` and\n * `ModelMessage` shapes.\n */\n\nimport type {\n EngineTool,\n EngineMessage,\n EngineContentPart,\n EngineEvent,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// EngineTool → AI SDK tool definition\n// ---------------------------------------------------------------------------\n\n/**\n * Convert EngineTool[] into the record shape that AI SDK's `streamText` expects\n * under the `tools` option.\n *\n * Pass the `jsonSchema` helper from the `ai` package when available so the\n * schema is wrapped in the SDK's runtime validator; fall back to the raw JSON\n * Schema object otherwise (mostly for unit tests that don't import `ai`).\n */\nexport function engineToolsToAISDK(\n tools: EngineTool[],\n jsonSchema?: (schema: Record<string, unknown>) => unknown,\n): Record<string, any> {\n const result: Record<string, any> = {};\n for (const tool of tools) {\n const rawSchema: Record<string, unknown> = {\n type: \"object\",\n properties: tool.inputSchema.properties ?? {},\n required: tool.inputSchema.required ?? [],\n };\n result[tool.name] = {\n description: tool.description,\n inputSchema: jsonSchema ? jsonSchema(rawSchema) : rawSchema,\n };\n }\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// EngineMessage → AI SDK ModelMessage\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a single EngineMessage into **one or more** AI SDK ModelMessages.\n *\n * v6 puts tool-results in a dedicated `role: \"tool\"` message rather than\n * embedding them in user content. When an EngineMessage's user content mixes\n * text/images with tool-results, we emit the tool-result parts first as a\n * `{role: \"tool\"}` message, followed by the remaining text/image parts as a\n * `{role: \"user\"}` message.\n */\nexport function engineMessageToAISDK(msg: EngineMessage): any[] {\n // EngineMessage is `user | assistant` — both branches return below.\n if (msg.role === \"user\") {\n const userParts: any[] = [];\n const toolResultParts: any[] = [];\n for (const part of msg.content) {\n if (part.type === \"text\") {\n userParts.push({ type: \"text\", text: part.text });\n } else if (part.type === \"image\") {\n userParts.push({\n type: \"image\",\n image: `data:${part.mediaType};base64,${part.data}`,\n mediaType: part.mediaType,\n });\n } else if (part.type === \"tool-result\") {\n toolResultParts.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName ?? \"\",\n output: part.isError\n ? { type: \"error-text\", value: part.content }\n : { type: \"text\", value: part.content },\n });\n }\n }\n\n const out: any[] = [];\n if (toolResultParts.length > 0) {\n out.push({ role: \"tool\", content: toolResultParts });\n }\n if (userParts.length > 0) {\n out.push({\n role: \"user\",\n content:\n userParts.length === 1 && userParts[0].type === \"text\"\n ? userParts[0].text\n : userParts,\n });\n }\n return out;\n }\n\n if (msg.role === \"assistant\") {\n const content: any[] = [];\n for (const part of msg.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text });\n } else if (part.type === \"tool-call\") {\n content.push({\n type: \"tool-call\",\n toolCallId: part.id,\n toolName: part.name,\n input: part.input,\n });\n } else if (part.type === \"thinking\") {\n const reasoning: Record<string, unknown> = {\n type: \"reasoning\",\n text: part.text,\n };\n if (part.signature) {\n // Round-trip the Anthropic extended-thinking signature through\n // providerOptions so the model can continue its chain of thought.\n reasoning.providerOptions = {\n anthropic: { signature: part.signature },\n };\n }\n content.push(reasoning);\n }\n }\n return [\n {\n role: \"assistant\",\n content:\n content.length === 1 && content[0].type === \"text\"\n ? content[0].text\n : content,\n },\n ];\n }\n\n throw new Error(`unknown EngineMessage role: ${(msg as any).role}`);\n}\n\nexport function engineMessagesToAISDK(messages: EngineMessage[]): any[] {\n return messages.flatMap(engineMessageToAISDK);\n}\n\n// ---------------------------------------------------------------------------\n// AI SDK TextStreamPart → EngineEvent\n// ---------------------------------------------------------------------------\n\n/**\n * Translate a single part from AI SDK's `result.fullStream` into the flat\n * sequence of EngineEvent items the framework works with.\n *\n * v6 emits lifecycle events (`text-start` / `text-delta` / `text-end`,\n * `reasoning-start` / `reasoning-delta` / `reasoning-end`, `tool-input-*`).\n * We absorb the boundary events and forward only the deltas plus the terminal\n * `tool-call`, `finish-step`, and `finish` parts.\n */\nexport function aiSdkPartToEngineEvents(part: any): EngineEvent[] {\n const events: EngineEvent[] = [];\n\n switch (part?.type) {\n case \"text-delta\":\n if (part.text) events.push({ type: \"text-delta\", text: part.text });\n break;\n case \"text-start\":\n case \"text-end\":\n break;\n\n case \"reasoning-delta\":\n if (part.text) events.push({ type: \"thinking-delta\", text: part.text });\n break;\n case \"reasoning-start\":\n case \"reasoning-end\":\n break;\n\n case \"tool-input-start\":\n case \"tool-input-delta\":\n case \"tool-input-end\":\n // Ignored: the terminal `tool-call` part carries the full input.\n break;\n\n case \"tool-call\":\n events.push({\n type: \"tool-call\",\n id: part.toolCallId,\n name: part.toolName,\n input: part.input ?? {},\n });\n break;\n\n case \"tool-result\":\n case \"tool-error\":\n // Only fired when the SDK itself executes a tool. Our runAgentLoop\n // dispatches tools on the outside, so these don't appear in our flow.\n break;\n\n case \"error\": {\n const errMsg =\n part.error instanceof Error\n ? part.error.message\n : typeof part.error === \"string\"\n ? part.error\n : JSON.stringify(part.error);\n events.push({ type: \"stop\", reason: \"error\", error: errMsg });\n break;\n }\n\n case \"finish-step\":\n if (part.usage) {\n events.push(usageEventFromLanguageModelUsage(part.usage));\n }\n break;\n\n case \"finish\":\n if (part.totalUsage) {\n events.push(usageEventFromLanguageModelUsage(part.totalUsage));\n }\n events.push({\n type: \"stop\",\n reason: finishReasonToStopReason(part.finishReason),\n });\n break;\n\n case \"start\":\n case \"start-step\":\n case \"source\":\n case \"file\":\n case \"abort\":\n case \"raw\":\n default:\n break;\n }\n\n return events;\n}\n\nfunction finishReasonToStopReason(\n reason: unknown,\n): \"end_turn\" | \"tool_use\" | \"max_tokens\" | \"stop_sequence\" | \"error\" {\n switch (reason) {\n case \"tool-calls\":\n return \"tool_use\";\n case \"length\":\n return \"max_tokens\";\n case \"content-filter\":\n case \"error\":\n return \"error\";\n default:\n // Maps \"stop\", \"other\", \"unknown\", and anything we don't recognise.\n return \"end_turn\";\n }\n}\n\nfunction usageEventFromLanguageModelUsage(usage: any): EngineEvent {\n // v6 exposes cache/reasoning tokens via detail objects; older providers\n // put them at the top level (deprecated but still read as a fallback).\n return {\n type: \"usage\",\n inputTokens: usage.inputTokens ?? 0,\n outputTokens: usage.outputTokens ?? 0,\n totalTokens: usage.totalTokens,\n cacheReadTokens:\n usage.inputTokenDetails?.cacheReadTokens ?? usage.cachedInputTokens ?? 0,\n cacheWriteTokens: usage.inputTokenDetails?.cacheWriteTokens ?? 0,\n reasoningTokens:\n usage.outputTokenDetails?.reasoningTokens ?? usage.reasoningTokens,\n };\n}\n\n// ---------------------------------------------------------------------------\n// AI SDK StepResult → EngineContentPart[] (assistant content reconstruction)\n// ---------------------------------------------------------------------------\n\n/**\n * Reconstruct the assistant message content from an AI SDK v6 `StepResult`.\n * `step.content` is the canonical structured form — iterate it.\n */\nexport function aiSdkStepToAssistantContent(step: any): EngineContentPart[] {\n const parts: EngineContentPart[] = [];\n for (const part of step?.content ?? []) {\n if (part.type === \"text\" && part.text) {\n parts.push({ type: \"text\", text: part.text });\n } else if (part.type === \"reasoning\") {\n const signature = part.providerMetadata?.anthropic?.signature;\n const thinking: EngineContentPart = {\n type: \"thinking\",\n text: part.text ?? \"\",\n };\n if (typeof signature === \"string\") thinking.signature = signature;\n parts.push(thinking);\n } else if (part.type === \"tool-call\") {\n parts.push({\n type: \"tool-call\",\n id: part.toolCallId,\n name: part.toolName,\n input: part.input,\n });\n }\n }\n return parts;\n}\n"]}
1
+ {"version":3,"file":"translate-ai-sdk.js","sourceRoot":"","sources":["../../../src/agent/engine/translate-ai-sdk.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Translation helpers between AgentEngine normalized types and\n * Vercel AI SDK (`ai` package, v6+) types.\n *\n * The framework keeps a provider-neutral content/event model (see ./types.ts).\n * These helpers convert in both directions against the v6 `TextStreamPart` and\n * `ModelMessage` shapes.\n */\n\nimport type {\n EngineTool,\n EngineMessage,\n EngineContentPart,\n EngineEvent,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// EngineTool → AI SDK tool definition\n// ---------------------------------------------------------------------------\n\n/**\n * Convert EngineTool[] into the record shape that AI SDK's `streamText` expects\n * under the `tools` option.\n *\n * Pass the `jsonSchema` helper from the `ai` package when available so the\n * schema is wrapped in the SDK's runtime validator; fall back to the raw JSON\n * Schema object otherwise (mostly for unit tests that don't import `ai`).\n */\nexport function engineToolsToAISDK(\n tools: EngineTool[],\n jsonSchema?: (schema: Record<string, unknown>) => unknown,\n): Record<string, any> {\n const result: Record<string, any> = {};\n for (const tool of tools) {\n const rawSchema: Record<string, unknown> = {\n type: \"object\",\n properties: tool.inputSchema.properties ?? {},\n required: tool.inputSchema.required ?? [],\n };\n result[tool.name] = {\n description: tool.description,\n inputSchema: jsonSchema ? jsonSchema(rawSchema) : rawSchema,\n };\n }\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// EngineMessage → AI SDK ModelMessage\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a single EngineMessage into **one or more** AI SDK ModelMessages.\n *\n * v6 puts tool-results in a dedicated `role: \"tool\"` message rather than\n * embedding them in user content. When an EngineMessage's user content mixes\n * text/images with tool-results, we emit the tool-result parts first as a\n * `{role: \"tool\"}` message, followed by the remaining text/image parts as a\n * `{role: \"user\"}` message.\n */\nexport function engineMessageToAISDK(msg: EngineMessage): any[] {\n // EngineMessage is `user | assistant` — both branches return below.\n if (msg.role === \"user\") {\n const userParts: any[] = [];\n const toolResultParts: any[] = [];\n for (const part of msg.content) {\n if (part.type === \"text\") {\n userParts.push({ type: \"text\", text: part.text });\n } else if (part.type === \"image\") {\n userParts.push({\n type: \"image\",\n image: `data:${part.mediaType};base64,${part.data}`,\n mediaType: part.mediaType,\n });\n } else if (part.type === \"file\") {\n userParts.push({\n type: \"file\",\n data: part.data,\n mediaType: part.mediaType,\n filename: part.filename,\n });\n } else if (part.type === \"tool-result\") {\n toolResultParts.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName ?? \"\",\n output: part.isError\n ? { type: \"error-text\", value: part.content }\n : { type: \"text\", value: part.content },\n });\n }\n }\n\n const out: any[] = [];\n if (toolResultParts.length > 0) {\n out.push({ role: \"tool\", content: toolResultParts });\n }\n if (userParts.length > 0) {\n out.push({\n role: \"user\",\n content:\n userParts.length === 1 && userParts[0].type === \"text\"\n ? userParts[0].text\n : userParts,\n });\n }\n return out;\n }\n\n if (msg.role === \"assistant\") {\n const content: any[] = [];\n for (const part of msg.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text });\n } else if (part.type === \"tool-call\") {\n content.push({\n type: \"tool-call\",\n toolCallId: part.id,\n toolName: part.name,\n input: part.input,\n });\n } else if (part.type === \"thinking\") {\n const reasoning: Record<string, unknown> = {\n type: \"reasoning\",\n text: part.text,\n };\n if (part.signature) {\n // Round-trip the Anthropic extended-thinking signature through\n // providerOptions so the model can continue its chain of thought.\n reasoning.providerOptions = {\n anthropic: { signature: part.signature },\n };\n }\n content.push(reasoning);\n }\n }\n return [\n {\n role: \"assistant\",\n content:\n content.length === 1 && content[0].type === \"text\"\n ? content[0].text\n : content,\n },\n ];\n }\n\n throw new Error(`unknown EngineMessage role: ${(msg as any).role}`);\n}\n\nexport function engineMessagesToAISDK(messages: EngineMessage[]): any[] {\n return messages.flatMap(engineMessageToAISDK);\n}\n\n// ---------------------------------------------------------------------------\n// AI SDK TextStreamPart → EngineEvent\n// ---------------------------------------------------------------------------\n\n/**\n * Translate a single part from AI SDK's `result.fullStream` into the flat\n * sequence of EngineEvent items the framework works with.\n *\n * v6 emits lifecycle events (`text-start` / `text-delta` / `text-end`,\n * `reasoning-start` / `reasoning-delta` / `reasoning-end`, `tool-input-*`).\n * We absorb the boundary events and forward only the deltas plus the terminal\n * `tool-call`, `finish-step`, and `finish` parts.\n */\nexport function aiSdkPartToEngineEvents(part: any): EngineEvent[] {\n const events: EngineEvent[] = [];\n\n switch (part?.type) {\n case \"text-delta\":\n if (part.text) events.push({ type: \"text-delta\", text: part.text });\n break;\n case \"text-start\":\n case \"text-end\":\n break;\n\n case \"reasoning-delta\":\n if (part.text) events.push({ type: \"thinking-delta\", text: part.text });\n break;\n case \"reasoning-start\":\n case \"reasoning-end\":\n break;\n\n case \"tool-input-start\":\n case \"tool-input-delta\":\n case \"tool-input-end\":\n // Ignored: the terminal `tool-call` part carries the full input.\n break;\n\n case \"tool-call\":\n events.push({\n type: \"tool-call\",\n id: part.toolCallId,\n name: part.toolName,\n input: part.input ?? {},\n });\n break;\n\n case \"tool-input-error\":\n case \"tool-error\":\n events.push({\n type: \"tool-call-error\",\n id: part.toolCallId,\n name: part.toolName,\n input: part.input ?? {},\n error:\n part.errorText ??\n (part.error instanceof Error\n ? part.error.message\n : typeof part.error === \"string\"\n ? part.error\n : JSON.stringify(part.error ?? \"Invalid tool input\")),\n });\n break;\n\n case \"tool-result\":\n // Only fired when the SDK itself executes a tool. Our runAgentLoop\n // dispatches tools on the outside, so these don't appear in our flow.\n break;\n\n case \"error\": {\n const errMsg =\n part.error instanceof Error\n ? part.error.message\n : typeof part.error === \"string\"\n ? part.error\n : JSON.stringify(part.error);\n events.push({ type: \"stop\", reason: \"error\", error: errMsg });\n break;\n }\n\n case \"finish-step\":\n if (part.usage) {\n events.push(usageEventFromLanguageModelUsage(part.usage));\n }\n break;\n\n case \"finish\":\n if (part.totalUsage) {\n events.push(usageEventFromLanguageModelUsage(part.totalUsage));\n }\n events.push({\n type: \"stop\",\n reason: finishReasonToStopReason(part.finishReason),\n });\n break;\n\n case \"start\":\n case \"start-step\":\n case \"source\":\n case \"file\":\n case \"abort\":\n case \"raw\":\n default:\n break;\n }\n\n return events;\n}\n\nfunction finishReasonToStopReason(\n reason: unknown,\n): \"end_turn\" | \"tool_use\" | \"max_tokens\" | \"stop_sequence\" | \"error\" {\n switch (reason) {\n case \"tool-calls\":\n return \"tool_use\";\n case \"length\":\n return \"max_tokens\";\n case \"content-filter\":\n case \"error\":\n return \"error\";\n default:\n // Maps \"stop\", \"other\", \"unknown\", and anything we don't recognise.\n return \"end_turn\";\n }\n}\n\nfunction usageEventFromLanguageModelUsage(usage: any): EngineEvent {\n // v6 exposes cache/reasoning tokens via detail objects; older providers\n // put them at the top level (deprecated but still read as a fallback).\n return {\n type: \"usage\",\n inputTokens: usage.inputTokens ?? 0,\n outputTokens: usage.outputTokens ?? 0,\n totalTokens: usage.totalTokens,\n cacheReadTokens:\n usage.inputTokenDetails?.cacheReadTokens ?? usage.cachedInputTokens ?? 0,\n cacheWriteTokens: usage.inputTokenDetails?.cacheWriteTokens ?? 0,\n reasoningTokens:\n usage.outputTokenDetails?.reasoningTokens ?? usage.reasoningTokens,\n };\n}\n\n// ---------------------------------------------------------------------------\n// AI SDK StepResult → EngineContentPart[] (assistant content reconstruction)\n// ---------------------------------------------------------------------------\n\n/**\n * Reconstruct the assistant message content from an AI SDK v6 `StepResult`.\n * `step.content` is the canonical structured form — iterate it.\n */\nexport function aiSdkStepToAssistantContent(step: any): EngineContentPart[] {\n const parts: EngineContentPart[] = [];\n for (const part of step?.content ?? []) {\n if (part.type === \"text\" && part.text) {\n parts.push({ type: \"text\", text: part.text });\n } else if (part.type === \"reasoning\") {\n const signature = part.providerMetadata?.anthropic?.signature;\n const thinking: EngineContentPart = {\n type: \"thinking\",\n text: part.text ?? \"\",\n };\n if (typeof signature === \"string\") thinking.signature = signature;\n parts.push(thinking);\n } else if (part.type === \"tool-call\") {\n parts.push({\n type: \"tool-call\",\n id: part.toolCallId,\n name: part.toolName,\n input: part.input,\n });\n } else if (part.type === \"tool-input-error\" || part.type === \"tool-error\") {\n parts.push({\n type: \"tool-call\",\n id: part.toolCallId,\n name: part.toolName,\n input: part.input ?? {},\n });\n }\n }\n return parts;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"translate-anthropic.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/translate-anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,WAAW,EACZ,MAAM,YAAY,CAAC;AAMpB,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC,IAAI,CAMtE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,CAE5E;AAMD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,aAAa,GACjB,SAAS,CAAC,YAAY,CAKxB;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,aAAa,EAAE,GACxB,SAAS,CAAC,YAAY,EAAE,CAE1B;AAiDD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,SAAS,CAAC,YAAY,EAAE,GAChC,iBAAiB,EAAE,CA0BrB;AAMD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,GAAG,GAAG,WAAW,EAAE,CAoBtE;AAMD,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,UAAQ,GACd,iBAAiB,CAOnB"}
1
+ {"version":3,"file":"translate-anthropic.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/translate-anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,WAAW,EACZ,MAAM,YAAY,CAAC;AAMpB,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC,IAAI,CAMtE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,CAE5E;AAMD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,aAAa,GACjB,SAAS,CAAC,YAAY,CAKxB;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,aAAa,EAAE,GACxB,SAAS,CAAC,YAAY,EAAE,CAE1B;AAkED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,SAAS,CAAC,YAAY,EAAE,GAChC,iBAAiB,EAAE,CA0BrB;AAMD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,GAAG,GAAG,WAAW,EAAE,CAoBtE;AAMD,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,UAAQ,GACd,iBAAiB,CAOnB"}
@@ -45,6 +45,22 @@ function enginePartToAnthropic(part) {
45
45
  data: part.data,
46
46
  },
47
47
  };
48
+ case "file":
49
+ if (part.mediaType === "application/pdf") {
50
+ return {
51
+ type: "document",
52
+ source: {
53
+ type: "base64",
54
+ media_type: "application/pdf",
55
+ data: part.data,
56
+ },
57
+ ...(part.filename ? { title: part.filename } : {}),
58
+ };
59
+ }
60
+ return {
61
+ type: "text",
62
+ text: `[Attached file: ${part.filename ?? "attachment"} (${part.mediaType})]`,
63
+ };
48
64
  case "tool-call":
49
65
  return {
50
66
  type: "tool_use",
@@ -1 +1 @@
1
- {"version":3,"file":"translate-anthropic.js","sourceRoot":"","sources":["../../../src/agent/engine/translate-anthropic.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Translation helpers between the AgentEngine normalized types and\n * @anthropic-ai/sdk's wire types.\n *\n * AnthropicEngine does very little translation because the framework's\n * EngineMessage / EngineTool shapes were modeled on Anthropic's types.\n * The main differences are: camelCase vs snake_case, and that\n * Anthropic uses `input_schema` while we use `inputSchema`.\n */\n\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport type {\n EngineTool,\n EngineMessage,\n EngineContentPart,\n EngineEvent,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// EngineTool → Anthropic.Tool\n// ---------------------------------------------------------------------------\n\nexport function engineToolToAnthropic(tool: EngineTool): Anthropic.Tool {\n return {\n name: tool.name,\n description: tool.description,\n input_schema: tool.inputSchema as Anthropic.Tool[\"input_schema\"],\n };\n}\n\nexport function engineToolsToAnthropic(tools: EngineTool[]): Anthropic.Tool[] {\n return tools.map(engineToolToAnthropic);\n}\n\n// ---------------------------------------------------------------------------\n// EngineMessage → Anthropic.MessageParam\n// ---------------------------------------------------------------------------\n\nexport function engineMessageToAnthropic(\n msg: EngineMessage,\n): Anthropic.MessageParam {\n return {\n role: msg.role,\n content: msg.content.map(enginePartToAnthropic),\n };\n}\n\nexport function engineMessagesToAnthropic(\n messages: EngineMessage[],\n): Anthropic.MessageParam[] {\n return messages.map(engineMessageToAnthropic);\n}\n\nfunction enginePartToAnthropic(\n part: EngineContentPart,\n): Anthropic.ContentBlockParam {\n switch (part.type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n\n case \"image\":\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: part.mediaType,\n data: part.data,\n },\n };\n\n case \"tool-call\":\n return {\n type: \"tool_use\",\n id: part.id,\n name: part.name,\n input: part.input as Record<string, unknown>,\n } as any; // tool_use is a ContentBlockParam in Anthropic SDK\n\n case \"tool-result\":\n return {\n type: \"tool_result\",\n tool_use_id: part.toolCallId,\n content: part.content,\n ...(part.isError ? { is_error: true } : {}),\n } as any;\n\n case \"thinking\":\n // Anthropic thinking blocks — pass through with signature for context window continuity\n return {\n type: \"thinking\",\n thinking: part.text,\n signature: part.signature ?? \"\",\n } as any;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Anthropic.ContentBlock → EngineContentPart (from final message)\n// ---------------------------------------------------------------------------\n\nexport function anthropicContentToEngine(\n content: Anthropic.ContentBlock[],\n): EngineContentPart[] {\n return content\n .map((block) => {\n if (block.type === \"text\") {\n return { type: \"text\" as const, text: block.text };\n }\n if (block.type === \"tool_use\") {\n return {\n type: \"tool-call\" as const,\n id: block.id,\n name: block.name,\n input: block.input,\n };\n }\n if ((block as any).type === \"thinking\") {\n const b = block as any;\n return {\n type: \"thinking\" as const,\n text: b.thinking ?? \"\",\n signature: b.signature,\n };\n }\n // Unknown block type — skip\n return { type: \"text\" as const, text: \"\" };\n })\n .filter((p) => !(p.type === \"text\" && p.text === \"\"));\n}\n\n// ---------------------------------------------------------------------------\n// Anthropic stream chunk → EngineEvent\n// ---------------------------------------------------------------------------\n\n/**\n * Translate an Anthropic stream chunk into zero or more EngineEvents.\n * Called in a loop as chunks arrive from client.messages.stream().\n */\nexport function anthropicChunkToEngineEvents(chunk: any): EngineEvent[] {\n const events: EngineEvent[] = [];\n\n if (chunk.type === \"content_block_delta\") {\n if (chunk.delta?.type === \"text_delta\") {\n events.push({ type: \"text-delta\", text: chunk.delta.text });\n } else if (chunk.delta?.type === \"thinking_delta\") {\n events.push({ type: \"thinking-delta\", text: chunk.delta.thinking ?? \"\" });\n } else if (chunk.delta?.type === \"signature_delta\") {\n // Signature arrives after thinking — emit as a thinking-delta with empty text\n // but carry the signature for the caller to store\n events.push({\n type: \"thinking-delta\",\n text: \"\",\n signature: chunk.delta.signature,\n });\n }\n }\n\n return events;\n}\n\n// ---------------------------------------------------------------------------\n// Build tool_result blocks to append to messages after tool dispatch\n// ---------------------------------------------------------------------------\n\nexport function buildToolResultPart(\n toolCallId: string,\n content: string,\n isError = false,\n): EngineContentPart {\n return {\n type: \"tool-result\",\n toolCallId,\n content,\n ...(isError ? { isError } : {}),\n };\n}\n"]}
1
+ {"version":3,"file":"translate-anthropic.js","sourceRoot":"","sources":["../../../src/agent/engine/translate-anthropic.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Translation helpers between the AgentEngine normalized types and\n * @anthropic-ai/sdk's wire types.\n *\n * AnthropicEngine does very little translation because the framework's\n * EngineMessage / EngineTool shapes were modeled on Anthropic's types.\n * The main differences are: camelCase vs snake_case, and that\n * Anthropic uses `input_schema` while we use `inputSchema`.\n */\n\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport type {\n EngineTool,\n EngineMessage,\n EngineContentPart,\n EngineEvent,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// EngineTool → Anthropic.Tool\n// ---------------------------------------------------------------------------\n\nexport function engineToolToAnthropic(tool: EngineTool): Anthropic.Tool {\n return {\n name: tool.name,\n description: tool.description,\n input_schema: tool.inputSchema as Anthropic.Tool[\"input_schema\"],\n };\n}\n\nexport function engineToolsToAnthropic(tools: EngineTool[]): Anthropic.Tool[] {\n return tools.map(engineToolToAnthropic);\n}\n\n// ---------------------------------------------------------------------------\n// EngineMessage → Anthropic.MessageParam\n// ---------------------------------------------------------------------------\n\nexport function engineMessageToAnthropic(\n msg: EngineMessage,\n): Anthropic.MessageParam {\n return {\n role: msg.role,\n content: msg.content.map(enginePartToAnthropic),\n };\n}\n\nexport function engineMessagesToAnthropic(\n messages: EngineMessage[],\n): Anthropic.MessageParam[] {\n return messages.map(engineMessageToAnthropic);\n}\n\nfunction enginePartToAnthropic(\n part: EngineContentPart,\n): Anthropic.ContentBlockParam {\n switch (part.type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n\n case \"image\":\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: part.mediaType,\n data: part.data,\n },\n };\n\n case \"file\":\n if (part.mediaType === \"application/pdf\") {\n return {\n type: \"document\",\n source: {\n type: \"base64\",\n media_type: \"application/pdf\",\n data: part.data,\n },\n ...(part.filename ? { title: part.filename } : {}),\n } as any;\n }\n return {\n type: \"text\",\n text: `[Attached file: ${part.filename ?? \"attachment\"} (${part.mediaType})]`,\n };\n\n case \"tool-call\":\n return {\n type: \"tool_use\",\n id: part.id,\n name: part.name,\n input: part.input as Record<string, unknown>,\n } as any; // tool_use is a ContentBlockParam in Anthropic SDK\n\n case \"tool-result\":\n return {\n type: \"tool_result\",\n tool_use_id: part.toolCallId,\n content: part.content,\n ...(part.isError ? { is_error: true } : {}),\n } as any;\n\n case \"thinking\":\n // Anthropic thinking blocks — pass through with signature for context window continuity\n return {\n type: \"thinking\",\n thinking: part.text,\n signature: part.signature ?? \"\",\n } as any;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Anthropic.ContentBlock → EngineContentPart (from final message)\n// ---------------------------------------------------------------------------\n\nexport function anthropicContentToEngine(\n content: Anthropic.ContentBlock[],\n): EngineContentPart[] {\n return content\n .map((block) => {\n if (block.type === \"text\") {\n return { type: \"text\" as const, text: block.text };\n }\n if (block.type === \"tool_use\") {\n return {\n type: \"tool-call\" as const,\n id: block.id,\n name: block.name,\n input: block.input,\n };\n }\n if ((block as any).type === \"thinking\") {\n const b = block as any;\n return {\n type: \"thinking\" as const,\n text: b.thinking ?? \"\",\n signature: b.signature,\n };\n }\n // Unknown block type — skip\n return { type: \"text\" as const, text: \"\" };\n })\n .filter((p) => !(p.type === \"text\" && p.text === \"\"));\n}\n\n// ---------------------------------------------------------------------------\n// Anthropic stream chunk → EngineEvent\n// ---------------------------------------------------------------------------\n\n/**\n * Translate an Anthropic stream chunk into zero or more EngineEvents.\n * Called in a loop as chunks arrive from client.messages.stream().\n */\nexport function anthropicChunkToEngineEvents(chunk: any): EngineEvent[] {\n const events: EngineEvent[] = [];\n\n if (chunk.type === \"content_block_delta\") {\n if (chunk.delta?.type === \"text_delta\") {\n events.push({ type: \"text-delta\", text: chunk.delta.text });\n } else if (chunk.delta?.type === \"thinking_delta\") {\n events.push({ type: \"thinking-delta\", text: chunk.delta.thinking ?? \"\" });\n } else if (chunk.delta?.type === \"signature_delta\") {\n // Signature arrives after thinking — emit as a thinking-delta with empty text\n // but carry the signature for the caller to store\n events.push({\n type: \"thinking-delta\",\n text: \"\",\n signature: chunk.delta.signature,\n });\n }\n }\n\n return events;\n}\n\n// ---------------------------------------------------------------------------\n// Build tool_result blocks to append to messages after tool dispatch\n// ---------------------------------------------------------------------------\n\nexport function buildToolResultPart(\n toolCallId: string,\n content: string,\n isError = false,\n): EngineContentPart {\n return {\n type: \"tool-result\",\n toolCallId,\n content,\n ...(isError ? { isError } : {}),\n };\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import type { ReasoningEffort } from "../../shared/reasoning-effort.js";
1
2
  /**
2
3
  * Pluggable Agent Engine abstraction.
3
4
  *
@@ -56,6 +57,13 @@ export interface EngineImagePart {
56
57
  data: string;
57
58
  mediaType: "image/jpeg" | "image/png" | "image/gif" | "image/webp";
58
59
  }
60
+ export interface EngineFilePart {
61
+ type: "file";
62
+ /** Base64-encoded file data */
63
+ data: string;
64
+ mediaType: string;
65
+ filename?: string;
66
+ }
59
67
  export interface EngineToolCallPart {
60
68
  type: "tool-call";
61
69
  id: string;
@@ -76,7 +84,7 @@ export interface EngineThinkingPart {
76
84
  /** Opaque signature for pass-through on next turn (Anthropic extended thinking) */
77
85
  signature?: string;
78
86
  }
79
- export type EngineContentPart = EngineTextPart | EngineImagePart | EngineToolCallPart | EngineToolResultPart | EngineThinkingPart;
87
+ export type EngineContentPart = EngineTextPart | EngineImagePart | EngineFilePart | EngineToolCallPart | EngineToolResultPart | EngineThinkingPart;
80
88
  export type EngineMessage = {
81
89
  role: "user";
82
90
  content: EngineContentPart[];
@@ -96,6 +104,12 @@ export type EngineEvent = {
96
104
  id: string;
97
105
  name: string;
98
106
  input: unknown;
107
+ } | {
108
+ type: "tool-call-error";
109
+ id: string;
110
+ name: string;
111
+ input: unknown;
112
+ error: string;
99
113
  } | {
100
114
  type: "usage";
101
115
  inputTokens: number;
@@ -147,6 +161,7 @@ export interface EngineStreamOptions {
147
161
  abortSignal: AbortSignal;
148
162
  maxOutputTokens?: number;
149
163
  temperature?: number;
164
+ reasoningEffort?: ReasoningEffort;
150
165
  /**
151
166
  * Provider-specific options passed opaquely.
152
167
  * Engines forward options they understand and ignore unknown keys.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExE;;;;;;;;;;GAUG;AAEH;;;;;;;;GAQG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAE3B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;CAOrD;AAMD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAMD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;CACpE;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,iBAAiB,GACzB,cAAc,GACd,eAAe,GACf,cAAc,GACd,kBAAkB,GAClB,oBAAoB,GACpB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAC;AAMxD,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC/D;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACD;IACE;sEACkE;IAClE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EACF,UAAU,GACV,UAAU,GACV,YAAY,GACZ,eAAe,GACf,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAMN,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,4DAA4D;IAC5D,aAAa,EAAE,OAAO,CAAC;IACvB,2BAA2B;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,gCAAgC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,+CAA+C;IAC/C,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAMD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,EAAE;QAChB,SAAS,CAAC,EAAE;YACV,QAAQ,CAAC,EAAE;gBAAE,IAAI,EAAE,SAAS,CAAC;gBAAC,YAAY,EAAE,MAAM,CAAA;aAAE,CAAC;YACrD,YAAY,CAAC,EAAE;gBAAE,IAAI,EAAE,WAAW,CAAA;aAAE,GAAG,OAAO,CAAC;YAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;QACF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;KACzD,CAAC;CACH;AAMD;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,kCAAkC;IAClC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,+DAA+D;IAC/D,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAE1C;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;CAC/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent/engine/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,SAAS,CAAU;IACnB,UAAU,CAAU;IAC7B,YACE,OAAe,EACf,IAAkD;QAElD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,CAAC;IACrC,CAAC;CACF","sourcesContent":["/**\n * Pluggable Agent Engine abstraction.\n *\n * AgentEngine is the thin LLM adapter that sits beneath runAgentLoop.\n * Every caller (HTTP handler, A2A, MCP, sub-agents, webhooks, jobs) uses\n * an AgentEngine instead of a raw @anthropic-ai/sdk client.\n *\n * The framework's tool dispatch loop, sub-agents, SSE event stream, and all\n * other harness features live above this layer and are unaffected by engine\n * selection.\n */\n\n/**\n * Thrown when an engine emits a terminal stop-error event. Carries optional\n * structured fields (errorCode / upgradeUrl) that propagate up to the SSE\n * \"error\" event so the chat UI can render a structured CTA — e.g. an\n * Upgrade button for Builder gateway 402 quota errors.\n *\n * Lives in the engine types module (not production-agent) so run-manager and\n * other consumers can `instanceof` it without an import cycle.\n */\nexport class EngineError extends Error {\n readonly errorCode?: string;\n readonly upgradeUrl?: string;\n constructor(\n message: string,\n opts?: { errorCode?: string; upgradeUrl?: string },\n ) {\n super(message);\n this.name = \"EngineError\";\n this.errorCode = opts?.errorCode;\n this.upgradeUrl = opts?.upgradeUrl;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Tool / parameter types\n// ---------------------------------------------------------------------------\n\n/**\n * Engine-normalized tool definition. Structurally identical to Anthropic's\n * Tool type, with snake_case renamed to camelCase for consistency.\n */\nexport interface EngineTool {\n name: string;\n description: string;\n /** JSON Schema for the tool's input parameters */\n inputSchema: {\n type: \"object\";\n properties?: Record<string, unknown>;\n required?: string[];\n [key: string]: unknown;\n };\n /**\n * Provider-specific options for this tool.\n * E.g. `{ anthropic: { cacheControl: { type: \"ephemeral\" } } }`\n */\n providerOptions?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Message / content part types\n// ---------------------------------------------------------------------------\n\nexport interface EngineTextPart {\n type: \"text\";\n text: string;\n}\n\nexport interface EngineImagePart {\n type: \"image\";\n /** Base64-encoded image data */\n data: string;\n mediaType: \"image/jpeg\" | \"image/png\" | \"image/gif\" | \"image/webp\";\n}\n\nexport interface EngineToolCallPart {\n type: \"tool-call\";\n id: string;\n name: string;\n input: unknown;\n}\n\nexport interface EngineToolResultPart {\n type: \"tool-result\";\n toolCallId: string;\n /** Required by AI SDK v6+ ModelMessage. */\n toolName?: string;\n content: string;\n isError?: boolean;\n}\n\nexport interface EngineThinkingPart {\n type: \"thinking\";\n text: string;\n /** Opaque signature for pass-through on next turn (Anthropic extended thinking) */\n signature?: string;\n}\n\nexport type EngineContentPart =\n | EngineTextPart\n | EngineImagePart\n | EngineToolCallPart\n | EngineToolResultPart\n | EngineThinkingPart;\n\nexport type EngineMessage =\n | { role: \"user\"; content: EngineContentPart[] }\n | { role: \"assistant\"; content: EngineContentPart[] };\n\n// ---------------------------------------------------------------------------\n// Streaming event types\n// ---------------------------------------------------------------------------\n\nexport type EngineEvent =\n | { type: \"text-delta\"; text: string }\n | { type: \"thinking-delta\"; text: string; signature?: string }\n | { type: \"tool-call\"; id: string; name: string; input: unknown }\n | {\n type: \"usage\";\n inputTokens: number;\n outputTokens: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n totalTokens?: number;\n reasoningTokens?: number;\n }\n | {\n /** Final assistant content for the turn. Engines MUST emit this\n * exactly once, immediately before the terminal `stop` event. */\n type: \"assistant-content\";\n parts: EngineContentPart[];\n }\n | {\n type: \"stop\";\n reason:\n | \"end_turn\"\n | \"tool_use\"\n | \"max_tokens\"\n | \"stop_sequence\"\n | \"error\";\n error?: string;\n /**\n * Optional machine-readable error code for structured UI handling.\n * Used by the Builder gateway engine to signal quota/auth failures\n * (e.g. \"credits-limit-monthly\", \"gateway_not_enabled\") so the UI\n * can render an upgrade CTA instead of a plain error string.\n */\n errorCode?: string;\n /**\n * Optional URL the UI should link to when rendering the error.\n * Paired with errorCode — e.g. credits-limit-* stop events carry\n * a link to the user's Builder billing page.\n */\n upgradeUrl?: string;\n };\n\n// ---------------------------------------------------------------------------\n// Capabilities\n// ---------------------------------------------------------------------------\n\nexport interface EngineCapabilities {\n /** Extended / adaptive thinking support */\n thinking: boolean;\n /** Anthropic-style prompt caching (cache_control blocks) */\n promptCaching: boolean;\n /** Vision / image input */\n vision: boolean;\n /** Computer use tool support */\n computerUse: boolean;\n /** Multiple tool calls in a single response */\n parallelToolCalls: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Stream options\n// ---------------------------------------------------------------------------\n\nexport interface EngineStreamOptions {\n model: string;\n systemPrompt: string;\n messages: EngineMessage[];\n tools: EngineTool[];\n abortSignal: AbortSignal;\n maxOutputTokens?: number;\n temperature?: number;\n /**\n * Provider-specific options passed opaquely.\n * Engines forward options they understand and ignore unknown keys.\n *\n * Example (Anthropic):\n * ```ts\n * providerOptions: {\n * anthropic: {\n * thinking: { type: \"enabled\", budgetTokens: 8000 },\n * cacheControl: { type: \"ephemeral\" },\n * }\n * }\n * ```\n */\n providerOptions?: {\n anthropic?: {\n thinking?: { type: \"enabled\"; budgetTokens: number };\n cacheControl?: { type: \"ephemeral\" } | boolean;\n topK?: number;\n };\n openai?: Record<string, unknown>;\n google?: Record<string, unknown>;\n [provider: string]: Record<string, unknown> | undefined;\n };\n}\n\n// ---------------------------------------------------------------------------\n// AgentEngine interface\n// ---------------------------------------------------------------------------\n\n/**\n * The pluggable LLM adapter interface.\n *\n * Each engine performs one LLM API round-trip per `stream()` call.\n * The framework's runAgentLoop drives the tool-calling loop by calling\n * stream() repeatedly with updated messages.\n *\n * Engines yield EngineEvent items as they receive them from the LLM.\n * They MUST yield a `stop` event as the last item, even on error.\n */\nexport interface AgentEngine {\n /** Unique identifier, e.g. \"anthropic\", \"ai-sdk:anthropic\", \"ai-sdk:openai\" */\n readonly name: string;\n /** Human-readable label for UI display */\n readonly label: string;\n /** Default model for this engine */\n readonly defaultModel: string;\n /** Models this engine supports */\n readonly supportedModels: readonly string[];\n /** Capability flags used to gate provider-specific features */\n readonly capabilities: EngineCapabilities;\n\n /**\n * Stream a single LLM API call. Yields EngineEvent items.\n * The caller (runAgentLoop) handles retries, tool dispatch, and looping.\n */\n stream(opts: EngineStreamOptions): AsyncIterable<EngineEvent>;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent/engine/types.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,SAAS,CAAU;IACnB,UAAU,CAAU;IAC7B,YACE,OAAe,EACf,IAAkD;QAElD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,CAAC;IACrC,CAAC;CACF","sourcesContent":["import type { ReasoningEffort } from \"../../shared/reasoning-effort.js\";\n\n/**\n * Pluggable Agent Engine abstraction.\n *\n * AgentEngine is the thin LLM adapter that sits beneath runAgentLoop.\n * Every caller (HTTP handler, A2A, MCP, sub-agents, webhooks, jobs) uses\n * an AgentEngine instead of a raw @anthropic-ai/sdk client.\n *\n * The framework's tool dispatch loop, sub-agents, SSE event stream, and all\n * other harness features live above this layer and are unaffected by engine\n * selection.\n */\n\n/**\n * Thrown when an engine emits a terminal stop-error event. Carries optional\n * structured fields (errorCode / upgradeUrl) that propagate up to the SSE\n * \"error\" event so the chat UI can render a structured CTA — e.g. an\n * Upgrade button for Builder gateway 402 quota errors.\n *\n * Lives in the engine types module (not production-agent) so run-manager and\n * other consumers can `instanceof` it without an import cycle.\n */\nexport class EngineError extends Error {\n readonly errorCode?: string;\n readonly upgradeUrl?: string;\n constructor(\n message: string,\n opts?: { errorCode?: string; upgradeUrl?: string },\n ) {\n super(message);\n this.name = \"EngineError\";\n this.errorCode = opts?.errorCode;\n this.upgradeUrl = opts?.upgradeUrl;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Tool / parameter types\n// ---------------------------------------------------------------------------\n\n/**\n * Engine-normalized tool definition. Structurally identical to Anthropic's\n * Tool type, with snake_case renamed to camelCase for consistency.\n */\nexport interface EngineTool {\n name: string;\n description: string;\n /** JSON Schema for the tool's input parameters */\n inputSchema: {\n type: \"object\";\n properties?: Record<string, unknown>;\n required?: string[];\n [key: string]: unknown;\n };\n /**\n * Provider-specific options for this tool.\n * E.g. `{ anthropic: { cacheControl: { type: \"ephemeral\" } } }`\n */\n providerOptions?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Message / content part types\n// ---------------------------------------------------------------------------\n\nexport interface EngineTextPart {\n type: \"text\";\n text: string;\n}\n\nexport interface EngineImagePart {\n type: \"image\";\n /** Base64-encoded image data */\n data: string;\n mediaType: \"image/jpeg\" | \"image/png\" | \"image/gif\" | \"image/webp\";\n}\n\nexport interface EngineFilePart {\n type: \"file\";\n /** Base64-encoded file data */\n data: string;\n mediaType: string;\n filename?: string;\n}\n\nexport interface EngineToolCallPart {\n type: \"tool-call\";\n id: string;\n name: string;\n input: unknown;\n}\n\nexport interface EngineToolResultPart {\n type: \"tool-result\";\n toolCallId: string;\n /** Required by AI SDK v6+ ModelMessage. */\n toolName?: string;\n content: string;\n isError?: boolean;\n}\n\nexport interface EngineThinkingPart {\n type: \"thinking\";\n text: string;\n /** Opaque signature for pass-through on next turn (Anthropic extended thinking) */\n signature?: string;\n}\n\nexport type EngineContentPart =\n | EngineTextPart\n | EngineImagePart\n | EngineFilePart\n | EngineToolCallPart\n | EngineToolResultPart\n | EngineThinkingPart;\n\nexport type EngineMessage =\n | { role: \"user\"; content: EngineContentPart[] }\n | { role: \"assistant\"; content: EngineContentPart[] };\n\n// ---------------------------------------------------------------------------\n// Streaming event types\n// ---------------------------------------------------------------------------\n\nexport type EngineEvent =\n | { type: \"text-delta\"; text: string }\n | { type: \"thinking-delta\"; text: string; signature?: string }\n | { type: \"tool-call\"; id: string; name: string; input: unknown }\n | {\n type: \"tool-call-error\";\n id: string;\n name: string;\n input: unknown;\n error: string;\n }\n | {\n type: \"usage\";\n inputTokens: number;\n outputTokens: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n totalTokens?: number;\n reasoningTokens?: number;\n }\n | {\n /** Final assistant content for the turn. Engines MUST emit this\n * exactly once, immediately before the terminal `stop` event. */\n type: \"assistant-content\";\n parts: EngineContentPart[];\n }\n | {\n type: \"stop\";\n reason:\n | \"end_turn\"\n | \"tool_use\"\n | \"max_tokens\"\n | \"stop_sequence\"\n | \"error\";\n error?: string;\n /**\n * Optional machine-readable error code for structured UI handling.\n * Used by the Builder gateway engine to signal quota/auth failures\n * (e.g. \"credits-limit-monthly\", \"gateway_not_enabled\") so the UI\n * can render an upgrade CTA instead of a plain error string.\n */\n errorCode?: string;\n /**\n * Optional URL the UI should link to when rendering the error.\n * Paired with errorCode — e.g. credits-limit-* stop events carry\n * a link to the user's Builder billing page.\n */\n upgradeUrl?: string;\n };\n\n// ---------------------------------------------------------------------------\n// Capabilities\n// ---------------------------------------------------------------------------\n\nexport interface EngineCapabilities {\n /** Extended / adaptive thinking support */\n thinking: boolean;\n /** Anthropic-style prompt caching (cache_control blocks) */\n promptCaching: boolean;\n /** Vision / image input */\n vision: boolean;\n /** Computer use tool support */\n computerUse: boolean;\n /** Multiple tool calls in a single response */\n parallelToolCalls: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Stream options\n// ---------------------------------------------------------------------------\n\nexport interface EngineStreamOptions {\n model: string;\n systemPrompt: string;\n messages: EngineMessage[];\n tools: EngineTool[];\n abortSignal: AbortSignal;\n maxOutputTokens?: number;\n temperature?: number;\n reasoningEffort?: ReasoningEffort;\n /**\n * Provider-specific options passed opaquely.\n * Engines forward options they understand and ignore unknown keys.\n *\n * Example (Anthropic):\n * ```ts\n * providerOptions: {\n * anthropic: {\n * thinking: { type: \"enabled\", budgetTokens: 8000 },\n * cacheControl: { type: \"ephemeral\" },\n * }\n * }\n * ```\n */\n providerOptions?: {\n anthropic?: {\n thinking?: { type: \"enabled\"; budgetTokens: number };\n cacheControl?: { type: \"ephemeral\" } | boolean;\n topK?: number;\n };\n openai?: Record<string, unknown>;\n google?: Record<string, unknown>;\n [provider: string]: Record<string, unknown> | undefined;\n };\n}\n\n// ---------------------------------------------------------------------------\n// AgentEngine interface\n// ---------------------------------------------------------------------------\n\n/**\n * The pluggable LLM adapter interface.\n *\n * Each engine performs one LLM API round-trip per `stream()` call.\n * The framework's runAgentLoop drives the tool-calling loop by calling\n * stream() repeatedly with updated messages.\n *\n * Engines yield EngineEvent items as they receive them from the LLM.\n * They MUST yield a `stop` event as the last item, even on error.\n */\nexport interface AgentEngine {\n /** Unique identifier, e.g. \"anthropic\", \"ai-sdk:anthropic\", \"ai-sdk:openai\" */\n readonly name: string;\n /** Human-readable label for UI display */\n readonly label: string;\n /** Default model for this engine */\n readonly defaultModel: string;\n /** Models this engine supports */\n readonly supportedModels: readonly string[];\n /** Capability flags used to gate provider-specific features */\n readonly capabilities: EngineCapabilities;\n\n /**\n * Stream a single LLM API call. Yields EngineEvent items.\n * The caller (runAgentLoop) handles retries, tool dispatch, and looping.\n */\n stream(opts: EngineStreamOptions): AsyncIterable<EngineEvent>;\n}\n"]}
@@ -4,6 +4,7 @@ import type { AgentEngine, EngineTool, EngineMessage, EngineContentPart } from "
4
4
  import { PROVIDER_TO_ENV } from "./engine/provider-env-vars.js";
5
5
  import { subscribeToRun, getActiveRunForThread, getActiveRunForThreadAsync, getRun, abortRun } from "./run-manager.js";
6
6
  import type { ActiveRun } from "./run-manager.js";
7
+ import { type ReasoningEffort } from "../shared/reasoning-effort.js";
7
8
  export { PROVIDER_TO_ENV };
8
9
  /**
9
10
  * Look up a user's persisted API key for the given provider. Returns
@@ -84,6 +85,8 @@ export interface ProductionAgentOptions {
84
85
  };
85
86
  /** Model to use. Default: claude-sonnet-4-6 */
86
87
  model?: string;
88
+ /** Default reasoning effort for requests that do not supply an override. */
89
+ reasoningEffort?: ReasoningEffort;
87
90
  /** Provider-specific options passed through to the engine */
88
91
  providerOptions?: EngineMessage extends never ? never : any;
89
92
  /** Called when a run completes (for server-side thread persistence) */
@@ -138,6 +141,7 @@ export declare function runAgentLoop(opts: {
138
141
  signal: AbortSignal;
139
142
  ownerEmail?: string | null;
140
143
  orgId?: string | null;
144
+ reasoningEffort?: ReasoningEffort;
141
145
  providerOptions?: any;
142
146
  executionMode?: AgentExecutionMode;
143
147
  maxIterations?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"production-agent.d.ts","sourceRoot":"","sources":["../../src/agent/production-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"production-agent.d.ts","sourceRoot":"","sources":["../../src/agent/production-agent.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ import { getRequestOrgId, getRequestUserEmail, } from "../server/request-context
12
12
  import { isMcpToolAllowedForRequest } from "../mcp-client/visibility.js";
13
13
  import { createToolSearchEntry, TOOL_SEARCH_ACTION_NAME, } from "./tool-search.js";
14
14
  import { getDefaultMaxIterations, normalizeMaxIterations, readAgentLoopSettings, } from "./loop-settings.js";
15
+ import { isReasoningEffort, normalizeReasoningEffortForModel, } from "../shared/reasoning-effort.js";
15
16
  // Register built-in engines on first import
16
17
  registerBuiltinEngines();
17
18
  export { PROVIDER_TO_ENV };
@@ -366,6 +367,19 @@ function formatTextAttachment(att) {
366
367
  ].filter(Boolean);
367
368
  return `<attachment ${attrs.join(" ")}>\n${att.text}\n</attachment>`;
368
369
  }
370
+ function dataUrlToFilePart(att) {
371
+ if (att.type !== "file" || typeof att.data !== "string")
372
+ return null;
373
+ const match = att.data.match(/^data:([^;]+);base64,(.+)$/);
374
+ if (!match)
375
+ return null;
376
+ return {
377
+ type: "file",
378
+ data: match[2],
379
+ mediaType: att.contentType || match[1],
380
+ filename: att.name || undefined,
381
+ };
382
+ }
369
383
  export function buildUserContentWithAttachments(opts) {
370
384
  const userContent = [];
371
385
  const textAttachments = [];
@@ -381,6 +395,11 @@ export function buildUserContentWithAttachments(opts) {
381
395
  }
382
396
  continue;
383
397
  }
398
+ const filePart = dataUrlToFilePart(att);
399
+ if (filePart) {
400
+ userContent.push(filePart);
401
+ continue;
402
+ }
384
403
  const textAttachment = formatTextAttachment(att);
385
404
  if (textAttachment) {
386
405
  textAttachments.push(textAttachment);
@@ -462,6 +481,28 @@ function normalizeToolInputSchema(schema) {
462
481
  required: Array.isArray(schema.required) ? schema.required : [],
463
482
  };
464
483
  }
484
+ function stringifyToolInput(input) {
485
+ try {
486
+ const str = JSON.stringify(input);
487
+ if (!str)
488
+ return String(input);
489
+ return str.length > 500 ? `${str.slice(0, 500)}…` : str;
490
+ }
491
+ catch {
492
+ return String(input);
493
+ }
494
+ }
495
+ function normalizeToolCallInputForHistory(input) {
496
+ if (input && typeof input === "object" && !Array.isArray(input)) {
497
+ return input;
498
+ }
499
+ return { rawInput: input };
500
+ }
501
+ function toolInputSchemaErrorResult(toolName, input, error) {
502
+ return (`Invalid action parameters for ${toolName}: ${error}. ` +
503
+ `Received: ${stringifyToolInput(input)}. ` +
504
+ "The tool was not executed; retry with arguments that match the tool schema.");
505
+ }
465
506
  /**
466
507
  * The core agent loop — calls the engine iteratively until no more tool calls.
467
508
  * Decoupled from HTTP transport so it can run in the background.
@@ -486,8 +527,10 @@ export async function runAgentLoop(opts) {
486
527
  break;
487
528
  }
488
529
  let assistantContent;
489
- let hasToolCalls = false;
530
+ const toolCallErrors = new Map();
490
531
  for (let retry = 0;; retry++) {
532
+ assistantContent = undefined;
533
+ toolCallErrors.clear();
491
534
  try {
492
535
  const streamOpts = {
493
536
  model,
@@ -495,6 +538,7 @@ export async function runAgentLoop(opts) {
495
538
  messages,
496
539
  tools,
497
540
  abortSignal: signal,
541
+ reasoningEffort: opts.reasoningEffort,
498
542
  providerOptions: opts.providerOptions,
499
543
  };
500
544
  const eventStream = engine.stream(streamOpts);
@@ -510,7 +554,14 @@ export async function runAgentLoop(opts) {
510
554
  // them as a collapsible "reasoning" section in the UI.
511
555
  }
512
556
  else if (event.type === "tool-call") {
513
- hasToolCalls = true;
557
+ // The authoritative tool-call blocks arrive in assistant-content.
558
+ }
559
+ else if (event.type === "tool-call-error") {
560
+ toolCallErrors.set(event.id, {
561
+ name: event.name,
562
+ input: event.input,
563
+ error: event.error,
564
+ });
514
565
  }
515
566
  else if (event.type === "assistant-content") {
516
567
  assistantContent = event.parts;
@@ -550,11 +601,35 @@ export async function runAgentLoop(opts) {
550
601
  throw err;
551
602
  }
552
603
  }
604
+ if (!assistantContent && toolCallErrors.size > 0) {
605
+ assistantContent = [];
606
+ }
553
607
  if (!assistantContent) {
554
608
  // No content — done
555
609
  break;
556
610
  }
557
- messages.push({ role: "assistant", content: assistantContent });
611
+ if (toolCallErrors.size > 0) {
612
+ const existingToolCallIds = new Set(assistantContent
613
+ .filter((part) => part.type === "tool-call")
614
+ .map((part) => part.id));
615
+ for (const [id, info] of toolCallErrors) {
616
+ if (!existingToolCallIds.has(id)) {
617
+ assistantContent.push({
618
+ type: "tool-call",
619
+ id,
620
+ name: info.name,
621
+ input: info.input,
622
+ });
623
+ }
624
+ }
625
+ }
626
+ const assistantContentForHistory = assistantContent.map((part) => part.type === "tool-call"
627
+ ? {
628
+ ...part,
629
+ input: normalizeToolCallInputForHistory(part.input),
630
+ }
631
+ : part);
632
+ messages.push({ role: "assistant", content: assistantContentForHistory });
558
633
  const toolCallParts = assistantContent.filter((p) => p.type === "tool-call");
559
634
  if (toolCallParts.length === 0)
560
635
  break;
@@ -581,6 +656,18 @@ export async function runAgentLoop(opts) {
581
656
  tool: toolCall.name,
582
657
  input: toolCall.input,
583
658
  });
659
+ const toolCallSchemaError = toolCallErrors.get(toolCall.id);
660
+ if (toolCallSchemaError) {
661
+ const result = toolInputSchemaErrorResult(toolCall.name, toolCallSchemaError.input, toolCallSchemaError.error);
662
+ send({ type: "tool_done", tool: toolCall.name, result });
663
+ return {
664
+ type: "tool-result",
665
+ toolCallId: toolCall.id,
666
+ toolName: toolCall.name,
667
+ content: result,
668
+ isError: true,
669
+ };
670
+ }
584
671
  if (opts.executionMode === "plan" &&
585
672
  !isPlanModeToolCallAllowed(toolCall.name, toolCall.input, actionEntry)) {
586
673
  const result = planModeBlockedMessage(toolCall.name);
@@ -703,7 +790,7 @@ export function createProductionAgentHandler(options) {
703
790
  setResponseStatus(event, 400);
704
791
  return { error: "Invalid request body" };
705
792
  }
706
- const { message, history = [], references = [], threadId, attachments, model: requestModel, engine: requestEngine, } = body;
793
+ const { message, history = [], references = [], threadId, attachments, model: requestModel, engine: requestEngine, effort: requestEffort, } = body;
707
794
  const requestMode = body.mode === "plan" ? "plan" : "act";
708
795
  if (!message) {
709
796
  setResponseStatus(event, 400);
@@ -772,6 +859,9 @@ export function createProductionAgentHandler(options) {
772
859
  configuredModel ??
773
860
  (await getStoredModelForEngine(engine)) ??
774
861
  engine.defaultModel;
862
+ const reasoningEffort = normalizeReasoningEffortForModel(model, isReasoningEffort(requestEffort)
863
+ ? requestEffort
864
+ : options.reasoningEffort);
775
865
  options.onEngineResolved?.(engine, model);
776
866
  // One-line per-turn resolution log so it's obvious in dev which engine
777
867
  // is actually handling the request. `requestEngine` is what the client
@@ -1066,6 +1156,7 @@ export function createProductionAgentHandler(options) {
1066
1156
  }
1067
1157
  },
1068
1158
  signal,
1159
+ reasoningEffort,
1069
1160
  providerOptions: options.providerOptions,
1070
1161
  executionMode: requestMode,
1071
1162
  maxIterations: loopSettings.maxIterations,
@@ -1246,6 +1337,7 @@ export function createProductionAgentHandler(options) {
1246
1337
  signal,
1247
1338
  ownerEmail,
1248
1339
  orgId: getRequestOrgId() ?? null,
1340
+ reasoningEffort,
1249
1341
  providerOptions: options.providerOptions,
1250
1342
  executionMode: requestMode,
1251
1343
  maxIterations: loopSettings.maxIterations,