@mastra/playground-ui 68.0.0-alpha.2 → 68.0.0-alpha.3

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 (338) hide show
  1. package/dist/KnowledgePageGraph.css +55 -0
  2. package/dist/{MarkdownRenderer-2GOXQJEv.js → MarkdownRenderer-CI30RqdB.js} +19 -6
  3. package/dist/MarkdownRenderer-CI30RqdB.js.map +1 -0
  4. package/dist/{MarkdownRenderer-CB8Z_CHc.cjs → MarkdownRenderer-y65WGBhC.cjs} +19 -6
  5. package/dist/MarkdownRenderer-y65WGBhC.cjs.map +1 -0
  6. package/dist/{activity-rJ1NQl_2.js → activity-C8Ql81WM.js} +2 -2
  7. package/dist/{activity-rJ1NQl_2.js.map → activity-C8Ql81WM.js.map} +1 -1
  8. package/dist/{activity-DyB5H3gF.cjs → activity-CcQZeDYi.cjs} +2 -2
  9. package/dist/{activity-DyB5H3gF.cjs.map → activity-CcQZeDYi.cjs.map} +1 -1
  10. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  11. package/dist/components/MarkdownRenderer.es.js +1 -1
  12. package/dist/components/SavedViews.cjs.js +1 -1
  13. package/dist/components/SavedViews.es.js +1 -1
  14. package/dist/components/ai/activity.cjs.js +1 -1
  15. package/dist/components/ai/activity.es.js +1 -1
  16. package/dist/components/ai/plan.cjs.js +1 -1
  17. package/dist/components/ai/plan.es.js +1 -1
  18. package/dist/components/ai/tool-approval.cjs.js +1 -1
  19. package/dist/components/ai/tool-approval.es.js +1 -1
  20. package/dist/components/ai/tool-call.cjs.js +2 -2
  21. package/dist/components/ai/tool-call.es.js +2 -2
  22. package/dist/domains/chat/activity/activity-stretch-line.cjs.js +1 -1
  23. package/dist/domains/chat/activity/activity-stretch-line.es.js +1 -1
  24. package/dist/domains/chat/activity/components/activity-fold.cjs.js +1 -1
  25. package/dist/domains/chat/activity/components/activity-fold.es.js +1 -1
  26. package/dist/domains/chat/activity/components/activity-timed-trigger.cjs.js +1 -1
  27. package/dist/domains/chat/activity/components/activity-timed-trigger.es.js +1 -1
  28. package/dist/domains/chat/activity/components/calls-panel.cjs.js +1 -1
  29. package/dist/domains/chat/activity/components/calls-panel.es.js +1 -1
  30. package/dist/domains/chat/activity/components/stretch-content.cjs.js +1 -1
  31. package/dist/domains/chat/activity/components/stretch-content.es.js +1 -1
  32. package/dist/domains/chat/activity/components/stretch-thought.cjs.js +1 -1
  33. package/dist/domains/chat/activity/components/stretch-thought.es.js +1 -1
  34. package/dist/domains/chat/activity/model/activity-segments.cjs.js +1 -1
  35. package/dist/domains/chat/activity/model/activity-segments.es.js +1 -1
  36. package/dist/domains/chat/activity/model/activity-words.cjs.js +2 -2
  37. package/dist/domains/chat/activity/model/activity-words.es.js +2 -2
  38. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  39. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  40. package/dist/domains/chat/knowledge/knowledge-links.cjs.js +52 -6
  41. package/dist/domains/chat/knowledge/knowledge-links.cjs.js.map +1 -1
  42. package/dist/domains/chat/knowledge/knowledge-links.es.js +53 -9
  43. package/dist/domains/chat/knowledge/knowledge-links.es.js.map +1 -1
  44. package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js +10 -3
  45. package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js.map +1 -1
  46. package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js +10 -3
  47. package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js.map +1 -1
  48. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +8 -3
  49. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js.map +1 -1
  50. package/dist/domains/chat/knowledge/pinned-knowledge.es.js +8 -3
  51. package/dist/domains/chat/knowledge/pinned-knowledge.es.js.map +1 -1
  52. package/dist/domains/chat/knowledge.cjs.js +2 -0
  53. package/dist/domains/chat/knowledge.es.js +2 -2
  54. package/dist/domains/chat/messages/message-row.cjs.js +3 -3
  55. package/dist/domains/chat/messages/message-row.es.js +3 -3
  56. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  57. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  58. package/dist/domains/chat/messages/reasoning-content.cjs.js +1 -1
  59. package/dist/domains/chat/messages/reasoning-content.es.js +1 -1
  60. package/dist/domains/chat/messages/renderers/message-text.cjs.js +35 -1
  61. package/dist/domains/chat/messages/renderers/message-text.cjs.js.map +1 -1
  62. package/dist/domains/chat/messages/renderers/message-text.es.js +36 -2
  63. package/dist/domains/chat/messages/renderers/message-text.es.js.map +1 -1
  64. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  65. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  66. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  67. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  68. package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
  69. package/dist/domains/chat/messages/skill-message.es.js +2 -2
  70. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
  71. package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
  72. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  73. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  74. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
  75. package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
  76. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +2 -2
  77. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +2 -2
  78. package/dist/domains/chat/tools/badges/knowledge-body-range.cjs.js +80 -0
  79. package/dist/domains/chat/tools/badges/knowledge-body-range.cjs.js.map +1 -0
  80. package/dist/domains/chat/tools/badges/knowledge-body-range.d.ts +1 -0
  81. package/dist/domains/chat/tools/badges/knowledge-body-range.es.js +78 -0
  82. package/dist/domains/chat/tools/badges/knowledge-body-range.es.js.map +1 -0
  83. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js +163 -13
  84. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js.map +1 -1
  85. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +165 -15
  86. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js.map +1 -1
  87. package/dist/domains/chat/tools/badges/mcp-input-request-badge.cjs.js +51 -0
  88. package/dist/domains/chat/tools/badges/mcp-input-request-badge.cjs.js.map +1 -0
  89. package/dist/domains/chat/tools/badges/mcp-input-request-badge.d.ts +1 -0
  90. package/dist/domains/chat/tools/badges/mcp-input-request-badge.es.js +49 -0
  91. package/dist/domains/chat/tools/badges/mcp-input-request-badge.es.js.map +1 -0
  92. package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js +7 -2
  93. package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js.map +1 -1
  94. package/dist/domains/chat/tools/badges/mcp-task-chip.es.js +7 -2
  95. package/dist/domains/chat/tools/badges/mcp-task-chip.es.js.map +1 -1
  96. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +2 -2
  97. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +2 -2
  98. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +2 -2
  99. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +2 -2
  100. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  101. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  102. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +2 -2
  103. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +2 -2
  104. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  105. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  106. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +9 -4
  107. package/dist/domains/chat/tools/badges/tool-badge.cjs.js.map +1 -1
  108. package/dist/domains/chat/tools/badges/tool-badge.es.js +9 -4
  109. package/dist/domains/chat/tools/badges/tool-badge.es.js.map +1 -1
  110. package/dist/domains/chat/tools/badges/use-deferred-input-request.cjs.js +81 -0
  111. package/dist/domains/chat/tools/badges/use-deferred-input-request.cjs.js.map +1 -0
  112. package/dist/domains/chat/tools/badges/use-deferred-input-request.d.ts +1 -0
  113. package/dist/domains/chat/tools/badges/use-deferred-input-request.es.js +77 -0
  114. package/dist/domains/chat/tools/badges/use-deferred-input-request.es.js.map +1 -0
  115. package/dist/domains/chat/tools/badges/use-mcp-task-progress.cjs.js +11 -2
  116. package/dist/domains/chat/tools/badges/use-mcp-task-progress.cjs.js.map +1 -1
  117. package/dist/domains/chat/tools/badges/use-mcp-task-progress.es.js +11 -2
  118. package/dist/domains/chat/tools/badges/use-mcp-task-progress.es.js.map +1 -1
  119. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +1 -1
  120. package/dist/domains/chat/tools/badges/workflow-badge.es.js +1 -1
  121. package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js +240 -0
  122. package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js.map +1 -0
  123. package/dist/domains/chat/tools/mcp-input-request-tool.d.ts +1 -0
  124. package/dist/domains/chat/tools/mcp-input-request-tool.es.js +239 -0
  125. package/dist/domains/chat/tools/mcp-input-request-tool.es.js.map +1 -0
  126. package/dist/domains/chat/tools/mcp-input-request.cjs.js +40 -0
  127. package/dist/domains/chat/tools/mcp-input-request.cjs.js.map +1 -0
  128. package/dist/domains/chat/tools/mcp-input-request.d.ts +1 -0
  129. package/dist/domains/chat/tools/mcp-input-request.es.js +33 -0
  130. package/dist/domains/chat/tools/mcp-input-request.es.js.map +1 -0
  131. package/dist/domains/chat/tools/tool-card-kind.cjs.js +8 -3
  132. package/dist/domains/chat/tools/tool-card-kind.cjs.js.map +1 -1
  133. package/dist/domains/chat/tools/tool-card-kind.es.js +8 -4
  134. package/dist/domains/chat/tools/tool-card-kind.es.js.map +1 -1
  135. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  136. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  137. package/dist/domains/chat/tools/tool-groups.cjs.js +1 -1
  138. package/dist/domains/chat/tools/tool-groups.es.js +1 -1
  139. package/dist/domains/chat.cjs.js +5 -3
  140. package/dist/domains/chat.es.js +4 -4
  141. package/dist/domains/knowledge/components/KnowledgePageCard.cjs.js +48 -0
  142. package/dist/domains/knowledge/components/KnowledgePageCard.cjs.js.map +1 -0
  143. package/dist/domains/knowledge/components/KnowledgePageCard.d.ts +1 -0
  144. package/dist/domains/knowledge/components/KnowledgePageCard.es.js +47 -0
  145. package/dist/domains/knowledge/components/KnowledgePageCard.es.js.map +1 -0
  146. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +63 -5
  147. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js.map +1 -1
  148. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +64 -6
  149. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js.map +1 -1
  150. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js +485 -47
  151. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js.map +1 -1
  152. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js +487 -50
  153. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js.map +1 -1
  154. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js +1051 -123
  155. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js.map +1 -1
  156. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js +1054 -126
  157. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js.map +1 -1
  158. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js +75 -3
  159. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js.map +1 -1
  160. package/dist/domains/knowledge/components/KnowledgePageTree.es.js +76 -4
  161. package/dist/domains/knowledge/components/KnowledgePageTree.es.js.map +1 -1
  162. package/dist/domains/knowledge/lib/circleText.cjs.js +9 -0
  163. package/dist/domains/knowledge/lib/circleText.cjs.js.map +1 -0
  164. package/dist/domains/knowledge/lib/circleText.d.ts +1 -0
  165. package/dist/domains/knowledge/lib/circleText.es.js +8 -0
  166. package/dist/domains/knowledge/lib/circleText.es.js.map +1 -0
  167. package/dist/domains/knowledge/lib/fitViewport.cjs.js +82 -0
  168. package/dist/domains/knowledge/lib/fitViewport.cjs.js.map +1 -0
  169. package/dist/domains/knowledge/lib/fitViewport.d.ts +1 -0
  170. package/dist/domains/knowledge/lib/fitViewport.es.js +73 -0
  171. package/dist/domains/knowledge/lib/fitViewport.es.js.map +1 -0
  172. package/dist/domains/knowledge/lib/graphShape.cjs.js +524 -0
  173. package/dist/domains/knowledge/lib/graphShape.cjs.js.map +1 -0
  174. package/dist/domains/knowledge/lib/graphShape.d.ts +1 -0
  175. package/dist/domains/knowledge/lib/graphShape.es.js +499 -0
  176. package/dist/domains/knowledge/lib/graphShape.es.js.map +1 -0
  177. package/dist/domains/knowledge/lib/linkCountsText.cjs.js +11 -0
  178. package/dist/domains/knowledge/lib/linkCountsText.cjs.js.map +1 -0
  179. package/dist/domains/knowledge/lib/linkCountsText.d.ts +1 -0
  180. package/dist/domains/knowledge/lib/linkCountsText.es.js +10 -0
  181. package/dist/domains/knowledge/lib/linkCountsText.es.js.map +1 -0
  182. package/dist/domains/knowledge/lib/pageAddress.cjs.js +29 -0
  183. package/dist/domains/knowledge/lib/pageAddress.cjs.js.map +1 -0
  184. package/dist/domains/knowledge/lib/pageAddress.d.ts +1 -0
  185. package/dist/domains/knowledge/lib/pageAddress.es.js +27 -0
  186. package/dist/domains/knowledge/lib/pageAddress.es.js.map +1 -0
  187. package/dist/domains/knowledge/lib/pageGraph.cjs.js +11 -11
  188. package/dist/domains/knowledge/lib/pageGraph.cjs.js.map +1 -1
  189. package/dist/domains/knowledge/lib/pageGraph.es.js +11 -11
  190. package/dist/domains/knowledge/lib/pageGraph.es.js.map +1 -1
  191. package/dist/domains/knowledge/lib/pageRefs.cjs.js +69 -0
  192. package/dist/domains/knowledge/lib/pageRefs.cjs.js.map +1 -0
  193. package/dist/domains/knowledge/lib/pageRefs.d.ts +1 -0
  194. package/dist/domains/knowledge/lib/pageRefs.es.js +66 -0
  195. package/dist/domains/knowledge/lib/pageRefs.es.js.map +1 -0
  196. package/dist/domains/knowledge/lib/pageTree.cjs.js +5 -0
  197. package/dist/domains/knowledge/lib/pageTree.cjs.js.map +1 -1
  198. package/dist/domains/knowledge/lib/pageTree.es.js +5 -1
  199. package/dist/domains/knowledge/lib/pageTree.es.js.map +1 -1
  200. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.cjs.js +82 -0
  201. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.cjs.js.map +1 -0
  202. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.d.ts +1 -0
  203. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.es.js +78 -0
  204. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.es.js.map +1 -0
  205. package/dist/domains/knowledge/lib/tooltipSide.cjs.js +77 -0
  206. package/dist/domains/knowledge/lib/tooltipSide.cjs.js.map +1 -0
  207. package/dist/domains/knowledge/lib/tooltipSide.d.ts +1 -0
  208. package/dist/domains/knowledge/lib/tooltipSide.es.js +75 -0
  209. package/dist/domains/knowledge/lib/tooltipSide.es.js.map +1 -0
  210. package/dist/domains/knowledge/lib/useLeavingNodes.cjs.js +65 -0
  211. package/dist/domains/knowledge/lib/useLeavingNodes.cjs.js.map +1 -0
  212. package/dist/domains/knowledge/lib/useLeavingNodes.d.ts +1 -0
  213. package/dist/domains/knowledge/lib/useLeavingNodes.es.js +62 -0
  214. package/dist/domains/knowledge/lib/useLeavingNodes.es.js.map +1 -0
  215. package/dist/domains/knowledge/lib/useStableWhile.cjs.js +15 -0
  216. package/dist/domains/knowledge/lib/useStableWhile.cjs.js.map +1 -0
  217. package/dist/domains/knowledge/lib/useStableWhile.d.ts +1 -0
  218. package/dist/domains/knowledge/lib/useStableWhile.es.js +14 -0
  219. package/dist/domains/knowledge/lib/useStableWhile.es.js.map +1 -0
  220. package/dist/domains/scores/components/trace-scores-list.cjs.js +2 -2
  221. package/dist/domains/scores/components/trace-scores-list.es.js +2 -2
  222. package/dist/domains/skills/skill-simple-form.cjs.js +1 -1
  223. package/dist/domains/skills/skill-simple-form.es.js +1 -1
  224. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  225. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  226. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  227. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  228. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
  229. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  230. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  231. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  232. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  233. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  234. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  235. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  236. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  237. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  238. package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +1 -1
  239. package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +1 -1
  240. package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +1 -1
  241. package/dist/domains/traces/components/span-payload/span-tools-section.es.js +1 -1
  242. package/dist/domains/traces/components/span-timeline-row.cjs.js +1 -1
  243. package/dist/domains/traces/components/span-timeline-row.es.js +1 -1
  244. package/dist/domains/traces/components/span-timing-hover-card.cjs.js +1 -1
  245. package/dist/domains/traces/components/span-timing-hover-card.es.js +1 -1
  246. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +8 -2
  247. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  248. package/dist/domains/traces/components/trace-data-panel-view.es.js +8 -2
  249. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  250. package/dist/domains/traces/components/trace-error-cell.cjs.js +1 -1
  251. package/dist/domains/traces/components/trace-error-cell.es.js +1 -1
  252. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +1 -1
  253. package/dist/domains/workflows/runs/workflow-run-list.es.js +1 -1
  254. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +2 -2
  255. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +2 -2
  256. package/dist/domains/workflows/workflow/use-workflow-trigger.cjs.js +3 -3
  257. package/dist/domains/workflows/workflow/use-workflow-trigger.es.js +3 -3
  258. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -1
  259. package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -1
  260. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +2 -2
  261. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +2 -2
  262. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +2 -2
  263. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +2 -2
  264. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +1 -1
  265. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +1 -1
  266. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +1 -1
  267. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +1 -1
  268. package/dist/lib/form/dynamic-form.cjs.js +2 -2
  269. package/dist/lib/form/dynamic-form.es.js +2 -2
  270. package/dist/lib/form/json-draft.cjs.js +1 -1
  271. package/dist/lib/form/json-draft.es.js +1 -1
  272. package/dist/lib/form/zod-provider.cjs.js +1 -1
  273. package/dist/lib/form/zod-provider.es.js +1 -1
  274. package/dist/{span-payload-primitives-B3RdahsC.js → span-payload-primitives-CKKIAVPJ.js} +4 -4
  275. package/dist/{span-payload-primitives-B3RdahsC.js.map → span-payload-primitives-CKKIAVPJ.js.map} +1 -1
  276. package/dist/{span-payload-primitives-_2d-pAOD.cjs → span-payload-primitives-D4tHWN2W.cjs} +4 -4
  277. package/dist/{span-payload-primitives-_2d-pAOD.cjs.map → span-payload-primitives-D4tHWN2W.cjs.map} +1 -1
  278. package/dist/src/domains/chat/knowledge/knowledge-links.d.ts +32 -4
  279. package/dist/src/domains/chat/knowledge/pinned-knowledge-data.d.ts +2 -0
  280. package/dist/src/domains/chat/tools/badges/knowledge-body-range.d.ts +12 -0
  281. package/dist/src/domains/chat/tools/badges/knowledge-tool-badge.d.ts +5 -2
  282. package/dist/src/domains/chat/tools/badges/mcp-input-request-badge.d.ts +18 -0
  283. package/dist/src/domains/chat/tools/badges/tool-badge.d.ts +4 -1
  284. package/dist/src/domains/chat/tools/badges/use-deferred-input-request.d.ts +44 -0
  285. package/dist/src/domains/chat/tools/badges/use-mcp-task-progress.d.ts +6 -1
  286. package/dist/src/domains/chat/tools/mcp-input-request-tool.d.ts +18 -0
  287. package/dist/src/domains/chat/tools/mcp-input-request.d.ts +40 -0
  288. package/dist/src/domains/chat/tools/tool-card-kind.d.ts +4 -2
  289. package/dist/src/domains/chat/tools/tool-card.d.ts +1 -1
  290. package/dist/src/domains/knowledge/components/KnowledgePageCard.d.ts +23 -0
  291. package/dist/src/domains/knowledge/components/KnowledgePageExplorer.d.ts +29 -0
  292. package/dist/src/domains/knowledge/components/KnowledgePageGraph.d.ts +27 -1
  293. package/dist/src/domains/knowledge/components/KnowledgePageTree.d.ts +2 -1
  294. package/dist/src/domains/knowledge/lib/circleText.d.ts +2 -0
  295. package/dist/src/domains/knowledge/lib/fitViewport.d.ts +67 -0
  296. package/dist/src/domains/knowledge/lib/graphShape.d.ts +131 -0
  297. package/dist/src/domains/knowledge/lib/linkCountsText.d.ts +5 -0
  298. package/dist/src/domains/knowledge/lib/pageAddress.d.ts +5 -0
  299. package/dist/src/domains/knowledge/lib/pageGraph.d.ts +4 -4
  300. package/dist/src/domains/knowledge/lib/pageRefs.d.ts +15 -0
  301. package/dist/src/domains/knowledge/lib/pageTree.d.ts +2 -0
  302. package/dist/src/domains/knowledge/lib/remarkKnowledgeLinks.d.ts +13 -0
  303. package/dist/src/domains/knowledge/lib/tooltipSide.d.ts +40 -0
  304. package/dist/src/domains/knowledge/lib/useLeavingNodes.d.ts +14 -0
  305. package/dist/src/domains/knowledge/lib/useStableWhile.d.ts +5 -0
  306. package/dist/src/domains/knowledge/pageTypes.d.ts +6 -1
  307. package/dist/src/ds/components/MarkdownRenderer/markdown-renderer.d.ts +8 -1
  308. package/dist/src/ds/components/ai/tool-call/tool-phrases.d.ts +6 -0
  309. package/dist/style.css +69 -2
  310. package/dist/{tool-approval-1qiB4hhG.cjs → tool-approval-CJvPDL7D.cjs} +4 -4
  311. package/dist/{tool-approval-1qiB4hhG.cjs.map → tool-approval-CJvPDL7D.cjs.map} +1 -1
  312. package/dist/{tool-approval-B6MFcaKV.js → tool-approval-DyN11vFA.js} +4 -4
  313. package/dist/{tool-approval-B6MFcaKV.js.map → tool-approval-DyN11vFA.js.map} +1 -1
  314. package/dist/{tool-call-Bu66PkD-.cjs → tool-call-DBn14X-3.cjs} +9 -3
  315. package/dist/{tool-call-Bu66PkD-.cjs.map → tool-call-DBn14X-3.cjs.map} +1 -1
  316. package/dist/{tool-call-Ch9-jjXU.js → tool-call-Dsj43lvJ.js} +9 -3
  317. package/dist/{tool-call-Ch9-jjXU.js.map → tool-call-Dsj43lvJ.js.map} +1 -1
  318. package/dist/{tool-card-DrqPZfPQ.cjs → tool-card-rxhTDpk_.cjs} +164 -126
  319. package/dist/tool-card-rxhTDpk_.cjs.map +1 -0
  320. package/dist/{tool-card-sO6P2Qj4.js → tool-card-toDgoZzJ.js} +165 -127
  321. package/dist/tool-card-toDgoZzJ.js.map +1 -0
  322. package/dist/{tool-presentation-DvCsb_kz.js → tool-presentation-CvibOP1J.js} +6 -1
  323. package/dist/tool-presentation-CvibOP1J.js.map +1 -0
  324. package/dist/{tool-presentation-CQlDEwgS.cjs → tool-presentation-D6nzVruN.cjs} +6 -1
  325. package/dist/tool-presentation-D6nzVruN.cjs.map +1 -0
  326. package/package.json +10 -10
  327. package/dist/MarkdownRenderer-2GOXQJEv.js.map +0 -1
  328. package/dist/MarkdownRenderer-CB8Z_CHc.cjs.map +0 -1
  329. package/dist/domains/knowledge/lib/pageLayout.cjs.js +0 -49
  330. package/dist/domains/knowledge/lib/pageLayout.cjs.js.map +0 -1
  331. package/dist/domains/knowledge/lib/pageLayout.d.ts +0 -1
  332. package/dist/domains/knowledge/lib/pageLayout.es.js +0 -48
  333. package/dist/domains/knowledge/lib/pageLayout.es.js.map +0 -1
  334. package/dist/src/domains/knowledge/lib/pageLayout.d.ts +0 -24
  335. package/dist/tool-card-DrqPZfPQ.cjs.map +0 -1
  336. package/dist/tool-card-sO6P2Qj4.js.map +0 -1
  337. package/dist/tool-presentation-CQlDEwgS.cjs.map +0 -1
  338. package/dist/tool-presentation-DvCsb_kz.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"span-payload-primitives-B3RdahsC.js","names":[],"sources":["../src/domains/traces/components/span-payload/span-payload-tool.tsx","../src/domains/traces/components/span-payload/span-payload-primitives.tsx"],"sourcesContent":["import { SpanPayloadJson } from './span-payload-json';\nimport { SpanPayloadField } from './span-payload-primitives';\nimport { getDelegatedTool, getDelegatedToolHref } from './span-payload-registry';\nimport { BadgeWrapper } from '@/domains/chat/components/badge-wrapper';\nimport { ActivityHeadline } from '@/ds/components/ai/activity';\nimport { presentTool } from '@/ds/components/ai/tool-call/tool-presentation';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { useLinkComponent } from '@/lib/framework';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n/** A tool name in a key/value list, linked to its page when the tool is a workflow or sub-agent. */\nexport function SpanToolNameValue({ toolName }: { toolName: string }) {\n const { Link, paths } = useLinkComponent();\n const href = getDelegatedToolHref(paths, toolName);\n if (!href) return <DataKeysAndValues.Value>{toolName}</DataKeysAndValues.Value>;\n return (\n <DataKeysAndValues.ValueLink href={href} as={Link}>\n {toolName}\n </DataKeysAndValues.ValueLink>\n );\n}\n\nexport function SpanPayloadTool({ value }: { value: unknown }) {\n const { Link, paths } = useLinkComponent();\n if (!isRecord(value)) return <SpanPayloadJson value={value} />;\n const call = value.type === 'tool-invocation' ? value.toolInvocation : value;\n if (!isRecord(call) || typeof call.toolName !== 'string' || !call.toolName) {\n return <SpanPayloadJson value={value} />;\n }\n const input = 'args' in call ? call.args : call.input;\n const output = 'result' in call ? call.result : call.output;\n const error = call.isError === true || call.state === 'output-error';\n const errorText = typeof call.errorText === 'string' ? call.errorText : undefined;\n const { icon: ToolIcon, label, detail, description } = presentTool(call.toolName, input);\n const delegated = getDelegatedTool(call.toolName);\n // The header toggles the body, so the workflow or agent link sits in the body rather than in it.\n const delegatedHref = getDelegatedToolHref(paths, call.toolName);\n const hasBody = Boolean(delegatedHref) || input !== undefined || output !== undefined || errorText !== undefined;\n return (\n <div data-slot=\"span-payload-tool\" className=\"flex flex-col gap-2\">\n <BadgeWrapper\n status={error ? 'error' : 'idle'}\n header={\n <ActivityHeadline icon={<ToolIcon aria-hidden />} label={label} detail={detail} description={description} />\n }\n >\n {hasBody && (\n <div className=\"flex flex-col gap-3\">\n {delegated && delegatedHref && (\n <DataKeysAndValues>\n <DataKeysAndValues.Key>{delegated.kind === 'workflow' ? 'Workflow' : 'Agent'}</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueLink href={delegatedHref} as={Link}>\n {delegated.key}\n </DataKeysAndValues.ValueLink>\n </DataKeysAndValues>\n )}\n {input !== undefined && (\n <SpanPayloadField label=\"Arguments\">\n <SpanPayloadJson value={input} />\n </SpanPayloadField>\n )}\n {output !== undefined && (\n <SpanPayloadField label=\"Result\">\n <SpanPayloadJson value={output} />\n </SpanPayloadField>\n )}\n {errorText !== undefined && (\n <SpanPayloadField label=\"Error\">\n <SpanPayloadJson value={errorText} />\n </SpanPayloadField>\n )}\n </div>\n )}\n </BadgeWrapper>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { SpanPayloadTool } from './span-payload-tool';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Txt } from '@/ds/components/Txt';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\n/** Small-caps label above a field of a rich payload. */\nexport function SpanPayloadLabel({ children }: { children: ReactNode }) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"faint\" className=\"block uppercase\">\n {children}\n </Txt>\n );\n}\n\nexport function SpanPayloadField({ label, children }: { label: ReactNode; children: ReactNode }) {\n return (\n <div data-slot=\"span-payload-field\" className=\"flex flex-col gap-1.5\">\n <SpanPayloadLabel>{label}</SpanPayloadLabel>\n {children}\n </div>\n );\n}\n\nexport function SpanPayloadMarkdown({ children }: { children: string }) {\n return (\n <div data-slot=\"span-payload-markdown\" className=\"text-foreground\">\n <MarkdownRenderer>{children}</MarkdownRenderer>\n </div>\n );\n}\n\n/** A collapsed block for secondary data (reasoning, steps, warnings…). */\nexport function SpanPayloadCollapsible({\n label,\n children,\n defaultOpen = false,\n}: {\n label: ReactNode;\n children: ReactNode;\n defaultOpen?: boolean;\n}) {\n return (\n <Collapsible defaultOpen={defaultOpen}>\n <CollapsibleTrigger className=\"flex items-center gap-1 text-meta text-placeholder uppercase\">\n <DisclosureChevron direction=\"right\" className=\"size-3\" />\n {label}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pt-1.5\">{children}</CollapsibleContent>\n </Collapsible>\n );\n}\n\nexport interface SpanPayloadListItem {\n key: string;\n /** The item name, a link when it has a page to open. */\n name: ReactNode;\n description?: string;\n}\n\n/**\n * A scrollable list of named items with an optional description (tools, skills…). The scrollbar\n * stays visible while the list overflows, so readers can tell there are more items below.\n * `card` frames it on its own surface, for a list that stands alone in a section.\n */\nexport function SpanPayloadList({ items, slot, card }: { items: SpanPayloadListItem[]; slot: string; card?: boolean }) {\n return (\n <ScrollArea\n maxHeight=\"12rem\"\n alwaysShowScrollbar\n className={cn(card && cn(raisedSurfaceStyle, 'rounded-lg [--scroll-area-scrollbar-inset:0.5rem]'))}\n >\n <ul data-slot={slot} className={cn('flex flex-col gap-2', card ? 'p-3 pr-4' : 'pr-3')}>\n {items.map(item => (\n <li key={item.key} className=\"flex min-w-0 flex-col\">\n {item.name}\n {item.description && (\n // Payload content reads in ink like the messages around it; grey is kept for the labels.\n <Txt as=\"span\" variant=\"body-sm\" className=\"line-clamp-2\" title={item.description}>\n {item.description}\n </Txt>\n )}\n </li>\n ))}\n </ul>\n </ScrollArea>\n );\n}\n\n/** A list item name rendered as plain text. */\nexport function SpanPayloadListName({ children }: { children: string }) {\n return (\n <Txt as=\"span\" variant=\"label\" tone=\"ink\" className=\"truncate\">\n {children}\n </Txt>\n );\n}\n\n/** Tool calls as core records them: `{ toolName, args | input }` when they have that shape, JSON otherwise. */\nexport function SpanPayloadToolCalls({ toolCalls }: { toolCalls: unknown[] }) {\n return (\n <ul data-slot=\"span-payload-tool-calls\" className=\"flex flex-col gap-2\">\n {toolCalls.map((call, index) => (\n <li key={index}>\n <SpanPayloadTool value={call} />\n </li>\n ))}\n </ul>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"span-payload-primitives-CKKIAVPJ.js","names":[],"sources":["../src/domains/traces/components/span-payload/span-payload-tool.tsx","../src/domains/traces/components/span-payload/span-payload-primitives.tsx"],"sourcesContent":["import { SpanPayloadJson } from './span-payload-json';\nimport { SpanPayloadField } from './span-payload-primitives';\nimport { getDelegatedTool, getDelegatedToolHref } from './span-payload-registry';\nimport { BadgeWrapper } from '@/domains/chat/components/badge-wrapper';\nimport { ActivityHeadline } from '@/ds/components/ai/activity';\nimport { presentTool } from '@/ds/components/ai/tool-call/tool-presentation';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { useLinkComponent } from '@/lib/framework';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n/** A tool name in a key/value list, linked to its page when the tool is a workflow or sub-agent. */\nexport function SpanToolNameValue({ toolName }: { toolName: string }) {\n const { Link, paths } = useLinkComponent();\n const href = getDelegatedToolHref(paths, toolName);\n if (!href) return <DataKeysAndValues.Value>{toolName}</DataKeysAndValues.Value>;\n return (\n <DataKeysAndValues.ValueLink href={href} as={Link}>\n {toolName}\n </DataKeysAndValues.ValueLink>\n );\n}\n\nexport function SpanPayloadTool({ value }: { value: unknown }) {\n const { Link, paths } = useLinkComponent();\n if (!isRecord(value)) return <SpanPayloadJson value={value} />;\n const call = value.type === 'tool-invocation' ? value.toolInvocation : value;\n if (!isRecord(call) || typeof call.toolName !== 'string' || !call.toolName) {\n return <SpanPayloadJson value={value} />;\n }\n const input = 'args' in call ? call.args : call.input;\n const output = 'result' in call ? call.result : call.output;\n const error = call.isError === true || call.state === 'output-error';\n const errorText = typeof call.errorText === 'string' ? call.errorText : undefined;\n const { icon: ToolIcon, label, detail, description } = presentTool(call.toolName, input);\n const delegated = getDelegatedTool(call.toolName);\n // The header toggles the body, so the workflow or agent link sits in the body rather than in it.\n const delegatedHref = getDelegatedToolHref(paths, call.toolName);\n const hasBody = Boolean(delegatedHref) || input !== undefined || output !== undefined || errorText !== undefined;\n return (\n <div data-slot=\"span-payload-tool\" className=\"flex flex-col gap-2\">\n <BadgeWrapper\n status={error ? 'error' : 'idle'}\n header={\n <ActivityHeadline icon={<ToolIcon aria-hidden />} label={label} detail={detail} description={description} />\n }\n >\n {hasBody && (\n <div className=\"flex flex-col gap-3\">\n {delegated && delegatedHref && (\n <DataKeysAndValues>\n <DataKeysAndValues.Key>{delegated.kind === 'workflow' ? 'Workflow' : 'Agent'}</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueLink href={delegatedHref} as={Link}>\n {delegated.key}\n </DataKeysAndValues.ValueLink>\n </DataKeysAndValues>\n )}\n {input !== undefined && (\n <SpanPayloadField label=\"Arguments\">\n <SpanPayloadJson value={input} />\n </SpanPayloadField>\n )}\n {output !== undefined && (\n <SpanPayloadField label=\"Result\">\n <SpanPayloadJson value={output} />\n </SpanPayloadField>\n )}\n {errorText !== undefined && (\n <SpanPayloadField label=\"Error\">\n <SpanPayloadJson value={errorText} />\n </SpanPayloadField>\n )}\n </div>\n )}\n </BadgeWrapper>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { SpanPayloadTool } from './span-payload-tool';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Txt } from '@/ds/components/Txt';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\n/** Small-caps label above a field of a rich payload. */\nexport function SpanPayloadLabel({ children }: { children: ReactNode }) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"faint\" className=\"block uppercase\">\n {children}\n </Txt>\n );\n}\n\nexport function SpanPayloadField({ label, children }: { label: ReactNode; children: ReactNode }) {\n return (\n <div data-slot=\"span-payload-field\" className=\"flex flex-col gap-1.5\">\n <SpanPayloadLabel>{label}</SpanPayloadLabel>\n {children}\n </div>\n );\n}\n\nexport function SpanPayloadMarkdown({ children }: { children: string }) {\n return (\n <div data-slot=\"span-payload-markdown\" className=\"text-foreground\">\n <MarkdownRenderer>{children}</MarkdownRenderer>\n </div>\n );\n}\n\n/** A collapsed block for secondary data (reasoning, steps, warnings…). */\nexport function SpanPayloadCollapsible({\n label,\n children,\n defaultOpen = false,\n}: {\n label: ReactNode;\n children: ReactNode;\n defaultOpen?: boolean;\n}) {\n return (\n <Collapsible defaultOpen={defaultOpen}>\n <CollapsibleTrigger className=\"flex items-center gap-1 text-meta text-placeholder uppercase\">\n <DisclosureChevron direction=\"right\" className=\"size-3\" />\n {label}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pt-1.5\">{children}</CollapsibleContent>\n </Collapsible>\n );\n}\n\nexport interface SpanPayloadListItem {\n key: string;\n /** The item name, a link when it has a page to open. */\n name: ReactNode;\n description?: string;\n}\n\n/**\n * A scrollable list of named items with an optional description (tools, skills…). The scrollbar\n * stays visible while the list overflows, so readers can tell there are more items below.\n * `card` frames it on its own surface, for a list that stands alone in a section.\n */\nexport function SpanPayloadList({ items, slot, card }: { items: SpanPayloadListItem[]; slot: string; card?: boolean }) {\n return (\n <ScrollArea\n maxHeight=\"12rem\"\n alwaysShowScrollbar\n className={cn(card && cn(raisedSurfaceStyle, 'rounded-lg [--scroll-area-scrollbar-inset:0.5rem]'))}\n >\n <ul data-slot={slot} className={cn('flex flex-col gap-2', card ? 'p-3 pr-4' : 'pr-3')}>\n {items.map(item => (\n <li key={item.key} className=\"flex min-w-0 flex-col\">\n {item.name}\n {item.description && (\n // Payload content reads in ink like the messages around it; grey is kept for the labels.\n <Txt as=\"span\" variant=\"body-sm\" className=\"line-clamp-2\" title={item.description}>\n {item.description}\n </Txt>\n )}\n </li>\n ))}\n </ul>\n </ScrollArea>\n );\n}\n\n/** A list item name rendered as plain text. */\nexport function SpanPayloadListName({ children }: { children: string }) {\n return (\n <Txt as=\"span\" variant=\"label\" tone=\"ink\" className=\"truncate\">\n {children}\n </Txt>\n );\n}\n\n/** Tool calls as core records them: `{ toolName, args | input }` when they have that shape, JSON otherwise. */\nexport function SpanPayloadToolCalls({ toolCalls }: { toolCalls: unknown[] }) {\n return (\n <ul data-slot=\"span-payload-tool-calls\" className=\"flex flex-col gap-2\">\n {toolCalls.map((call, index) => (\n <li key={index}>\n <SpanPayloadTool value={call} />\n </li>\n ))}\n </ul>\n );\n}\n"],"mappings":"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"}
@@ -3,11 +3,11 @@ const require_utils = require("./utils-uDc1ofX1.cjs");
3
3
  require("./primitives/raised-surface.cjs.js");
4
4
  const require_scroll_area = require("./scroll-area-BP4gPZ4G.cjs");
5
5
  const require_Txt = require("./Txt-BnoSqxKE.cjs");
6
- const require_tool_presentation = require("./tool-presentation-CQlDEwgS.cjs");
7
- const require_activity = require("./activity-DyB5H3gF.cjs");
6
+ const require_tool_presentation = require("./tool-presentation-D6nzVruN.cjs");
7
+ const require_activity = require("./activity-CcQZeDYi.cjs");
8
8
  const require_components_Collapsible = require("./components/Collapsible.cjs.js");
9
9
  const require_components_DisclosureChevron = require("./components/DisclosureChevron.cjs.js");
10
- const require_MarkdownRenderer = require("./MarkdownRenderer-CB8Z_CHc.cjs");
10
+ const require_MarkdownRenderer = require("./MarkdownRenderer-y65WGBhC.cjs");
11
11
  const require_domains_chat_components_badge_wrapper = require("./domains/chat/components/badge-wrapper.cjs.js");
12
12
  const require_DataKeysAndValues = require("./DataKeysAndValues-DsH6AbAo.cjs");
13
13
  const require_domains_traces_components_span_payload_span_payload_registry = require("./domains/traces/components/span-payload/span-payload-registry.cjs.js");
@@ -214,4 +214,4 @@ Object.defineProperty(exports, "SpanToolNameValue", {
214
214
  }
215
215
  });
216
216
 
217
- //# sourceMappingURL=span-payload-primitives-_2d-pAOD.cjs.map
217
+ //# sourceMappingURL=span-payload-primitives-D4tHWN2W.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"span-payload-primitives-_2d-pAOD.cjs","names":["useLinkComponent","getDelegatedToolHref","DataKeysAndValues","SpanPayloadJson","presentTool","getDelegatedTool","BadgeWrapper","ActivityHeadline","Txt","MarkdownRenderer","Collapsible","CollapsibleTrigger","DisclosureChevron","CollapsibleContent","ScrollArea","cn"],"sources":["../src/domains/traces/components/span-payload/span-payload-tool.tsx","../src/domains/traces/components/span-payload/span-payload-primitives.tsx"],"sourcesContent":["import { SpanPayloadJson } from './span-payload-json';\nimport { SpanPayloadField } from './span-payload-primitives';\nimport { getDelegatedTool, getDelegatedToolHref } from './span-payload-registry';\nimport { BadgeWrapper } from '@/domains/chat/components/badge-wrapper';\nimport { ActivityHeadline } from '@/ds/components/ai/activity';\nimport { presentTool } from '@/ds/components/ai/tool-call/tool-presentation';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { useLinkComponent } from '@/lib/framework';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n/** A tool name in a key/value list, linked to its page when the tool is a workflow or sub-agent. */\nexport function SpanToolNameValue({ toolName }: { toolName: string }) {\n const { Link, paths } = useLinkComponent();\n const href = getDelegatedToolHref(paths, toolName);\n if (!href) return <DataKeysAndValues.Value>{toolName}</DataKeysAndValues.Value>;\n return (\n <DataKeysAndValues.ValueLink href={href} as={Link}>\n {toolName}\n </DataKeysAndValues.ValueLink>\n );\n}\n\nexport function SpanPayloadTool({ value }: { value: unknown }) {\n const { Link, paths } = useLinkComponent();\n if (!isRecord(value)) return <SpanPayloadJson value={value} />;\n const call = value.type === 'tool-invocation' ? value.toolInvocation : value;\n if (!isRecord(call) || typeof call.toolName !== 'string' || !call.toolName) {\n return <SpanPayloadJson value={value} />;\n }\n const input = 'args' in call ? call.args : call.input;\n const output = 'result' in call ? call.result : call.output;\n const error = call.isError === true || call.state === 'output-error';\n const errorText = typeof call.errorText === 'string' ? call.errorText : undefined;\n const { icon: ToolIcon, label, detail, description } = presentTool(call.toolName, input);\n const delegated = getDelegatedTool(call.toolName);\n // The header toggles the body, so the workflow or agent link sits in the body rather than in it.\n const delegatedHref = getDelegatedToolHref(paths, call.toolName);\n const hasBody = Boolean(delegatedHref) || input !== undefined || output !== undefined || errorText !== undefined;\n return (\n <div data-slot=\"span-payload-tool\" className=\"flex flex-col gap-2\">\n <BadgeWrapper\n status={error ? 'error' : 'idle'}\n header={\n <ActivityHeadline icon={<ToolIcon aria-hidden />} label={label} detail={detail} description={description} />\n }\n >\n {hasBody && (\n <div className=\"flex flex-col gap-3\">\n {delegated && delegatedHref && (\n <DataKeysAndValues>\n <DataKeysAndValues.Key>{delegated.kind === 'workflow' ? 'Workflow' : 'Agent'}</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueLink href={delegatedHref} as={Link}>\n {delegated.key}\n </DataKeysAndValues.ValueLink>\n </DataKeysAndValues>\n )}\n {input !== undefined && (\n <SpanPayloadField label=\"Arguments\">\n <SpanPayloadJson value={input} />\n </SpanPayloadField>\n )}\n {output !== undefined && (\n <SpanPayloadField label=\"Result\">\n <SpanPayloadJson value={output} />\n </SpanPayloadField>\n )}\n {errorText !== undefined && (\n <SpanPayloadField label=\"Error\">\n <SpanPayloadJson value={errorText} />\n </SpanPayloadField>\n )}\n </div>\n )}\n </BadgeWrapper>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { SpanPayloadTool } from './span-payload-tool';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Txt } from '@/ds/components/Txt';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\n/** Small-caps label above a field of a rich payload. */\nexport function SpanPayloadLabel({ children }: { children: ReactNode }) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"faint\" className=\"block uppercase\">\n {children}\n </Txt>\n );\n}\n\nexport function SpanPayloadField({ label, children }: { label: ReactNode; children: ReactNode }) {\n return (\n <div data-slot=\"span-payload-field\" className=\"flex flex-col gap-1.5\">\n <SpanPayloadLabel>{label}</SpanPayloadLabel>\n {children}\n </div>\n );\n}\n\nexport function SpanPayloadMarkdown({ children }: { children: string }) {\n return (\n <div data-slot=\"span-payload-markdown\" className=\"text-foreground\">\n <MarkdownRenderer>{children}</MarkdownRenderer>\n </div>\n );\n}\n\n/** A collapsed block for secondary data (reasoning, steps, warnings…). */\nexport function SpanPayloadCollapsible({\n label,\n children,\n defaultOpen = false,\n}: {\n label: ReactNode;\n children: ReactNode;\n defaultOpen?: boolean;\n}) {\n return (\n <Collapsible defaultOpen={defaultOpen}>\n <CollapsibleTrigger className=\"flex items-center gap-1 text-meta text-placeholder uppercase\">\n <DisclosureChevron direction=\"right\" className=\"size-3\" />\n {label}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pt-1.5\">{children}</CollapsibleContent>\n </Collapsible>\n );\n}\n\nexport interface SpanPayloadListItem {\n key: string;\n /** The item name, a link when it has a page to open. */\n name: ReactNode;\n description?: string;\n}\n\n/**\n * A scrollable list of named items with an optional description (tools, skills…). The scrollbar\n * stays visible while the list overflows, so readers can tell there are more items below.\n * `card` frames it on its own surface, for a list that stands alone in a section.\n */\nexport function SpanPayloadList({ items, slot, card }: { items: SpanPayloadListItem[]; slot: string; card?: boolean }) {\n return (\n <ScrollArea\n maxHeight=\"12rem\"\n alwaysShowScrollbar\n className={cn(card && cn(raisedSurfaceStyle, 'rounded-lg [--scroll-area-scrollbar-inset:0.5rem]'))}\n >\n <ul data-slot={slot} className={cn('flex flex-col gap-2', card ? 'p-3 pr-4' : 'pr-3')}>\n {items.map(item => (\n <li key={item.key} className=\"flex min-w-0 flex-col\">\n {item.name}\n {item.description && (\n // Payload content reads in ink like the messages around it; grey is kept for the labels.\n <Txt as=\"span\" variant=\"body-sm\" className=\"line-clamp-2\" title={item.description}>\n {item.description}\n </Txt>\n )}\n </li>\n ))}\n </ul>\n </ScrollArea>\n );\n}\n\n/** A list item name rendered as plain text. */\nexport function SpanPayloadListName({ children }: { children: string }) {\n return (\n <Txt as=\"span\" variant=\"label\" tone=\"ink\" className=\"truncate\">\n {children}\n </Txt>\n );\n}\n\n/** Tool calls as core records them: `{ toolName, args | input }` when they have that shape, JSON otherwise. */\nexport function SpanPayloadToolCalls({ toolCalls }: { toolCalls: unknown[] }) {\n return (\n <ul data-slot=\"span-payload-tool-calls\" className=\"flex flex-col gap-2\">\n {toolCalls.map((call, index) => (\n <li key={index}>\n <SpanPayloadTool value={call} />\n </li>\n ))}\n </ul>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"span-payload-primitives-D4tHWN2W.cjs","names":["useLinkComponent","getDelegatedToolHref","DataKeysAndValues","SpanPayloadJson","presentTool","getDelegatedTool","BadgeWrapper","ActivityHeadline","Txt","MarkdownRenderer","Collapsible","CollapsibleTrigger","DisclosureChevron","CollapsibleContent","ScrollArea","cn"],"sources":["../src/domains/traces/components/span-payload/span-payload-tool.tsx","../src/domains/traces/components/span-payload/span-payload-primitives.tsx"],"sourcesContent":["import { SpanPayloadJson } from './span-payload-json';\nimport { SpanPayloadField } from './span-payload-primitives';\nimport { getDelegatedTool, getDelegatedToolHref } from './span-payload-registry';\nimport { BadgeWrapper } from '@/domains/chat/components/badge-wrapper';\nimport { ActivityHeadline } from '@/ds/components/ai/activity';\nimport { presentTool } from '@/ds/components/ai/tool-call/tool-presentation';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { useLinkComponent } from '@/lib/framework';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n/** A tool name in a key/value list, linked to its page when the tool is a workflow or sub-agent. */\nexport function SpanToolNameValue({ toolName }: { toolName: string }) {\n const { Link, paths } = useLinkComponent();\n const href = getDelegatedToolHref(paths, toolName);\n if (!href) return <DataKeysAndValues.Value>{toolName}</DataKeysAndValues.Value>;\n return (\n <DataKeysAndValues.ValueLink href={href} as={Link}>\n {toolName}\n </DataKeysAndValues.ValueLink>\n );\n}\n\nexport function SpanPayloadTool({ value }: { value: unknown }) {\n const { Link, paths } = useLinkComponent();\n if (!isRecord(value)) return <SpanPayloadJson value={value} />;\n const call = value.type === 'tool-invocation' ? value.toolInvocation : value;\n if (!isRecord(call) || typeof call.toolName !== 'string' || !call.toolName) {\n return <SpanPayloadJson value={value} />;\n }\n const input = 'args' in call ? call.args : call.input;\n const output = 'result' in call ? call.result : call.output;\n const error = call.isError === true || call.state === 'output-error';\n const errorText = typeof call.errorText === 'string' ? call.errorText : undefined;\n const { icon: ToolIcon, label, detail, description } = presentTool(call.toolName, input);\n const delegated = getDelegatedTool(call.toolName);\n // The header toggles the body, so the workflow or agent link sits in the body rather than in it.\n const delegatedHref = getDelegatedToolHref(paths, call.toolName);\n const hasBody = Boolean(delegatedHref) || input !== undefined || output !== undefined || errorText !== undefined;\n return (\n <div data-slot=\"span-payload-tool\" className=\"flex flex-col gap-2\">\n <BadgeWrapper\n status={error ? 'error' : 'idle'}\n header={\n <ActivityHeadline icon={<ToolIcon aria-hidden />} label={label} detail={detail} description={description} />\n }\n >\n {hasBody && (\n <div className=\"flex flex-col gap-3\">\n {delegated && delegatedHref && (\n <DataKeysAndValues>\n <DataKeysAndValues.Key>{delegated.kind === 'workflow' ? 'Workflow' : 'Agent'}</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueLink href={delegatedHref} as={Link}>\n {delegated.key}\n </DataKeysAndValues.ValueLink>\n </DataKeysAndValues>\n )}\n {input !== undefined && (\n <SpanPayloadField label=\"Arguments\">\n <SpanPayloadJson value={input} />\n </SpanPayloadField>\n )}\n {output !== undefined && (\n <SpanPayloadField label=\"Result\">\n <SpanPayloadJson value={output} />\n </SpanPayloadField>\n )}\n {errorText !== undefined && (\n <SpanPayloadField label=\"Error\">\n <SpanPayloadJson value={errorText} />\n </SpanPayloadField>\n )}\n </div>\n )}\n </BadgeWrapper>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { SpanPayloadTool } from './span-payload-tool';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { Txt } from '@/ds/components/Txt';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\n/** Small-caps label above a field of a rich payload. */\nexport function SpanPayloadLabel({ children }: { children: ReactNode }) {\n return (\n <Txt as=\"span\" variant=\"meta\" tone=\"faint\" className=\"block uppercase\">\n {children}\n </Txt>\n );\n}\n\nexport function SpanPayloadField({ label, children }: { label: ReactNode; children: ReactNode }) {\n return (\n <div data-slot=\"span-payload-field\" className=\"flex flex-col gap-1.5\">\n <SpanPayloadLabel>{label}</SpanPayloadLabel>\n {children}\n </div>\n );\n}\n\nexport function SpanPayloadMarkdown({ children }: { children: string }) {\n return (\n <div data-slot=\"span-payload-markdown\" className=\"text-foreground\">\n <MarkdownRenderer>{children}</MarkdownRenderer>\n </div>\n );\n}\n\n/** A collapsed block for secondary data (reasoning, steps, warnings…). */\nexport function SpanPayloadCollapsible({\n label,\n children,\n defaultOpen = false,\n}: {\n label: ReactNode;\n children: ReactNode;\n defaultOpen?: boolean;\n}) {\n return (\n <Collapsible defaultOpen={defaultOpen}>\n <CollapsibleTrigger className=\"flex items-center gap-1 text-meta text-placeholder uppercase\">\n <DisclosureChevron direction=\"right\" className=\"size-3\" />\n {label}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pt-1.5\">{children}</CollapsibleContent>\n </Collapsible>\n );\n}\n\nexport interface SpanPayloadListItem {\n key: string;\n /** The item name, a link when it has a page to open. */\n name: ReactNode;\n description?: string;\n}\n\n/**\n * A scrollable list of named items with an optional description (tools, skills…). The scrollbar\n * stays visible while the list overflows, so readers can tell there are more items below.\n * `card` frames it on its own surface, for a list that stands alone in a section.\n */\nexport function SpanPayloadList({ items, slot, card }: { items: SpanPayloadListItem[]; slot: string; card?: boolean }) {\n return (\n <ScrollArea\n maxHeight=\"12rem\"\n alwaysShowScrollbar\n className={cn(card && cn(raisedSurfaceStyle, 'rounded-lg [--scroll-area-scrollbar-inset:0.5rem]'))}\n >\n <ul data-slot={slot} className={cn('flex flex-col gap-2', card ? 'p-3 pr-4' : 'pr-3')}>\n {items.map(item => (\n <li key={item.key} className=\"flex min-w-0 flex-col\">\n {item.name}\n {item.description && (\n // Payload content reads in ink like the messages around it; grey is kept for the labels.\n <Txt as=\"span\" variant=\"body-sm\" className=\"line-clamp-2\" title={item.description}>\n {item.description}\n </Txt>\n )}\n </li>\n ))}\n </ul>\n </ScrollArea>\n );\n}\n\n/** A list item name rendered as plain text. */\nexport function SpanPayloadListName({ children }: { children: string }) {\n return (\n <Txt as=\"span\" variant=\"label\" tone=\"ink\" className=\"truncate\">\n {children}\n </Txt>\n );\n}\n\n/** Tool calls as core records them: `{ toolName, args | input }` when they have that shape, JSON otherwise. */\nexport function SpanPayloadToolCalls({ toolCalls }: { toolCalls: unknown[] }) {\n return (\n <ul data-slot=\"span-payload-tool-calls\" className=\"flex flex-col gap-2\">\n {toolCalls.map((call, index) => (\n <li key={index}>\n <SpanPayloadTool value={call} />\n </li>\n ))}\n </ul>\n );\n}\n"],"mappings":"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"}
@@ -1,21 +1,49 @@
1
1
  import type { ReactNode } from 'react';
2
+ import type { KnowledgePageCardProps } from '../../knowledge/components/KnowledgePageCard';
2
3
  import type { LinkComponent } from '../../../lib/framework';
4
+ /** Names the page a link points at: by id, or by reference the way `refHref` takes it. */
5
+ export type KnowledgePageTarget = {
6
+ pageId: string;
7
+ pageRef?: never;
8
+ } | {
9
+ pageRef: string;
10
+ pageId?: never;
11
+ };
12
+ /**
13
+ * What a hover card says about a page. Called, as a hook, only while a card is open, so a host fetches
14
+ * the page on hover and not for every link in the transcript. (Chat prose is the exception: a bare address
15
+ * in text calls it on render, since it links only if the page resolves.) `undefined` while loading or unreadable.
16
+ */
17
+ export type UseKnowledgePagePreview = (target: KnowledgePageTarget) => KnowledgePageCardProps | undefined;
3
18
  interface KnowledgeLinks {
19
+ /** Left out where the host cannot look a page up; links then have no hover card. */
20
+ usePagePreview?: UseKnowledgePagePreview;
4
21
  /** Undefined when this host has no page to open, e.g. a chat outside any project; the name shows as text. */
5
22
  pageHref: (pageId: string) => string | undefined;
23
+ /**
24
+ * Where a page named by reference (a scope address, or `scope#key/path` as `knowledge_list` names
25
+ * entries) opens. Studio's Knowledge page resolves the reference itself, so it uses the page URL. A
26
+ * host that only opens pages by id leaves it out, and those names show as text.
27
+ */
28
+ refHref?: (ref: string) => string | undefined;
6
29
  Link?: LinkComponent;
30
+ /** Set by the provider: this host has Knowledge pages, so references in chat prose become links. */
31
+ provided?: boolean;
7
32
  }
8
33
  /**
9
34
  * Where Knowledge page links in chat (tool cards, pinned Knowledge) point. Studio's default opens its own
10
35
  * Knowledge page; a host with its own route (Factory's per-project page) or its own router passes both.
11
36
  */
12
- export declare function KnowledgeLinksProvider({ pageHref, Link, children }: KnowledgeLinks & {
37
+ export declare function KnowledgeLinksProvider({ pageHref, refHref, Link, usePagePreview, children, }: Omit<KnowledgeLinks, 'provided'> & {
13
38
  children: ReactNode;
14
39
  }): import("react").JSX.Element;
40
+ /** What the host gave the provider; for renderers that must decide before drawing a link. */
41
+ export declare function useKnowledgeLinksContext(): KnowledgeLinks;
42
+ /** Whether this host mounted a `KnowledgeLinksProvider`, i.e. has Knowledge pages chat prose can link to. */
43
+ export declare function useHasKnowledgeLinks(): boolean;
15
44
  /** A link to a Knowledge page, through the host's link component and route. */
16
- export declare function KnowledgePageLink({ pageId, children, className, }: {
17
- pageId: string;
45
+ export declare function KnowledgePageLink({ pageId, pageRef, children, className, }: {
18
46
  children: ReactNode;
19
47
  className?: string;
20
- }): import("react").JSX.Element;
48
+ } & KnowledgePageTarget): import("react").JSX.Element;
21
49
  export {};
@@ -6,6 +6,8 @@ export interface PinnedPage {
6
6
  /** From the pin itself on newer cores; read off the delivered text's `<name> (<id>): ` prefix on older ones. */
7
7
  name?: string;
8
8
  scope?: string;
9
+ /** For a pinned listing, the id of the page whose subtree it lists; the row links there. */
10
+ listOf?: string;
9
11
  /** What the agent was given for this pin, verbatim. */
10
12
  text?: string;
11
13
  }
@@ -0,0 +1,12 @@
1
+ /** What part of a page a Knowledge call read or wrote: a short tag for the collapsed row, a sentence for the body. */
2
+ export interface BodyExtent {
3
+ row: string | undefined;
4
+ summary: string;
5
+ }
6
+ /**
7
+ * Which part of the body a `knowledge_read` result holds, from the call's arguments and its page. A whole
8
+ * body has no row tag; undefined when the result is not a body read at all (a notes-only read, a scope listing).
9
+ */
10
+ export declare function readExtent(output: Record<string, unknown>, args: Record<string, unknown>): BodyExtent | undefined;
11
+ /** Which lines a `knowledge_page` write replaced, from its `range` argument; undefined for a whole-body write. */
12
+ export declare function writeExtent(args: Record<string, unknown>): BodyExtent | undefined;
@@ -9,8 +9,11 @@ export interface KnowledgeCard {
9
9
  detail?: string;
10
10
  body: ReactNode;
11
11
  }
12
- /** What each Knowledge tool's settled result says, or null when the shape isn't one we know. */
13
- export declare function knowledgeCard(toolName: string, input: unknown, output: unknown): KnowledgeCard | null;
12
+ /**
13
+ * What each Knowledge tool's settled result says, or null when the shape isn't one we know.
14
+ * A failed call (`errorText` set) gets a card naming what it tried and the error it got.
15
+ */
16
+ export declare function knowledgeCard(toolName: string, input: unknown, output: unknown, errorText?: string): KnowledgeCard | null;
14
17
  export interface KnowledgeToolBadgeProps extends Omit<ToolApprovalRequest, 'toolCalled'> {
15
18
  card: KnowledgeCard;
16
19
  metadata?: MessageMetadata;
@@ -0,0 +1,18 @@
1
+ import type { McpInputRequestPayload } from '../mcp-input-request';
2
+ import type { OpenInputRequest } from './use-deferred-input-request';
3
+ /** A call the run is parked on: answering resumes the run, like any other suspended tool. */
4
+ export declare function ForegroundMcpInputRequest({ toolCallId, payload, readOnly, isNetwork, }: {
5
+ toolCallId: string;
6
+ payload: McpInputRequestPayload;
7
+ readOnly?: boolean;
8
+ /** A network run resumes through its own route, which can't carry these answers yet. */
9
+ isNetwork?: boolean;
10
+ }): import("react").JSX.Element;
11
+ /**
12
+ * A deferred call whose background task waits on the question. The agent's turn already ended, so
13
+ * the answer goes to the task directly and the chat stays free for other messages meanwhile.
14
+ */
15
+ export declare function DeferredMcpInputRequest({ backgroundTaskId, request, }: {
16
+ backgroundTaskId: string;
17
+ request: OpenInputRequest;
18
+ }): import("react").JSX.Element;
@@ -1,3 +1,4 @@
1
+ import type { McpInputRequestPayload } from '../mcp-input-request';
1
2
  import type { MessageMetadata } from '../..';
2
3
  import type { ToolApprovalRequest } from './tool-approval-badge';
3
4
  import type { ActivityStatus } from '../../../../ds/components/ai/activity';
@@ -17,5 +18,7 @@ export interface ToolBadgeProps extends Omit<ToolApprovalRequest, 'toolCalled'>
17
18
  backgroundTaskId?: string;
18
19
  /** `running` while the part holds a deferred call's placeholder; `completed`/`failed` once it holds the result. */
19
20
  backgroundTaskStatus?: string;
21
+ /** The MCP task question the call is waiting on, if it is. */
22
+ mcpInputRequest?: McpInputRequestPayload;
20
23
  }
21
- export declare const ToolBadge: ({ toolName, args, result, metadata, toolOutput, toolCallId, toolApprovalMetadata, suspendPayload, isNetwork, toolCalled: toolCalledProp, withoutArgs, status, backgroundTaskId, backgroundTaskStatus, }: ToolBadgeProps) => import("react").JSX.Element;
24
+ export declare const ToolBadge: ({ toolName, args, result, metadata, toolOutput, toolCallId, toolApprovalMetadata, suspendPayload, isNetwork, toolCalled: toolCalledProp, withoutArgs, status, backgroundTaskId, backgroundTaskStatus, mcpInputRequest, }: ToolBadgeProps) => import("react").JSX.Element;
@@ -0,0 +1,44 @@
1
+ import type { McpInputRequestPayload, McpInputResumeData } from '../mcp-input-request';
2
+ export declare const backgroundTaskQueryKey: (backgroundTaskId: string) => readonly ['background-task', string];
3
+ export interface OpenInputRequest {
4
+ payload: McpInputRequestPayload;
5
+ /** The suspension being answered; the server refuses an answer to an older one. */
6
+ suspendedAt?: string | Date;
7
+ }
8
+ /**
9
+ * The MCP input request a deferred call's background task is suspended on, if any. The task is read
10
+ * once (so a reloaded chat still sees an open request) and then followed over the task's event
11
+ * stream, whose events are folded into the same cache entry the task chip polls.
12
+ */
13
+ export declare function useDeferredInputRequest(backgroundTaskId: string, enabled: boolean): OpenInputRequest | undefined;
14
+ /** Answers a deferred call's suspended background task, fenced on the suspension that was shown. */
15
+ export declare function useResumeBackgroundTask(backgroundTaskId: string): import("@tanstack/react-query").UseMutationResult<{
16
+ id: string;
17
+ status: 'pending' | 'running' | 'suspended' | 'completed' | 'failed' | 'cancelled' | 'timed_out';
18
+ toolName: string;
19
+ toolCallId: string;
20
+ args: {
21
+ [x: string]: unknown;
22
+ };
23
+ agentId: string;
24
+ threadId?: string | undefined;
25
+ resourceId?: string | undefined;
26
+ runId: string;
27
+ result?: unknown | undefined;
28
+ error?: {
29
+ message: string;
30
+ stack?: string | undefined;
31
+ } | undefined;
32
+ createdAt: string;
33
+ startedAt?: string | undefined;
34
+ completedAt?: string | undefined;
35
+ retryCount: number;
36
+ maxRetries: number;
37
+ timeoutMs: number;
38
+ suspendPayload?: unknown | undefined;
39
+ suspendedAt?: string | undefined;
40
+ }, Error, {
41
+ resumeData: McpInputResumeData;
42
+ suspendedAt?: string | Date;
43
+ }, unknown>;
44
+ export declare const resumeErrorMessage: (error: Error) => string;
@@ -1,3 +1,4 @@
1
+ import type { McpInputRequestPayload } from '../mcp-input-request';
1
2
  import type { ActivityStatus } from '../../../../ds/components/ai/activity';
2
3
  export type McpTaskStatus = 'working' | 'input_required' | 'completed' | 'failed' | 'cancelled';
3
4
  /** What `@mastra/mcp`'s client writes to a task-backed tool's output stream (`MCPTaskProgress`). */
@@ -21,7 +22,11 @@ export interface McpTaskView extends McpTaskProgress {
21
22
  *
22
23
  * A deferred call (one running as a Mastra background task) settles its part with a placeholder
23
24
  * long before the task ends, so its end is never inferred here: the background task says when.
25
+ *
26
+ * While the call is suspended on the task's input request, the request names the task, so the chip
27
+ * reads `input_required` even on a reloaded card with no progress.
24
28
  */
25
- export declare function useMcpTaskProgress(result: unknown, status: ActivityStatus, { deferred }?: {
29
+ export declare function useMcpTaskProgress(result: unknown, status: ActivityStatus, { deferred, request }?: {
26
30
  deferred?: boolean;
31
+ request?: McpInputRequestPayload;
27
32
  }): McpTaskView | undefined;
@@ -0,0 +1,18 @@
1
+ import type { McpInputRequestPayload, McpInputResumeData } from './mcp-input-request';
2
+ export interface McpInputRequestToolProps {
3
+ payload: McpInputRequestPayload;
4
+ /** Sends the answers; the request stays open (and answerable again) if the returned promise rejects. */
5
+ onSubmit: (resumeData: McpInputResumeData) => void | Promise<unknown>;
6
+ isSubmitting?: boolean;
7
+ /** Why the last answer didn't go through. */
8
+ error?: string;
9
+ /** History view: show the question without answering it. */
10
+ readOnly?: boolean;
11
+ /** Why the request can't be answered here, shown with the questions. */
12
+ notice?: string;
13
+ }
14
+ /**
15
+ * The questions an MCP server asked while a tool call's task waits. Every request key needs an answer
16
+ * before the call can continue, so answers are held until the last one is given, then sent together.
17
+ */
18
+ export declare function McpInputRequestTool({ payload, onSubmit, isSubmitting, error, readOnly, notice, }: McpInputRequestToolProps): import("react").JSX.Element;
@@ -0,0 +1,40 @@
1
+ import type { MessageMetadata, SuspendedToolMetadata } from '../messages/message-metadata';
2
+ /** An embedded request an MCP server sent while its task waits (`{ method, params }`). */
3
+ export interface McpInputRequest {
4
+ method: string;
5
+ params?: Record<string, unknown>;
6
+ }
7
+ /** What `@mastra/mcp` suspends a task-backed tool call with (`MCPInputRequestSuspendPayload`). */
8
+ export interface McpInputRequestPayload {
9
+ type: 'mcp-input-request';
10
+ serverName: string;
11
+ toolName: string;
12
+ taskId: string;
13
+ createdAt: string;
14
+ /** When the call suspended; new each time the same task asks again, unlike `createdAt`. */
15
+ requestedAt?: string;
16
+ requests: Record<string, McpInputRequest>;
17
+ }
18
+ export type McpInputAction = 'accept' | 'decline' | 'cancel';
19
+ export interface McpInputResponse {
20
+ action: McpInputAction;
21
+ content?: Record<string, unknown>;
22
+ }
23
+ /** Resume data answering every request key (`MCPInputRequestResumeData`). */
24
+ export interface McpInputResumeData {
25
+ inputResponses: Record<string, McpInputResponse>;
26
+ }
27
+ export declare function isMcpInputRequest(payload: unknown): payload is McpInputRequestPayload;
28
+ /** More questions at once than any real task asks; the server decides these, so Studio bounds them. */
29
+ export declare const MAX_INPUT_REQUESTS = 20;
30
+ export declare const MAX_REQUEST_MESSAGE_LENGTH = 2000;
31
+ export declare const MAX_INPUT_REQUESTS_SIZE: number;
32
+ /** Whether the server sent more than Studio draws: too many questions, a huge message, or huge params. */
33
+ export declare function inputRequestTooLarge(payload: McpInputRequestPayload): boolean;
34
+ /**
35
+ * This call's own suspension. Saved entries are keyed by call id, but a live run keys them by tool
36
+ * name (two calls of one tool share that key), so the entry's own `toolCallId` decides.
37
+ */
38
+ export declare function findSuspension(metadata: MessageMetadata | undefined, toolCallId: string): SuspendedToolMetadata | undefined;
39
+ /** The MCP input request this call is suspended on, if it is. */
40
+ export declare function suspendedMcpInputRequest(metadata: MessageMetadata | undefined, toolCallId: string): McpInputRequestPayload | undefined;
@@ -2,7 +2,7 @@ import type { MessageMetadata, SuspendedToolMetadata, ToolApprovalMetadata } fro
2
2
  import type { ToolPartFields } from '../messages/renderers/tool-part';
3
3
  import type { ActivityStatus } from '../../../ds/components/ai/activity';
4
4
  /** Which card draws a call. Decided once, shared by the dispatcher and the fold. */
5
- export type ToolCardKind = 'hidden' | 'observation' | 'ask_user' | 'connect_prompt' | 'submit_plan' | 'background' | 'agent' | 'workflow' | 'file_tree' | 'sandbox' | 'code_mode' | 'mcp_app' | 'knowledge' | 'plain';
5
+ export type ToolCardKind = 'hidden' | 'observation' | 'ask_user' | 'connect_prompt' | 'submit_plan' | 'mcp_input_request' | 'background' | 'agent' | 'workflow' | 'file_tree' | 'sandbox' | 'code_mode' | 'mcp_app' | 'knowledge' | 'plain';
6
6
  export interface ToolCardContext {
7
7
  metadata?: MessageMetadata;
8
8
  mcpAppTools?: Record<string, unknown>;
@@ -14,6 +14,8 @@ export interface ToolInteraction {
14
14
  export declare const isAgentCall: (metadata: MessageMetadata | undefined, toolName: string) => boolean;
15
15
  export declare const isWorkflowCall: (metadata: MessageMetadata | undefined, toolName: string) => boolean;
16
16
  export declare const isSettledState: (state: string | undefined) => boolean;
17
+ /** A call running as a Mastra background task. An awaited call's part also names its task, but holds the final result. */
18
+ export declare const isDeferredCall: (backgroundTaskId: string | undefined, backgroundTaskStatus: string | undefined) => boolean;
17
19
  /** A call neither settled nor carried by a live run reads as idle, so stale history never shimmers. */
18
20
  export declare function badgeStatus(state: string | undefined, chatRunning: boolean): ActivityStatus;
19
21
  export declare const codeModeCall: (input: unknown, output: unknown) => {
@@ -24,4 +26,4 @@ export declare const codeModeCall: (input: unknown, output: unknown) => {
24
26
  export declare function toolInteraction(metadata: MessageMetadata | undefined, toolName: string, toolCallId: string): ToolInteraction;
25
27
  /** Tools the transcript never draws: working memory updates and task tools (shown in the docked task list). */
26
28
  export declare function isHiddenTool(toolName: string): boolean;
27
- export declare function toolCardKind({ toolName, toolCallId, input, output, state }: ToolPartFields, { metadata, mcpAppTools }: ToolCardContext): ToolCardKind;
29
+ export declare function toolCardKind({ toolName, toolCallId, input, output, state, backgroundTaskId, backgroundTaskStatus }: ToolPartFields, { metadata, mcpAppTools }: ToolCardContext): ToolCardKind;
@@ -27,4 +27,4 @@ export interface ToolCardProps {
27
27
  }
28
28
  /** Its own workflow run scope, so a streaming workflow result can drive a live graph inside the card. */
29
29
  export declare const ToolCard: (props: ToolCardProps) => import("react").JSX.Element;
30
- export declare const ToolCardInner: ({ toolName, input, output, modelOutput, backgroundTaskId, backgroundTaskStatus, toolCallId, state, errorText, metadata, dataParts, readOnly, }: ToolCardProps) => import("react").JSX.Element | null;
30
+ export declare const ToolCardInner: ({ toolName, input, output, modelOutput, backgroundTaskId, backgroundTaskStatus, toolCallId, state, errorText, metadata, dataParts, readOnly, }: ToolCardProps) => import("react").JSX.Element;
@@ -0,0 +1,23 @@
1
+ export interface KnowledgePageCardProps {
2
+ name: string;
3
+ /** `Page`, `Scope` or a scope's display label. */
4
+ kind: string;
5
+ /** Where the page is addressed, e.g. `org:acme#policies/refunds`. */
6
+ pageRef?: string;
7
+ /** Where the page sits, from its root scope down. */
8
+ path?: string;
9
+ /** Already formatted (`1000+` when the server capped the count); left out when unknown or zero. */
10
+ childCount?: string;
11
+ /** Left out when unknown or both zero. */
12
+ links?: {
13
+ in: number;
14
+ out: number;
15
+ };
16
+ /** Of `links`, how many go to pages the graph doesn't draw. */
17
+ notShown?: number;
18
+ }
19
+ /**
20
+ * What the explorer's graph tooltip says about a page: name, kind and ref, children, links. The graph's
21
+ * dots and the hover cards on page links in chat both draw it.
22
+ */
23
+ export declare function KnowledgePageCard({ name, kind, pageRef, path, childCount, links, notShown }: KnowledgePageCardProps): import("react").JSX.Element;
@@ -36,6 +36,16 @@ export interface KnowledgeExplorerQueryState<T> {
36
36
  isError: boolean;
37
37
  error: Error | null;
38
38
  }
39
+ export interface KnowledgeExplorerPageLinks {
40
+ edges: Array<{
41
+ fromPageId: string;
42
+ toPageId: string;
43
+ kind: 'body' | 'note';
44
+ count: number;
45
+ }>;
46
+ pages: KnowledgePagePayload[];
47
+ truncated: boolean;
48
+ }
39
49
  /** One request for a tree level: `parentId: null` for the root scopes. */
40
50
  export interface KnowledgeExplorerTreeRequest {
41
51
  parentId: string | null;
@@ -58,6 +68,23 @@ export interface KnowledgeExplorerSource {
58
68
  };
59
69
  /** Tree levels, one result per request in order (e.g. `useQueries`). Enables the lazily loaded tree and child pages. */
60
70
  useTreeLevels?: (requests: KnowledgeExplorerTreeRequest[]) => Array<KnowledgeExplorerQueryState<KnowledgeExplorerTreeLevel>>;
71
+ /**
72
+ * Pages a link reaches, by id or `[[ref]]` (`scope#path`), one result per entry in order (e.g.
73
+ * `useQueries`). Lets the focused page draw links to pages the graph hasn't loaded; without it only
74
+ * links to loaded pages are drawn. A key the host can't resolve should come back as an error.
75
+ */
76
+ useLinkedPages?: (keys: string[]) => Array<KnowledgeExplorerQueryState<KnowledgeExplorerPageDetail>>;
77
+ /**
78
+ * Exact links into and out of each page (by `[[ref]]` or note mention), counted over the whole store, for
79
+ * the pages the graph draws. Without it, or when it errors (a server with no link index answers 501), the
80
+ * graph counts only the links between pages it has loaded.
81
+ */
82
+ useLinkCounts?: (pageIds: string[]) => KnowledgeExplorerQueryState<Record<string, {
83
+ in: number;
84
+ out: number;
85
+ }>>;
86
+ /** One page's links with the pages at their other ends; fetched for the page under the pointer. Null disables it. */
87
+ usePageLinks?: (pageId: string | null) => KnowledgeExplorerQueryState<KnowledgeExplorerPageLinks>;
61
88
  /** A page's recent activity, newest first. */
62
89
  useActivity?: (pageId: string) => KnowledgeExplorerQueryState<KnowledgeExplorerActivity>;
63
90
  }
@@ -70,6 +97,8 @@ export interface KnowledgePageExplorerProps {
70
97
  view: KnowledgeExplorerView;
71
98
  onViewChange: (view: KnowledgeExplorerView) => void;
72
99
  }
100
+ /** Links of the selected page drawn at most in each direction; the rest are counted. */
101
+ export declare const FOCUS_LINK_CAP = 20;
73
102
  /**
74
103
  * Search, the page tree, and either the page graph or the selected page, kept in sync on one selection.
75
104
  * Wide screens show the tree beside the graph or the page; below `lg` one toggle picks tree, graph or page.
@@ -1,12 +1,38 @@
1
1
  import type { KnowledgePageEdge, KnowledgePagePayload, KnowledgeScopeGrantPayload } from '../pageTypes';
2
2
  export interface KnowledgePageGraphProps {
3
3
  pages: KnowledgePagePayload[];
4
- /** Mention edges between pages; parent edges are derived from `pages`. */
4
+ /** Mention and body-link edges between pages; parent edges are derived from `pages`. */
5
5
  edges: KnowledgePageEdge[];
6
6
  pinnedIds?: readonly string[];
7
7
  /** Access grants between scopes, drawn from each principal scope to the scope it reaches. */
8
8
  grants?: readonly KnowledgeScopeGrantPayload[];
9
9
  selectedPageId?: string | null;
10
+ /** The page the layout centres on when none is selected, drawn like a focused page without the ring. */
11
+ centerId?: string | null;
12
+ /** Per page, links into and out of it that the graph doesn't draw; shown as `→in out→` on full circles. */
13
+ hiddenLinks?: ReadonlyMap<string, {
14
+ in: number;
15
+ out: number;
16
+ }>;
17
+ /** Every link between pages, drawn or not: hovering a page draws its own, and tooltips count them. */
18
+ knownLinks?: readonly KnowledgePageEdge[];
19
+ /** Pages the focus links to or from that the hierarchy doesn't reach: drawn close around the focus. */
20
+ nearIds?: ReadonlySet<string>;
21
+ /** False while the pages the selected page needs are loading: the graph keeps its last layout until they are in. */
22
+ settled?: boolean;
23
+ /** Exact links into and out of pages, from the store; they replace the counts taken from `knownLinks`. */
24
+ exactLinkCounts?: ReadonlyMap<string, {
25
+ in: number;
26
+ out: number;
27
+ }>;
28
+ /** Links fetched for the page under the pointer: drawn on hover, never counted or laid out. */
29
+ fetchedLinks?: readonly KnowledgePageEdge[];
30
+ /** The page under the pointer, or null: a host can fetch that page's links. */
31
+ onHover?: (pageId: string | null) => void;
32
+ /** Write each dot's total of links in and out inside it. */
33
+ showCounts?: boolean;
34
+ /** The pointer rests on a dot or stand-in: a host can load what it stands for. */
35
+ onPreview?: (page: KnowledgePagePayload) => void;
10
36
  /** A page that wasn't selected was clicked, tapped, or activated with Enter or Space: select it. */
11
37
  onSelect: (page: KnowledgePagePayload) => void;
12
38
  /** The already-selected page was clicked, tapped, or activated again: open it. Without it, that only reselects. */
@@ -9,7 +9,8 @@ export declare const KNOWLEDGE_TREE_ROOT = "";
9
9
  *
10
10
  * A host that loads the tree a level at a time passes `mayHaveChildren` (so unloaded pages still offer
11
11
  * a chevron), listens to `onExpandedChange` to load the opened levels, and passes `loadMore` for
12
- * levels with more children to fetch.
12
+ * levels with more children to fetch. A page's `childCount`, when the server sends one, shows beside
13
+ * its name. Selecting a page with children also opens it.
13
14
  */
14
15
  export declare function KnowledgePageTree({ pages, pinnedIds, selectedPageId, onSelect, initiallyExpanded, mayHaveChildren, onExpandedChange, loadMore, 'aria-label': ariaLabel, }: {
15
16
  pages: KnowledgePagePayload[];
@@ -0,0 +1,2 @@
1
+ /** The text with any word wider than the circle cut short with an ellipsis, so words never break mid-way. */
2
+ export declare function fitWords(text: string, maxChars: number): string;