@inkeep/agents-api 0.0.0-dev-20260121145510

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 (352) hide show
  1. package/LICENSE.md +56 -0
  2. package/SUPPLEMENTAL_TERMS.md +40 -0
  3. package/dist/.well-known/workflow/v1/flow.cjs +46383 -0
  4. package/dist/.well-known/workflow/v1/flow.cjs.debug.json +6 -0
  5. package/dist/.well-known/workflow/v1/manifest.debug.json +55 -0
  6. package/dist/.well-known/workflow/v1/step.cjs +218683 -0
  7. package/dist/.well-known/workflow/v1/step.cjs.debug.json +6 -0
  8. package/dist/.well-known/workflow/v1/webhook.mjs +29 -0
  9. package/dist/createApp.d.ts +10 -0
  10. package/dist/createApp.js +170 -0
  11. package/dist/data/db/index.d.ts +4 -0
  12. package/dist/data/db/index.js +5 -0
  13. package/dist/data/db/manageDbClient.d.ts +6 -0
  14. package/dist/data/db/manageDbClient.js +9 -0
  15. package/dist/data/db/manageDbPool.d.ts +6 -0
  16. package/dist/data/db/manageDbPool.js +9 -0
  17. package/dist/data/db/runDbClient.d.ts +6 -0
  18. package/dist/data/db/runDbClient.js +9 -0
  19. package/dist/domains/evals/index.d.ts +13 -0
  20. package/dist/domains/evals/index.js +13 -0
  21. package/dist/domains/evals/routes/datasetTriggers.d.ts +7 -0
  22. package/dist/domains/evals/routes/datasetTriggers.js +65 -0
  23. package/dist/domains/evals/routes/evaluationTriggers.d.ts +11 -0
  24. package/dist/domains/evals/routes/evaluationTriggers.js +311 -0
  25. package/dist/domains/evals/routes/index.d.ts +7 -0
  26. package/dist/domains/evals/routes/index.js +12 -0
  27. package/dist/domains/evals/scripts/build-workflow.d.ts +1 -0
  28. package/dist/domains/evals/scripts/build-workflow.js +31 -0
  29. package/dist/domains/evals/services/EvaluationService.d.ts +96 -0
  30. package/dist/domains/evals/services/EvaluationService.js +863 -0
  31. package/dist/domains/evals/services/conversationEvaluation.d.ts +15 -0
  32. package/dist/domains/evals/services/conversationEvaluation.js +102 -0
  33. package/dist/domains/evals/services/datasetRun.d.ts +16 -0
  34. package/dist/domains/evals/services/datasetRun.js +43 -0
  35. package/dist/domains/evals/services/evaluationJob.d.ts +17 -0
  36. package/dist/domains/evals/services/evaluationJob.js +65 -0
  37. package/dist/domains/evals/services/startEvaluation.d.ts +19 -0
  38. package/dist/domains/evals/services/startEvaluation.js +18 -0
  39. package/dist/domains/evals/workflow/functions/evaluateConversation.d.ts +31 -0
  40. package/dist/domains/evals/workflow/functions/evaluateConversation.js +135 -0
  41. package/dist/domains/evals/workflow/functions/runDatasetItem.d.ts +39 -0
  42. package/dist/domains/evals/workflow/functions/runDatasetItem.js +205 -0
  43. package/dist/domains/evals/workflow/index.d.ts +4 -0
  44. package/dist/domains/evals/workflow/index.js +5 -0
  45. package/dist/domains/evals/workflow/routes.d.ts +7 -0
  46. package/dist/domains/evals/workflow/routes.js +106 -0
  47. package/dist/domains/evals/workflow/world.d.ts +4 -0
  48. package/dist/domains/evals/workflow/world.js +36 -0
  49. package/dist/domains/index.d.ts +4 -0
  50. package/dist/domains/index.js +5 -0
  51. package/dist/domains/manage/index.d.ts +12 -0
  52. package/dist/domains/manage/index.js +31 -0
  53. package/dist/domains/manage/routes/agent.d.ts +9 -0
  54. package/dist/domains/manage/routes/agent.js +266 -0
  55. package/dist/domains/manage/routes/agentFull.d.ts +9 -0
  56. package/dist/domains/manage/routes/agentFull.js +207 -0
  57. package/dist/domains/manage/routes/agentToolRelations.d.ts +9 -0
  58. package/dist/domains/manage/routes/agentToolRelations.js +289 -0
  59. package/dist/domains/manage/routes/apiKeys.d.ts +9 -0
  60. package/dist/domains/manage/routes/apiKeys.js +217 -0
  61. package/dist/domains/manage/routes/artifactComponents.d.ts +9 -0
  62. package/dist/domains/manage/routes/artifactComponents.js +210 -0
  63. package/dist/domains/manage/routes/branches.d.ts +9 -0
  64. package/dist/domains/manage/routes/branches.js +182 -0
  65. package/dist/domains/manage/routes/cliAuth.d.ts +9 -0
  66. package/dist/domains/manage/routes/cliAuth.js +60 -0
  67. package/dist/domains/manage/routes/contextConfigs.d.ts +9 -0
  68. package/dist/domains/manage/routes/contextConfigs.js +189 -0
  69. package/dist/domains/manage/routes/conversations.d.ts +7 -0
  70. package/dist/domains/manage/routes/conversations.js +59 -0
  71. package/dist/domains/manage/routes/credentialStores.d.ts +9 -0
  72. package/dist/domains/manage/routes/credentialStores.js +86 -0
  73. package/dist/domains/manage/routes/credentials.d.ts +9 -0
  74. package/dist/domains/manage/routes/credentials.js +207 -0
  75. package/dist/domains/manage/routes/dataComponents.d.ts +9 -0
  76. package/dist/domains/manage/routes/dataComponents.js +192 -0
  77. package/dist/domains/manage/routes/evals/datasetItems.d.ts +9 -0
  78. package/dist/domains/manage/routes/evals/datasetItems.js +310 -0
  79. package/dist/domains/manage/routes/evals/datasetRunConfigs.d.ts +9 -0
  80. package/dist/domains/manage/routes/evals/datasetRunConfigs.js +402 -0
  81. package/dist/domains/manage/routes/evals/datasetRuns.d.ts +9 -0
  82. package/dist/domains/manage/routes/evals/datasetRuns.js +256 -0
  83. package/dist/domains/manage/routes/evals/datasets.d.ts +9 -0
  84. package/dist/domains/manage/routes/evals/datasets.js +238 -0
  85. package/dist/domains/manage/routes/evals/evaluationJobConfigEvaluatorRelations.d.ts +9 -0
  86. package/dist/domains/manage/routes/evals/evaluationJobConfigEvaluatorRelations.js +146 -0
  87. package/dist/domains/manage/routes/evals/evaluationJobConfigs.d.ts +9 -0
  88. package/dist/domains/manage/routes/evals/evaluationJobConfigs.js +364 -0
  89. package/dist/domains/manage/routes/evals/evaluationResults.d.ts +7 -0
  90. package/dist/domains/manage/routes/evals/evaluationResults.js +192 -0
  91. package/dist/domains/manage/routes/evals/evaluationRunConfigs.d.ts +9 -0
  92. package/dist/domains/manage/routes/evals/evaluationRunConfigs.js +403 -0
  93. package/dist/domains/manage/routes/evals/evaluationSuiteConfigEvaluatorRelations.d.ts +9 -0
  94. package/dist/domains/manage/routes/evals/evaluationSuiteConfigEvaluatorRelations.js +146 -0
  95. package/dist/domains/manage/routes/evals/evaluationSuiteConfigs.d.ts +9 -0
  96. package/dist/domains/manage/routes/evals/evaluationSuiteConfigs.js +246 -0
  97. package/dist/domains/manage/routes/evals/evaluators.d.ts +9 -0
  98. package/dist/domains/manage/routes/evals/evaluators.js +281 -0
  99. package/dist/domains/manage/routes/evals/index.d.ts +9 -0
  100. package/dist/domains/manage/routes/evals/index.js +26 -0
  101. package/dist/domains/manage/routes/externalAgents.d.ts +9 -0
  102. package/dist/domains/manage/routes/externalAgents.js +199 -0
  103. package/dist/domains/manage/routes/functionTools.d.ts +9 -0
  104. package/dist/domains/manage/routes/functionTools.js +256 -0
  105. package/dist/domains/manage/routes/functions.d.ts +9 -0
  106. package/dist/domains/manage/routes/functions.js +285 -0
  107. package/dist/domains/manage/routes/index.d.ts +7 -0
  108. package/dist/domains/manage/routes/index.js +68 -0
  109. package/dist/domains/manage/routes/invitations.d.ts +9 -0
  110. package/dist/domains/manage/routes/invitations.js +41 -0
  111. package/dist/domains/manage/routes/mcp.d.ts +7 -0
  112. package/dist/domains/manage/routes/mcp.js +45 -0
  113. package/dist/domains/manage/routes/mcpCatalog.d.ts +9 -0
  114. package/dist/domains/manage/routes/mcpCatalog.js +454 -0
  115. package/dist/domains/manage/routes/oauth.d.ts +10 -0
  116. package/dist/domains/manage/routes/oauth.js +327 -0
  117. package/dist/domains/manage/routes/playgroundToken.d.ts +9 -0
  118. package/dist/domains/manage/routes/playgroundToken.js +127 -0
  119. package/dist/domains/manage/routes/projectFull.d.ts +9 -0
  120. package/dist/domains/manage/routes/projectFull.js +304 -0
  121. package/dist/domains/manage/routes/projectMembers.d.ts +9 -0
  122. package/dist/domains/manage/routes/projectMembers.js +201 -0
  123. package/dist/domains/manage/routes/projectPermissions.d.ts +9 -0
  124. package/dist/domains/manage/routes/projectPermissions.js +68 -0
  125. package/dist/domains/manage/routes/projects.d.ts +9 -0
  126. package/dist/domains/manage/routes/projects.js +279 -0
  127. package/dist/domains/manage/routes/ref.d.ts +9 -0
  128. package/dist/domains/manage/routes/ref.js +33 -0
  129. package/dist/domains/manage/routes/signoz.d.ts +10 -0
  130. package/dist/domains/manage/routes/signoz.js +159 -0
  131. package/dist/domains/manage/routes/subAgentArtifactComponents.d.ts +9 -0
  132. package/dist/domains/manage/routes/subAgentArtifactComponents.js +202 -0
  133. package/dist/domains/manage/routes/subAgentDataComponents.d.ts +9 -0
  134. package/dist/domains/manage/routes/subAgentDataComponents.js +201 -0
  135. package/dist/domains/manage/routes/subAgentExternalAgentRelations.d.ts +9 -0
  136. package/dist/domains/manage/routes/subAgentExternalAgentRelations.js +216 -0
  137. package/dist/domains/manage/routes/subAgentFunctionTools.d.ts +9 -0
  138. package/dist/domains/manage/routes/subAgentFunctionTools.js +205 -0
  139. package/dist/domains/manage/routes/subAgentRelations.d.ts +9 -0
  140. package/dist/domains/manage/routes/subAgentRelations.js +263 -0
  141. package/dist/domains/manage/routes/subAgentTeamAgentRelations.d.ts +9 -0
  142. package/dist/domains/manage/routes/subAgentTeamAgentRelations.js +216 -0
  143. package/dist/domains/manage/routes/subAgentToolRelations.d.ts +9 -0
  144. package/dist/domains/manage/routes/subAgentToolRelations.js +289 -0
  145. package/dist/domains/manage/routes/subAgents.d.ts +9 -0
  146. package/dist/domains/manage/routes/subAgents.js +220 -0
  147. package/dist/domains/manage/routes/thirdPartyMCPServers.d.ts +9 -0
  148. package/dist/domains/manage/routes/thirdPartyMCPServers.js +72 -0
  149. package/dist/domains/manage/routes/tools.d.ts +9 -0
  150. package/dist/domains/manage/routes/tools.js +261 -0
  151. package/dist/domains/manage/routes/triggers.d.ts +9 -0
  152. package/dist/domains/manage/routes/triggers.js +455 -0
  153. package/dist/domains/manage/routes/userOrganizations.d.ts +9 -0
  154. package/dist/domains/manage/routes/userOrganizations.js +58 -0
  155. package/dist/domains/run/a2a/client.d.ts +186 -0
  156. package/dist/domains/run/a2a/client.js +524 -0
  157. package/dist/domains/run/a2a/handlers.d.ts +7 -0
  158. package/dist/domains/run/a2a/handlers.js +574 -0
  159. package/dist/domains/run/a2a/transfer.d.ts +27 -0
  160. package/dist/domains/run/a2a/transfer.js +50 -0
  161. package/dist/domains/run/a2a/types.d.ts +75 -0
  162. package/dist/domains/run/a2a/types.js +22 -0
  163. package/dist/domains/run/agents/Agent.d.ts +273 -0
  164. package/dist/domains/run/agents/Agent.js +2104 -0
  165. package/dist/domains/run/agents/ModelFactory.d.ts +63 -0
  166. package/dist/domains/run/agents/ModelFactory.js +194 -0
  167. package/dist/domains/run/agents/SystemPromptBuilder.d.ts +21 -0
  168. package/dist/domains/run/agents/SystemPromptBuilder.js +48 -0
  169. package/dist/domains/run/agents/ToolSessionManager.d.ts +63 -0
  170. package/dist/domains/run/agents/ToolSessionManager.js +146 -0
  171. package/dist/domains/run/agents/generateTaskHandler.d.ts +44 -0
  172. package/dist/domains/run/agents/generateTaskHandler.js +396 -0
  173. package/dist/domains/run/agents/relationTools.d.ts +64 -0
  174. package/dist/domains/run/agents/relationTools.js +365 -0
  175. package/dist/domains/run/agents/types.d.ts +31 -0
  176. package/dist/domains/run/agents/types.js +1 -0
  177. package/dist/domains/run/agents/versions/v1/Phase1Config.d.ts +29 -0
  178. package/dist/domains/run/agents/versions/v1/Phase1Config.js +458 -0
  179. package/dist/domains/run/agents/versions/v1/Phase2Config.d.ts +33 -0
  180. package/dist/domains/run/agents/versions/v1/Phase2Config.js +341 -0
  181. package/dist/domains/run/constants/execution-limits/defaults.d.ts +51 -0
  182. package/dist/domains/run/constants/execution-limits/defaults.js +52 -0
  183. package/dist/domains/run/constants/execution-limits/index.d.ts +6 -0
  184. package/dist/domains/run/constants/execution-limits/index.js +21 -0
  185. package/dist/domains/run/context/ContextFetcher.d.ts +68 -0
  186. package/dist/domains/run/context/ContextFetcher.js +276 -0
  187. package/dist/domains/run/context/ContextResolver.d.ts +56 -0
  188. package/dist/domains/run/context/ContextResolver.js +273 -0
  189. package/dist/domains/run/context/context.d.ts +19 -0
  190. package/dist/domains/run/context/context.js +108 -0
  191. package/dist/domains/run/context/contextCache.d.ts +56 -0
  192. package/dist/domains/run/context/contextCache.js +174 -0
  193. package/dist/domains/run/context/index.d.ts +6 -0
  194. package/dist/domains/run/context/index.js +7 -0
  195. package/dist/domains/run/context/validation.d.ts +39 -0
  196. package/dist/domains/run/context/validation.js +255 -0
  197. package/dist/domains/run/data/agent.d.ts +7 -0
  198. package/dist/domains/run/data/agent.js +67 -0
  199. package/dist/domains/run/data/agents.d.ts +34 -0
  200. package/dist/domains/run/data/agents.js +131 -0
  201. package/dist/domains/run/data/conversations.d.ts +129 -0
  202. package/dist/domains/run/data/conversations.js +517 -0
  203. package/dist/domains/run/handlers/executionHandler.d.ts +44 -0
  204. package/dist/domains/run/handlers/executionHandler.js +485 -0
  205. package/dist/domains/run/index.d.ts +13 -0
  206. package/dist/domains/run/index.js +21 -0
  207. package/dist/domains/run/routes/agents.d.ts +13 -0
  208. package/dist/domains/run/routes/agents.js +141 -0
  209. package/dist/domains/run/routes/chat.d.ts +14 -0
  210. package/dist/domains/run/routes/chat.js +300 -0
  211. package/dist/domains/run/routes/chatDataStream.d.ts +14 -0
  212. package/dist/domains/run/routes/chatDataStream.js +381 -0
  213. package/dist/domains/run/routes/mcp.d.ts +14 -0
  214. package/dist/domains/run/routes/mcp.js +483 -0
  215. package/dist/domains/run/routes/webhooks.d.ts +15 -0
  216. package/dist/domains/run/routes/webhooks.js +416 -0
  217. package/dist/domains/run/services/AgentSession.d.ts +354 -0
  218. package/dist/domains/run/services/AgentSession.js +1203 -0
  219. package/dist/domains/run/services/ArtifactParser.d.ts +105 -0
  220. package/dist/domains/run/services/ArtifactParser.js +338 -0
  221. package/dist/domains/run/services/ArtifactService.d.ts +122 -0
  222. package/dist/domains/run/services/ArtifactService.js +629 -0
  223. package/dist/domains/run/services/BaseCompressor.d.ts +183 -0
  224. package/dist/domains/run/services/BaseCompressor.js +500 -0
  225. package/dist/domains/run/services/ConversationCompressor.d.ts +32 -0
  226. package/dist/domains/run/services/ConversationCompressor.js +91 -0
  227. package/dist/domains/run/services/IncrementalStreamParser.d.ts +98 -0
  228. package/dist/domains/run/services/IncrementalStreamParser.js +327 -0
  229. package/dist/domains/run/services/MidGenerationCompressor.d.ts +63 -0
  230. package/dist/domains/run/services/MidGenerationCompressor.js +104 -0
  231. package/dist/domains/run/services/PendingToolApprovalManager.d.ts +62 -0
  232. package/dist/domains/run/services/PendingToolApprovalManager.js +133 -0
  233. package/dist/domains/run/services/ResponseFormatter.d.ts +39 -0
  234. package/dist/domains/run/services/ResponseFormatter.js +152 -0
  235. package/dist/domains/run/services/evaluationRunConfigMatcher.d.ts +4 -0
  236. package/dist/domains/run/services/evaluationRunConfigMatcher.js +7 -0
  237. package/dist/domains/run/tools/NativeSandboxExecutor.d.ts +38 -0
  238. package/dist/domains/run/tools/NativeSandboxExecutor.js +432 -0
  239. package/dist/domains/run/tools/SandboxExecutorFactory.d.ts +36 -0
  240. package/dist/domains/run/tools/SandboxExecutorFactory.js +80 -0
  241. package/dist/domains/run/tools/VercelSandboxExecutor.d.ts +71 -0
  242. package/dist/domains/run/tools/VercelSandboxExecutor.js +340 -0
  243. package/dist/domains/run/tools/distill-conversation-history-tool.d.ts +62 -0
  244. package/dist/domains/run/tools/distill-conversation-history-tool.js +206 -0
  245. package/dist/domains/run/tools/distill-conversation-tool.d.ts +41 -0
  246. package/dist/domains/run/tools/distill-conversation-tool.js +141 -0
  247. package/dist/domains/run/tools/sandbox-utils.d.ts +18 -0
  248. package/dist/domains/run/tools/sandbox-utils.js +53 -0
  249. package/dist/domains/run/types/chat.d.ts +27 -0
  250. package/dist/domains/run/types/chat.js +1 -0
  251. package/dist/domains/run/types/executionContext.d.ts +40 -0
  252. package/dist/domains/run/types/executionContext.js +28 -0
  253. package/dist/domains/run/types/xml.d.ts +5 -0
  254. package/dist/domains/run/utils/SchemaProcessor.d.ts +52 -0
  255. package/dist/domains/run/utils/SchemaProcessor.js +182 -0
  256. package/dist/domains/run/utils/agent-operations.d.ts +62 -0
  257. package/dist/domains/run/utils/agent-operations.js +53 -0
  258. package/dist/domains/run/utils/artifact-component-schema.d.ts +42 -0
  259. package/dist/domains/run/utils/artifact-component-schema.js +186 -0
  260. package/dist/domains/run/utils/cleanup.d.ts +21 -0
  261. package/dist/domains/run/utils/cleanup.js +59 -0
  262. package/dist/domains/run/utils/data-component-schema.d.ts +2 -0
  263. package/dist/domains/run/utils/data-component-schema.js +3 -0
  264. package/dist/domains/run/utils/default-status-schemas.d.ts +20 -0
  265. package/dist/domains/run/utils/default-status-schemas.js +24 -0
  266. package/dist/domains/run/utils/json-postprocessor.d.ts +13 -0
  267. package/dist/domains/run/utils/json-postprocessor.js +19 -0
  268. package/dist/domains/run/utils/model-context-utils.d.ts +39 -0
  269. package/dist/domains/run/utils/model-context-utils.js +181 -0
  270. package/dist/domains/run/utils/model-resolver.d.ts +6 -0
  271. package/dist/domains/run/utils/model-resolver.js +24 -0
  272. package/dist/domains/run/utils/project.d.ts +207 -0
  273. package/dist/domains/run/utils/project.js +315 -0
  274. package/dist/domains/run/utils/schema-validation.d.ts +44 -0
  275. package/dist/domains/run/utils/schema-validation.js +97 -0
  276. package/dist/domains/run/utils/stream-helpers.d.ts +193 -0
  277. package/dist/domains/run/utils/stream-helpers.js +510 -0
  278. package/dist/domains/run/utils/stream-registry.d.ts +22 -0
  279. package/dist/domains/run/utils/stream-registry.js +33 -0
  280. package/dist/domains/run/utils/token-estimator.d.ts +23 -0
  281. package/dist/domains/run/utils/token-estimator.js +17 -0
  282. package/dist/domains/run/utils/tracer.d.ts +7 -0
  283. package/dist/domains/run/utils/tracer.js +7 -0
  284. package/dist/env.d.ts +89 -0
  285. package/dist/env.js +69 -0
  286. package/dist/factory.d.ts +1535 -0
  287. package/dist/factory.js +42 -0
  288. package/dist/index.d.ts +1530 -0
  289. package/dist/index.js +59 -0
  290. package/dist/initialization.d.ts +6 -0
  291. package/dist/initialization.js +65 -0
  292. package/dist/instrumentation.d.ts +17 -0
  293. package/dist/instrumentation.js +68 -0
  294. package/dist/logger.d.ts +2 -0
  295. package/dist/logger.js +3 -0
  296. package/dist/middleware/branchScopedDb.d.ts +31 -0
  297. package/dist/middleware/branchScopedDb.js +137 -0
  298. package/dist/middleware/cors.d.ts +36 -0
  299. package/dist/middleware/cors.js +131 -0
  300. package/dist/middleware/errorHandler.d.ts +12 -0
  301. package/dist/middleware/errorHandler.js +88 -0
  302. package/dist/middleware/evalsAuth.d.ts +16 -0
  303. package/dist/middleware/evalsAuth.js +52 -0
  304. package/dist/middleware/index.d.ts +8 -0
  305. package/dist/middleware/index.js +9 -0
  306. package/dist/middleware/manageAuth.d.ts +25 -0
  307. package/dist/middleware/manageAuth.js +80 -0
  308. package/dist/middleware/projectAccess.d.ts +31 -0
  309. package/dist/middleware/projectAccess.js +118 -0
  310. package/dist/middleware/projectConfig.d.ts +25 -0
  311. package/dist/middleware/projectConfig.js +89 -0
  312. package/dist/middleware/ref.d.ts +61 -0
  313. package/dist/middleware/ref.js +239 -0
  314. package/dist/middleware/requirePermission.d.ts +14 -0
  315. package/dist/middleware/requirePermission.js +80 -0
  316. package/dist/middleware/runAuth.d.ts +29 -0
  317. package/dist/middleware/runAuth.js +253 -0
  318. package/dist/middleware/sessionAuth.d.ts +17 -0
  319. package/dist/middleware/sessionAuth.js +58 -0
  320. package/dist/middleware/tenantAccess.d.ts +22 -0
  321. package/dist/middleware/tenantAccess.js +63 -0
  322. package/dist/middleware/tracing.d.ts +7 -0
  323. package/dist/middleware/tracing.js +50 -0
  324. package/dist/openapi.d.ts +7 -0
  325. package/dist/openapi.js +156 -0
  326. package/dist/ssoHelpers.d.ts +20 -0
  327. package/dist/ssoHelpers.js +51 -0
  328. package/dist/templates/v1/phase1/system-prompt.js +5 -0
  329. package/dist/templates/v1/phase1/thinking-preparation.js +5 -0
  330. package/dist/templates/v1/phase1/tool.js +5 -0
  331. package/dist/templates/v1/phase2/data-component.js +5 -0
  332. package/dist/templates/v1/phase2/data-components.js +5 -0
  333. package/dist/templates/v1/phase2/system-prompt.js +5 -0
  334. package/dist/templates/v1/shared/artifact-retrieval-guidance.js +5 -0
  335. package/dist/templates/v1/shared/artifact.js +5 -0
  336. package/dist/types/app.d.ts +64 -0
  337. package/dist/types/app.js +1 -0
  338. package/dist/types/index.d.ts +2 -0
  339. package/dist/types/index.js +1 -0
  340. package/dist/types/runExecutionContext.d.ts +25 -0
  341. package/dist/types/runExecutionContext.js +28 -0
  342. package/dist/utils/oauthService.d.ts +71 -0
  343. package/dist/utils/oauthService.js +106 -0
  344. package/dist/utils/signozHelpers.d.ts +9 -0
  345. package/dist/utils/signozHelpers.js +33 -0
  346. package/dist/utils/speakeasy.d.ts +93 -0
  347. package/dist/utils/speakeasy.js +44 -0
  348. package/dist/utils/tempApiKeys.d.ts +17 -0
  349. package/dist/utils/tempApiKeys.js +26 -0
  350. package/dist/utils/workflowApiHelpers.d.ts +1 -0
  351. package/dist/utils/workflowApiHelpers.js +1 -0
  352. package/package.json +125 -0
@@ -0,0 +1,517 @@
1
+ import { getLogger as getLogger$1 } from "../../../logger.js";
2
+ import runDbClient_default from "../../../data/db/runDbClient.js";
3
+ import { CONVERSATION_ARTIFACTS_LIMIT, CONVERSATION_HISTORY_DEFAULT_LIMIT as CONVERSATION_HISTORY_DEFAULT_LIMIT$1 } from "../constants/execution-limits/index.js";
4
+ import { getCompressionConfigForModel } from "../utils/model-context-utils.js";
5
+ import { ConversationCompressor } from "../services/ConversationCompressor.js";
6
+ import { CONVERSATION_HISTORY_MAX_OUTPUT_TOKENS_DEFAULT, createMessage, generateId, getConversationHistory, getLedgerArtifacts } from "@inkeep/agents-core";
7
+
8
+ //#region src/domains/run/data/conversations.ts
9
+ const logger = getLogger$1("conversations");
10
+ const compressionLocks = /* @__PURE__ */ new Map();
11
+ /**
12
+ * Creates default conversation history configuration
13
+ * @param mode - The conversation history mode ('full' | 'scoped' | 'none')
14
+ * @returns Default AgentConversationHistoryConfig
15
+ */
16
+ function createDefaultConversationHistoryConfig(mode = "full") {
17
+ return {
18
+ mode,
19
+ limit: CONVERSATION_HISTORY_DEFAULT_LIMIT$1,
20
+ includeInternal: true,
21
+ messageTypes: ["chat", "tool-result"],
22
+ maxOutputTokens: CONVERSATION_HISTORY_MAX_OUTPUT_TOKENS_DEFAULT
23
+ };
24
+ }
25
+ /**
26
+ * Extracts text content from A2A Message parts array
27
+ * Escapes control characters to ensure proper JSON serialization for Dolt
28
+ */
29
+ function extractA2AMessageText(parts) {
30
+ return parts.filter((part) => part.kind === "text" && part.text).map((part) => part.text).join("").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t").replace(/\f/g, "\\f").replace(/\b/g, "\\b");
31
+ }
32
+ /**
33
+ * Saves the result of an A2A client sendMessage call as a conversation message
34
+ * @param response - The response from a2aClient.sendMessage()
35
+ * @param params - Parameters for saving the message
36
+ * @returns The saved message or null if no text content was found
37
+ */
38
+ async function saveA2AMessageResponse(response, params) {
39
+ if (response.error) throw new Error(response.error.message);
40
+ let messageText = "";
41
+ if (response.result.kind === "message") messageText = extractA2AMessageText(response.result.parts);
42
+ else if (response.result.kind === "task") {
43
+ if (response.result.artifacts && response.result.artifacts.length > 0) {
44
+ const firstArtifact = response.result.artifacts[0];
45
+ if (firstArtifact.parts) messageText = extractA2AMessageText(firstArtifact.parts);
46
+ }
47
+ } else if (typeof response.result === "string") messageText = response.result;
48
+ if (!messageText || messageText.trim() === "") return null;
49
+ return await createMessage(runDbClient_default)({
50
+ id: generateId(),
51
+ tenantId: params.tenantId,
52
+ projectId: params.projectId,
53
+ conversationId: params.conversationId,
54
+ role: "agent",
55
+ content: { text: messageText },
56
+ visibility: params.visibility,
57
+ messageType: params.messageType,
58
+ fromSubAgentId: params.fromSubAgentId,
59
+ toSubAgentId: params.toSubAgentId,
60
+ fromExternalAgentId: params.fromExternalAgentId,
61
+ toExternalAgentId: params.toExternalAgentId,
62
+ a2aTaskId: params.a2aTaskId,
63
+ a2aSessionId: params.a2aSessionId,
64
+ metadata: params.metadata
65
+ });
66
+ }
67
+ /**
68
+ * Applies filtering based on agent, task, or both criteria
69
+ * Returns the filtered messages array
70
+ */
71
+ async function getScopedHistory({ tenantId, projectId, conversationId, filters, options }) {
72
+ try {
73
+ const allMessages = await getConversationHistory(runDbClient_default)({
74
+ scopes: {
75
+ tenantId,
76
+ projectId
77
+ },
78
+ conversationId,
79
+ options: {
80
+ ...options,
81
+ limit: 1e4,
82
+ includeInternal: true,
83
+ maxOutputTokens: void 0
84
+ }
85
+ });
86
+ const compressionSummaries = allMessages.filter((msg) => msg.messageType === "compression_summary" && msg.metadata?.compressionType === "conversation_history");
87
+ const latestCompressionSummary = compressionSummaries.length > 0 ? compressionSummaries.reduce((latest, current) => new Date(current.createdAt) > new Date(latest.createdAt) ? current : latest) : null;
88
+ let messages;
89
+ if (latestCompressionSummary) {
90
+ const summaryDate = new Date(latestCompressionSummary.createdAt);
91
+ messages = [latestCompressionSummary, ...allMessages.filter((msg) => new Date(msg.createdAt) > summaryDate && msg.messageType !== "compression_summary")];
92
+ logger.debug({
93
+ conversationId,
94
+ latestCompressionSummaryId: latestCompressionSummary.id,
95
+ summaryDate: summaryDate.toISOString(),
96
+ messagesAfterCompression: messages.length - 1,
97
+ totalMessages: allMessages.length
98
+ }, "Retrieved conversation with compression summary");
99
+ } else {
100
+ messages = allMessages;
101
+ logger.debug({
102
+ conversationId,
103
+ totalMessages: messages.length
104
+ }, "Retrieved conversation without compression summary");
105
+ }
106
+ if (!filters || !filters.subAgentId && !filters.taskId && !filters.delegationId && filters.isDelegated === void 0) return messages;
107
+ return messages.filter((msg) => {
108
+ if (msg.role === "user") return true;
109
+ let matchesAgent = true;
110
+ let matchesTask = true;
111
+ let matchesDelegation = true;
112
+ if (filters.subAgentId) matchesAgent = msg.role === "agent" && msg.visibility === "user-facing" || msg.toSubAgentId === filters.subAgentId || msg.fromSubAgentId === filters.subAgentId;
113
+ if (filters.taskId) matchesTask = msg.taskId === filters.taskId || msg.a2aTaskId === filters.taskId;
114
+ if (filters.delegationId !== void 0 || filters.isDelegated !== void 0) {
115
+ if (msg.messageType === "tool-result") {
116
+ const messageDelegationId = msg.metadata?.a2a_metadata?.delegationId;
117
+ const messageIsDelegated = msg.metadata?.a2a_metadata?.isDelegated;
118
+ if (filters.delegationId) matchesDelegation = messageDelegationId === filters.delegationId || !messageDelegationId;
119
+ else if (filters.isDelegated === false) matchesDelegation = !messageIsDelegated;
120
+ else if (filters.isDelegated === true) matchesDelegation = messageIsDelegated === true;
121
+ }
122
+ }
123
+ const conditions = [];
124
+ if (filters.subAgentId) conditions.push(matchesAgent);
125
+ if (filters.taskId) conditions.push(matchesTask);
126
+ if (filters.delegationId !== void 0 || filters.isDelegated !== void 0) conditions.push(matchesDelegation);
127
+ return conditions.length === 0 || conditions.every(Boolean);
128
+ });
129
+ } catch (error) {
130
+ console.error("Failed to fetch scoped messages:", error);
131
+ return [];
132
+ }
133
+ }
134
+ /**
135
+ * Get user-facing conversation history (for client display)
136
+ */
137
+ async function getUserFacingHistory(tenantId, projectId, conversationId, limit = CONVERSATION_HISTORY_DEFAULT_LIMIT$1) {
138
+ return await getConversationHistory(runDbClient_default)({
139
+ scopes: {
140
+ tenantId,
141
+ projectId
142
+ },
143
+ conversationId,
144
+ options: {
145
+ limit,
146
+ includeInternal: false,
147
+ messageTypes: ["chat"]
148
+ }
149
+ });
150
+ }
151
+ /**
152
+ * Get full conversation context (for agent processing)
153
+ */
154
+ async function getFullConversationContext(tenantId, projectId, conversationId, maxTokens) {
155
+ const defaultConfig = createDefaultConversationHistoryConfig();
156
+ return await getConversationHistory(runDbClient_default)({
157
+ scopes: {
158
+ tenantId,
159
+ projectId
160
+ },
161
+ conversationId,
162
+ options: {
163
+ ...defaultConfig,
164
+ limit: 100,
165
+ includeInternal: true,
166
+ maxOutputTokens: maxTokens
167
+ }
168
+ });
169
+ }
170
+ /**
171
+ * Get formatted conversation history for a2a
172
+ */
173
+ async function getFormattedConversationHistory({ tenantId, projectId, conversationId, currentMessage, options, filters, sessionId, summarizerModel }) {
174
+ const conversationHistory = await getScopedHistory({
175
+ tenantId,
176
+ projectId,
177
+ conversationId,
178
+ filters,
179
+ options: options ?? createDefaultConversationHistoryConfig()
180
+ });
181
+ let messagesToFormat = conversationHistory;
182
+ if (currentMessage && conversationHistory.length > 0) {
183
+ if (conversationHistory[conversationHistory.length - 1].content.text === currentMessage) messagesToFormat = conversationHistory.slice(0, -1);
184
+ }
185
+ if (!messagesToFormat.length) return "";
186
+ let finalMessagesToFormat = messagesToFormat;
187
+ if (sessionId && summarizerModel) finalMessagesToFormat = await compressConversationIfNeeded(messagesToFormat, {
188
+ conversationId,
189
+ tenantId,
190
+ projectId,
191
+ summarizerModel,
192
+ streamRequestId: sessionId
193
+ });
194
+ return `<conversation_history>\n${finalMessagesToFormat.map((msg) => {
195
+ let roleLabel;
196
+ if (msg.role === "user") roleLabel = "user";
197
+ else if (msg.role === "agent" && (msg.messageType === "a2a-request" || msg.messageType === "a2a-response")) roleLabel = `${msg.fromSubAgentId || msg.fromExternalAgentId || "unknown"} to ${msg.toSubAgentId || msg.toExternalAgentId || "unknown"}`;
198
+ else if (msg.role === "agent" && msg.messageType === "chat") roleLabel = `${msg.fromSubAgentId || "unknown"} to User`;
199
+ else if (msg.role === "assistant" && msg.messageType === "tool-result") roleLabel = `${msg.fromSubAgentId || "unknown"} tool: ${msg.metadata?.a2a_metadata?.toolName || "unknown"}`;
200
+ else roleLabel = msg.role || "system";
201
+ return `${roleLabel}: """${msg.content.text}"""`;
202
+ }).join("\n")}\n</conversation_history>\n`;
203
+ }
204
+ /**
205
+ * Modern conversation history retrieval with compression support
206
+ * Replaces getFormattedConversationHistory with built-in compression when needed
207
+ */
208
+ async function getConversationHistoryWithCompression({ tenantId, projectId, conversationId, currentMessage, options, filters, summarizerModel, streamRequestId, fullContextSize }) {
209
+ const conversationHistory = await getScopedHistory({
210
+ tenantId,
211
+ projectId,
212
+ conversationId,
213
+ filters,
214
+ options: {
215
+ ...options ?? createDefaultConversationHistoryConfig(),
216
+ includeInternal: true,
217
+ maxOutputTokens: void 0
218
+ }
219
+ });
220
+ let messagesToFormat = conversationHistory;
221
+ if (currentMessage && conversationHistory.length > 0) {
222
+ if (conversationHistory[conversationHistory.length - 1].content.text === currentMessage) messagesToFormat = conversationHistory.slice(0, -1);
223
+ }
224
+ if (!messagesToFormat.length) return "";
225
+ if (summarizerModel) {
226
+ const compressionInfo = getCompressionConfigForModel(summarizerModel, .5);
227
+ const estimatedTokens = messagesToFormat.reduce((total, msg) => {
228
+ const text = typeof msg.content === "string" ? msg.content : JSON.stringify(msg.content);
229
+ return total + Math.ceil(text.length / 4);
230
+ }, 0);
231
+ const remaining = compressionInfo.hardLimit - estimatedTokens;
232
+ const compressionNeeded = remaining <= compressionInfo.safetyBuffer;
233
+ const contextWindowUtilization = compressionInfo.modelContextInfo.contextWindow ? (estimatedTokens / compressionInfo.modelContextInfo.contextWindow * 100).toFixed(1) : "unknown";
234
+ logger.info({
235
+ conversationId,
236
+ model: summarizerModel.model,
237
+ modelContextWindow: compressionInfo.modelContextInfo.contextWindow,
238
+ currentTokens: estimatedTokens,
239
+ hardLimit: compressionInfo.hardLimit,
240
+ safetyBuffer: compressionInfo.safetyBuffer,
241
+ remaining,
242
+ compressionNeeded,
243
+ contextWindowUtilization: `${contextWindowUtilization}%`,
244
+ messageCount: messagesToFormat.length,
245
+ source: compressionInfo.source
246
+ }, "Conversation history fetch - model context analysis");
247
+ const compressionSummary = messagesToFormat.find((msg) => msg.messageType === "compression_summary" && msg.metadata?.compressionType === "conversation_history");
248
+ if (compressionSummary) {
249
+ const messagesAfterCompression = messagesToFormat.filter((msg) => new Date(msg.createdAt) > new Date(compressionSummary.createdAt) && msg.messageType !== "compression_summary");
250
+ if (messagesAfterCompression.length >= 10) {
251
+ logger.info({
252
+ conversationId,
253
+ messagesAfterLastCompression: messagesAfterCompression.length,
254
+ lastCompressionDate: compressionSummary.createdAt
255
+ }, "Checking if re-compression needed for new messages");
256
+ const newMessagesCompressed = await compressConversationIfNeeded(messagesAfterCompression, {
257
+ conversationId,
258
+ tenantId,
259
+ projectId,
260
+ summarizerModel,
261
+ streamRequestId,
262
+ fullContextSize
263
+ });
264
+ if (newMessagesCompressed.length === 1 && newMessagesCompressed[0].messageType === "compression_summary") {
265
+ messagesToFormat = [compressionSummary, ...newMessagesCompressed];
266
+ logger.info({
267
+ conversationId,
268
+ totalCompressedMessages: messagesToFormat.length
269
+ }, "Re-compression completed - combined with existing summary");
270
+ } else messagesToFormat = [compressionSummary, ...messagesAfterCompression];
271
+ }
272
+ } else messagesToFormat = await compressConversationIfNeeded(messagesToFormat, {
273
+ conversationId,
274
+ tenantId,
275
+ projectId,
276
+ summarizerModel,
277
+ streamRequestId,
278
+ fullContextSize
279
+ });
280
+ const compressedTokens = messagesToFormat.reduce((total, msg) => {
281
+ const text = typeof msg.content === "string" ? msg.content : JSON.stringify(msg.content);
282
+ return total + Math.ceil(text.length / 4);
283
+ }, 0);
284
+ const compressionSummaryMessages = messagesToFormat.filter((msg) => msg.messageType === "compression_summary");
285
+ if (compressionSummaryMessages.length > 0) logger.info({
286
+ conversationId,
287
+ finalMessages: messagesToFormat.length,
288
+ compressionSummaries: compressionSummaryMessages.length,
289
+ finalTokens: compressedTokens,
290
+ contextWindowUtilization: compressionInfo.modelContextInfo.contextWindow ? `${(compressedTokens / compressionInfo.modelContextInfo.contextWindow * 100).toFixed(1)}%` : "unknown"
291
+ }, "Final conversation history with compression summaries");
292
+ }
293
+ return formatMessagesAsConversationHistory(messagesToFormat);
294
+ }
295
+ /**
296
+ * Apply conversation compression using the BaseCompressor infrastructure
297
+ */
298
+ async function compressConversationIfNeeded(messages, params) {
299
+ const { conversationId, tenantId, projectId } = params;
300
+ const lockKey = `${conversationId}_${tenantId}_${projectId}`;
301
+ if (compressionLocks.has(lockKey)) {
302
+ logger.debug({ conversationId }, "Waiting for existing compression to complete");
303
+ await compressionLocks.get(lockKey);
304
+ return messages;
305
+ }
306
+ const compressionPromise = performActualCompression(messages, params);
307
+ compressionLocks.set(lockKey, compressionPromise);
308
+ try {
309
+ return await compressionPromise;
310
+ } finally {
311
+ compressionLocks.delete(lockKey);
312
+ }
313
+ }
314
+ async function performActualCompression(messages, params) {
315
+ const { conversationId, tenantId, projectId, summarizerModel, streamRequestId } = params;
316
+ const compressor = new ConversationCompressor(streamRequestId || conversationId, conversationId, tenantId, projectId, void 0, summarizerModel);
317
+ if (!compressor.isCompressionNeeded(messages)) return messages;
318
+ logger.info({
319
+ conversationId,
320
+ messageCount: messages.length
321
+ }, "Applying conversation-level compression");
322
+ try {
323
+ const compressionResult = await compressor.safeCompress(messages, params.fullContextSize);
324
+ if (compressionResult.summary) {
325
+ const compressionMessage = await createMessage(runDbClient_default)({
326
+ id: generateId(),
327
+ tenantId,
328
+ projectId,
329
+ conversationId,
330
+ role: "system",
331
+ content: { text: buildCompressionSummaryMessage(compressionResult.summary, compressionResult.artifactIds) },
332
+ visibility: "internal",
333
+ messageType: "compression_summary",
334
+ metadata: { a2a_metadata: {
335
+ compressionType: "conversation_history",
336
+ artifactIds: compressionResult.artifactIds,
337
+ originalMessageCount: messages.length,
338
+ compressedAt: (/* @__PURE__ */ new Date()).toISOString(),
339
+ summaryData: compressionResult.summary
340
+ } }
341
+ });
342
+ logger.debug({
343
+ conversationId,
344
+ originalMessageCount: messages.length,
345
+ artifactCount: compressionResult.artifactIds?.length || 0,
346
+ compressionMessageId: compressionMessage.id
347
+ }, "Conversation compression saved to messages table");
348
+ compressor.fullCleanup();
349
+ return [compressionMessage];
350
+ }
351
+ compressor.fullCleanup();
352
+ return messages;
353
+ } catch (error) {
354
+ logger.error({
355
+ conversationId,
356
+ error: error instanceof Error ? error.message : String(error)
357
+ }, "Conversation compression failed, using original messages");
358
+ compressor.fullCleanup();
359
+ return messages;
360
+ }
361
+ }
362
+ /**
363
+ * Build a summary message for compressed conversation content
364
+ */
365
+ function buildCompressionSummaryMessage(summary, artifactIds) {
366
+ const parts = [];
367
+ parts.push("=== CONVERSATION SUMMARY ===");
368
+ parts.push("Previous conversation has been compressed to save context space.");
369
+ parts.push("");
370
+ if (summary.conversation_overview) parts.push(`📋 Overview: ${summary.conversation_overview}`);
371
+ if (summary.user_goals?.primary) {
372
+ parts.push(`🎯 Primary Goal: ${summary.user_goals.primary}`);
373
+ if (summary.user_goals.secondary && summary.user_goals.secondary.length > 0) {
374
+ parts.push(`🎯 Secondary Goals:`);
375
+ for (const goal of summary.user_goals.secondary) parts.push(` • ${goal}`);
376
+ }
377
+ }
378
+ if (summary.key_outcomes) {
379
+ if (summary.key_outcomes.completed && summary.key_outcomes.completed.length > 0) {
380
+ parts.push(`✅ Completed:`);
381
+ for (const item of summary.key_outcomes.completed) parts.push(` • ${item}`);
382
+ }
383
+ if (summary.key_outcomes.discoveries && summary.key_outcomes.discoveries.length > 0) {
384
+ parts.push(`💡 Key Discoveries:`);
385
+ for (const discovery of summary.key_outcomes.discoveries) parts.push(` • ${discovery}`);
386
+ }
387
+ if (summary.key_outcomes.partial && summary.key_outcomes.partial.length > 0) {
388
+ parts.push(`⏳ In Progress:`);
389
+ for (const item of summary.key_outcomes.partial) parts.push(` • ${item}`);
390
+ }
391
+ }
392
+ if (summary.context_for_continuation) {
393
+ if (summary.context_for_continuation.current_state) parts.push(`📍 Current State: ${summary.context_for_continuation.current_state}`);
394
+ if (summary.context_for_continuation.next_logical_steps && summary.context_for_continuation.next_logical_steps.length > 0) {
395
+ parts.push(`📝 Next Steps:`);
396
+ for (const step of summary.context_for_continuation.next_logical_steps) parts.push(` • ${step}`);
397
+ }
398
+ if (summary.context_for_continuation.important_context && summary.context_for_continuation.important_context.length > 0) {
399
+ parts.push(`🔑 Key Context:`);
400
+ for (const context of summary.context_for_continuation.important_context) parts.push(` • ${context}`);
401
+ }
402
+ }
403
+ if (summary.technical_context) {
404
+ if (summary.technical_context.technologies && summary.technical_context.technologies.length > 0) parts.push(`🔧 Technologies: ${summary.technical_context.technologies.join(", ")}`);
405
+ if (summary.technical_context.issues_encountered && summary.technical_context.issues_encountered.length > 0) {
406
+ parts.push(`⚠️ Issues Encountered:`);
407
+ for (const issue of summary.technical_context.issues_encountered) parts.push(` • ${issue}`);
408
+ }
409
+ if (summary.technical_context.solutions_applied && summary.technical_context.solutions_applied.length > 0) {
410
+ parts.push(`✨ Solutions Applied:`);
411
+ for (const solution of summary.technical_context.solutions_applied) parts.push(` • ${solution}`);
412
+ }
413
+ }
414
+ if (summary.high_level) parts.push(`📋 Overview: ${summary.high_level}`);
415
+ if (summary.user_intent) parts.push(`🎯 User Goal: ${summary.user_intent}`);
416
+ if (summary.decisions && summary.decisions.length > 0) {
417
+ parts.push(`✅ Key Decisions Made:`);
418
+ for (const decision of summary.decisions) parts.push(` • ${decision}`);
419
+ }
420
+ if (summary.next_steps && summary.next_steps.length > 0) {
421
+ parts.push(`📝 Planned Next Steps:`);
422
+ for (const step of summary.next_steps) parts.push(` • ${step}`);
423
+ }
424
+ if (summary.open_questions && summary.open_questions.length > 0) {
425
+ parts.push(`❓ Outstanding Questions:`);
426
+ for (const question of summary.open_questions) parts.push(` • ${question}`);
427
+ }
428
+ if (summary.conversation_artifacts && summary.conversation_artifacts.length > 0) {
429
+ parts.push(`💾 Research Artifacts: ${summary.conversation_artifacts.length} created from previous work`);
430
+ summary.conversation_artifacts.forEach((artifact) => {
431
+ parts.push(` [ARTIFACT: ${artifact.id}]`);
432
+ parts.push(` 📋 ${artifact.name || "Research Data"}`);
433
+ if (artifact.content_summary) parts.push(` 📝 ${artifact.content_summary}`);
434
+ if (artifact.tool_name && artifact.tool_name !== "unknown") parts.push(` 🔧 Source: ${artifact.tool_name}`);
435
+ parts.push(` 🔗 Reference: <artifact:ref id="${artifact.id}" tool_call_id="${artifact.tool_call_id}" />`);
436
+ parts.push("");
437
+ });
438
+ } else if (artifactIds && artifactIds.length > 0) {
439
+ parts.push(`💾 Research Artifacts: ${artifactIds.length} created from previous work`);
440
+ artifactIds.forEach((artifactId) => {
441
+ parts.push(` [ARTIFACT: ${artifactId}]`);
442
+ parts.push(` 🔗 Reference: <artifact:ref id="${artifactId}" />`);
443
+ });
444
+ }
445
+ parts.push("");
446
+ parts.push("=== END SUMMARY ===");
447
+ parts.push("Recent conversation continues below...");
448
+ return parts.join("\n");
449
+ }
450
+ /**
451
+ * Format messages into conversation history string (extracted from legacy method)
452
+ */
453
+ function formatMessagesAsConversationHistory(messages) {
454
+ return `<conversation_history>\n${messages.map((msg) => {
455
+ let roleLabel;
456
+ if (msg.role === "user") roleLabel = "user";
457
+ else if (msg.role === "agent" && (msg.messageType === "a2a-request" || msg.messageType === "a2a-response")) roleLabel = `${msg.fromSubAgentId || msg.fromExternalAgentId || "unknown"} to ${msg.toSubAgentId || msg.toExternalAgentId || "unknown"}`;
458
+ else if (msg.role === "agent" && msg.messageType === "chat") roleLabel = `${msg.fromSubAgentId || "unknown"} to User`;
459
+ else if (msg.role === "assistant" && msg.messageType === "tool-result") roleLabel = `${msg.fromSubAgentId || "unknown"} tool: ${msg.metadata?.a2a_metadata?.toolName || "unknown"}`;
460
+ else if (msg.role === "system") roleLabel = "system";
461
+ else roleLabel = msg.role || "system";
462
+ return `${roleLabel}: """${msg.content.text}"""`;
463
+ }).join("\n")}\n</conversation_history>\n`;
464
+ }
465
+ /**
466
+ * Get artifacts that are within the scope of the conversation history
467
+ * Only returns artifacts from messages that are actually visible to the LLM
468
+ * Uses the same scoping logic as getFormattedConversationHistory
469
+ */
470
+ async function getConversationScopedArtifacts(params) {
471
+ const { tenantId, projectId, conversationId, historyConfig } = params;
472
+ if (!conversationId) return [];
473
+ try {
474
+ if (historyConfig.mode === "none") return [];
475
+ const visibleMessages = await getScopedHistory({
476
+ tenantId,
477
+ projectId,
478
+ conversationId,
479
+ options: historyConfig
480
+ });
481
+ if (visibleMessages.length === 0) return [];
482
+ if (visibleMessages.filter((msg) => !(msg.messageType === "system" && msg.content?.text?.includes("Previous conversation history truncated"))).map((msg) => msg.id).length === 0) return [];
483
+ const visibleTaskIds = visibleMessages.map((msg) => msg.taskId).filter((taskId) => Boolean(taskId));
484
+ const referenceArtifacts = [];
485
+ for (const taskId of visibleTaskIds) {
486
+ const artifacts = await getLedgerArtifacts(runDbClient_default)({
487
+ scopes: {
488
+ tenantId,
489
+ projectId
490
+ },
491
+ taskId
492
+ });
493
+ referenceArtifacts.push(...artifacts);
494
+ }
495
+ const ARTIFACT_COUNT_LIMIT = CONVERSATION_ARTIFACTS_LIMIT;
496
+ const limitedArtifacts = referenceArtifacts.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()).slice(0, ARTIFACT_COUNT_LIMIT);
497
+ logger.debug({
498
+ conversationId,
499
+ visibleMessages: visibleMessages.length,
500
+ visibleTasks: visibleTaskIds.length,
501
+ totalArtifacts: referenceArtifacts.length,
502
+ limitedArtifacts: limitedArtifacts.length,
503
+ artifactLimit: ARTIFACT_COUNT_LIMIT,
504
+ historyMode: historyConfig.mode
505
+ }, "Loaded conversation-scoped artifacts with count limit");
506
+ return limitedArtifacts;
507
+ } catch (error) {
508
+ logger.error({
509
+ error: error instanceof Error ? error.message : "Unknown error",
510
+ conversationId
511
+ }, "Failed to get conversation-scoped artifacts");
512
+ return [];
513
+ }
514
+ }
515
+
516
+ //#endregion
517
+ export { compressConversationIfNeeded, compressionLocks, createDefaultConversationHistoryConfig, getConversationHistoryWithCompression, getConversationScopedArtifacts, getFormattedConversationHistory, getFullConversationContext, getScopedHistory, getUserFacingHistory, saveA2AMessageResponse };
@@ -0,0 +1,44 @@
1
+ import { StreamHelper } from "../utils/stream-helpers.js";
2
+ import { FullExecutionContext, Part } from "@inkeep/agents-core";
3
+
4
+ //#region src/domains/run/handlers/executionHandler.d.ts
5
+ interface ExecutionHandlerParams {
6
+ executionContext: FullExecutionContext;
7
+ conversationId: string;
8
+ userMessage: string;
9
+ /** Optional message parts for rich content (text + data). Used on first iteration only. */
10
+ messageParts?: Part[];
11
+ initialAgentId: string;
12
+ requestId: string;
13
+ sseHelper: StreamHelper;
14
+ emitOperations?: boolean;
15
+ datasetRunId?: string;
16
+ /** Headers to forward to MCP servers (e.g., x-forwarded-cookie for auth) */
17
+ forwardedHeaders?: Record<string, string>;
18
+ }
19
+ interface ExecutionResult {
20
+ success: boolean;
21
+ error?: string;
22
+ iterations: number;
23
+ response?: string;
24
+ }
25
+ declare class ExecutionHandler {
26
+ private readonly MAX_ERRORS;
27
+ /**
28
+ * performs exeuction loop
29
+ *
30
+ * Do up to limit of MAX_ITERATIONS
31
+ *
32
+ * 1. lookup active agent for thread
33
+ * 2. Send A2A message to selected agent
34
+ * 3. Parse A2A message response
35
+ * 4. Handle transfer messages (if any)
36
+ * 5. Handle completion messages (if any)
37
+ * 6. If no valid response or transfer, return error
38
+ * @param params
39
+ * @returns
40
+ */
41
+ execute(params: ExecutionHandlerParams): Promise<ExecutionResult>;
42
+ }
43
+ //#endregion
44
+ export { ExecutionHandler };