@promptbook/openai 0.111.0-7 → 0.112.0-12

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 (527) hide show
  1. package/esm/index.es.js +1007 -115
  2. package/esm/index.es.js.map +1 -1
  3. package/esm/src/_packages/components.index.d.ts +2 -0
  4. package/esm/src/_packages/core.index.d.ts +26 -0
  5. package/esm/src/_packages/markdown-utils.index.d.ts +5 -5
  6. package/esm/src/_packages/types.index.d.ts +250 -228
  7. package/esm/src/_packages/utils.index.d.ts +2 -0
  8. package/esm/src/book-2.0/agent-source/AgentBasicInformation.d.ts +4 -1
  9. package/esm/src/book-2.0/agent-source/AgentSourceParseResult.d.ts +5 -1
  10. package/esm/src/book-2.0/agent-source/createAgentModelRequirements.d.ts +2 -2
  11. package/esm/src/book-2.0/agent-source/createAgentModelRequirements.writing.test.d.ts +1 -0
  12. package/esm/src/book-2.0/agent-source/createAgentModelRequirementsWithCommitments.knowledge.test.d.ts +1 -0
  13. package/esm/src/book-2.0/agent-source/createTeamToolName.d.ts +12 -0
  14. package/esm/src/book-2.0/agent-source/extractOpenTeacherInstructions.d.ts +12 -0
  15. package/esm/src/book-2.0/agent-source/extractOpenTeacherInstructions.test.d.ts +1 -0
  16. package/esm/src/book-2.0/agent-source/parseAgentSourcePrelude.d.ts +38 -0
  17. package/esm/src/book-2.0/agent-source/parseAgentSourceWithCommitments.d.ts +3 -0
  18. package/esm/src/book-2.0/agent-source/parseAgentSourceWithCommitments.title.test.d.ts +1 -0
  19. package/esm/src/book-2.0/agent-source/pseudoAgentReferences.d.ts +110 -0
  20. package/esm/src/book-2.0/agent-source/removeCommentsFromSystemMessage.d.ts +2 -2
  21. package/esm/src/book-components/BookEditor/BookEditor.d.ts +15 -0
  22. package/esm/src/book-components/BookEditor/BookEditorActionbar.d.ts +2 -0
  23. package/esm/src/book-components/BookEditor/BookEditorMonacoConstants.d.ts +1 -0
  24. package/esm/src/book-components/BookEditor/BookEditorMonacoTokenization.d.ts +14 -7
  25. package/esm/src/book-components/BookEditor/BookEditorMonacoTokenization.test.d.ts +1 -0
  26. package/esm/src/book-components/BookEditor/createDeprecatedCommitmentDiagnostics.d.ts +28 -0
  27. package/esm/src/book-components/BookEditor/createDeprecatedCommitmentDiagnostics.test.d.ts +1 -0
  28. package/esm/src/book-components/BookEditor/useBookEditorMonacoLanguage.d.ts +27 -0
  29. package/esm/src/book-components/BookEditor/useBookEditorMonacoLanguage.test.d.ts +1 -0
  30. package/esm/src/book-components/Chat/AgentChat/AgentChatProps.d.ts +5 -0
  31. package/esm/src/book-components/Chat/Chat/ChatActionsBar.d.ts +1 -0
  32. package/esm/src/book-components/Chat/Chat/ChatInputArea.d.ts +2 -0
  33. package/esm/src/book-components/Chat/Chat/ChatInputArea.test.d.ts +2 -0
  34. package/esm/src/book-components/Chat/Chat/ChatMessageItem.d.ts +6 -1
  35. package/esm/src/book-components/Chat/Chat/ChatMessageList.d.ts +3 -0
  36. package/esm/src/book-components/Chat/Chat/ChatProps.d.ts +56 -0
  37. package/esm/src/book-components/Chat/Chat/ChatToolCallModal.d.ts +11 -0
  38. package/esm/src/book-components/Chat/Chat/ChatToolCallModal.test.d.ts +2 -0
  39. package/esm/src/book-components/Chat/Chat/TeamToolCallModalContent.d.ts +32 -0
  40. package/esm/src/book-components/Chat/Chat/chatCssClassNames.d.ts +41 -0
  41. package/esm/src/book-components/Chat/Chat/renderAdvancedToolCallDetails.d.ts +44 -0
  42. package/esm/src/book-components/Chat/Chat/renderToolCallDetails.d.ts +40 -0
  43. package/esm/src/book-components/Chat/CodeBlock/CodeBlock.d.ts +5 -0
  44. package/esm/src/book-components/Chat/CodeBlock/resolveCodeBlockLanguage.d.ts +18 -0
  45. package/esm/src/book-components/Chat/CodeBlock/resolveCodeBlockLanguage.test.d.ts +1 -0
  46. package/esm/src/book-components/Chat/LlmChat/LlmChatProps.d.ts +16 -0
  47. package/esm/src/book-components/Chat/hooks/useChatAutoScroll.d.ts +1 -1
  48. package/esm/src/book-components/Chat/hooks/useChatAutoScroll.test.d.ts +1 -0
  49. package/esm/src/book-components/Chat/types/ChatMessage.d.ts +16 -0
  50. package/esm/src/book-components/Chat/utils/ChatPersistence.d.ts +16 -0
  51. package/esm/src/book-components/Chat/utils/ChatPersistence.test.d.ts +4 -0
  52. package/esm/src/book-components/Chat/utils/createTeamToolNameFromUrl.d.ts +2 -2
  53. package/esm/src/book-components/Chat/utils/getToolCallChipletInfo.timeout.test.d.ts +1 -0
  54. package/esm/src/book-components/Chat/utils/parseMessageButtons.d.ts +22 -5
  55. package/esm/src/book-components/Chat/utils/parseMessageButtons.test.d.ts +1 -0
  56. package/esm/src/book-components/Chat/utils/resolveToolCallFromChatMessages.d.ts +13 -0
  57. package/esm/src/book-components/Chat/utils/resolveToolCallState.d.ts +10 -0
  58. package/esm/src/book-components/Chat/utils/sanitizeStreamingMessageContent.d.ts +29 -1
  59. package/esm/src/book-components/Chat/utils/splitMessageContentIntoSegments.d.ts +16 -3
  60. package/esm/src/book-components/Chat/utils/thinkingMessageVariants.d.ts +24 -0
  61. package/esm/src/book-components/Chat/utils/thinkingMessageVariants.test.d.ts +1 -0
  62. package/esm/src/book-components/Chat/utils/timeoutToolCallPresentation.d.ts +123 -0
  63. package/esm/src/book-components/Chat/utils/timeoutToolCallPresentation.test.d.ts +1 -0
  64. package/esm/src/book-components/Chat/utils/toolCallParsing/RunBrowserToolResult.d.ts +50 -0
  65. package/esm/src/book-components/Chat/utils/toolCallParsing/TeamToolResult.d.ts +30 -0
  66. package/esm/src/book-components/Chat/utils/toolCallParsing/extractSearchResults.d.ts +19 -0
  67. package/esm/src/book-components/Chat/utils/toolCallParsing/getToolCallResultDate.d.ts +9 -0
  68. package/esm/src/book-components/Chat/utils/toolCallParsing/getToolCallTimestamp.d.ts +9 -0
  69. package/esm/src/book-components/Chat/utils/toolCallParsing/parseRunBrowserToolResult.d.ts +10 -0
  70. package/esm/src/book-components/Chat/utils/toolCallParsing/parseTeamToolResult.d.ts +10 -0
  71. package/esm/src/book-components/Chat/utils/toolCallParsing/parseToolCallArguments.d.ts +10 -0
  72. package/esm/src/book-components/Chat/utils/toolCallParsing/parseToolCallResult.d.ts +10 -0
  73. package/esm/src/book-components/Chat/utils/toolCallParsing/resolveRunBrowserArtifactUrl.d.ts +8 -0
  74. package/esm/src/book-components/Chat/utils/toolCallParsing.d.ts +10 -68
  75. package/esm/src/book-components/Chat/utils/toolCallParsing.test.d.ts +1 -0
  76. package/esm/src/book-components/Chat/utils/walletCredentialToolCall.d.ts +52 -0
  77. package/esm/src/book-components/Chat/utils/walletCredentialToolCall.test.d.ts +1 -0
  78. package/esm/src/book-components/PromptbookAgent/PromptbookAgentIntegration.d.ts +14 -0
  79. package/esm/src/book-components/PromptbookAgent/PromptbookAgentSeamlessIntegration.d.ts +3 -0
  80. package/esm/src/book-components/_common/MonacoEditorWithShadowDom.d.ts +17 -0
  81. package/esm/src/book-components/icons/ArrowIcon.d.ts +30 -5
  82. package/esm/src/book-components/icons/SolidArrowButton.d.ts +28 -0
  83. package/esm/src/book-components/icons/StopIcon.d.ts +8 -0
  84. package/esm/src/cli/cli-commands/coder/find-fresh-emoji-tag.d.ts +14 -0
  85. package/esm/src/cli/cli-commands/coder/find-refactor-candidates.d.ts +14 -0
  86. package/esm/src/cli/cli-commands/coder/generate-boilerplates.d.ts +14 -0
  87. package/esm/src/cli/cli-commands/coder/run.d.ts +14 -0
  88. package/esm/src/cli/cli-commands/coder/verify.d.ts +14 -0
  89. package/esm/src/cli/cli-commands/coder.d.ts +21 -0
  90. package/esm/src/collection/agent-collection/CreateAgentInput.d.ts +59 -0
  91. package/esm/src/collection/agent-collection/CreateAgentInput.test.d.ts +1 -0
  92. package/esm/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +52 -8
  93. package/esm/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentsDatabaseSchema.d.ts +6 -3
  94. package/esm/src/collection/agent-collection/constructors/agent-collection-in-supabase/prepareAgentSourceForPersistence.d.ts +36 -0
  95. package/esm/src/commitments/KNOWLEDGE/KNOWLEDGE.d.ts +0 -3
  96. package/esm/src/commitments/MEMORY/MEMORY.d.ts +4 -59
  97. package/esm/src/commitments/MEMORY/MemoryToolNames.d.ts +11 -0
  98. package/esm/src/commitments/MEMORY/MemoryToolRuntimeAdapter.d.ts +149 -0
  99. package/esm/src/commitments/MEMORY/createMemorySystemMessage.d.ts +6 -0
  100. package/esm/src/commitments/MEMORY/createMemoryToolFunctions.d.ts +8 -0
  101. package/esm/src/commitments/MEMORY/createMemoryTools.d.ts +14 -0
  102. package/esm/src/commitments/MEMORY/getMemoryCommitmentDocumentation.d.ts +6 -0
  103. package/esm/src/commitments/MEMORY/getMemoryToolRuntimeAdapterOrDisabledResult.d.ts +17 -0
  104. package/esm/src/commitments/MEMORY/getMemoryToolTitles.d.ts +7 -0
  105. package/esm/src/commitments/MEMORY/parseMemoryToolArgs.d.ts +61 -0
  106. package/esm/src/commitments/MEMORY/resolveMemoryRuntimeContext.d.ts +8 -0
  107. package/esm/src/commitments/MEMORY/setMemoryToolRuntimeAdapter.d.ts +13 -0
  108. package/esm/src/commitments/MESSAGE/InternalMessageCommitmentDefinition.d.ts +33 -0
  109. package/esm/src/commitments/MESSAGE/MESSAGE.d.ts +2 -2
  110. package/esm/src/commitments/META/META.d.ts +4 -0
  111. package/esm/src/commitments/META_DOMAIN/META_DOMAIN.d.ts +33 -0
  112. package/esm/src/commitments/META_INPUT_PLACEHOLDER/META_INPUT_PLACEHOLDER.d.ts +33 -0
  113. package/esm/src/commitments/META_VOICE/META_VOICE.d.ts +39 -0
  114. package/esm/src/commitments/SAMPLE/SAMPLE.d.ts +13 -13
  115. package/esm/src/commitments/USE_BROWSER/USE_BROWSER.d.ts +1 -1
  116. package/esm/src/commitments/USE_BROWSER/resolveRunBrowserToolForNode.d.ts +10 -0
  117. package/esm/src/commitments/USE_BROWSER/resolveRunBrowserToolForNode.test.d.ts +1 -0
  118. package/esm/src/commitments/USE_CALENDAR/USE_CALENDAR.d.ts +42 -0
  119. package/esm/src/commitments/USE_CALENDAR/USE_CALENDAR.test.d.ts +1 -0
  120. package/esm/src/commitments/USE_CALENDAR/UseCalendarToolNames.d.ts +13 -0
  121. package/esm/src/commitments/USE_CALENDAR/UseCalendarWallet.d.ts +9 -0
  122. package/esm/src/commitments/USE_CALENDAR/calendarReference.d.ts +68 -0
  123. package/esm/src/commitments/USE_CALENDAR/callGoogleCalendarApi.d.ts +19 -0
  124. package/esm/src/commitments/USE_CALENDAR/createUseCalendarToolFunctions.d.ts +8 -0
  125. package/esm/src/commitments/USE_CALENDAR/createUseCalendarTools.d.ts +7 -0
  126. package/esm/src/commitments/USE_CALENDAR/getUseCalendarToolTitles.d.ts +7 -0
  127. package/esm/src/commitments/USE_CALENDAR/normalizeConfiguredCalendars.d.ts +19 -0
  128. package/esm/src/commitments/USE_CALENDAR/resolveUseCalendarToolRuntimeOrWalletCredentialResult.d.ts +34 -0
  129. package/esm/src/commitments/USE_EMAIL/USE_EMAIL.d.ts +4 -11
  130. package/esm/src/commitments/USE_EMAIL/USE_EMAIL.test.d.ts +1 -0
  131. package/esm/src/commitments/USE_EMAIL/parseUseEmailCommitmentContent.d.ts +21 -0
  132. package/esm/src/commitments/USE_EMAIL/parseUseEmailCommitmentContent.test.d.ts +1 -0
  133. package/esm/src/commitments/USE_EMAIL/sendEmailViaBrowser.d.ts +2 -7
  134. package/esm/src/commitments/USE_POPUP/USE_POPUP.d.ts +49 -0
  135. package/esm/src/commitments/USE_PRIVACY/USE_PRIVACY.d.ts +39 -0
  136. package/esm/src/commitments/USE_PRIVACY/USE_PRIVACY.test.d.ts +1 -0
  137. package/esm/src/commitments/USE_PROJECT/USE_PROJECT.d.ts +42 -0
  138. package/esm/src/commitments/USE_PROJECT/USE_PROJECT.test.d.ts +1 -0
  139. package/esm/src/commitments/USE_PROJECT/UseProjectToolNames.d.ts +13 -0
  140. package/esm/src/commitments/USE_PROJECT/UseProjectWallet.d.ts +9 -0
  141. package/esm/src/commitments/USE_PROJECT/callGitHubApi.d.ts +69 -0
  142. package/esm/src/commitments/USE_PROJECT/createUseProjectToolFunctions.d.ts +8 -0
  143. package/esm/src/commitments/USE_PROJECT/createUseProjectTools.d.ts +7 -0
  144. package/esm/src/commitments/USE_PROJECT/getUseProjectToolTitles.d.ts +7 -0
  145. package/esm/src/commitments/USE_PROJECT/normalizeConfiguredProjects.d.ts +16 -0
  146. package/esm/src/commitments/USE_PROJECT/normalizeOptionalToolText.d.ts +12 -0
  147. package/esm/src/commitments/USE_PROJECT/projectReference.d.ts +52 -0
  148. package/esm/src/commitments/USE_PROJECT/projectReference.test.d.ts +1 -0
  149. package/esm/src/commitments/USE_PROJECT/resolveUseProjectToolRuntimeOrWalletCredentialResult.d.ts +34 -0
  150. package/esm/src/commitments/USE_SPAWN/USE_SPAWN.d.ts +41 -0
  151. package/esm/src/commitments/USE_SPAWN/USE_SPAWN.test.d.ts +1 -0
  152. package/esm/src/commitments/USE_SPAWN/resolveSpawnAgentToolForNode.d.ts +9 -0
  153. package/esm/src/commitments/USE_SPAWN/spawnAgentViaBrowser.d.ts +12 -0
  154. package/esm/src/commitments/USE_TIMEOUT/TimeoutToolNames.d.ts +9 -0
  155. package/esm/src/commitments/USE_TIMEOUT/TimeoutToolRuntimeAdapter.d.ts +90 -0
  156. package/esm/src/commitments/USE_TIMEOUT/USE_TIMEOUT.d.ts +41 -0
  157. package/esm/src/commitments/USE_TIMEOUT/USE_TIMEOUT.test.d.ts +1 -0
  158. package/esm/src/commitments/USE_TIMEOUT/createTimeoutSystemMessage.d.ts +6 -0
  159. package/esm/src/commitments/USE_TIMEOUT/createTimeoutToolFunctions.d.ts +8 -0
  160. package/esm/src/commitments/USE_TIMEOUT/createTimeoutTools.d.ts +7 -0
  161. package/esm/src/commitments/USE_TIMEOUT/getTimeoutToolRuntimeAdapterOrDisabledResult.d.ts +17 -0
  162. package/esm/src/commitments/USE_TIMEOUT/parseTimeoutToolArgs.d.ts +34 -0
  163. package/esm/src/commitments/USE_TIMEOUT/resolveTimeoutRuntimeContext.d.ts +8 -0
  164. package/esm/src/commitments/USE_TIMEOUT/setTimeoutToolRuntimeAdapter.d.ts +13 -0
  165. package/esm/src/commitments/WALLET/WALLET.d.ts +24 -0
  166. package/esm/src/commitments/WALLET/WALLET.test.d.ts +1 -0
  167. package/esm/src/commitments/WALLET/WalletToolNames.d.ts +12 -0
  168. package/esm/src/commitments/WALLET/WalletToolRuntimeAdapter.d.ts +163 -0
  169. package/esm/src/commitments/WALLET/createWalletSystemMessage.d.ts +6 -0
  170. package/esm/src/commitments/WALLET/createWalletToolFunctions.d.ts +8 -0
  171. package/esm/src/commitments/WALLET/createWalletTools.d.ts +7 -0
  172. package/esm/src/commitments/WALLET/getWalletCommitmentDocumentation.d.ts +6 -0
  173. package/esm/src/commitments/WALLET/getWalletToolRuntimeAdapterOrDisabledResult.d.ts +16 -0
  174. package/esm/src/commitments/WALLET/getWalletToolTitles.d.ts +7 -0
  175. package/esm/src/commitments/WALLET/parseWalletToolArgs.d.ts +51 -0
  176. package/esm/src/commitments/WALLET/resolveWalletRuntimeContext.d.ts +8 -0
  177. package/esm/src/commitments/WALLET/setWalletToolRuntimeAdapter.d.ts +13 -0
  178. package/esm/src/commitments/WRITING_RULES/WRITING_RULES.d.ts +29 -0
  179. package/esm/src/commitments/WRITING_SAMPLE/WRITING_SAMPLE.d.ts +29 -0
  180. package/esm/src/commitments/_base/BaseCommitmentDefinition.d.ts +12 -0
  181. package/esm/src/commitments/_base/CommitmentDefinition.d.ts +23 -0
  182. package/esm/src/commitments/_common/createWritingCommitmentSections.d.ts +19 -0
  183. package/esm/src/commitments/_common/getGroupedCommitmentDefinitions.writing.test.d.ts +1 -0
  184. package/esm/src/commitments/_common/toolExecutionEnvelope.d.ts +22 -0
  185. package/esm/src/commitments/_common/toolRuntimeContext.d.ts +99 -0
  186. package/esm/src/commitments/index.d.ts +13 -1
  187. package/esm/src/config.d.ts +3 -0
  188. package/esm/src/errors/0-index.d.ts +3 -0
  189. package/esm/src/errors/ConflictError.d.ts +9 -0
  190. package/esm/src/executables/apps/locateVscode.d.ts +7 -0
  191. package/esm/src/executables/apps/locateVscode.test.d.ts +1 -0
  192. package/esm/src/executables/browsers/locateBrowser.d.ts +10 -0
  193. package/esm/src/executables/browsers/locateBrowser.test.d.ts +1 -0
  194. package/esm/src/executables/browsers/locateChrome.d.ts +7 -0
  195. package/esm/src/executables/browsers/locateChrome.test.d.ts +1 -0
  196. package/esm/src/executables/browsers/locateDefaultSystemBrowser.d.ts +10 -0
  197. package/esm/src/executables/browsers/locateDefaultSystemBrowser.test.d.ts +1 -0
  198. package/esm/src/executables/browsers/locateEdge.d.ts +7 -0
  199. package/esm/src/executables/browsers/locateEdge.test.d.ts +1 -0
  200. package/esm/src/executables/browsers/locateFirefox.d.ts +7 -0
  201. package/esm/src/executables/browsers/locateFirefox.test.d.ts +1 -0
  202. package/esm/src/executables/browsers/locateInternetExplorer.d.ts +7 -0
  203. package/esm/src/executables/browsers/locateInternetExplorer.test.d.ts +1 -0
  204. package/esm/src/executables/browsers/locateSafari.d.ts +7 -0
  205. package/esm/src/execution/LlmExecutionTools.d.ts +12 -1
  206. package/esm/src/execution/Usage.d.ts +4 -0
  207. package/esm/src/execution/utils/usageToHuman.d.ts +1 -0
  208. package/esm/src/file-security-checkers/FileSecurityCheckResult.d.ts +32 -0
  209. package/esm/src/file-security-checkers/FileSecurityChecker.d.ts +34 -0
  210. package/esm/src/file-security-checkers/virustotal/VirusTotalFileSecurityChecker.d.ts +36 -0
  211. package/esm/src/file-security-checkers/virustotal/VirusTotalFileSecurityChecker.test.d.ts +1 -0
  212. package/esm/src/llm-providers/agent/Agent.d.ts +2 -2
  213. package/esm/src/llm-providers/agent/AgentLlmExecutionTools.d.ts +2 -2
  214. package/esm/src/llm-providers/agent/RemoteAgent.d.ts +2 -1
  215. package/esm/src/llm-providers/agent/self-learning/SelfLearningManager.test.d.ts +1 -0
  216. package/esm/src/llm-providers/anthropic-claude/computeAnthropicClaudeUsage.d.ts +3 -1
  217. package/esm/src/llm-providers/openai/OpenAiAgentKitExecutionTools.d.ts +33 -3
  218. package/esm/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +2 -2
  219. package/esm/src/llm-providers/openai/OpenAiCompatibleExecutionTools.d.ts +2 -2
  220. package/esm/src/llm-providers/openai/computeOpenAiUsage.d.ts +3 -1
  221. package/esm/src/playground/playground.d.ts +1 -0
  222. package/esm/src/speech-recognition/OpenAiSpeechRecognition.d.ts +49 -1
  223. package/esm/src/types/SpeechRecognition.d.ts +14 -0
  224. package/esm/src/types/ToolCall.d.ts +56 -0
  225. package/esm/src/types/number_usd.d.ts +110 -0
  226. package/esm/src/types/string_filename.d.ts +39 -0
  227. package/esm/src/types/string_knowledge_source_content.d.ts +29 -0
  228. package/esm/src/types/string_markdown.d.ts +138 -0
  229. package/esm/src/types/string_parameter_name.d.ts +170 -0
  230. package/esm/src/types/string_person_fullname.d.ts +85 -0
  231. package/esm/src/types/string_sha256.d.ts +44 -0
  232. package/esm/src/types/string_token.d.ts +58 -0
  233. package/esm/src/types/string_url.d.ts +146 -0
  234. package/esm/src/types/typeAliases.d.ts +9 -741
  235. package/esm/src/utils/chat/chatAttachments/appendChatAttachmentContext.d.ts +10 -0
  236. package/esm/src/utils/chat/chatAttachments/appendChatAttachmentContextWithContent.d.ts +14 -0
  237. package/esm/src/utils/chat/chatAttachments/appendChatContextSections.d.ts +6 -0
  238. package/esm/src/utils/chat/chatAttachments/formatChatAttachmentContentContext.d.ts +9 -0
  239. package/esm/src/utils/chat/chatAttachments/formatChatAttachmentContext.d.ts +9 -0
  240. package/esm/src/utils/chat/chatAttachments/normalizeChatAttachments.d.ts +11 -0
  241. package/esm/src/utils/chat/chatAttachments/resolveChatAttachmentContent.d.ts +11 -0
  242. package/esm/src/utils/chat/chatAttachments/resolveChatAttachmentContents.d.ts +10 -0
  243. package/esm/src/utils/chat/chatAttachments.d.ts +54 -0
  244. package/esm/src/utils/chat/chatAttachments.test.d.ts +1 -0
  245. package/esm/src/utils/chat/constants.d.ts +21 -0
  246. package/esm/src/utils/chat/decodeChatStreamWhitespaceFromTransport.d.ts +7 -0
  247. package/esm/src/utils/chat/encodeChatStreamWhitespaceForTransport.d.ts +7 -0
  248. package/esm/src/utils/chat/escapeRegExp.d.ts +6 -0
  249. package/esm/src/utils/database/uniqueConstraint.d.ts +28 -0
  250. package/esm/src/utils/files/decodeAttachmentAsText.d.ts +81 -0
  251. package/esm/src/utils/files/decodeAttachmentAsText.test.d.ts +1 -0
  252. package/esm/src/utils/files/readResponseBytes.d.ts +14 -0
  253. package/esm/src/utils/random/EnglishNamePool.d.ts +9 -1
  254. package/esm/src/utils/toolCalls/getToolCallIdentity.d.ts +1 -1
  255. package/esm/src/utils/toolCalls/mergeToolCalls.d.ts +12 -0
  256. package/esm/src/utils/toolCalls/resolveToolCallIdempotencyKey.d.ts +10 -0
  257. package/esm/src/utils/validators/url/extractUrlsFromText.d.ts +8 -0
  258. package/esm/src/utils/validators/url/extractUrlsFromText.test.d.ts +1 -0
  259. package/esm/src/utils/validators/url/isHostnameOnPrivateNetwork.d.ts +12 -1
  260. package/esm/src/utils/validators/url/isUrlOnPrivateNetwork.d.ts +8 -2
  261. package/esm/src/utils/validators/url/normalizeDomainForMatching.d.ts +11 -0
  262. package/esm/src/utils/validators/url/normalizeDomainForMatching.test.d.ts +1 -0
  263. package/esm/src/version.d.ts +1 -1
  264. package/package.json +2 -2
  265. package/umd/index.umd.js +1007 -115
  266. package/umd/index.umd.js.map +1 -1
  267. package/umd/src/_packages/components.index.d.ts +2 -0
  268. package/umd/src/_packages/core.index.d.ts +26 -0
  269. package/umd/src/_packages/markdown-utils.index.d.ts +5 -5
  270. package/umd/src/_packages/types.index.d.ts +250 -228
  271. package/umd/src/_packages/utils.index.d.ts +2 -0
  272. package/umd/src/book-2.0/agent-source/AgentBasicInformation.d.ts +4 -1
  273. package/umd/src/book-2.0/agent-source/AgentSourceParseResult.d.ts +5 -1
  274. package/umd/src/book-2.0/agent-source/createAgentModelRequirements.d.ts +2 -2
  275. package/umd/src/book-2.0/agent-source/createAgentModelRequirements.writing.test.d.ts +1 -0
  276. package/umd/src/book-2.0/agent-source/createAgentModelRequirementsWithCommitments.knowledge.test.d.ts +1 -0
  277. package/umd/src/book-2.0/agent-source/createTeamToolName.d.ts +12 -0
  278. package/umd/src/book-2.0/agent-source/extractOpenTeacherInstructions.d.ts +12 -0
  279. package/umd/src/book-2.0/agent-source/extractOpenTeacherInstructions.test.d.ts +1 -0
  280. package/umd/src/book-2.0/agent-source/parseAgentSourcePrelude.d.ts +38 -0
  281. package/umd/src/book-2.0/agent-source/parseAgentSourceWithCommitments.d.ts +3 -0
  282. package/umd/src/book-2.0/agent-source/parseAgentSourceWithCommitments.title.test.d.ts +1 -0
  283. package/umd/src/book-2.0/agent-source/pseudoAgentReferences.d.ts +110 -0
  284. package/umd/src/book-2.0/agent-source/removeCommentsFromSystemMessage.d.ts +2 -2
  285. package/umd/src/book-components/BookEditor/BookEditor.d.ts +15 -0
  286. package/umd/src/book-components/BookEditor/BookEditorActionbar.d.ts +2 -0
  287. package/umd/src/book-components/BookEditor/BookEditorMonacoConstants.d.ts +1 -0
  288. package/umd/src/book-components/BookEditor/BookEditorMonacoTokenization.d.ts +14 -7
  289. package/umd/src/book-components/BookEditor/BookEditorMonacoTokenization.test.d.ts +1 -0
  290. package/umd/src/book-components/BookEditor/createDeprecatedCommitmentDiagnostics.d.ts +28 -0
  291. package/umd/src/book-components/BookEditor/createDeprecatedCommitmentDiagnostics.test.d.ts +1 -0
  292. package/umd/src/book-components/BookEditor/useBookEditorMonacoLanguage.d.ts +27 -0
  293. package/umd/src/book-components/BookEditor/useBookEditorMonacoLanguage.test.d.ts +1 -0
  294. package/umd/src/book-components/Chat/AgentChat/AgentChatProps.d.ts +5 -0
  295. package/umd/src/book-components/Chat/Chat/ChatActionsBar.d.ts +1 -0
  296. package/umd/src/book-components/Chat/Chat/ChatInputArea.d.ts +2 -0
  297. package/umd/src/book-components/Chat/Chat/ChatInputArea.test.d.ts +2 -0
  298. package/umd/src/book-components/Chat/Chat/ChatMessageItem.d.ts +6 -1
  299. package/umd/src/book-components/Chat/Chat/ChatMessageList.d.ts +3 -0
  300. package/umd/src/book-components/Chat/Chat/ChatProps.d.ts +56 -0
  301. package/umd/src/book-components/Chat/Chat/ChatToolCallModal.d.ts +11 -0
  302. package/umd/src/book-components/Chat/Chat/ChatToolCallModal.test.d.ts +2 -0
  303. package/umd/src/book-components/Chat/Chat/TeamToolCallModalContent.d.ts +32 -0
  304. package/umd/src/book-components/Chat/Chat/chatCssClassNames.d.ts +41 -0
  305. package/umd/src/book-components/Chat/Chat/renderAdvancedToolCallDetails.d.ts +44 -0
  306. package/umd/src/book-components/Chat/Chat/renderToolCallDetails.d.ts +40 -0
  307. package/umd/src/book-components/Chat/CodeBlock/CodeBlock.d.ts +5 -0
  308. package/umd/src/book-components/Chat/CodeBlock/resolveCodeBlockLanguage.d.ts +18 -0
  309. package/umd/src/book-components/Chat/CodeBlock/resolveCodeBlockLanguage.test.d.ts +1 -0
  310. package/umd/src/book-components/Chat/LlmChat/LlmChatProps.d.ts +16 -0
  311. package/umd/src/book-components/Chat/hooks/useChatAutoScroll.d.ts +1 -1
  312. package/umd/src/book-components/Chat/hooks/useChatAutoScroll.test.d.ts +1 -0
  313. package/umd/src/book-components/Chat/types/ChatMessage.d.ts +16 -0
  314. package/umd/src/book-components/Chat/utils/ChatPersistence.d.ts +16 -0
  315. package/umd/src/book-components/Chat/utils/ChatPersistence.test.d.ts +4 -0
  316. package/umd/src/book-components/Chat/utils/createTeamToolNameFromUrl.d.ts +2 -2
  317. package/umd/src/book-components/Chat/utils/getToolCallChipletInfo.timeout.test.d.ts +1 -0
  318. package/umd/src/book-components/Chat/utils/parseMessageButtons.d.ts +22 -5
  319. package/umd/src/book-components/Chat/utils/parseMessageButtons.test.d.ts +1 -0
  320. package/umd/src/book-components/Chat/utils/resolveToolCallFromChatMessages.d.ts +13 -0
  321. package/umd/src/book-components/Chat/utils/resolveToolCallState.d.ts +10 -0
  322. package/umd/src/book-components/Chat/utils/sanitizeStreamingMessageContent.d.ts +29 -1
  323. package/umd/src/book-components/Chat/utils/splitMessageContentIntoSegments.d.ts +16 -3
  324. package/umd/src/book-components/Chat/utils/thinkingMessageVariants.d.ts +24 -0
  325. package/umd/src/book-components/Chat/utils/thinkingMessageVariants.test.d.ts +1 -0
  326. package/umd/src/book-components/Chat/utils/timeoutToolCallPresentation.d.ts +123 -0
  327. package/umd/src/book-components/Chat/utils/timeoutToolCallPresentation.test.d.ts +1 -0
  328. package/umd/src/book-components/Chat/utils/toolCallParsing/RunBrowserToolResult.d.ts +50 -0
  329. package/umd/src/book-components/Chat/utils/toolCallParsing/TeamToolResult.d.ts +30 -0
  330. package/umd/src/book-components/Chat/utils/toolCallParsing/extractSearchResults.d.ts +19 -0
  331. package/umd/src/book-components/Chat/utils/toolCallParsing/getToolCallResultDate.d.ts +9 -0
  332. package/umd/src/book-components/Chat/utils/toolCallParsing/getToolCallTimestamp.d.ts +9 -0
  333. package/umd/src/book-components/Chat/utils/toolCallParsing/parseRunBrowserToolResult.d.ts +10 -0
  334. package/umd/src/book-components/Chat/utils/toolCallParsing/parseTeamToolResult.d.ts +10 -0
  335. package/umd/src/book-components/Chat/utils/toolCallParsing/parseToolCallArguments.d.ts +10 -0
  336. package/umd/src/book-components/Chat/utils/toolCallParsing/parseToolCallResult.d.ts +10 -0
  337. package/umd/src/book-components/Chat/utils/toolCallParsing/resolveRunBrowserArtifactUrl.d.ts +8 -0
  338. package/umd/src/book-components/Chat/utils/toolCallParsing.d.ts +10 -68
  339. package/umd/src/book-components/Chat/utils/toolCallParsing.test.d.ts +1 -0
  340. package/umd/src/book-components/Chat/utils/walletCredentialToolCall.d.ts +52 -0
  341. package/umd/src/book-components/Chat/utils/walletCredentialToolCall.test.d.ts +1 -0
  342. package/umd/src/book-components/PromptbookAgent/PromptbookAgentIntegration.d.ts +14 -0
  343. package/umd/src/book-components/PromptbookAgent/PromptbookAgentSeamlessIntegration.d.ts +3 -0
  344. package/umd/src/book-components/_common/MonacoEditorWithShadowDom.d.ts +17 -0
  345. package/umd/src/book-components/icons/ArrowIcon.d.ts +30 -5
  346. package/umd/src/book-components/icons/SolidArrowButton.d.ts +28 -0
  347. package/umd/src/book-components/icons/StopIcon.d.ts +8 -0
  348. package/umd/src/cli/cli-commands/coder/find-fresh-emoji-tag.d.ts +14 -0
  349. package/umd/src/cli/cli-commands/coder/find-refactor-candidates.d.ts +14 -0
  350. package/umd/src/cli/cli-commands/coder/generate-boilerplates.d.ts +14 -0
  351. package/umd/src/cli/cli-commands/coder/run.d.ts +14 -0
  352. package/umd/src/cli/cli-commands/coder/verify.d.ts +14 -0
  353. package/umd/src/cli/cli-commands/coder.d.ts +21 -0
  354. package/umd/src/collection/agent-collection/CreateAgentInput.d.ts +59 -0
  355. package/umd/src/collection/agent-collection/CreateAgentInput.test.d.ts +1 -0
  356. package/umd/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +52 -8
  357. package/umd/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentsDatabaseSchema.d.ts +6 -3
  358. package/umd/src/collection/agent-collection/constructors/agent-collection-in-supabase/prepareAgentSourceForPersistence.d.ts +36 -0
  359. package/umd/src/commitments/KNOWLEDGE/KNOWLEDGE.d.ts +0 -3
  360. package/umd/src/commitments/MEMORY/MEMORY.d.ts +4 -59
  361. package/umd/src/commitments/MEMORY/MemoryToolNames.d.ts +11 -0
  362. package/umd/src/commitments/MEMORY/MemoryToolRuntimeAdapter.d.ts +149 -0
  363. package/umd/src/commitments/MEMORY/createMemorySystemMessage.d.ts +6 -0
  364. package/umd/src/commitments/MEMORY/createMemoryToolFunctions.d.ts +8 -0
  365. package/umd/src/commitments/MEMORY/createMemoryTools.d.ts +14 -0
  366. package/umd/src/commitments/MEMORY/getMemoryCommitmentDocumentation.d.ts +6 -0
  367. package/umd/src/commitments/MEMORY/getMemoryToolRuntimeAdapterOrDisabledResult.d.ts +17 -0
  368. package/umd/src/commitments/MEMORY/getMemoryToolTitles.d.ts +7 -0
  369. package/umd/src/commitments/MEMORY/parseMemoryToolArgs.d.ts +61 -0
  370. package/umd/src/commitments/MEMORY/resolveMemoryRuntimeContext.d.ts +8 -0
  371. package/umd/src/commitments/MEMORY/setMemoryToolRuntimeAdapter.d.ts +13 -0
  372. package/umd/src/commitments/MESSAGE/InternalMessageCommitmentDefinition.d.ts +33 -0
  373. package/umd/src/commitments/MESSAGE/MESSAGE.d.ts +2 -2
  374. package/umd/src/commitments/META/META.d.ts +4 -0
  375. package/umd/src/commitments/META_DOMAIN/META_DOMAIN.d.ts +33 -0
  376. package/umd/src/commitments/META_INPUT_PLACEHOLDER/META_INPUT_PLACEHOLDER.d.ts +33 -0
  377. package/umd/src/commitments/META_VOICE/META_VOICE.d.ts +39 -0
  378. package/umd/src/commitments/SAMPLE/SAMPLE.d.ts +13 -13
  379. package/umd/src/commitments/USE_BROWSER/USE_BROWSER.d.ts +1 -1
  380. package/umd/src/commitments/USE_BROWSER/resolveRunBrowserToolForNode.d.ts +10 -0
  381. package/umd/src/commitments/USE_BROWSER/resolveRunBrowserToolForNode.test.d.ts +1 -0
  382. package/umd/src/commitments/USE_CALENDAR/USE_CALENDAR.d.ts +42 -0
  383. package/umd/src/commitments/USE_CALENDAR/USE_CALENDAR.test.d.ts +1 -0
  384. package/umd/src/commitments/USE_CALENDAR/UseCalendarToolNames.d.ts +13 -0
  385. package/umd/src/commitments/USE_CALENDAR/UseCalendarWallet.d.ts +9 -0
  386. package/umd/src/commitments/USE_CALENDAR/calendarReference.d.ts +68 -0
  387. package/umd/src/commitments/USE_CALENDAR/callGoogleCalendarApi.d.ts +19 -0
  388. package/umd/src/commitments/USE_CALENDAR/createUseCalendarToolFunctions.d.ts +8 -0
  389. package/umd/src/commitments/USE_CALENDAR/createUseCalendarTools.d.ts +7 -0
  390. package/umd/src/commitments/USE_CALENDAR/getUseCalendarToolTitles.d.ts +7 -0
  391. package/umd/src/commitments/USE_CALENDAR/normalizeConfiguredCalendars.d.ts +19 -0
  392. package/umd/src/commitments/USE_CALENDAR/resolveUseCalendarToolRuntimeOrWalletCredentialResult.d.ts +34 -0
  393. package/umd/src/commitments/USE_EMAIL/USE_EMAIL.d.ts +4 -11
  394. package/umd/src/commitments/USE_EMAIL/USE_EMAIL.test.d.ts +1 -0
  395. package/umd/src/commitments/USE_EMAIL/parseUseEmailCommitmentContent.d.ts +21 -0
  396. package/umd/src/commitments/USE_EMAIL/parseUseEmailCommitmentContent.test.d.ts +1 -0
  397. package/umd/src/commitments/USE_EMAIL/sendEmailViaBrowser.d.ts +2 -7
  398. package/umd/src/commitments/USE_POPUP/USE_POPUP.d.ts +49 -0
  399. package/umd/src/commitments/USE_PRIVACY/USE_PRIVACY.d.ts +39 -0
  400. package/umd/src/commitments/USE_PRIVACY/USE_PRIVACY.test.d.ts +1 -0
  401. package/umd/src/commitments/USE_PROJECT/USE_PROJECT.d.ts +42 -0
  402. package/umd/src/commitments/USE_PROJECT/USE_PROJECT.test.d.ts +1 -0
  403. package/umd/src/commitments/USE_PROJECT/UseProjectToolNames.d.ts +13 -0
  404. package/umd/src/commitments/USE_PROJECT/UseProjectWallet.d.ts +9 -0
  405. package/umd/src/commitments/USE_PROJECT/callGitHubApi.d.ts +69 -0
  406. package/umd/src/commitments/USE_PROJECT/createUseProjectToolFunctions.d.ts +8 -0
  407. package/umd/src/commitments/USE_PROJECT/createUseProjectTools.d.ts +7 -0
  408. package/umd/src/commitments/USE_PROJECT/getUseProjectToolTitles.d.ts +7 -0
  409. package/umd/src/commitments/USE_PROJECT/normalizeConfiguredProjects.d.ts +16 -0
  410. package/umd/src/commitments/USE_PROJECT/normalizeOptionalToolText.d.ts +12 -0
  411. package/umd/src/commitments/USE_PROJECT/projectReference.d.ts +52 -0
  412. package/umd/src/commitments/USE_PROJECT/projectReference.test.d.ts +1 -0
  413. package/umd/src/commitments/USE_PROJECT/resolveUseProjectToolRuntimeOrWalletCredentialResult.d.ts +34 -0
  414. package/umd/src/commitments/USE_SPAWN/USE_SPAWN.d.ts +41 -0
  415. package/umd/src/commitments/USE_SPAWN/USE_SPAWN.test.d.ts +1 -0
  416. package/umd/src/commitments/USE_SPAWN/resolveSpawnAgentToolForNode.d.ts +9 -0
  417. package/umd/src/commitments/USE_SPAWN/spawnAgentViaBrowser.d.ts +12 -0
  418. package/umd/src/commitments/USE_TIMEOUT/TimeoutToolNames.d.ts +9 -0
  419. package/umd/src/commitments/USE_TIMEOUT/TimeoutToolRuntimeAdapter.d.ts +90 -0
  420. package/umd/src/commitments/USE_TIMEOUT/USE_TIMEOUT.d.ts +41 -0
  421. package/umd/src/commitments/USE_TIMEOUT/USE_TIMEOUT.test.d.ts +1 -0
  422. package/umd/src/commitments/USE_TIMEOUT/createTimeoutSystemMessage.d.ts +6 -0
  423. package/umd/src/commitments/USE_TIMEOUT/createTimeoutToolFunctions.d.ts +8 -0
  424. package/umd/src/commitments/USE_TIMEOUT/createTimeoutTools.d.ts +7 -0
  425. package/umd/src/commitments/USE_TIMEOUT/getTimeoutToolRuntimeAdapterOrDisabledResult.d.ts +17 -0
  426. package/umd/src/commitments/USE_TIMEOUT/parseTimeoutToolArgs.d.ts +34 -0
  427. package/umd/src/commitments/USE_TIMEOUT/resolveTimeoutRuntimeContext.d.ts +8 -0
  428. package/umd/src/commitments/USE_TIMEOUT/setTimeoutToolRuntimeAdapter.d.ts +13 -0
  429. package/umd/src/commitments/WALLET/WALLET.d.ts +24 -0
  430. package/umd/src/commitments/WALLET/WALLET.test.d.ts +1 -0
  431. package/umd/src/commitments/WALLET/WalletToolNames.d.ts +12 -0
  432. package/umd/src/commitments/WALLET/WalletToolRuntimeAdapter.d.ts +163 -0
  433. package/umd/src/commitments/WALLET/createWalletSystemMessage.d.ts +6 -0
  434. package/umd/src/commitments/WALLET/createWalletToolFunctions.d.ts +8 -0
  435. package/umd/src/commitments/WALLET/createWalletTools.d.ts +7 -0
  436. package/umd/src/commitments/WALLET/getWalletCommitmentDocumentation.d.ts +6 -0
  437. package/umd/src/commitments/WALLET/getWalletToolRuntimeAdapterOrDisabledResult.d.ts +16 -0
  438. package/umd/src/commitments/WALLET/getWalletToolTitles.d.ts +7 -0
  439. package/umd/src/commitments/WALLET/parseWalletToolArgs.d.ts +51 -0
  440. package/umd/src/commitments/WALLET/resolveWalletRuntimeContext.d.ts +8 -0
  441. package/umd/src/commitments/WALLET/setWalletToolRuntimeAdapter.d.ts +13 -0
  442. package/umd/src/commitments/WRITING_RULES/WRITING_RULES.d.ts +29 -0
  443. package/umd/src/commitments/WRITING_SAMPLE/WRITING_SAMPLE.d.ts +29 -0
  444. package/umd/src/commitments/_base/BaseCommitmentDefinition.d.ts +12 -0
  445. package/umd/src/commitments/_base/CommitmentDefinition.d.ts +23 -0
  446. package/umd/src/commitments/_common/createWritingCommitmentSections.d.ts +19 -0
  447. package/umd/src/commitments/_common/getGroupedCommitmentDefinitions.writing.test.d.ts +1 -0
  448. package/umd/src/commitments/_common/toolExecutionEnvelope.d.ts +22 -0
  449. package/umd/src/commitments/_common/toolRuntimeContext.d.ts +99 -0
  450. package/umd/src/commitments/index.d.ts +13 -1
  451. package/umd/src/config.d.ts +3 -0
  452. package/umd/src/errors/0-index.d.ts +3 -0
  453. package/umd/src/errors/ConflictError.d.ts +9 -0
  454. package/umd/src/executables/apps/locateVscode.d.ts +7 -0
  455. package/umd/src/executables/apps/locateVscode.test.d.ts +1 -0
  456. package/umd/src/executables/browsers/locateBrowser.d.ts +10 -0
  457. package/umd/src/executables/browsers/locateBrowser.test.d.ts +1 -0
  458. package/umd/src/executables/browsers/locateChrome.d.ts +7 -0
  459. package/umd/src/executables/browsers/locateChrome.test.d.ts +1 -0
  460. package/umd/src/executables/browsers/locateDefaultSystemBrowser.d.ts +10 -0
  461. package/umd/src/executables/browsers/locateDefaultSystemBrowser.test.d.ts +1 -0
  462. package/umd/src/executables/browsers/locateEdge.d.ts +7 -0
  463. package/umd/src/executables/browsers/locateEdge.test.d.ts +1 -0
  464. package/umd/src/executables/browsers/locateFirefox.d.ts +7 -0
  465. package/umd/src/executables/browsers/locateFirefox.test.d.ts +1 -0
  466. package/umd/src/executables/browsers/locateInternetExplorer.d.ts +7 -0
  467. package/umd/src/executables/browsers/locateInternetExplorer.test.d.ts +1 -0
  468. package/umd/src/executables/browsers/locateSafari.d.ts +7 -0
  469. package/umd/src/execution/LlmExecutionTools.d.ts +12 -1
  470. package/umd/src/execution/Usage.d.ts +4 -0
  471. package/umd/src/execution/utils/usageToHuman.d.ts +1 -0
  472. package/umd/src/file-security-checkers/FileSecurityCheckResult.d.ts +32 -0
  473. package/umd/src/file-security-checkers/FileSecurityChecker.d.ts +34 -0
  474. package/umd/src/file-security-checkers/virustotal/VirusTotalFileSecurityChecker.d.ts +36 -0
  475. package/umd/src/file-security-checkers/virustotal/VirusTotalFileSecurityChecker.test.d.ts +1 -0
  476. package/umd/src/llm-providers/agent/Agent.d.ts +2 -2
  477. package/umd/src/llm-providers/agent/AgentLlmExecutionTools.d.ts +2 -2
  478. package/umd/src/llm-providers/agent/RemoteAgent.d.ts +2 -1
  479. package/umd/src/llm-providers/agent/self-learning/SelfLearningManager.test.d.ts +1 -0
  480. package/umd/src/llm-providers/anthropic-claude/computeAnthropicClaudeUsage.d.ts +3 -1
  481. package/umd/src/llm-providers/openai/OpenAiAgentKitExecutionTools.d.ts +33 -3
  482. package/umd/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +2 -2
  483. package/umd/src/llm-providers/openai/OpenAiCompatibleExecutionTools.d.ts +2 -2
  484. package/umd/src/llm-providers/openai/computeOpenAiUsage.d.ts +3 -1
  485. package/umd/src/playground/playground.d.ts +1 -0
  486. package/umd/src/speech-recognition/OpenAiSpeechRecognition.d.ts +49 -1
  487. package/umd/src/types/SpeechRecognition.d.ts +14 -0
  488. package/umd/src/types/ToolCall.d.ts +56 -0
  489. package/umd/src/types/number_usd.d.ts +110 -0
  490. package/umd/src/types/string_filename.d.ts +39 -0
  491. package/umd/src/types/string_knowledge_source_content.d.ts +29 -0
  492. package/umd/src/types/string_markdown.d.ts +138 -0
  493. package/umd/src/types/string_parameter_name.d.ts +170 -0
  494. package/umd/src/types/string_person_fullname.d.ts +85 -0
  495. package/umd/src/types/string_sha256.d.ts +44 -0
  496. package/umd/src/types/string_token.d.ts +58 -0
  497. package/umd/src/types/string_url.d.ts +146 -0
  498. package/umd/src/types/typeAliases.d.ts +9 -741
  499. package/umd/src/utils/chat/chatAttachments/appendChatAttachmentContext.d.ts +10 -0
  500. package/umd/src/utils/chat/chatAttachments/appendChatAttachmentContextWithContent.d.ts +14 -0
  501. package/umd/src/utils/chat/chatAttachments/appendChatContextSections.d.ts +6 -0
  502. package/umd/src/utils/chat/chatAttachments/formatChatAttachmentContentContext.d.ts +9 -0
  503. package/umd/src/utils/chat/chatAttachments/formatChatAttachmentContext.d.ts +9 -0
  504. package/umd/src/utils/chat/chatAttachments/normalizeChatAttachments.d.ts +11 -0
  505. package/umd/src/utils/chat/chatAttachments/resolveChatAttachmentContent.d.ts +11 -0
  506. package/umd/src/utils/chat/chatAttachments/resolveChatAttachmentContents.d.ts +10 -0
  507. package/umd/src/utils/chat/chatAttachments.d.ts +54 -0
  508. package/umd/src/utils/chat/chatAttachments.test.d.ts +1 -0
  509. package/umd/src/utils/chat/constants.d.ts +21 -0
  510. package/umd/src/utils/chat/decodeChatStreamWhitespaceFromTransport.d.ts +7 -0
  511. package/umd/src/utils/chat/encodeChatStreamWhitespaceForTransport.d.ts +7 -0
  512. package/umd/src/utils/chat/escapeRegExp.d.ts +6 -0
  513. package/umd/src/utils/database/uniqueConstraint.d.ts +28 -0
  514. package/umd/src/utils/files/decodeAttachmentAsText.d.ts +81 -0
  515. package/umd/src/utils/files/decodeAttachmentAsText.test.d.ts +1 -0
  516. package/umd/src/utils/files/readResponseBytes.d.ts +14 -0
  517. package/umd/src/utils/random/EnglishNamePool.d.ts +9 -1
  518. package/umd/src/utils/toolCalls/getToolCallIdentity.d.ts +1 -1
  519. package/umd/src/utils/toolCalls/mergeToolCalls.d.ts +12 -0
  520. package/umd/src/utils/toolCalls/resolveToolCallIdempotencyKey.d.ts +10 -0
  521. package/umd/src/utils/validators/url/extractUrlsFromText.d.ts +8 -0
  522. package/umd/src/utils/validators/url/extractUrlsFromText.test.d.ts +1 -0
  523. package/umd/src/utils/validators/url/isHostnameOnPrivateNetwork.d.ts +12 -1
  524. package/umd/src/utils/validators/url/isUrlOnPrivateNetwork.d.ts +8 -2
  525. package/umd/src/utils/validators/url/normalizeDomainForMatching.d.ts +11 -0
  526. package/umd/src/utils/validators/url/normalizeDomainForMatching.test.d.ts +1 -0
  527. package/umd/src/version.d.ts +1 -1
package/esm/index.es.js CHANGED
@@ -23,7 +23,7 @@ const BOOK_LANGUAGE_VERSION = '2.0.0';
23
23
  * @generated
24
24
  * @see https://github.com/webgptorg/promptbook
25
25
  */
26
- const PROMPTBOOK_ENGINE_VERSION = '0.111.0-7';
26
+ const PROMPTBOOK_ENGINE_VERSION = '0.112.0-12';
27
27
  /**
28
28
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
29
29
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -775,16 +775,14 @@ class Color {
775
775
  }
776
776
  toHex() {
777
777
  if (this.alpha === 255) {
778
- return `#${this.red.toString(16).padStart(2, '0')}${this.green
778
+ return `#${this.red.toString(16).padStart(2, '0')}${this.green.toString(16).padStart(2, '0')}${this.blue
779
779
  .toString(16)
780
- .padStart(2, '0')}${this.blue.toString(16).padStart(2, '0')}`;
780
+ .padStart(2, '0')}`;
781
781
  }
782
782
  else {
783
- return `#${this.red.toString(16).padStart(2, '0')}${this.green
784
- .toString(16)
785
- .padStart(2, '0')}${this.blue.toString(16).padStart(2, '0')}${this.alpha
783
+ return `#${this.red.toString(16).padStart(2, '0')}${this.green.toString(16).padStart(2, '0')}${this.blue
786
784
  .toString(16)
787
- .padStart(2, '0')}`;
785
+ .padStart(2, '0')}${this.alpha.toString(16).padStart(2, '0')}`;
788
786
  }
789
787
  }
790
788
  toRgb() {
@@ -994,6 +992,9 @@ const PROMPTBOOK_COLOR = Color.fromString('promptbook');
994
992
  LINE: Color.fromHex('#eeeeee'),
995
993
  SEPARATOR: Color.fromHex('#cccccc'),
996
994
  COMMITMENT: Color.fromHex('#DA0F78'),
995
+ NOTE_COMMITMENT: Color.fromHex('#8080807e'),
996
+ TODO_COMMITMENT_TEXT: Color.fromHex('#000000'),
997
+ TODO_COMMITMENT_BACKGROUND: Color.fromHex('#FFEB3B'),
997
998
  PARAMETER: Color.fromHex('#8e44ad'),
998
999
  CODE_BLOCK: Color.fromHex('#7700ffff'),
999
1000
  });
@@ -1844,6 +1845,19 @@ class CollectionError extends Error {
1844
1845
  }
1845
1846
  }
1846
1847
 
1848
+ /**
1849
+ * Signals that the requested operation could not be completed because the target already exists.
1850
+ *
1851
+ * @public exported from `@promptbook/core`
1852
+ */
1853
+ class ConflictError extends Error {
1854
+ constructor(message) {
1855
+ super(message);
1856
+ this.name = 'ConflictError';
1857
+ Object.setPrototypeOf(this, ConflictError.prototype);
1858
+ }
1859
+ }
1860
+
1847
1861
  /**
1848
1862
  * This error indicates error from the database
1849
1863
  *
@@ -2099,6 +2113,7 @@ const PROMPTBOOK_ERRORS = {
2099
2113
  WrappedError,
2100
2114
  NotAllowed,
2101
2115
  DatabaseError,
2116
+ ConflictError,
2102
2117
  // TODO: [🪑]> VersionMismatchError,
2103
2118
  };
2104
2119
  /**
@@ -2581,6 +2596,107 @@ function normalizeTo_snake_case(text) {
2581
2596
  return normalizeTo_SCREAMING_CASE(text).toLowerCase();
2582
2597
  }
2583
2598
 
2599
+ /**
2600
+ * Prompt parameter key used to pass hidden runtime context to tool execution.
2601
+ *
2602
+ * @private internal runtime wiring for commitment tools
2603
+ */
2604
+ const TOOL_RUNTIME_CONTEXT_PARAMETER = 'promptbookToolRuntimeContext';
2605
+ /**
2606
+ * Hidden argument key used to pass runtime context into individual tool calls.
2607
+ *
2608
+ * @private internal runtime wiring for commitment tools
2609
+ */
2610
+ const TOOL_RUNTIME_CONTEXT_ARGUMENT = '__promptbookToolRuntimeContext';
2611
+ /**
2612
+ * Prompt parameter key used to pass a hidden tool-progress listener token into script execution.
2613
+ *
2614
+ * @private internal runtime wiring for commitment tools
2615
+ */
2616
+ const TOOL_PROGRESS_TOKEN_PARAMETER = 'promptbookToolProgressToken';
2617
+ /**
2618
+ * Hidden argument key used to pass a tool-progress listener token into individual tool calls.
2619
+ *
2620
+ * @private internal runtime wiring for commitment tools
2621
+ */
2622
+ const TOOL_PROGRESS_TOKEN_ARGUMENT = '__promptbookToolProgressToken';
2623
+ /**
2624
+ * Monotonic counter used for hidden progress-listener tokens.
2625
+ *
2626
+ * @private internal runtime wiring for commitment tools
2627
+ */
2628
+ let toolCallProgressListenerCounter = 0;
2629
+ /**
2630
+ * Active tool-progress listeners keyed by hidden execution token.
2631
+ *
2632
+ * @private internal runtime wiring for commitment tools
2633
+ */
2634
+ const toolCallProgressListeners = new Map();
2635
+ /**
2636
+ * Registers one in-memory listener that receives progress updates emitted by a running tool.
2637
+ *
2638
+ * The returned token is passed into script execution as a hidden argument so tool implementations
2639
+ * can stream progress without exposing extra parameters to the model.
2640
+ *
2641
+ * @param listener - Listener notified about tool progress.
2642
+ * @returns Hidden token used to route progress updates.
2643
+ * @private internal runtime wiring for commitment tools
2644
+ */
2645
+ function registerToolCallProgressListener(listener) {
2646
+ toolCallProgressListenerCounter += 1;
2647
+ const token = `tool-progress:${Date.now()}:${toolCallProgressListenerCounter}`;
2648
+ toolCallProgressListeners.set(token, listener);
2649
+ return token;
2650
+ }
2651
+ /**
2652
+ * Unregisters one in-memory progress listener.
2653
+ *
2654
+ * @param token - Token previously created by `registerToolCallProgressListener`.
2655
+ * @private internal runtime wiring for commitment tools
2656
+ */
2657
+ function unregisterToolCallProgressListener(token) {
2658
+ toolCallProgressListeners.delete(token);
2659
+ }
2660
+ /**
2661
+ * Note: [💞] Ignore a discrepancy between file name and entity name
2662
+ */
2663
+
2664
+ /**
2665
+ * Marker property stored inside serialized tool-execution envelopes.
2666
+ *
2667
+ * @private internal tool-execution transport
2668
+ */
2669
+ const TOOL_EXECUTION_ENVELOPE_MARKER = '__promptbookToolExecutionEnvelope';
2670
+ /**
2671
+ * Parses one serialized tool-execution envelope when present.
2672
+ *
2673
+ * @private internal tool-execution transport
2674
+ */
2675
+ function parseToolExecutionEnvelope(rawValue) {
2676
+ if (typeof rawValue !== 'string') {
2677
+ return null;
2678
+ }
2679
+ try {
2680
+ const parsedValue = JSON.parse(rawValue);
2681
+ if (!parsedValue ||
2682
+ typeof parsedValue !== 'object' ||
2683
+ parsedValue[TOOL_EXECUTION_ENVELOPE_MARKER] !== true ||
2684
+ typeof parsedValue.assistantMessage !== 'string') {
2685
+ return null;
2686
+ }
2687
+ return {
2688
+ assistantMessage: parsedValue.assistantMessage,
2689
+ toolResult: parsedValue.toolResult,
2690
+ };
2691
+ }
2692
+ catch (_a) {
2693
+ return null;
2694
+ }
2695
+ }
2696
+ /**
2697
+ * Note: [💞] Ignore a discrepancy between file name and entity name
2698
+ */
2699
+
2584
2700
  /**
2585
2701
  * Represents the uncertain value
2586
2702
  *
@@ -2600,6 +2716,7 @@ const UNCERTAIN_ZERO_VALUE = $deepFreeze({ value: 0, isUncertain: true });
2600
2716
  */
2601
2717
  const ZERO_USAGE = $deepFreeze({
2602
2718
  price: ZERO_VALUE,
2719
+ duration: ZERO_VALUE,
2603
2720
  input: {
2604
2721
  tokensCount: ZERO_VALUE,
2605
2722
  charactersCount: ZERO_VALUE,
@@ -2626,6 +2743,7 @@ const ZERO_USAGE = $deepFreeze({
2626
2743
  */
2627
2744
  const UNCERTAIN_USAGE = $deepFreeze({
2628
2745
  price: UNCERTAIN_ZERO_VALUE,
2746
+ duration: UNCERTAIN_ZERO_VALUE,
2629
2747
  input: {
2630
2748
  tokensCount: UNCERTAIN_ZERO_VALUE,
2631
2749
  charactersCount: UNCERTAIN_ZERO_VALUE,
@@ -2649,6 +2767,24 @@ const UNCERTAIN_USAGE = $deepFreeze({
2649
2767
  * Note: [💞] Ignore a discrepancy between file name and entity name
2650
2768
  */
2651
2769
 
2770
+ /**
2771
+ * Make UncertainNumber
2772
+ *
2773
+ * @param value value of the uncertain number, if `NaN` or `undefined`, it will be set to 0 and `isUncertain=true`
2774
+ * @param isUncertain if `true`, the value is uncertain, otherwise depends on the value
2775
+ *
2776
+ * @private utility for initializating UncertainNumber
2777
+ */
2778
+ function uncertainNumber(value, isUncertain) {
2779
+ if (value === null || value === undefined || Number.isNaN(value)) {
2780
+ return UNCERTAIN_ZERO_VALUE;
2781
+ }
2782
+ if (isUncertain === true) {
2783
+ return { value, isUncertain };
2784
+ }
2785
+ return { value };
2786
+ }
2787
+
2652
2788
  /**
2653
2789
  * Helper of usage compute
2654
2790
  *
@@ -2668,24 +2804,6 @@ function computeUsageCounts(content) {
2668
2804
  };
2669
2805
  }
2670
2806
 
2671
- /**
2672
- * Make UncertainNumber
2673
- *
2674
- * @param value value of the uncertain number, if `NaN` or `undefined`, it will be set to 0 and `isUncertain=true`
2675
- * @param isUncertain if `true`, the value is uncertain, otherwise depends on the value
2676
- *
2677
- * @private utility for initializating UncertainNumber
2678
- */
2679
- function uncertainNumber(value, isUncertain) {
2680
- if (value === null || value === undefined || Number.isNaN(value)) {
2681
- return UNCERTAIN_ZERO_VALUE;
2682
- }
2683
- if (isUncertain === true) {
2684
- return { value, isUncertain };
2685
- }
2686
- return { value };
2687
- }
2688
-
2689
2807
  /**
2690
2808
  * Create price per one token based on the string value found on openai page
2691
2809
  *
@@ -3377,11 +3495,12 @@ const OPENAI_MODELS = exportJson({
3377
3495
  * @param promptContent The content of the prompt
3378
3496
  * @param resultContent The content of the result (for embedding prompts or failed prompts pass empty string)
3379
3497
  * @param rawResponse The raw response from OpenAI API
3498
+ * @param duration The duration of the execution
3380
3499
  * @throws {PipelineExecutionError} If the usage is not defined in the response from OpenAI
3381
3500
  * @private internal utility of `OpenAiExecutionTools`
3382
3501
  */
3383
3502
  function computeOpenAiUsage(promptContent, // <- Note: Intentionally using [] to access type properties to bring jsdoc from Prompt/PromptResult to consumer
3384
- resultContent, rawResponse) {
3503
+ resultContent, rawResponse, duration = ZERO_VALUE) {
3385
3504
  var _a, _b;
3386
3505
  if (rawResponse.usage === undefined) {
3387
3506
  throw new PipelineExecutionError('The usage is not defined in the response from OpenAI');
@@ -3409,6 +3528,7 @@ resultContent, rawResponse) {
3409
3528
  }
3410
3529
  return {
3411
3530
  price,
3531
+ duration,
3412
3532
  input: {
3413
3533
  tokensCount: uncertainNumber(rawResponse.usage.prompt_tokens),
3414
3534
  ...computeUsageCounts(promptContent),
@@ -3432,8 +3552,15 @@ resultContent, rawResponse) {
3432
3552
  */
3433
3553
  function addUsage(...usageItems) {
3434
3554
  return usageItems.reduce((acc, item) => {
3435
- var _a;
3555
+ var _a, _b, _c, _d;
3436
3556
  acc.price.value += ((_a = item.price) === null || _a === void 0 ? void 0 : _a.value) || 0;
3557
+ if ((_b = item.price) === null || _b === void 0 ? void 0 : _b.isUncertain) {
3558
+ acc.price.isUncertain = true;
3559
+ }
3560
+ acc.duration.value += ((_c = item.duration) === null || _c === void 0 ? void 0 : _c.value) || 0;
3561
+ if ((_d = item.duration) === null || _d === void 0 ? void 0 : _d.isUncertain) {
3562
+ acc.duration.isUncertain = true;
3563
+ }
3437
3564
  for (const key of Object.keys(acc.input)) {
3438
3565
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3439
3566
  //@ts-ignore
@@ -3486,22 +3613,6 @@ function mapToolsToOpenAi(tools) {
3486
3613
  }));
3487
3614
  }
3488
3615
 
3489
- /**
3490
- * Prompt parameter key used to pass hidden runtime context to tool execution.
3491
- *
3492
- * @private internal runtime wiring for commitment tools
3493
- */
3494
- const TOOL_RUNTIME_CONTEXT_PARAMETER = 'promptbookToolRuntimeContext';
3495
- /**
3496
- * Hidden argument key used to pass runtime context into individual tool calls.
3497
- *
3498
- * @private internal runtime wiring for commitment tools
3499
- */
3500
- const TOOL_RUNTIME_CONTEXT_ARGUMENT = '__promptbookToolRuntimeContext';
3501
- /**
3502
- * Note: [💞] Ignore a discrepancy between file name and entity name
3503
- */
3504
-
3505
3616
  /**
3506
3617
  * Builds a tool invocation script that injects hidden runtime context into tool args.
3507
3618
  *
@@ -3520,6 +3631,15 @@ function buildToolInvocationScript(options) {
3520
3631
  args.${TOOL_RUNTIME_CONTEXT_ARGUMENT} = runtimeContextRaw;
3521
3632
  }
3522
3633
 
3634
+ const toolProgressTokenRaw =
3635
+ typeof ${TOOL_PROGRESS_TOKEN_PARAMETER} === 'undefined'
3636
+ ? undefined
3637
+ : ${TOOL_PROGRESS_TOKEN_PARAMETER};
3638
+
3639
+ if (toolProgressTokenRaw !== undefined && args && typeof args === 'object' && !Array.isArray(args)) {
3640
+ args.${TOOL_PROGRESS_TOKEN_ARGUMENT} = toolProgressTokenRaw;
3641
+ }
3642
+
3523
3643
  return await ${functionName}(args);
3524
3644
  `;
3525
3645
  }
@@ -3606,6 +3726,42 @@ function clonePromptPreservingFiles(prompt) {
3606
3726
  }
3607
3727
  return clonedPrompt;
3608
3728
  }
3729
+ /**
3730
+ * Creates one structured log entry for streamed tool-call updates.
3731
+ */
3732
+ function createToolCallLogEntry$2(options) {
3733
+ return {
3734
+ createdAt: $getCurrentDate(),
3735
+ kind: options.kind,
3736
+ level: options.level,
3737
+ title: options.title,
3738
+ message: options.message,
3739
+ payload: options.payload,
3740
+ };
3741
+ }
3742
+ /**
3743
+ * Appends one incremental progress update to the currently tracked tool-call snapshot.
3744
+ */
3745
+ function applyToolCallProgressUpdate$2(toolCall, update) {
3746
+ var _a;
3747
+ return {
3748
+ ...toolCall,
3749
+ state: (_a = update.state) !== null && _a !== void 0 ? _a : 'PARTIAL',
3750
+ logs: update.log ? [...(toolCall.logs || []), update.log] : toolCall.logs,
3751
+ };
3752
+ }
3753
+ /**
3754
+ * Resolves the final lifecycle state for one tool call after execution ends.
3755
+ */
3756
+ function resolveFinalToolCallState$2(options) {
3757
+ if (options.errors && options.errors.length > 0) {
3758
+ return 'ERROR';
3759
+ }
3760
+ if (options.currentState === 'ERROR') {
3761
+ return 'ERROR';
3762
+ }
3763
+ return 'COMPLETE';
3764
+ }
3609
3765
  /**
3610
3766
  * Execution Tools for calling OpenAI API or other OpenAI compatible provider
3611
3767
  *
@@ -3688,17 +3844,17 @@ class OpenAiCompatibleExecutionTools {
3688
3844
  /**
3689
3845
  * Calls OpenAI compatible API to use a chat model with streaming.
3690
3846
  */
3691
- async callChatModelStream(prompt, onProgress) {
3847
+ async callChatModelStream(prompt, onProgress, options) {
3692
3848
  // Deep clone prompt and modelRequirements to avoid mutation across calls
3693
3849
  const clonedPrompt = clonePromptPreservingFiles(prompt);
3694
3850
  // Use local Set for retried parameters to ensure independence and thread safety
3695
3851
  const retriedUnsupportedParameters = new Set();
3696
- return this.callChatModelWithRetry(clonedPrompt, clonedPrompt.modelRequirements, [], retriedUnsupportedParameters, onProgress);
3852
+ return this.callChatModelWithRetry(clonedPrompt, clonedPrompt.modelRequirements, [], retriedUnsupportedParameters, onProgress, options);
3697
3853
  }
3698
3854
  /**
3699
3855
  * Internal method that handles parameter retry for chat model calls
3700
3856
  */
3701
- async callChatModelWithRetry(prompt, currentModelRequirements, attemptStack = [], retriedUnsupportedParameters = new Set(), onProgress) {
3857
+ async callChatModelWithRetry(prompt, currentModelRequirements, attemptStack = [], retriedUnsupportedParameters = new Set(), onProgress, options) {
3702
3858
  var _a;
3703
3859
  if (this.options.isVerbose) {
3704
3860
  console.info(`💬 ${this.title} callChatModel call`, { prompt, currentModelRequirements });
@@ -3777,6 +3933,7 @@ class OpenAiCompatibleExecutionTools {
3777
3933
  }
3778
3934
  let totalUsage = {
3779
3935
  price: uncertainNumber(0),
3936
+ duration: uncertainNumber(0),
3780
3937
  input: {
3781
3938
  tokensCount: uncertainNumber(0),
3782
3939
  charactersCount: uncertainNumber(0),
@@ -3811,6 +3968,7 @@ class OpenAiCompatibleExecutionTools {
3811
3968
  console.info(colors.bgWhite('rawRequest'), JSON.stringify(rawRequest, null, 4));
3812
3969
  }
3813
3970
  try {
3971
+ const turnStart = $getCurrentDate();
3814
3972
  const rawResponse = await this.limiter
3815
3973
  .schedule(() => this.makeRequestWithNetworkRetry(() => client.chat.completions.create(rawRequest)))
3816
3974
  .catch((error) => {
@@ -3820,6 +3978,7 @@ class OpenAiCompatibleExecutionTools {
3820
3978
  }
3821
3979
  throw error;
3822
3980
  });
3981
+ const turnComplete = $getCurrentDate();
3823
3982
  if (this.options.isVerbose) {
3824
3983
  console.info(colors.bgWhite('rawResponse'), JSON.stringify(rawResponse, null, 4));
3825
3984
  }
@@ -3828,7 +3987,8 @@ class OpenAiCompatibleExecutionTools {
3828
3987
  }
3829
3988
  const responseMessage = rawResponse.choices[0].message;
3830
3989
  messages.push(responseMessage);
3831
- const usage = this.computeUsage(content || '', responseMessage.content || '', rawResponse);
3990
+ const duration = uncertainNumber((new Date(turnComplete).getTime() - new Date(turnStart).getTime()) / 1000);
3991
+ const usage = this.computeUsage(content || '', responseMessage.content || '', rawResponse, duration);
3832
3992
  totalUsage = addUsage(totalUsage, usage);
3833
3993
  if (responseMessage.tool_calls && responseMessage.tool_calls.length > 0) {
3834
3994
  const toolCallStartedAt = new Map();
@@ -3836,7 +3996,7 @@ class OpenAiCompatibleExecutionTools {
3836
3996
  onProgress({
3837
3997
  content: responseMessage.content || '',
3838
3998
  modelName: rawResponse.model || modelName,
3839
- timing: { start, complete: $getCurrentDate() },
3999
+ timing: { start, complete: turnComplete },
3840
4000
  usage: totalUsage,
3841
4001
  toolCalls: responseMessage.tool_calls.map((toolCall) => {
3842
4002
  const calledAt = $getCurrentDate();
@@ -3849,6 +4009,17 @@ class OpenAiCompatibleExecutionTools {
3849
4009
  result: '',
3850
4010
  rawToolCall: toolCall,
3851
4011
  createdAt: calledAt,
4012
+ state: 'PENDING',
4013
+ logs: [
4014
+ createToolCallLogEntry$2({
4015
+ kind: 'request',
4016
+ title: 'Request prepared',
4017
+ message: `Prepared ${String(toolCall.function.name)} request.`,
4018
+ payload: {
4019
+ arguments: toolCall.function.arguments,
4020
+ },
4021
+ }),
4022
+ ],
3852
4023
  };
3853
4024
  }),
3854
4025
  rawPromptContent,
@@ -3862,6 +4033,24 @@ class OpenAiCompatibleExecutionTools {
3862
4033
  const calledAt = toolCall.id
3863
4034
  ? toolCallStartedAt.get(toolCall.id) || $getCurrentDate()
3864
4035
  : $getCurrentDate();
4036
+ let currentToolCallSnapshot = {
4037
+ name: functionName,
4038
+ arguments: functionArgs,
4039
+ result: '',
4040
+ rawToolCall: toolCall,
4041
+ createdAt: calledAt,
4042
+ state: 'PENDING',
4043
+ logs: [
4044
+ createToolCallLogEntry$2({
4045
+ kind: 'request',
4046
+ title: 'Request prepared',
4047
+ message: `Prepared ${functionName} request.`,
4048
+ payload: {
4049
+ arguments: functionArgs,
4050
+ },
4051
+ }),
4052
+ ],
4053
+ };
3865
4054
  const executionTools = this.options
3866
4055
  .executionTools;
3867
4056
  if (!executionTools || !executionTools.script) {
@@ -3872,36 +4061,98 @@ class OpenAiCompatibleExecutionTools {
3872
4061
  ? executionTools.script
3873
4062
  : [executionTools.script];
3874
4063
  let functionResponse;
4064
+ let assistantVisibleFunctionResponse;
4065
+ let toolResult;
3875
4066
  let errors;
3876
4067
  try {
3877
4068
  const scriptTool = scriptTools[0]; // <- TODO: [🧠] Which script tool to use?
3878
- functionResponse = await scriptTool.execute({
3879
- scriptLanguage: 'javascript',
3880
- script: buildToolInvocationScript({
3881
- functionName,
3882
- functionArgsExpression: functionArgs,
3883
- }),
3884
- parameters: prompt.parameters,
4069
+ const progressListenerToken = registerToolCallProgressListener((update) => {
4070
+ currentToolCallSnapshot = applyToolCallProgressUpdate$2(currentToolCallSnapshot, update);
4071
+ if (!onProgress) {
4072
+ return;
4073
+ }
4074
+ onProgress({
4075
+ content: responseMessage.content || '',
4076
+ modelName: rawResponse.model || modelName,
4077
+ timing: { start, complete: $getCurrentDate() },
4078
+ usage: totalUsage,
4079
+ toolCalls: [currentToolCallSnapshot],
4080
+ rawPromptContent,
4081
+ rawRequest,
4082
+ rawResponse,
4083
+ });
3885
4084
  });
4085
+ try {
4086
+ functionResponse = await scriptTool.execute({
4087
+ scriptLanguage: 'javascript',
4088
+ script: buildToolInvocationScript({
4089
+ functionName,
4090
+ functionArgsExpression: functionArgs,
4091
+ }),
4092
+ parameters: {
4093
+ ...prompt.parameters,
4094
+ [TOOL_PROGRESS_TOKEN_PARAMETER]: progressListenerToken,
4095
+ },
4096
+ });
4097
+ }
4098
+ finally {
4099
+ unregisterToolCallProgressListener(progressListenerToken);
4100
+ }
4101
+ const toolExecutionEnvelope = parseToolExecutionEnvelope(functionResponse);
4102
+ assistantVisibleFunctionResponse =
4103
+ (toolExecutionEnvelope === null || toolExecutionEnvelope === void 0 ? void 0 : toolExecutionEnvelope.assistantMessage) || functionResponse;
4104
+ toolResult =
4105
+ toolExecutionEnvelope !== null && toolExecutionEnvelope !== undefined
4106
+ ? toolExecutionEnvelope.toolResult
4107
+ : functionResponse;
3886
4108
  }
3887
4109
  catch (error) {
3888
4110
  assertsError(error);
3889
4111
  functionResponse = `Error: ${error.message}`;
4112
+ assistantVisibleFunctionResponse = functionResponse;
4113
+ toolResult = functionResponse;
3890
4114
  errors = [serializeError(error)];
3891
4115
  }
3892
4116
  messages.push({
3893
4117
  role: 'tool',
3894
4118
  tool_call_id: toolCall.id,
3895
- content: functionResponse,
4119
+ content: assistantVisibleFunctionResponse,
3896
4120
  });
3897
- toolCalls.push({
3898
- name: functionName,
3899
- arguments: functionArgs,
3900
- result: functionResponse,
4121
+ const completedToolCall = {
4122
+ ...currentToolCallSnapshot,
4123
+ result: toolResult,
3901
4124
  rawToolCall: toolCall,
3902
4125
  createdAt: calledAt,
3903
4126
  errors,
3904
- });
4127
+ state: resolveFinalToolCallState$2({
4128
+ currentState: currentToolCallSnapshot.state,
4129
+ errors,
4130
+ }),
4131
+ logs: [
4132
+ ...(currentToolCallSnapshot.logs || []),
4133
+ createToolCallLogEntry$2({
4134
+ kind: errors && errors.length > 0 ? 'error' : 'result',
4135
+ level: errors && errors.length > 0 ? 'error' : 'info',
4136
+ title: errors && errors.length > 0 ? 'Execution failed' : 'Execution finished',
4137
+ message: errors && errors.length > 0
4138
+ ? `${functionName} failed before returning a final result.`
4139
+ : `${functionName} returned a result.`,
4140
+ }),
4141
+ ],
4142
+ };
4143
+ toolCalls.push(completedToolCall);
4144
+ if (onProgress) {
4145
+ onProgress({
4146
+ content: responseMessage.content || '',
4147
+ modelName: rawResponse.model || modelName,
4148
+ timing: { start, complete: $getCurrentDate() },
4149
+ usage: totalUsage,
4150
+ toolCalls: [completedToolCall],
4151
+ rawPromptContent,
4152
+ rawRequest,
4153
+ rawResponse,
4154
+ });
4155
+ }
3905
4156
  });
3906
4157
  continue;
3907
4158
  }
@@ -3990,7 +4241,7 @@ class OpenAiCompatibleExecutionTools {
3990
4241
  });
3991
4242
  // Remove the unsupported parameter and retry
3992
4243
  const modifiedModelRequirements = removeUnsupportedModelRequirement(currentModelRequirements, unsupportedParameter);
3993
- return this.callChatModelWithRetry(prompt, modifiedModelRequirements, attemptStack, retriedUnsupportedParameters, onProgress);
4244
+ return this.callChatModelWithRetry(prompt, modifiedModelRequirements, attemptStack, retriedUnsupportedParameters, onProgress, options);
3994
4245
  }
3995
4246
  }
3996
4247
  throw new PipelineExecutionError(`Tool calling loop did not return a result from ${this.title}`);
@@ -4036,6 +4287,7 @@ class OpenAiCompatibleExecutionTools {
4036
4287
  console.info(colors.bgWhite('rawRequest'), JSON.stringify(rawRequest, null, 4));
4037
4288
  }
4038
4289
  try {
4290
+ const turnStart = $getCurrentDate();
4039
4291
  const rawResponse = await this.limiter
4040
4292
  .schedule(() => this.makeRequestWithNetworkRetry(() => client.completions.create(rawRequest)))
4041
4293
  .catch((error) => {
@@ -4045,10 +4297,10 @@ class OpenAiCompatibleExecutionTools {
4045
4297
  }
4046
4298
  throw error;
4047
4299
  });
4300
+ const turnComplete = $getCurrentDate();
4048
4301
  if (this.options.isVerbose) {
4049
4302
  console.info(colors.bgWhite('rawResponse'), JSON.stringify(rawResponse, null, 4));
4050
4303
  }
4051
- const complete = $getCurrentDate();
4052
4304
  if (!rawResponse.choices[0]) {
4053
4305
  throw new PipelineExecutionError(`No choises from ${this.title}`);
4054
4306
  }
@@ -4056,7 +4308,8 @@ class OpenAiCompatibleExecutionTools {
4056
4308
  throw new PipelineExecutionError(`More than one choise from ${this.title}`);
4057
4309
  }
4058
4310
  const resultContent = rawResponse.choices[0].text;
4059
- const usage = this.computeUsage(content || '', resultContent || '', rawResponse);
4311
+ const duration = uncertainNumber((new Date(turnComplete).getTime() - new Date(turnStart).getTime()) / 1000);
4312
+ const usage = this.computeUsage(content || '', resultContent || '', rawResponse, duration);
4060
4313
  return exportJson({
4061
4314
  name: 'promptResult',
4062
4315
  message: `Result of \`OpenAiCompatibleExecutionTools.callCompletionModel\``,
@@ -4066,7 +4319,7 @@ class OpenAiCompatibleExecutionTools {
4066
4319
  modelName: rawResponse.model || modelName,
4067
4320
  timing: {
4068
4321
  start,
4069
- complete,
4322
+ complete: turnComplete,
4070
4323
  },
4071
4324
  usage,
4072
4325
  rawPromptContent,
@@ -4160,6 +4413,7 @@ class OpenAiCompatibleExecutionTools {
4160
4413
  console.info(colors.bgWhite('rawRequest'), JSON.stringify(rawRequest, null, 4));
4161
4414
  }
4162
4415
  try {
4416
+ const turnStart = $getCurrentDate();
4163
4417
  const rawResponse = await this.limiter
4164
4418
  .schedule(() => this.makeRequestWithNetworkRetry(() => client.embeddings.create(rawRequest)))
4165
4419
  .catch((error) => {
@@ -4169,15 +4423,16 @@ class OpenAiCompatibleExecutionTools {
4169
4423
  }
4170
4424
  throw error;
4171
4425
  });
4426
+ const turnComplete = $getCurrentDate();
4172
4427
  if (this.options.isVerbose) {
4173
4428
  console.info(colors.bgWhite('rawResponse'), JSON.stringify(rawResponse, null, 4));
4174
4429
  }
4175
- const complete = $getCurrentDate();
4176
4430
  if (rawResponse.data.length !== 1) {
4177
4431
  throw new PipelineExecutionError(`Expected exactly 1 data item in response, got ${rawResponse.data.length}`);
4178
4432
  }
4179
4433
  const resultContent = rawResponse.data[0].embedding;
4180
- const usage = this.computeUsage(content || '', '', rawResponse);
4434
+ const duration = uncertainNumber((new Date(turnComplete).getTime() - new Date(turnStart).getTime()) / 1000);
4435
+ const usage = this.computeUsage(content || '', '', rawResponse, duration);
4181
4436
  return exportJson({
4182
4437
  name: 'promptResult',
4183
4438
  message: `Result of \`OpenAiCompatibleExecutionTools.callEmbeddingModel\``,
@@ -4187,7 +4442,7 @@ class OpenAiCompatibleExecutionTools {
4187
4442
  modelName: rawResponse.model || modelName,
4188
4443
  timing: {
4189
4444
  start,
4190
- complete,
4445
+ complete: turnComplete,
4191
4446
  },
4192
4447
  usage,
4193
4448
  rawPromptContent,
@@ -4297,6 +4552,7 @@ class OpenAiCompatibleExecutionTools {
4297
4552
  console.info(colors.bgWhite('rawRequest'), JSON.stringify(rawRequest, null, 4));
4298
4553
  }
4299
4554
  try {
4555
+ const turnStart = $getCurrentDate();
4300
4556
  const rawResponse = await this.limiter
4301
4557
  .schedule(() => this.makeRequestWithNetworkRetry(() => client.images.generate(rawRequest)))
4302
4558
  .catch((error) => {
@@ -4306,10 +4562,10 @@ class OpenAiCompatibleExecutionTools {
4306
4562
  }
4307
4563
  throw error;
4308
4564
  });
4565
+ const turnComplete = $getCurrentDate();
4309
4566
  if (this.options.isVerbose) {
4310
4567
  console.info(colors.bgWhite('rawResponse'), JSON.stringify(rawResponse, null, 4));
4311
4568
  }
4312
- const complete = $getCurrentDate();
4313
4569
  if (!rawResponse.data[0]) {
4314
4570
  throw new PipelineExecutionError(`No choises from ${this.title}`);
4315
4571
  }
@@ -4319,6 +4575,7 @@ class OpenAiCompatibleExecutionTools {
4319
4575
  const resultContent = rawResponse.data[0].url;
4320
4576
  const modelInfo = this.HARDCODED_MODELS.find((model) => model.modelName === modelName);
4321
4577
  const price = ((_b = modelInfo === null || modelInfo === void 0 ? void 0 : modelInfo.pricing) === null || _b === void 0 ? void 0 : _b.output) ? uncertainNumber(modelInfo.pricing.output) : uncertainNumber();
4578
+ const duration = uncertainNumber((new Date(turnComplete).getTime() - new Date(turnStart).getTime()) / 1000);
4322
4579
  return exportJson({
4323
4580
  name: 'promptResult',
4324
4581
  message: `Result of \`OpenAiCompatibleExecutionTools.callImageGenerationModel\``,
@@ -4328,10 +4585,11 @@ class OpenAiCompatibleExecutionTools {
4328
4585
  modelName: modelName,
4329
4586
  timing: {
4330
4587
  start,
4331
- complete,
4588
+ complete: turnComplete,
4332
4589
  },
4333
4590
  usage: {
4334
4591
  price,
4592
+ duration,
4335
4593
  input: {
4336
4594
  tokensCount: uncertainNumber(0),
4337
4595
  ...computeUsageCounts(rawPromptContent),
@@ -5426,6 +5684,48 @@ async function uploadFilesToOpenAi(client, files) {
5426
5684
  return fileIds;
5427
5685
  }
5428
5686
 
5687
+ /**
5688
+ * Creates one structured log entry for streamed tool-call updates.
5689
+ *
5690
+ * @private helper of `OpenAiAssistantExecutionTools`
5691
+ */
5692
+ function createToolCallLogEntry$1(options) {
5693
+ return {
5694
+ createdAt: $getCurrentDate(),
5695
+ kind: options.kind,
5696
+ level: options.level,
5697
+ title: options.title,
5698
+ message: options.message,
5699
+ payload: options.payload,
5700
+ };
5701
+ }
5702
+ /**
5703
+ * Appends one incremental progress update to the currently tracked tool-call snapshot.
5704
+ *
5705
+ * @private helper of `OpenAiAssistantExecutionTools`
5706
+ */
5707
+ function applyToolCallProgressUpdate$1(toolCall, update) {
5708
+ var _a;
5709
+ return {
5710
+ ...toolCall,
5711
+ state: (_a = update.state) !== null && _a !== void 0 ? _a : 'PARTIAL',
5712
+ logs: update.log ? [...(toolCall.logs || []), update.log] : toolCall.logs,
5713
+ };
5714
+ }
5715
+ /**
5716
+ * Resolves the final lifecycle state for one tool call after execution ends.
5717
+ *
5718
+ * @private helper of `OpenAiAssistantExecutionTools`
5719
+ */
5720
+ function resolveFinalToolCallState$1(options) {
5721
+ if (options.errors && options.errors.length > 0) {
5722
+ return 'ERROR';
5723
+ }
5724
+ if (options.currentState === 'ERROR') {
5725
+ return 'ERROR';
5726
+ }
5727
+ return 'COMPLETE';
5728
+ }
5429
5729
  /**
5430
5730
  * Execution Tools for calling OpenAI API Assistants
5431
5731
  *
@@ -5477,7 +5777,7 @@ class OpenAiAssistantExecutionTools extends OpenAiVectorStoreHandler {
5477
5777
  /**
5478
5778
  * Calls OpenAI API to use a chat model with streaming.
5479
5779
  */
5480
- async callChatModelStream(prompt, onProgress) {
5780
+ async callChatModelStream(prompt, onProgress, options) {
5481
5781
  var _a, _b, _c, _d, _e, _f;
5482
5782
  if (this.options.isVerbose) {
5483
5783
  console.info('💬 OpenAI callChatModel call', { prompt });
@@ -5602,6 +5902,17 @@ class OpenAiAssistantExecutionTools extends OpenAiVectorStoreHandler {
5602
5902
  result: '',
5603
5903
  rawToolCall: toolCall,
5604
5904
  createdAt: calledAt,
5905
+ state: 'PENDING',
5906
+ logs: [
5907
+ createToolCallLogEntry$1({
5908
+ kind: 'request',
5909
+ title: 'Request prepared',
5910
+ message: `Prepared ${functionName} request.`,
5911
+ payload: {
5912
+ arguments: toolCall.function.arguments,
5913
+ },
5914
+ }),
5915
+ ],
5605
5916
  },
5606
5917
  ],
5607
5918
  });
@@ -5619,19 +5930,67 @@ class OpenAiAssistantExecutionTools extends OpenAiVectorStoreHandler {
5619
5930
  ? executionTools.script
5620
5931
  : [executionTools.script];
5621
5932
  let functionResponse;
5933
+ let assistantVisibleFunctionResponse;
5934
+ let toolResult;
5622
5935
  let errors;
5936
+ let currentToolCallSnapshot = {
5937
+ name: functionName,
5938
+ arguments: toolCall.function.arguments,
5939
+ result: '',
5940
+ rawToolCall: toolCall,
5941
+ createdAt: calledAt,
5942
+ state: 'PENDING',
5943
+ logs: [
5944
+ createToolCallLogEntry$1({
5945
+ kind: 'request',
5946
+ title: 'Request prepared',
5947
+ message: `Prepared ${functionName} request.`,
5948
+ payload: {
5949
+ arguments: toolCall.function.arguments,
5950
+ },
5951
+ }),
5952
+ ],
5953
+ };
5623
5954
  try {
5624
5955
  const scriptTool = scriptTools[0]; // <- TODO: [🧠] Which script tool to use?
5625
- functionResponse = await scriptTool.execute({
5626
- scriptLanguage: 'javascript',
5627
- script: buildToolInvocationScript({
5628
- functionName,
5629
- functionArgsExpression: JSON.stringify(functionArgs),
5630
- }),
5631
- parameters: prompt.parameters,
5956
+ const progressListenerToken = registerToolCallProgressListener((update) => {
5957
+ currentToolCallSnapshot = applyToolCallProgressUpdate$1(currentToolCallSnapshot, update);
5958
+ onProgress({
5959
+ content: '',
5960
+ modelName: 'assistant',
5961
+ timing: { start, complete: $getCurrentDate() },
5962
+ usage: UNCERTAIN_USAGE,
5963
+ rawPromptContent,
5964
+ rawRequest: null,
5965
+ rawResponse: null,
5966
+ toolCalls: [currentToolCallSnapshot],
5967
+ });
5632
5968
  });
5969
+ try {
5970
+ functionResponse = await scriptTool.execute({
5971
+ scriptLanguage: 'javascript',
5972
+ script: buildToolInvocationScript({
5973
+ functionName,
5974
+ functionArgsExpression: JSON.stringify(functionArgs),
5975
+ }),
5976
+ parameters: {
5977
+ ...prompt.parameters,
5978
+ [TOOL_PROGRESS_TOKEN_PARAMETER]: progressListenerToken,
5979
+ },
5980
+ });
5981
+ }
5982
+ finally {
5983
+ unregisterToolCallProgressListener(progressListenerToken);
5984
+ }
5985
+ const toolExecutionEnvelope = parseToolExecutionEnvelope(functionResponse);
5986
+ assistantVisibleFunctionResponse =
5987
+ (toolExecutionEnvelope === null || toolExecutionEnvelope === void 0 ? void 0 : toolExecutionEnvelope.assistantMessage) || functionResponse;
5988
+ toolResult =
5989
+ toolExecutionEnvelope !== null && toolExecutionEnvelope !== undefined
5990
+ ? toolExecutionEnvelope.toolResult
5991
+ : functionResponse;
5633
5992
  if (this.options.isVerbose) {
5634
- console.info(`✅ Tool ${functionName} executed:`, functionResponse);
5993
+ console.info(`✅ Tool ${functionName} executed:`, assistantVisibleFunctionResponse);
5635
5994
  }
5636
5995
  }
5637
5996
  catch (error) {
@@ -5647,20 +6006,46 @@ class OpenAiAssistantExecutionTools extends OpenAiVectorStoreHandler {
5647
6006
  \`\`\`
5648
6007
 
5649
6008
  `);
6009
+ assistantVisibleFunctionResponse = functionResponse;
6010
+ toolResult = functionResponse;
5650
6011
  console.error(colors.bgRed(`❌ Error executing tool ${functionName}:`));
5651
6012
  console.error(error);
5652
6013
  }
5653
6014
  toolOutputs.push({
5654
6015
  tool_call_id: toolCall.id,
5655
- output: functionResponse,
6016
+ output: assistantVisibleFunctionResponse,
5656
6017
  });
5657
6018
  completedToolCalls.push({
5658
- name: functionName,
5659
- arguments: toolCall.function.arguments,
5660
- result: functionResponse,
6019
+ ...currentToolCallSnapshot,
6020
+ result: toolResult,
5661
6021
  rawToolCall: toolCall,
5662
6022
  createdAt: toolCall.id ? toolCallStartedAt.get(toolCall.id) || calledAt : calledAt,
5663
6023
  errors,
6024
+ state: resolveFinalToolCallState$1({
6025
+ currentState: currentToolCallSnapshot.state,
6026
+ errors,
6027
+ }),
6028
+ logs: [
6029
+ ...(currentToolCallSnapshot.logs || []),
6030
+ createToolCallLogEntry$1({
6031
+ kind: errors && errors.length > 0 ? 'error' : 'result',
6032
+ level: errors && errors.length > 0 ? 'error' : 'info',
6033
+ title: errors && errors.length > 0 ? 'Execution failed' : 'Execution finished',
6034
+ message: errors && errors.length > 0
6035
+ ? `${functionName} failed before returning a final result.`
6036
+ : `${functionName} returned a result.`,
6037
+ }),
6038
+ ],
6039
+ });
6040
+ onProgress({
6041
+ content: '',
6042
+ modelName: 'assistant',
6043
+ timing: { start, complete: $getCurrentDate() },
6044
+ usage: UNCERTAIN_USAGE,
6045
+ rawPromptContent,
6046
+ rawRequest: null,
6047
+ rawResponse: null,
6048
+ toolCalls: [completedToolCalls[completedToolCalls.length - 1]],
5664
6049
  });
5665
6050
  }
5666
6051
  }
@@ -5690,8 +6075,12 @@ class OpenAiAssistantExecutionTools extends OpenAiVectorStoreHandler {
5690
6075
  throw new PipelineExecutionError('No text content in assistant response');
5691
6076
  }
5692
6077
  complete = $getCurrentDate();
6078
+ const duration = uncertainNumber((new Date(complete).getTime() - new Date(start).getTime()) / 1000);
5693
6079
  const resultContent = textContent.text.value;
5694
- const usage = UNCERTAIN_USAGE;
6080
+ const usage = {
6081
+ ...UNCERTAIN_USAGE,
6082
+ duration,
6083
+ };
5695
6084
  // Progress callback with final result
5696
6085
  const finalChunk = {
5697
6086
  content: resultContent,
@@ -5815,7 +6204,11 @@ class OpenAiAssistantExecutionTools extends OpenAiVectorStoreHandler {
5815
6204
  }
5816
6205
  // eslint-disable-next-line prefer-const
5817
6206
  complete = $getCurrentDate();
5818
- const usage = UNCERTAIN_USAGE;
6207
+ const duration = uncertainNumber((new Date(complete).getTime() - new Date(start).getTime()) / 1000);
6208
+ const usage = {
6209
+ ...UNCERTAIN_USAGE,
6210
+ duration,
6211
+ };
5819
6212
  // <- TODO: [🥘] Compute real usage for assistant
5820
6213
  // ?> const usage = computeOpenAiUsage(content, resultContent || '', rawResponse);
5821
6214
  if (resultContent === null) {
@@ -6370,8 +6763,220 @@ const createOpenAiExecutionTools = Object.assign((options) => {
6370
6763
  * TODO: [🎶] Naming "constructor" vs "creator" vs "factory"
6371
6764
  */
6372
6765
 
6373
- const DEFAULT_AGENT_KIT_MODEL_NAME = 'gpt-5.2';
6766
+ /**
6767
+ * Fallback name used when attachment metadata does not provide any usable filename.
6768
+ *
6769
+ * @private function of normalizeChatAttachments
6770
+ */
6771
+ const DEFAULT_ATTACHMENT_NAME = 'attachment';
6772
+ /**
6773
+ * Default MIME type used when attachment metadata does not provide one.
6774
+ *
6775
+ * @private function of normalizeChatAttachments
6776
+ */
6777
+ const DEFAULT_ATTACHMENT_TYPE = 'application/octet-stream';
6778
+ /**
6779
+ * Normalizes attachment text fields to safe single-line values.
6780
+ *
6781
+ * @private function of normalizeChatAttachments
6782
+ */
6783
+ function normalizeAttachmentText(value) {
6784
+ if (typeof value !== 'string') {
6785
+ return null;
6786
+ }
6787
+ const normalized = value.replace(/\s+/g, ' ').trim();
6788
+ return normalized === '' ? null : normalized;
6789
+ }
6790
+ /**
6791
+ * Checks whether the attachment URL is an absolute HTTP(S) link.
6792
+ *
6793
+ * @private function of normalizeChatAttachments
6794
+ */
6795
+ function isSupportedAttachmentUrl(value) {
6796
+ try {
6797
+ const parsedUrl = new URL(value);
6798
+ return parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:';
6799
+ }
6800
+ catch (_a) {
6801
+ return false;
6802
+ }
6803
+ }
6804
+ /**
6805
+ * Tries to infer a readable attachment name from its URL pathname.
6806
+ *
6807
+ * @private function of normalizeChatAttachments
6808
+ */
6809
+ function deriveAttachmentNameFromUrl(url) {
6810
+ try {
6811
+ const parsedUrl = new URL(url);
6812
+ const pathnameSegments = parsedUrl.pathname.split('/').filter(Boolean);
6813
+ const encodedFileName = pathnameSegments[pathnameSegments.length - 1];
6814
+ if (!encodedFileName) {
6815
+ return DEFAULT_ATTACHMENT_NAME;
6816
+ }
6817
+ const decodedFileName = decodeURIComponent(encodedFileName).trim();
6818
+ return decodedFileName === '' ? DEFAULT_ATTACHMENT_NAME : decodedFileName;
6819
+ }
6820
+ catch (_a) {
6821
+ return DEFAULT_ATTACHMENT_NAME;
6822
+ }
6823
+ }
6824
+ /**
6825
+ * Converts unknown attachment payload into the normalized chat attachment shape.
6826
+ *
6827
+ * @private function of normalizeChatAttachments
6828
+ */
6829
+ function normalizeChatAttachment(rawAttachment) {
6830
+ if (!rawAttachment || typeof rawAttachment !== 'object' || Array.isArray(rawAttachment)) {
6831
+ return null;
6832
+ }
6833
+ const rawUrl = normalizeAttachmentText(rawAttachment.url);
6834
+ if (!rawUrl || !isSupportedAttachmentUrl(rawUrl)) {
6835
+ return null;
6836
+ }
6837
+ const rawName = normalizeAttachmentText(rawAttachment.name);
6838
+ const rawType = normalizeAttachmentText(rawAttachment.type);
6839
+ return {
6840
+ name: rawName || deriveAttachmentNameFromUrl(rawUrl),
6841
+ type: rawType || DEFAULT_ATTACHMENT_TYPE,
6842
+ url: rawUrl,
6843
+ };
6844
+ }
6845
+ /**
6846
+ * Normalizes a potentially invalid attachments payload from the client request.
6847
+ *
6848
+ * Invalid items are skipped and duplicate URLs are de-duplicated.
6849
+ *
6850
+ * @param {unknown} rawAttachments - The raw attachments to normalize.
6851
+ * @returns {Array<ChatAttachment>} The normalized attachments.
6852
+ * @public exported from `@promptbook/core`
6853
+ */
6854
+ function normalizeChatAttachments(rawAttachments) {
6855
+ if (!Array.isArray(rawAttachments)) {
6856
+ return [];
6857
+ }
6858
+ const normalizedAttachments = [];
6859
+ const seenUrls = new Set();
6860
+ for (const rawAttachment of rawAttachments) {
6861
+ const normalizedAttachment = normalizeChatAttachment(rawAttachment);
6862
+ if (!normalizedAttachment || seenUrls.has(normalizedAttachment.url)) {
6863
+ continue;
6864
+ }
6865
+ normalizedAttachments.push(normalizedAttachment);
6866
+ seenUrls.add(normalizedAttachment.url);
6867
+ }
6868
+ return normalizedAttachments;
6869
+ }
6870
+
6871
+ const DEFAULT_AGENT_KIT_MODEL_NAME = 'gpt-5-mini-2025-08-07';
6872
+ /**
6873
+ * Creates one structured log entry for streamed tool-call updates.
6874
+ *
6875
+ * @private helper of `OpenAiAgentKitExecutionTools`
6876
+ */
6877
+ function createToolCallLogEntry(options) {
6878
+ return {
6879
+ createdAt: $getCurrentDate(),
6880
+ kind: options.kind,
6881
+ level: options.level,
6882
+ title: options.title,
6883
+ message: options.message,
6884
+ payload: options.payload,
6885
+ };
6886
+ }
6887
+ /**
6888
+ * Appends one incremental progress update to the currently tracked tool-call snapshot.
6889
+ *
6890
+ * @private helper of `OpenAiAgentKitExecutionTools`
6891
+ */
6892
+ function applyToolCallProgressUpdate(toolCall, update) {
6893
+ var _a;
6894
+ return {
6895
+ ...toolCall,
6896
+ state: (_a = update.state) !== null && _a !== void 0 ? _a : 'PARTIAL',
6897
+ logs: update.log ? [...(toolCall.logs || []), update.log] : toolCall.logs,
6898
+ };
6899
+ }
6900
+ /**
6901
+ * Resolves the final lifecycle state for one AgentKit tool call after execution ends.
6902
+ *
6903
+ * @private helper of `OpenAiAgentKitExecutionTools`
6904
+ */
6905
+ function resolveFinalToolCallState(options) {
6906
+ if (options.errors && options.errors.length > 0) {
6907
+ return 'ERROR';
6908
+ }
6909
+ if (options.currentState === 'ERROR') {
6910
+ return 'ERROR';
6911
+ }
6912
+ return 'COMPLETE';
6913
+ }
6374
6914
  const DEFAULT_JSON_SCHEMA_NAME = 'StructuredOutput';
6915
+ /**
6916
+ * File extensions considered image inputs when MIME type is missing or generic.
6917
+ *
6918
+ * @private utility of Open AI
6919
+ */
6920
+ const IMAGE_ATTACHMENT_EXTENSIONS = new Set([
6921
+ 'png',
6922
+ 'jpg',
6923
+ 'jpeg',
6924
+ 'gif',
6925
+ 'webp',
6926
+ 'bmp',
6927
+ 'svg',
6928
+ 'heic',
6929
+ 'heif',
6930
+ 'avif',
6931
+ 'tif',
6932
+ 'tiff',
6933
+ ]);
6934
+ /**
6935
+ * Returns one lowercase extension extracted from a filename/pathname.
6936
+ *
6937
+ * @private utility of Open AI
6938
+ */
6939
+ function getLowercaseFilenameExtension(filename) {
6940
+ const normalizedFilename = filename.trim().toLowerCase();
6941
+ const queryStart = normalizedFilename.indexOf('?');
6942
+ const hashStart = normalizedFilename.indexOf('#');
6943
+ const suffixStart = queryStart === -1 && hashStart === -1
6944
+ ? normalizedFilename.length
6945
+ : Math.min(queryStart === -1 ? normalizedFilename.length : queryStart, hashStart === -1 ? normalizedFilename.length : hashStart);
6946
+ const pathname = normalizedFilename.slice(0, suffixStart);
6947
+ const lastDotIndex = pathname.lastIndexOf('.');
6948
+ if (lastDotIndex <= 0 || lastDotIndex === pathname.length - 1) {
6949
+ return null;
6950
+ }
6951
+ return pathname.slice(lastDotIndex + 1);
6952
+ }
6953
+ /**
6954
+ * Tries to extract one extension from URL pathname.
6955
+ *
6956
+ * @private utility of Open AI
6957
+ */
6958
+ function getUrlPathnameExtension(url) {
6959
+ try {
6960
+ const parsedUrl = new URL(url);
6961
+ return getLowercaseFilenameExtension(decodeURIComponent(parsedUrl.pathname));
6962
+ }
6963
+ catch (_a) {
6964
+ return null;
6965
+ }
6966
+ }
6967
+ /**
6968
+ * Checks whether one chat attachment can be sent as an image input.
6969
+ *
6970
+ * @private utility of Open AI
6971
+ */
6972
+ function isImageAttachment(attachment) {
6973
+ const normalizedType = attachment.type.trim().toLowerCase();
6974
+ if (normalizedType.startsWith('image/')) {
6975
+ return true;
6976
+ }
6977
+ const extension = getLowercaseFilenameExtension(attachment.name) || getUrlPathnameExtension(attachment.url);
6978
+ return extension ? IMAGE_ATTACHMENT_EXTENSIONS.has(extension) : false;
6979
+ }
6375
6980
  /*
6376
6981
  TODO: Use or remove
6377
6982
  const EMPTY_JSON_SCHEMA: JsonSchemaDefinition['schema'] = {
@@ -6381,13 +6986,71 @@ const EMPTY_JSON_SCHEMA: JsonSchemaDefinition['schema'] = {
6381
6986
  additionalProperties: true,
6382
6987
  };
6383
6988
  */
6989
+ /**
6990
+ * Determines whether a schema fragment includes meaningful constraints.
6991
+ */
6992
+ function hasJsonSchemaContent(schema) {
6993
+ if (!schema) {
6994
+ return false;
6995
+ }
6996
+ if (typeof schema.description === 'string' && schema.description.trim() !== '') {
6997
+ return true;
6998
+ }
6999
+ if (schema.additionalProperties !== undefined) {
7000
+ return true;
7001
+ }
7002
+ if (schema.properties && Object.keys(schema.properties).length > 0) {
7003
+ return true;
7004
+ }
7005
+ if (Array.isArray(schema.required) && schema.required.length > 0) {
7006
+ return true;
7007
+ }
7008
+ return false;
7009
+ }
7010
+ /**
7011
+ * Normalizes inline OpenAI JSON schema payloads to the AgentKit structure.
7012
+ */
7013
+ function normalizeJsonSchemaInput(jsonSchema) {
7014
+ if (!jsonSchema || typeof jsonSchema !== 'object') {
7015
+ return { schema: {}, hasSchema: false };
7016
+ }
7017
+ const explicitSchema = jsonSchema.schema;
7018
+ if (explicitSchema && typeof explicitSchema === 'object') {
7019
+ return {
7020
+ name: jsonSchema.name,
7021
+ strict: jsonSchema.strict,
7022
+ schema: explicitSchema,
7023
+ hasSchema: hasJsonSchemaContent(explicitSchema),
7024
+ };
7025
+ }
7026
+ const inlineSchema = {
7027
+ description: jsonSchema.description,
7028
+ additionalProperties: jsonSchema.additionalProperties,
7029
+ properties: jsonSchema.properties,
7030
+ required: jsonSchema.required,
7031
+ };
7032
+ const hasInlineSchema = hasJsonSchemaContent(inlineSchema) || (typeof jsonSchema.type === 'string' && jsonSchema.type === 'object');
7033
+ return {
7034
+ name: jsonSchema.name,
7035
+ strict: jsonSchema.strict,
7036
+ schema: hasInlineSchema ? inlineSchema : {},
7037
+ hasSchema: hasInlineSchema,
7038
+ };
7039
+ }
7040
+ /**
7041
+ * Builds an AgentKit-compatible JSON schema definition from the supplied payload.
7042
+ */
6384
7043
  function buildJsonSchemaDefinition(jsonSchema) {
6385
7044
  var _a, _b, _c;
6386
- const schema = (_a = jsonSchema === null || jsonSchema === void 0 ? void 0 : jsonSchema.schema) !== null && _a !== void 0 ? _a : {};
7045
+ const normalizedSchema = normalizeJsonSchemaInput(jsonSchema);
7046
+ const schema = (_a = normalizedSchema.schema) !== null && _a !== void 0 ? _a : {};
7047
+ const strict = normalizedSchema.strict === undefined || normalizedSchema.strict === null
7048
+ ? normalizedSchema.hasSchema
7049
+ : Boolean(normalizedSchema.strict);
6387
7050
  return {
6388
7051
  type: 'json_schema',
6389
- name: (_b = jsonSchema === null || jsonSchema === void 0 ? void 0 : jsonSchema.name) !== null && _b !== void 0 ? _b : DEFAULT_JSON_SCHEMA_NAME,
6390
- strict: Boolean(jsonSchema === null || jsonSchema === void 0 ? void 0 : jsonSchema.strict),
7052
+ name: (_b = normalizedSchema.name) !== null && _b !== void 0 ? _b : DEFAULT_JSON_SCHEMA_NAME,
7053
+ strict,
6391
7054
  schema: {
6392
7055
  type: 'object',
6393
7056
  properties: ((_c = schema.properties) !== null && _c !== void 0 ? _c : {}),
@@ -6445,6 +7108,8 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6445
7108
  }
6446
7109
  super(options);
6447
7110
  this.preparedAgentKitAgent = null;
7111
+ this.agentKitToolResultsByCallId = new Map();
7112
+ this.agentKitToolSnapshotsByCallId = new Map();
6448
7113
  this.agentKitModelName = (_a = options.agentKitModelName) !== null && _a !== void 0 ? _a : DEFAULT_AGENT_KIT_MODEL_NAME;
6449
7114
  }
6450
7115
  get title() {
@@ -6462,7 +7127,7 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6462
7127
  /**
6463
7128
  * Calls OpenAI AgentKit with a chat prompt (streaming).
6464
7129
  */
6465
- async callChatModelStream(prompt, onProgress) {
7130
+ async callChatModelStream(prompt, onProgress, options) {
6466
7131
  const { content, parameters, modelRequirements } = prompt;
6467
7132
  if (modelRequirements.modelVariant !== 'CHAT') {
6468
7133
  throw new PipelineExecutionError('Use callChatModel only for CHAT variant');
@@ -6489,6 +7154,7 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6489
7154
  rawPromptContent,
6490
7155
  onProgress,
6491
7156
  responseFormatOutputType,
7157
+ signal: options === null || options === void 0 ? void 0 : options.signal,
6492
7158
  });
6493
7159
  }
6494
7160
  /**
@@ -6602,12 +7268,13 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6602
7268
  : undefined,
6603
7269
  strict: false,
6604
7270
  execute: async (input, runContext, details) => {
6605
- var _a, _b, _c;
7271
+ var _a, _b, _c, _d;
6606
7272
  const scriptTool = scriptTools[0];
6607
7273
  const functionName = toolDefinition.name;
6608
7274
  const calledAt = $getCurrentDate();
6609
7275
  const callId = (_a = details === null || details === void 0 ? void 0 : details.toolCall) === null || _a === void 0 ? void 0 : _a.callId;
6610
7276
  const functionArgs = input !== null && input !== void 0 ? input : {};
7277
+ const executionContext = (_b = runContext === null || runContext === void 0 ? void 0 : runContext.context) !== null && _b !== void 0 ? _b : undefined;
6611
7278
  if (this.options.isVerbose) {
6612
7279
  console.info('[🤰]', 'Executing AgentKit tool', {
6613
7280
  functionName,
@@ -6616,18 +7283,86 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6616
7283
  });
6617
7284
  }
6618
7285
  try {
6619
- return await scriptTool.execute({
6620
- scriptLanguage: 'javascript',
6621
- script: buildToolInvocationScript({
6622
- functionName,
6623
- functionArgsExpression: JSON.stringify(functionArgs),
6624
- }),
6625
- parameters: (_c = (_b = runContext === null || runContext === void 0 ? void 0 : runContext.context) === null || _b === void 0 ? void 0 : _b.parameters) !== null && _c !== void 0 ? _c : {},
7286
+ let currentToolCallSnapshot = {
7287
+ name: functionName,
7288
+ arguments: functionArgs,
7289
+ result: '',
7290
+ rawToolCall: details === null || details === void 0 ? void 0 : details.toolCall,
7291
+ createdAt: calledAt,
7292
+ state: 'PENDING',
7293
+ logs: [
7294
+ createToolCallLogEntry({
7295
+ kind: 'request',
7296
+ title: 'Request prepared',
7297
+ message: `Prepared ${functionName} request.`,
7298
+ payload: {
7299
+ arguments: functionArgs,
7300
+ },
7301
+ }),
7302
+ ],
7303
+ };
7304
+ const progressListenerToken = registerToolCallProgressListener((update) => {
7305
+ currentToolCallSnapshot = applyToolCallProgressUpdate(currentToolCallSnapshot, update);
7306
+ if (callId) {
7307
+ this.agentKitToolSnapshotsByCallId.set(callId, currentToolCallSnapshot);
7308
+ }
7309
+ if (!(executionContext === null || executionContext === void 0 ? void 0 : executionContext.onToolProgress)) {
7310
+ return;
7311
+ }
7312
+ executionContext.onToolProgress({
7313
+ content: '',
7314
+ modelName: executionContext.modelName || this.agentKitModelName,
7315
+ timing: {
7316
+ start: executionContext.startedAt || calledAt,
7317
+ complete: $getCurrentDate(),
7318
+ },
7319
+ usage: UNCERTAIN_USAGE,
7320
+ rawPromptContent: (executionContext.rawPromptContent || ''),
7321
+ rawRequest: null,
7322
+ rawResponse: {},
7323
+ toolCalls: [currentToolCallSnapshot],
7324
+ });
6626
7325
  });
7326
+ let functionResponse;
7327
+ try {
7328
+ functionResponse = await scriptTool.execute({
7329
+ scriptLanguage: 'javascript',
7330
+ script: buildToolInvocationScript({
7331
+ functionName,
7332
+ functionArgsExpression: JSON.stringify(functionArgs),
7333
+ }),
7334
+ parameters: {
7335
+ ...((_c = executionContext === null || executionContext === void 0 ? void 0 : executionContext.parameters) !== null && _c !== void 0 ? _c : {}),
7336
+ [TOOL_PROGRESS_TOKEN_PARAMETER]: progressListenerToken,
7337
+ },
7338
+ });
7339
+ }
7340
+ finally {
7341
+ unregisterToolCallProgressListener(progressListenerToken);
7342
+ }
7343
+ return this.resolveAgentKitToolResponse(callId, functionResponse);
6627
7344
  }
6628
7345
  catch (error) {
6629
7346
  assertsError(error);
6630
7347
  const serializedError = serializeError(error);
7348
+ const failedToolCall = {
7349
+ name: functionName,
7350
+ arguments: functionArgs,
7351
+ result: '',
7352
+ rawToolCall: details === null || details === void 0 ? void 0 : details.toolCall,
7353
+ createdAt: calledAt,
7354
+ state: 'ERROR',
7355
+ errors: [serializedError],
7356
+ logs: [
7357
+ createToolCallLogEntry({
7358
+ kind: 'error',
7359
+ level: 'error',
7360
+ title: 'Execution failed',
7361
+ message: `${functionName} failed before returning a result.`,
7362
+ payload: serializedError,
7363
+ }),
7364
+ ],
7365
+ };
6631
7366
  const errorMessage = spaceTrim$2((block) => `
6632
7367
 
6633
7368
  The invoked tool \`${functionName}\` failed with error:
@@ -6642,6 +7377,22 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6642
7377
  callId,
6643
7378
  error: serializedError,
6644
7379
  });
7380
+ if (callId) {
7381
+ this.agentKitToolSnapshotsByCallId.set(callId, failedToolCall);
7382
+ }
7383
+ (_d = executionContext === null || executionContext === void 0 ? void 0 : executionContext.onToolProgress) === null || _d === void 0 ? void 0 : _d.call(executionContext, {
7384
+ content: '',
7385
+ modelName: executionContext.modelName || this.agentKitModelName,
7386
+ timing: {
7387
+ start: executionContext.startedAt || calledAt,
7388
+ complete: $getCurrentDate(),
7389
+ },
7390
+ usage: UNCERTAIN_USAGE,
7391
+ rawPromptContent: (executionContext.rawPromptContent || ''),
7392
+ rawRequest: null,
7393
+ rawResponse: {},
7394
+ toolCalls: [failedToolCall],
7395
+ });
6645
7396
  return errorMessage;
6646
7397
  }
6647
7398
  },
@@ -6664,7 +7415,7 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6664
7415
  * Runs a prepared AgentKit agent and streams results back to the caller.
6665
7416
  */
6666
7417
  async callChatModelStreamWithPreparedAgent(options) {
6667
- var _a, _b, _c, _d;
7418
+ var _a, _b, _c, _d, _e, _f;
6668
7419
  const { openAiAgentKitAgent, prompt, onProgress } = options;
6669
7420
  const rawPromptContent = (_a = options.rawPromptContent) !== null && _a !== void 0 ? _a : templateParameters(prompt.content, {
6670
7421
  ...prompt.parameters,
@@ -6679,6 +7430,8 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6679
7430
  let latestContent = '';
6680
7431
  const toolCalls = [];
6681
7432
  const toolCallIndexById = new Map();
7433
+ this.agentKitToolResultsByCallId.clear();
7434
+ this.agentKitToolSnapshotsByCallId.clear();
6682
7435
  const inputItems = await this.buildAgentKitInputItems(prompt, rawPromptContent);
6683
7436
  const rawRequest = {
6684
7437
  agentName: agentForRun.name,
@@ -6686,8 +7439,35 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6686
7439
  };
6687
7440
  const streamResult = await run(agentForRun, inputItems, {
6688
7441
  stream: true,
6689
- context: { parameters: prompt.parameters },
7442
+ context: {
7443
+ parameters: prompt.parameters,
7444
+ onToolProgress: onProgress,
7445
+ rawPromptContent,
7446
+ startedAt: start,
7447
+ modelName: this.agentKitModelName,
7448
+ },
7449
+ signal: options.signal,
6690
7450
  });
7451
+ /**
7452
+ * Emits one explicit terminal stream snapshot as soon as the visible model output stream ends.
7453
+ *
7454
+ * This intentionally happens before `streamResult.completed` resolves because the SDK can keep
7455
+ * post-stream bookkeeping alive after the last user-visible token has already been delivered.
7456
+ */
7457
+ const emitFinishedStreamSnapshot = () => {
7458
+ var _a;
7459
+ onProgress({
7460
+ content: ((_a = streamResult.finalOutput) !== null && _a !== void 0 ? _a : latestContent),
7461
+ modelName: this.agentKitModelName,
7462
+ timing: { start, complete: $getCurrentDate() },
7463
+ usage: UNCERTAIN_USAGE,
7464
+ rawPromptContent: rawPromptContent,
7465
+ rawRequest: null,
7466
+ rawResponse: { runResult: streamResult },
7467
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
7468
+ isFinished: true,
7469
+ });
7470
+ };
6691
7471
  for await (const event of streamResult) {
6692
7472
  if (event.type === 'raw_model_stream_event' && ((_b = event.data) === null || _b === void 0 ? void 0 : _b.type) === 'output_text_delta') {
6693
7473
  latestContent += event.data.delta;
@@ -6710,9 +7490,21 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6710
7490
  arguments: rawItem.arguments,
6711
7491
  rawToolCall: rawItem,
6712
7492
  createdAt: $getCurrentDate(),
7493
+ state: 'PENDING',
7494
+ logs: [
7495
+ createToolCallLogEntry({
7496
+ kind: 'request',
7497
+ title: 'Request prepared',
7498
+ message: `Prepared ${String(rawItem.name)} request.`,
7499
+ payload: {
7500
+ arguments: rawItem.arguments,
7501
+ },
7502
+ }),
7503
+ ],
6713
7504
  };
6714
7505
  toolCallIndexById.set(rawItem.callId, toolCalls.length);
6715
7506
  toolCalls.push(toolCall);
7507
+ this.agentKitToolSnapshotsByCallId.set(rawItem.callId, toolCall);
6716
7508
  onProgress({
6717
7509
  content: latestContent,
6718
7510
  modelName: this.agentKitModelName,
@@ -6726,15 +7518,34 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6726
7518
  }
6727
7519
  if (event.name === 'tool_output' && (rawItem === null || rawItem === void 0 ? void 0 : rawItem.type) === 'function_call_result') {
6728
7520
  const index = toolCallIndexById.get(rawItem.callId);
6729
- const result = this.formatAgentKitToolOutput(rawItem.output);
7521
+ const result = this.resolveAgentKitToolOutputResult(rawItem.callId, rawItem.output);
7522
+ const progressToolCall = rawItem.callId
7523
+ ? this.agentKitToolSnapshotsByCallId.get(rawItem.callId)
7524
+ : undefined;
6730
7525
  if (index !== undefined) {
6731
7526
  const existingToolCall = toolCalls[index];
6732
7527
  const completedToolCall = {
6733
7528
  ...existingToolCall,
7529
+ ...(progressToolCall || {}),
6734
7530
  result,
6735
7531
  rawToolCall: rawItem,
7532
+ state: resolveFinalToolCallState({
7533
+ currentState: (_d = progressToolCall === null || progressToolCall === void 0 ? void 0 : progressToolCall.state) !== null && _d !== void 0 ? _d : existingToolCall.state,
7534
+ errors: (_e = progressToolCall === null || progressToolCall === void 0 ? void 0 : progressToolCall.errors) !== null && _e !== void 0 ? _e : existingToolCall.errors,
7535
+ }),
7536
+ logs: [
7537
+ ...((progressToolCall === null || progressToolCall === void 0 ? void 0 : progressToolCall.logs) ||
7538
+ existingToolCall.logs ||
7539
+ []),
7540
+ createToolCallLogEntry({
7541
+ kind: 'result',
7542
+ title: 'Execution finished',
7543
+ message: `${existingToolCall.name} returned a result.`,
7544
+ }),
7545
+ ],
6736
7546
  };
6737
7547
  toolCalls[index] = completedToolCall;
7548
+ this.agentKitToolSnapshotsByCallId.delete(rawItem.callId);
6738
7549
  onProgress({
6739
7550
  content: latestContent,
6740
7551
  modelName: this.agentKitModelName,
@@ -6749,14 +7560,19 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6749
7560
  }
6750
7561
  }
6751
7562
  }
7563
+ emitFinishedStreamSnapshot();
6752
7564
  await streamResult.completed;
6753
7565
  const complete = $getCurrentDate();
6754
- const finalContent = ((_d = streamResult.finalOutput) !== null && _d !== void 0 ? _d : latestContent);
7566
+ const duration = uncertainNumber((new Date(complete).getTime() - new Date(start).getTime()) / 1000);
7567
+ const finalContent = ((_f = streamResult.finalOutput) !== null && _f !== void 0 ? _f : latestContent);
6755
7568
  const finalResult = {
6756
7569
  content: finalContent,
6757
7570
  modelName: this.agentKitModelName,
6758
7571
  timing: { start, complete },
6759
- usage: UNCERTAIN_USAGE,
7572
+ usage: {
7573
+ ...UNCERTAIN_USAGE,
7574
+ duration,
7575
+ },
6760
7576
  rawPromptContent: rawPromptContent,
6761
7577
  rawRequest,
6762
7578
  rawResponse: { runResult: streamResult },
@@ -6783,9 +7599,13 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6783
7599
  });
6784
7600
  }
6785
7601
  else {
7602
+ const userThreadContent = await this.buildAgentKitUserContentWithAttachments({
7603
+ textContent: typeof content === 'string' ? content : String(content !== null && content !== void 0 ? content : ''),
7604
+ rawAttachments: message.attachments,
7605
+ });
6786
7606
  inputItems.push({
6787
7607
  role: 'user',
6788
- content,
7608
+ content: userThreadContent,
6789
7609
  });
6790
7610
  }
6791
7611
  }
@@ -6801,18 +7621,64 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6801
7621
  * Builds the user message content for AgentKit runs, including file inputs when provided.
6802
7622
  */
6803
7623
  async buildAgentKitUserContent(prompt, rawPromptContent) {
6804
- if ('files' in prompt && Array.isArray(prompt.files) && prompt.files.length > 0) {
6805
- const fileItems = await Promise.all(prompt.files.map(async (file) => {
6806
- const arrayBuffer = await file.arrayBuffer();
6807
- const base64 = Buffer.from(arrayBuffer).toString('base64');
6808
- return {
6809
- type: 'input_image',
6810
- image: `data:${file.type};base64,${base64}`,
6811
- };
6812
- }));
6813
- return [{ type: 'input_text', text: rawPromptContent }, ...fileItems];
7624
+ const files = 'files' in prompt && Array.isArray(prompt.files) ? prompt.files : undefined;
7625
+ const rawAttachments = 'attachments' in prompt ? prompt.attachments : undefined;
7626
+ return this.buildAgentKitUserContentWithAttachments({
7627
+ textContent: rawPromptContent,
7628
+ rawAttachments,
7629
+ files,
7630
+ });
7631
+ }
7632
+ /**
7633
+ * Converts uploaded `File` objects into AgentKit `input_image` entries.
7634
+ */
7635
+ async createAgentKitInputImageItemsFromFiles(files) {
7636
+ return Promise.all(files.map(async (file) => {
7637
+ const arrayBuffer = await file.arrayBuffer();
7638
+ const base64 = Buffer.from(arrayBuffer).toString('base64');
7639
+ return {
7640
+ type: 'input_image',
7641
+ image: `data:${file.type};base64,${base64}`,
7642
+ };
7643
+ }));
7644
+ }
7645
+ /**
7646
+ * Converts image chat attachments into AgentKit `input_image` entries.
7647
+ *
7648
+ * Note: This keeps images in the same completion request as multimodal input.
7649
+ */
7650
+ createAgentKitInputImageItemsFromAttachments(rawAttachments) {
7651
+ return normalizeChatAttachments(rawAttachments)
7652
+ .filter((attachment) => isImageAttachment(attachment))
7653
+ .map((attachment) => ({
7654
+ type: 'input_image',
7655
+ image: attachment.url,
7656
+ }));
7657
+ }
7658
+ /**
7659
+ * Builds AgentKit user content that can include text, uploaded files, and image attachments.
7660
+ */
7661
+ async buildAgentKitUserContentWithAttachments(options) {
7662
+ var _a;
7663
+ const { textContent, rawAttachments, files } = options;
7664
+ const contentItems = [];
7665
+ if (textContent.trim() !== '') {
7666
+ contentItems.push({
7667
+ type: 'input_text',
7668
+ text: textContent,
7669
+ });
6814
7670
  }
6815
- return rawPromptContent;
7671
+ contentItems.push(...this.createAgentKitInputImageItemsFromAttachments(rawAttachments));
7672
+ if (files && files.length > 0) {
7673
+ contentItems.push(...(await this.createAgentKitInputImageItemsFromFiles(files)));
7674
+ }
7675
+ if (contentItems.length === 0) {
7676
+ return textContent;
7677
+ }
7678
+ if (contentItems.length === 1 && ((_a = contentItems[0]) === null || _a === void 0 ? void 0 : _a.type) === 'input_text') {
7679
+ return textContent;
7680
+ }
7681
+ return contentItems;
6816
7682
  }
6817
7683
  /**
6818
7684
  * Normalizes AgentKit tool outputs into a string for Promptbook tool call results.
@@ -6829,6 +7695,32 @@ class OpenAiAgentKitExecutionTools extends OpenAiVectorStoreHandler {
6829
7695
  }
6830
7696
  return JSON.stringify(output !== null && output !== void 0 ? output : null);
6831
7697
  }
7698
+ /**
7699
+ * Resolves the assistant-visible AgentKit tool response while preserving structured tool result data.
7700
+ */
7701
+ resolveAgentKitToolResponse(callId, functionResponse) {
7702
+ const toolExecutionEnvelope = parseToolExecutionEnvelope(functionResponse);
7703
+ if (!toolExecutionEnvelope) {
7704
+ return functionResponse;
7705
+ }
7706
+ if (callId) {
7707
+ this.agentKitToolResultsByCallId.set(callId, toolExecutionEnvelope.toolResult);
7708
+ }
7709
+ return toolExecutionEnvelope.assistantMessage;
7710
+ }
7711
+ /**
7712
+ * Resolves the stored Promptbook tool result for one AgentKit tool call.
7713
+ */
7714
+ resolveAgentKitToolOutputResult(callId, output) {
7715
+ if (callId) {
7716
+ const storedToolResult = this.agentKitToolResultsByCallId.get(callId);
7717
+ if (storedToolResult !== undefined) {
7718
+ this.agentKitToolResultsByCallId.delete(callId);
7719
+ return storedToolResult;
7720
+ }
7721
+ }
7722
+ return this.formatAgentKitToolOutput(output);
7723
+ }
6832
7724
  /**
6833
7725
  * Returns AgentKit-specific options.
6834
7726
  */