@mastra/playground-ui 67.0.0-alpha.3 → 68.0.0-alpha.0

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 (244) hide show
  1. package/dist/KnowledgePageGraph.css +11 -0
  2. package/dist/components/ai/tool-approval.cjs.js +1 -1
  3. package/dist/components/ai/tool-approval.es.js +1 -1
  4. package/dist/components/ai/tool-call.cjs.js +2 -2
  5. package/dist/components/ai/tool-call.es.js +2 -2
  6. package/dist/domains/chat/activity/model/activity-segments.cjs.js +1 -1
  7. package/dist/domains/chat/activity/model/activity-segments.es.js +1 -1
  8. package/dist/domains/chat/activity/model/activity-words.cjs.js +2 -2
  9. package/dist/domains/chat/activity/model/activity-words.es.js +2 -2
  10. package/dist/domains/chat/knowledge/knowledge-links.cjs.js +40 -0
  11. package/dist/domains/chat/knowledge/knowledge-links.cjs.js.map +1 -0
  12. package/dist/domains/chat/knowledge/knowledge-links.d.ts +1 -0
  13. package/dist/domains/chat/knowledge/knowledge-links.es.js +38 -0
  14. package/dist/domains/chat/knowledge/knowledge-links.es.js.map +1 -0
  15. package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js +79 -0
  16. package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js.map +1 -0
  17. package/dist/domains/chat/knowledge/pinned-knowledge-data.d.ts +1 -0
  18. package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js +77 -0
  19. package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js.map +1 -0
  20. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +124 -0
  21. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js.map +1 -0
  22. package/dist/domains/chat/knowledge/pinned-knowledge.d.ts +1 -0
  23. package/dist/domains/chat/knowledge/pinned-knowledge.es.js +123 -0
  24. package/dist/domains/chat/knowledge/pinned-knowledge.es.js.map +1 -0
  25. package/dist/domains/chat/knowledge.cjs.js +12 -0
  26. package/dist/domains/chat/knowledge.d.ts +1 -0
  27. package/dist/domains/chat/knowledge.es.js +5 -0
  28. package/dist/domains/chat/messages/message-row.cjs.js +2 -2
  29. package/dist/domains/chat/messages/message-row.es.js +2 -2
  30. package/dist/domains/chat/messages/signal-badge.cjs.js +7 -0
  31. package/dist/domains/chat/messages/signal-badge.cjs.js.map +1 -1
  32. package/dist/domains/chat/messages/signal-badge.es.js +7 -0
  33. package/dist/domains/chat/messages/signal-badge.es.js.map +1 -1
  34. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  35. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  36. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
  37. package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
  38. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +2 -2
  39. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +2 -2
  40. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js +273 -0
  41. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js.map +1 -0
  42. package/dist/domains/chat/tools/badges/knowledge-tool-badge.d.ts +1 -0
  43. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +270 -0
  44. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js.map +1 -0
  45. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +1 -1
  46. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +1 -1
  47. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +2 -2
  48. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +2 -2
  49. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  50. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  51. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +3 -3
  52. package/dist/domains/chat/tools/badges/tool-badge.es.js +3 -3
  53. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +2 -2
  54. package/dist/domains/chat/tools/badges/workflow-badge.es.js +2 -2
  55. package/dist/domains/chat/tools/tool-card-kind.cjs.js +4 -2
  56. package/dist/domains/chat/tools/tool-card-kind.cjs.js.map +1 -1
  57. package/dist/domains/chat/tools/tool-card-kind.es.js +4 -2
  58. package/dist/domains/chat/tools/tool-card-kind.es.js.map +1 -1
  59. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  60. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  61. package/dist/domains/chat/tools/tool-groups.cjs.js +3 -2
  62. package/dist/domains/chat/tools/tool-groups.cjs.js.map +1 -1
  63. package/dist/domains/chat/tools/tool-groups.es.js +3 -2
  64. package/dist/domains/chat/tools/tool-groups.es.js.map +1 -1
  65. package/dist/domains/chat.cjs.js +11 -0
  66. package/dist/domains/chat.es.js +5 -1
  67. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +438 -0
  68. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js.map +1 -0
  69. package/dist/domains/knowledge/components/KnowledgePageDetail.d.ts +1 -0
  70. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +436 -0
  71. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js.map +1 -0
  72. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js +521 -0
  73. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js.map +1 -0
  74. package/dist/domains/knowledge/components/KnowledgePageExplorer.d.ts +1 -0
  75. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js +520 -0
  76. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js.map +1 -0
  77. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js +626 -0
  78. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js.map +1 -0
  79. package/dist/domains/knowledge/components/KnowledgePageGraph.d.ts +1 -0
  80. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js +625 -0
  81. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js.map +1 -0
  82. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js +170 -0
  83. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js.map +1 -0
  84. package/dist/domains/knowledge/components/KnowledgePageTree.d.ts +1 -0
  85. package/dist/domains/knowledge/components/KnowledgePageTree.es.js +168 -0
  86. package/dist/domains/knowledge/components/KnowledgePageTree.es.js.map +1 -0
  87. package/dist/domains/knowledge/hooks/useInteractionIdle.cjs.js +37 -0
  88. package/dist/domains/knowledge/hooks/useInteractionIdle.cjs.js.map +1 -0
  89. package/dist/domains/knowledge/hooks/useInteractionIdle.d.ts +1 -0
  90. package/dist/domains/knowledge/hooks/useInteractionIdle.es.js +35 -0
  91. package/dist/domains/knowledge/hooks/useInteractionIdle.es.js.map +1 -0
  92. package/dist/domains/knowledge/lib/layout.cjs.js +93 -0
  93. package/dist/domains/knowledge/lib/layout.cjs.js.map +1 -0
  94. package/dist/domains/knowledge/lib/layout.d.ts +1 -0
  95. package/dist/domains/knowledge/lib/layout.es.js +92 -0
  96. package/dist/domains/knowledge/lib/layout.es.js.map +1 -0
  97. package/dist/domains/knowledge/lib/pageGraph.cjs.js +135 -0
  98. package/dist/domains/knowledge/lib/pageGraph.cjs.js.map +1 -0
  99. package/dist/domains/knowledge/lib/pageGraph.d.ts +1 -0
  100. package/dist/domains/knowledge/lib/pageGraph.es.js +128 -0
  101. package/dist/domains/knowledge/lib/pageGraph.es.js.map +1 -0
  102. package/dist/domains/knowledge/lib/pageLayout.cjs.js +49 -0
  103. package/dist/domains/knowledge/lib/pageLayout.cjs.js.map +1 -0
  104. package/dist/domains/knowledge/lib/pageLayout.d.ts +1 -0
  105. package/dist/domains/knowledge/lib/pageLayout.es.js +48 -0
  106. package/dist/domains/knowledge/lib/pageLayout.es.js.map +1 -0
  107. package/dist/domains/knowledge/lib/pageTree.cjs.js +98 -0
  108. package/dist/domains/knowledge/lib/pageTree.cjs.js.map +1 -0
  109. package/dist/domains/knowledge/lib/pageTree.d.ts +1 -0
  110. package/dist/domains/knowledge/lib/pageTree.es.js +94 -0
  111. package/dist/domains/knowledge/lib/pageTree.es.js.map +1 -0
  112. package/dist/domains/knowledge/lib/popupPlacement.cjs.js +22 -0
  113. package/dist/domains/knowledge/lib/popupPlacement.cjs.js.map +1 -0
  114. package/dist/domains/knowledge/lib/popupPlacement.d.ts +1 -0
  115. package/dist/domains/knowledge/lib/popupPlacement.es.js +21 -0
  116. package/dist/domains/knowledge/lib/popupPlacement.es.js.map +1 -0
  117. package/dist/domains/knowledge/lib/recordText.cjs.js +26 -0
  118. package/dist/domains/knowledge/lib/recordText.cjs.js.map +1 -0
  119. package/dist/domains/knowledge/lib/recordText.d.ts +1 -0
  120. package/dist/domains/knowledge/lib/recordText.es.js +25 -0
  121. package/dist/domains/knowledge/lib/recordText.es.js.map +1 -0
  122. package/dist/domains/knowledge/pageTypes.cjs.js +0 -0
  123. package/dist/domains/knowledge/pageTypes.d.ts +1 -0
  124. package/dist/domains/knowledge/pageTypes.es.js +0 -0
  125. package/dist/domains/logs/components/logs-saved-views.cjs.js +1 -1
  126. package/dist/domains/logs/components/logs-saved-views.es.js +1 -1
  127. package/dist/domains/observability/saved-views/observability-saved-views.cjs.js +1 -1
  128. package/dist/domains/observability/saved-views/observability-saved-views.es.js +1 -1
  129. package/dist/domains/observability/saved-views/saved-views-provider.cjs.js +3 -2
  130. package/dist/domains/observability/saved-views/saved-views-provider.cjs.js.map +1 -1
  131. package/dist/domains/observability/saved-views/saved-views-provider.es.js +3 -2
  132. package/dist/domains/observability/saved-views/saved-views-provider.es.js.map +1 -1
  133. package/dist/domains/observability/saved-views/saved-views-source.cjs.js.map +1 -1
  134. package/dist/domains/observability/saved-views/saved-views-source.es.js.map +1 -1
  135. package/dist/domains/observability/saved-views/use-hosted-saved-views.cjs.js +3 -2
  136. package/dist/domains/observability/saved-views/use-hosted-saved-views.cjs.js.map +1 -1
  137. package/dist/domains/observability/saved-views/use-hosted-saved-views.es.js +3 -2
  138. package/dist/domains/observability/saved-views/use-hosted-saved-views.es.js.map +1 -1
  139. package/dist/domains/observability/saved-views.cjs.js +1 -1
  140. package/dist/domains/observability/saved-views.es.js +1 -1
  141. package/dist/domains/observability.cjs.js +1 -1
  142. package/dist/domains/observability.es.js +1 -1
  143. package/dist/domains/skills/skill-simple-form.cjs.js +2 -2
  144. package/dist/domains/skills/skill-simple-form.cjs.js.map +1 -1
  145. package/dist/domains/skills/skill-simple-form.es.js +2 -2
  146. package/dist/domains/skills/skill-simple-form.es.js.map +1 -1
  147. package/dist/domains/spans/components/spans-explorer-body.cjs.js +1 -1
  148. package/dist/domains/spans/components/spans-explorer-body.es.js +1 -1
  149. package/dist/domains/threads/components/threads-explorer-body.cjs.js +1 -1
  150. package/dist/domains/threads/components/threads-explorer-body.es.js +1 -1
  151. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  152. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  153. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  154. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  155. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +1 -1
  156. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +1 -1
  157. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +1 -1
  158. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +1 -1
  159. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  160. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  161. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  162. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  163. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  164. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  165. package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +1 -1
  166. package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +1 -1
  167. package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +1 -1
  168. package/dist/domains/traces/components/span-payload/span-tools-section.es.js +1 -1
  169. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.cjs.js +1 -1
  170. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.es.js +1 -1
  171. package/dist/domains/workflows/workflow/use-workflow-trigger.cjs.js +2 -1
  172. package/dist/domains/workflows/workflow/use-workflow-trigger.cjs.js.map +1 -1
  173. package/dist/domains/workflows/workflow/use-workflow-trigger.es.js +2 -1
  174. package/dist/domains/workflows/workflow/use-workflow-trigger.es.js.map +1 -1
  175. package/dist/lib/form/dynamic-form.cjs.js +2 -2
  176. package/dist/lib/form/dynamic-form.cjs.js.map +1 -1
  177. package/dist/lib/form/dynamic-form.es.js +2 -2
  178. package/dist/lib/form/dynamic-form.es.js.map +1 -1
  179. package/dist/lib/form/json-draft.cjs.js +1 -1
  180. package/dist/lib/form/json-draft.es.js +1 -1
  181. package/dist/lib/form/zod-provider/compat.cjs.js +8 -0
  182. package/dist/lib/form/zod-provider/compat.cjs.js.map +1 -1
  183. package/dist/lib/form/zod-provider/compat.es.js +8 -1
  184. package/dist/lib/form/zod-provider/compat.es.js.map +1 -1
  185. package/dist/lib/form/zod-provider.cjs.js +1 -1
  186. package/dist/lib/form/zod-provider.es.js +1 -1
  187. package/dist/{observability-saved-views-CwCii7hh.cjs → observability-saved-views-BNU3GkK6.cjs} +8 -6
  188. package/dist/observability-saved-views-BNU3GkK6.cjs.map +1 -0
  189. package/dist/{observability-saved-views-Bo5kLN20.js → observability-saved-views-Zlz74syw.js} +8 -6
  190. package/dist/observability-saved-views-Zlz74syw.js.map +1 -0
  191. package/dist/{span-payload-primitives-Dyhbqaa7.js → span-payload-primitives-ChvD2RrN.js} +2 -2
  192. package/dist/{span-payload-primitives-Dyhbqaa7.js.map → span-payload-primitives-ChvD2RrN.js.map} +1 -1
  193. package/dist/{span-payload-primitives-B10Xxmx7.cjs → span-payload-primitives-w1vtAXAw.cjs} +2 -2
  194. package/dist/{span-payload-primitives-B10Xxmx7.cjs.map → span-payload-primitives-w1vtAXAw.cjs.map} +1 -1
  195. package/dist/src/domains/chat/index.d.ts +1 -0
  196. package/dist/src/domains/chat/knowledge/index.d.ts +5 -0
  197. package/dist/src/domains/chat/knowledge/knowledge-links.d.ts +21 -0
  198. package/dist/src/domains/chat/knowledge/pinned-knowledge-data.d.ts +22 -0
  199. package/dist/src/domains/chat/knowledge/pinned-knowledge.d.ts +9 -0
  200. package/dist/src/domains/chat/tools/badges/knowledge-tool-badge.d.ts +19 -0
  201. package/dist/src/domains/chat/tools/tool-card-kind.d.ts +2 -2
  202. package/dist/src/domains/knowledge/components/KnowledgePageDetail.d.ts +42 -0
  203. package/dist/src/domains/knowledge/components/KnowledgePageExplorer.d.ts +80 -0
  204. package/dist/src/domains/knowledge/components/KnowledgePageGraph.d.ts +35 -0
  205. package/dist/src/domains/knowledge/components/KnowledgePageTree.d.ts +27 -0
  206. package/dist/src/domains/knowledge/hooks/useInteractionIdle.d.ts +12 -0
  207. package/dist/src/domains/knowledge/lib/layout.d.ts +35 -0
  208. package/dist/src/domains/knowledge/lib/pageGraph.d.ts +45 -0
  209. package/dist/src/domains/knowledge/lib/pageLayout.d.ts +24 -0
  210. package/dist/src/domains/knowledge/lib/pageTree.d.ts +28 -0
  211. package/dist/src/domains/knowledge/lib/popupPlacement.d.ts +12 -0
  212. package/dist/src/domains/knowledge/lib/recordText.d.ts +9 -0
  213. package/dist/src/domains/knowledge/pageTypes.d.ts +96 -0
  214. package/dist/src/domains/observability/saved-views/saved-views-provider.d.ts +6 -1
  215. package/dist/src/domains/observability/saved-views/saved-views-source.d.ts +1 -0
  216. package/dist/src/domains/observability/saved-views/use-hosted-saved-views.d.ts +1 -1
  217. package/dist/src/domains/skills/skill-simple-form.d.ts +3 -1
  218. package/dist/src/ds/components/SavedViews/saved-view-picker.d.ts +3 -1
  219. package/dist/src/ds/components/ai/tool-call/tool-phrases.d.ts +30 -0
  220. package/dist/src/lib/form/zod-provider/compat.d.ts +5 -0
  221. package/dist/style.css +63 -1
  222. package/dist/{tool-approval-FeuyUUcL.js → tool-approval-DHeCkWHT.js} +3 -3
  223. package/dist/{tool-approval-FeuyUUcL.js.map → tool-approval-DHeCkWHT.js.map} +1 -1
  224. package/dist/{tool-approval-BfjoSNOC.cjs → tool-approval-Dfi0uAKU.cjs} +3 -3
  225. package/dist/{tool-approval-BfjoSNOC.cjs.map → tool-approval-Dfi0uAKU.cjs.map} +1 -1
  226. package/dist/{tool-call-CvilN9ti.cjs → tool-call-BCsDhIhs.cjs} +32 -2
  227. package/dist/{tool-call-CvilN9ti.cjs.map → tool-call-BCsDhIhs.cjs.map} +1 -1
  228. package/dist/{tool-call-BxYXs9w0.js → tool-call-CILZa3tn.js} +32 -2
  229. package/dist/{tool-call-BxYXs9w0.js.map → tool-call-CILZa3tn.js.map} +1 -1
  230. package/dist/{tool-card-ELW898uw.js → tool-card-C3sDFUWc.js} +18 -4
  231. package/dist/tool-card-C3sDFUWc.js.map +1 -0
  232. package/dist/{tool-card-B7O8AsRl.cjs → tool-card-CJ7Kxi-U.cjs} +18 -4
  233. package/dist/tool-card-CJ7Kxi-U.cjs.map +1 -0
  234. package/dist/{tool-presentation-BLErsb7c.cjs → tool-presentation-CQlDEwgS.cjs} +26 -1
  235. package/dist/tool-presentation-CQlDEwgS.cjs.map +1 -0
  236. package/dist/{tool-presentation-BSZYIWx2.js → tool-presentation-DvCsb_kz.js} +26 -1
  237. package/dist/tool-presentation-DvCsb_kz.js.map +1 -0
  238. package/package.json +13 -11
  239. package/dist/observability-saved-views-Bo5kLN20.js.map +0 -1
  240. package/dist/observability-saved-views-CwCii7hh.cjs.map +0 -1
  241. package/dist/tool-card-B7O8AsRl.cjs.map +0 -1
  242. package/dist/tool-card-ELW898uw.js.map +0 -1
  243. package/dist/tool-presentation-BLErsb7c.cjs.map +0 -1
  244. package/dist/tool-presentation-BSZYIWx2.js.map +0 -1
@@ -0,0 +1,11 @@
1
+ .knowledge-circle {
2
+ background: var(--card);
3
+ border-color: var(--knowledge-color);
4
+ transition: border-color var(--duration-fast) var(--ease-out-custom);
5
+ }
6
+
7
+ .knowledge-circle[data-selected='true'],
8
+ .react-flow__node:focus-visible .knowledge-circle {
9
+ outline: 2px solid var(--knowledge-color);
10
+ outline-offset: 5px;
11
+ }
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_tool_approval = require("../../tool-approval-BfjoSNOC.cjs");
2
+ const require_tool_approval = require("../../tool-approval-Dfi0uAKU.cjs");
3
3
  exports.ToolApproval = require_tool_approval.ToolApproval;
4
4
  exports.ToolApprovalActions = require_tool_approval.ToolApprovalActions;
5
5
  exports.ToolApprovalStatus = require_tool_approval.ToolApprovalStatus;
@@ -1 +1 @@
1
- export { t as ToolApproval, n as ToolApprovalActions, r as ToolApprovalStatus } from "../../tool-approval-FeuyUUcL.js";
1
+ export { t as ToolApproval, n as ToolApprovalActions, r as ToolApprovalStatus } from "../../tool-approval-DHeCkWHT.js";
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_tool_call = require("../../tool-call-CvilN9ti.cjs");
3
- const require_tool_presentation = require("../../tool-presentation-BLErsb7c.cjs");
2
+ const require_tool_call = require("../../tool-call-BCsDhIhs.cjs");
3
+ const require_tool_presentation = require("../../tool-presentation-CQlDEwgS.cjs");
4
4
  exports.TOOL_GROUP_MIN = require_tool_call.TOOL_GROUP_MIN;
5
5
  exports.ToolCallArguments = require_tool_call.ToolCallArguments;
6
6
  exports.ToolCallCommand = require_tool_call.ToolCallCommand;
@@ -1,3 +1,3 @@
1
- import { a as ToolCallArguments, c as ToolCallMono, d as stripAnsi, f as stripSerializedAnsi, i as ToolCallGroup, l as TOOL_GROUP_MIN, n as toolPhrases, o as ToolCallEdit, r as ToolCallOutput, s as ToolCallCommand, t as ToolCallTime, u as groupConsecutive } from "../../tool-call-BxYXs9w0.js";
2
- import { a as toolEdit, i as stringifyToolValue, n as isTaskTool, o as visibleToolArgumentsText, r as presentTool, t as hasToolArguments } from "../../tool-presentation-BSZYIWx2.js";
1
+ import { a as ToolCallArguments, c as ToolCallMono, d as stripAnsi, f as stripSerializedAnsi, i as ToolCallGroup, l as TOOL_GROUP_MIN, n as toolPhrases, o as ToolCallEdit, r as ToolCallOutput, s as ToolCallCommand, t as ToolCallTime, u as groupConsecutive } from "../../tool-call-CILZa3tn.js";
2
+ import { a as toolEdit, i as stringifyToolValue, n as isTaskTool, o as visibleToolArgumentsText, r as presentTool, t as hasToolArguments } from "../../tool-presentation-DvCsb_kz.js";
3
3
  export { TOOL_GROUP_MIN, ToolCallArguments, ToolCallCommand, ToolCallEdit, ToolCallGroup, ToolCallMono, ToolCallOutput, ToolCallTime, groupConsecutive, hasToolArguments, isTaskTool, presentTool, stringifyToolValue, stripAnsi, stripSerializedAnsi, toolEdit, toolPhrases, visibleToolArgumentsText };
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_tool_call = require("../../../../tool-call-CvilN9ti.cjs");
2
+ const require_tool_call = require("../../../../tool-call-BCsDhIhs.cjs");
3
3
  // src/domains/chat/activity/model/activity-segments.ts
4
4
  function activitySegments(members) {
5
5
  const groups = require_tool_call.groupConsecutive(members, {
@@ -1,4 +1,4 @@
1
- import { u as groupConsecutive } from "../../../../tool-call-BxYXs9w0.js";
1
+ import { u as groupConsecutive } from "../../../../tool-call-CILZa3tn.js";
2
2
  // src/domains/chat/activity/model/activity-segments.ts
3
3
  function activitySegments(members) {
4
4
  const groups = groupConsecutive(members, {
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_utils_duration = require("../../../../utils/duration.cjs.js");
3
3
  const require_AgentIndicator = require("../../../../AgentIndicator-to30W73z.cjs");
4
- const require_tool_call = require("../../../../tool-call-CvilN9ti.cjs");
5
- const require_tool_presentation = require("../../../../tool-presentation-BLErsb7c.cjs");
4
+ const require_tool_call = require("../../../../tool-call-BCsDhIhs.cjs");
5
+ const require_tool_presentation = require("../../../../tool-presentation-CQlDEwgS.cjs");
6
6
  // src/domains/chat/activity/model/activity-words.ts
7
7
  var SUMMARY_KINDS = 3;
8
8
  function secondsDuration(elapsedMs) {
@@ -1,7 +1,7 @@
1
1
  import { formatDuration } from "../../../../utils/duration.es.js";
2
2
  import { t as agentGlyph } from "../../../../AgentIndicator-Bs2S8AWJ.js";
3
- import { n as toolPhrases } from "../../../../tool-call-BxYXs9w0.js";
4
- import { r as presentTool } from "../../../../tool-presentation-BSZYIWx2.js";
3
+ import { n as toolPhrases } from "../../../../tool-call-CILZa3tn.js";
4
+ import { r as presentTool } from "../../../../tool-presentation-DvCsb_kz.js";
5
5
  // src/domains/chat/activity/model/activity-words.ts
6
6
  var SUMMARY_KINDS = 3;
7
7
  function secondsDuration(elapsedMs) {
@@ -0,0 +1,40 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_lib_framework = require("../../../lib/framework.cjs.js");
3
+ const require_domains_chat_knowledge_pinned_knowledge_data = require("./pinned-knowledge-data.cjs.js");
4
+ let react = require("react");
5
+ let react_jsx_runtime = require("react/jsx-runtime");
6
+ // src/domains/chat/knowledge/knowledge-links.tsx
7
+ var KnowledgeLinksContext = (0, react.createContext)({ pageHref: require_domains_chat_knowledge_pinned_knowledge_data.knowledgePageHref });
8
+ /**
9
+ * Where Knowledge page links in chat (tool cards, pinned Knowledge) point. Studio's default opens its own
10
+ * Knowledge page; a host with its own route (Factory's per-project page) or its own router passes both.
11
+ */
12
+ function KnowledgeLinksProvider({ pageHref, Link, children }) {
13
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(KnowledgeLinksContext.Provider, {
14
+ value: {
15
+ pageHref,
16
+ Link
17
+ },
18
+ children
19
+ });
20
+ }
21
+ /** A link to a Knowledge page, through the host's link component and route. */
22
+ function KnowledgePageLink({ pageId, children, className = "min-w-0 truncate text-foreground underline-offset-2 hover:underline" }) {
23
+ const links = (0, react.useContext)(KnowledgeLinksContext);
24
+ const { Link: FrameworkLink } = require_lib_framework.useLinkComponent();
25
+ const Link = links.Link ?? FrameworkLink;
26
+ const href = links.pageHref(pageId);
27
+ if (!href) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
28
+ className,
29
+ children
30
+ });
31
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Link, {
32
+ href,
33
+ className,
34
+ children
35
+ });
36
+ }
37
+ exports.KnowledgeLinksProvider = KnowledgeLinksProvider;
38
+ exports.KnowledgePageLink = KnowledgePageLink;
39
+
40
+ //# sourceMappingURL=knowledge-links.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-links.cjs.js","names":["createContext","knowledgePageHref","useContext","useLinkComponent"],"sources":["../../../../src/domains/chat/knowledge/knowledge-links.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { ReactNode } from 'react';\nimport { knowledgePageHref } from './pinned-knowledge-data';\nimport { useLinkComponent } from '@/lib/framework';\nimport type { LinkComponent } from '@/lib/framework';\n\ninterface KnowledgeLinks {\n /** Undefined when this host has no page to open, e.g. a chat outside any project; the name shows as text. */\n pageHref: (pageId: string) => string | undefined;\n Link?: LinkComponent;\n}\n\nconst KnowledgeLinksContext = createContext<KnowledgeLinks>({ pageHref: knowledgePageHref });\n\n/**\n * Where Knowledge page links in chat (tool cards, pinned Knowledge) point. Studio's default opens its own\n * Knowledge page; a host with its own route (Factory's per-project page) or its own router passes both.\n */\nexport function KnowledgeLinksProvider({ pageHref, Link, children }: KnowledgeLinks & { children: ReactNode }) {\n return <KnowledgeLinksContext.Provider value={{ pageHref, Link }}>{children}</KnowledgeLinksContext.Provider>;\n}\n\n/** A link to a Knowledge page, through the host's link component and route. */\nexport function KnowledgePageLink({\n pageId,\n children,\n className = 'min-w-0 truncate text-foreground underline-offset-2 hover:underline',\n}: {\n pageId: string;\n children: ReactNode;\n className?: string;\n}) {\n const links = useContext(KnowledgeLinksContext);\n const { Link: FrameworkLink } = useLinkComponent();\n const Link = links.Link ?? FrameworkLink;\n const href = links.pageHref(pageId);\n if (!href) return <span className={className}>{children}</span>;\n return (\n <Link href={href} className={className}>\n {children}\n </Link>\n );\n}\n"],"mappings":";;;;;;AAYA,IAAM,yBAAA,GAAwBA,MAAAA,cAAAA,CAA8B,EAAE,UAAUC,qDAAAA,kBAAkB,CAAC;;;;;AAM3F,SAAgB,uBAAuB,EAAE,UAAU,MAAM,YAAsD;CAC7G,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAsB,UAAvB;EAAgC,OAAO;GAAE;GAAU;EAAK;EAAI;CAAyC,CAAA;AAC9G;;AAGA,SAAgB,kBAAkB,EAChC,QACA,UACA,YAAY,yEAKX;CACD,MAAM,SAAA,GAAQC,MAAAA,WAAAA,CAAW,qBAAqB;CAC9C,MAAM,EAAE,MAAM,kBAAkBC,sBAAAA,iBAAiB;CACjD,MAAM,OAAO,MAAM,QAAQ;CAC3B,MAAM,OAAO,MAAM,SAAS,MAAM;CAClC,IAAI,CAAC,MAAM,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAiB;EAAY;CAAe,CAAA;CAC9D,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;EAAY;EAAiB;EAC1B;CACG,CAAA;AAEV"}
@@ -0,0 +1 @@
1
+ export * from '../../../src/domains/chat/knowledge/knowledge-links';
@@ -0,0 +1,38 @@
1
+ import { useLinkComponent } from "../../../lib/framework.es.js";
2
+ import { knowledgePageHref } from "./pinned-knowledge-data.es.js";
3
+ import { createContext, useContext } from "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+ // src/domains/chat/knowledge/knowledge-links.tsx
6
+ var KnowledgeLinksContext = createContext({ pageHref: knowledgePageHref });
7
+ /**
8
+ * Where Knowledge page links in chat (tool cards, pinned Knowledge) point. Studio's default opens its own
9
+ * Knowledge page; a host with its own route (Factory's per-project page) or its own router passes both.
10
+ */
11
+ function KnowledgeLinksProvider({ pageHref, Link, children }) {
12
+ return /* @__PURE__ */ jsx(KnowledgeLinksContext.Provider, {
13
+ value: {
14
+ pageHref,
15
+ Link
16
+ },
17
+ children
18
+ });
19
+ }
20
+ /** A link to a Knowledge page, through the host's link component and route. */
21
+ function KnowledgePageLink({ pageId, children, className = "min-w-0 truncate text-foreground underline-offset-2 hover:underline" }) {
22
+ const links = useContext(KnowledgeLinksContext);
23
+ const { Link: FrameworkLink } = useLinkComponent();
24
+ const Link = links.Link ?? FrameworkLink;
25
+ const href = links.pageHref(pageId);
26
+ if (!href) return /* @__PURE__ */ jsx("span", {
27
+ className,
28
+ children
29
+ });
30
+ return /* @__PURE__ */ jsx(Link, {
31
+ href,
32
+ className,
33
+ children
34
+ });
35
+ }
36
+ export { KnowledgeLinksProvider, KnowledgePageLink };
37
+
38
+ //# sourceMappingURL=knowledge-links.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-links.es.js","names":[],"sources":["../../../../src/domains/chat/knowledge/knowledge-links.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { ReactNode } from 'react';\nimport { knowledgePageHref } from './pinned-knowledge-data';\nimport { useLinkComponent } from '@/lib/framework';\nimport type { LinkComponent } from '@/lib/framework';\n\ninterface KnowledgeLinks {\n /** Undefined when this host has no page to open, e.g. a chat outside any project; the name shows as text. */\n pageHref: (pageId: string) => string | undefined;\n Link?: LinkComponent;\n}\n\nconst KnowledgeLinksContext = createContext<KnowledgeLinks>({ pageHref: knowledgePageHref });\n\n/**\n * Where Knowledge page links in chat (tool cards, pinned Knowledge) point. Studio's default opens its own\n * Knowledge page; a host with its own route (Factory's per-project page) or its own router passes both.\n */\nexport function KnowledgeLinksProvider({ pageHref, Link, children }: KnowledgeLinks & { children: ReactNode }) {\n return <KnowledgeLinksContext.Provider value={{ pageHref, Link }}>{children}</KnowledgeLinksContext.Provider>;\n}\n\n/** A link to a Knowledge page, through the host's link component and route. */\nexport function KnowledgePageLink({\n pageId,\n children,\n className = 'min-w-0 truncate text-foreground underline-offset-2 hover:underline',\n}: {\n pageId: string;\n children: ReactNode;\n className?: string;\n}) {\n const links = useContext(KnowledgeLinksContext);\n const { Link: FrameworkLink } = useLinkComponent();\n const Link = links.Link ?? FrameworkLink;\n const href = links.pageHref(pageId);\n if (!href) return <span className={className}>{children}</span>;\n return (\n <Link href={href} className={className}>\n {children}\n </Link>\n );\n}\n"],"mappings":";;;;;AAYA,IAAM,wBAAwB,cAA8B,EAAE,UAAU,kBAAkB,CAAC;;;;;AAM3F,SAAgB,uBAAuB,EAAE,UAAU,MAAM,YAAsD;CAC7G,OAAO,oBAAC,sBAAsB,UAAvB;EAAgC,OAAO;GAAE;GAAU;EAAK;EAAI;CAAyC,CAAA;AAC9G;;AAGA,SAAgB,kBAAkB,EAChC,QACA,UACA,YAAY,yEAKX;CACD,MAAM,QAAQ,WAAW,qBAAqB;CAC9C,MAAM,EAAE,MAAM,kBAAkB,iBAAiB;CACjD,MAAM,OAAO,MAAM,QAAQ;CAC3B,MAAM,OAAO,MAAM,SAAS,MAAM;CAClC,IAAI,CAAC,MAAM,OAAO,oBAAC,QAAD;EAAiB;EAAY;CAAe,CAAA;CAC9D,OACE,oBAAC,MAAD;EAAY;EAAiB;EAC1B;CACG,CAAA;AAEV"}
@@ -0,0 +1,79 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_domains_chat_messages_signal_data = require("../messages/signal-data.cjs.js");
3
+ // src/domains/chat/knowledge/pinned-knowledge-data.ts
4
+ /** The Studio Knowledge page for a page id, opened in Page view. */
5
+ var knowledgePageHref = (pageId) => `/knowledge?page=${encodeURIComponent(pageId)}&view=page`;
6
+ /** Core's pinned Knowledge state: `PINNED_KNOWLEDGE_STATE_ID` and its snapshot/delta tags in `@mastra/core/knowledge`. */
7
+ var PINNED_STATE_ID = "knowledge";
8
+ var PINNED_TAGS = /* @__PURE__ */ new Set(["pinned-knowledge", "pinned-knowledge-update"]);
9
+ /** The entry listing stored pins that didn't fit the budget (`PIN_OVERFLOW_ID`). */
10
+ var OVERFLOW_ID = "overflow";
11
+ var str = (value) => typeof value === "string" && value ? value : void 0;
12
+ function toPage(value) {
13
+ if (!require_domains_chat_messages_signal_data.isRecord(value)) return void 0;
14
+ const id = str(value.id);
15
+ if (!id) return void 0;
16
+ const text = str(value.text);
17
+ let name = str(value.name);
18
+ if (!name && text) {
19
+ const at = text.indexOf(` (${id}): `);
20
+ if (at > 0) name = text.slice(0, at);
21
+ }
22
+ return {
23
+ id,
24
+ name,
25
+ scope: str(value.scope),
26
+ text
27
+ };
28
+ }
29
+ /** A signal's pinned Knowledge, or undefined when it is some other signal or a shape we don't know. */
30
+ function pinnedKnowledgeFromSignal(signal) {
31
+ const metadata = require_domains_chat_messages_signal_data.isRecord(signal.metadata) ? signal.metadata : void 0;
32
+ const state = require_domains_chat_messages_signal_data.isRecord(metadata?.state) ? metadata.state : void 0;
33
+ if ((state?.id ?? signal.attributes?.id) !== PINNED_STATE_ID && !(signal.tagName && PINNED_TAGS.has(signal.tagName))) return void 0;
34
+ const delta = require_domains_chat_messages_signal_data.isRecord(metadata?.delta) ? metadata.delta : void 0;
35
+ const stateMode = state?.mode ?? signal.attributes?.mode;
36
+ const mode = stateMode === "delta" || !stateMode && signal.tagName === "pinned-knowledge-update" ? "delta" : "snapshot";
37
+ let overflow;
38
+ const rows = [];
39
+ if (mode === "delta") {
40
+ if (!Array.isArray(delta?.ops)) return void 0;
41
+ for (const op of delta.ops) {
42
+ if (!require_domains_chat_messages_signal_data.isRecord(op)) continue;
43
+ if (op.op === "remove") {
44
+ const removed = toPage(op);
45
+ if (removed && removed.id !== OVERFLOW_ID) rows.push({
46
+ ...removed,
47
+ change: "remove"
48
+ });
49
+ continue;
50
+ }
51
+ if (op.op !== "add" && op.op !== "change") continue;
52
+ const page = toPage(op.pin);
53
+ if (!page) continue;
54
+ if (page.id === OVERFLOW_ID) overflow = page.text;
55
+ else rows.push({
56
+ ...page,
57
+ change: op.op
58
+ });
59
+ }
60
+ } else {
61
+ const value = require_domains_chat_messages_signal_data.isRecord(metadata?.value) ? metadata.value : void 0;
62
+ if (!Array.isArray(value?.pins)) return void 0;
63
+ for (const pin of value.pins) {
64
+ const page = toPage(pin);
65
+ if (!page) continue;
66
+ if (page.id === OVERFLOW_ID) overflow = page.text;
67
+ else rows.push(page);
68
+ }
69
+ }
70
+ return {
71
+ mode,
72
+ rows,
73
+ overflow
74
+ };
75
+ }
76
+ exports.knowledgePageHref = knowledgePageHref;
77
+ exports.pinnedKnowledgeFromSignal = pinnedKnowledgeFromSignal;
78
+
79
+ //# sourceMappingURL=pinned-knowledge-data.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinned-knowledge-data.cjs.js","names":["isRecord"],"sources":["../../../../src/domains/chat/knowledge/pinned-knowledge-data.ts"],"sourcesContent":["import { isRecord } from '../messages/signal-data';\nimport type { SignalData } from '../messages/signal-data';\n\n/** The Studio Knowledge page for a page id, opened in Page view. */\nexport const knowledgePageHref = (pageId: string) => `/knowledge?page=${encodeURIComponent(pageId)}&view=page`;\n\n/** Core's pinned Knowledge state: `PINNED_KNOWLEDGE_STATE_ID` and its snapshot/delta tags in `@mastra/core/knowledge`. */\nconst PINNED_STATE_ID = 'knowledge';\nconst PINNED_TAGS = new Set(['pinned-knowledge', 'pinned-knowledge-update']);\n/** The entry listing stored pins that didn't fit the budget (`PIN_OVERFLOW_ID`). */\nconst OVERFLOW_ID = 'overflow';\n\nexport interface PinnedPage {\n id: string;\n /** From the pin itself on newer cores; read off the delivered text's `<name> (<id>): ` prefix on older ones. */\n name?: string;\n scope?: string;\n /** What the agent was given for this pin, verbatim. */\n text?: string;\n}\n\nexport type PinnedRow = PinnedPage & { change?: 'add' | 'change' | 'remove' };\n\nexport interface PinnedKnowledge {\n mode: 'snapshot' | 'delta';\n rows: PinnedRow[];\n /** The \"Also pinned …\" line when stored pins overflowed the budget. */\n overflow?: string;\n}\n\nconst str = (value: unknown): string | undefined => (typeof value === 'string' && value ? value : undefined);\n\nfunction toPage(value: unknown): PinnedPage | undefined {\n if (!isRecord(value)) return undefined;\n const id = str(value.id);\n if (!id) return undefined;\n const text = str(value.text);\n let name = str(value.name);\n if (!name && text) {\n const at = text.indexOf(` (${id}): `);\n if (at > 0) name = text.slice(0, at);\n }\n return { id, name, scope: str(value.scope), text };\n}\n\n/** A signal's pinned Knowledge, or undefined when it is some other signal or a shape we don't know. */\nexport function pinnedKnowledgeFromSignal(\n signal: Pick<SignalData, 'tagName' | 'metadata' | 'attributes'>,\n): PinnedKnowledge | undefined {\n const metadata = isRecord(signal.metadata) ? signal.metadata : undefined;\n const state = isRecord(metadata?.state) ? metadata.state : undefined;\n const stateId = state?.id ?? signal.attributes?.id;\n if (stateId !== PINNED_STATE_ID && !(signal.tagName && PINNED_TAGS.has(signal.tagName))) return undefined;\n const delta = isRecord(metadata?.delta) ? metadata.delta : undefined;\n const stateMode = state?.mode ?? signal.attributes?.mode;\n const mode =\n stateMode === 'delta' || (!stateMode && signal.tagName === 'pinned-knowledge-update') ? 'delta' : 'snapshot';\n\n let overflow: string | undefined;\n const rows: PinnedRow[] = [];\n if (mode === 'delta') {\n if (!Array.isArray(delta?.ops)) return undefined;\n for (const op of delta.ops) {\n if (!isRecord(op)) continue;\n if (op.op === 'remove') {\n const removed = toPage(op);\n if (removed && removed.id !== OVERFLOW_ID) rows.push({ ...removed, change: 'remove' });\n continue;\n }\n if (op.op !== 'add' && op.op !== 'change') continue;\n const page = toPage(op.pin);\n if (!page) continue;\n if (page.id === OVERFLOW_ID) overflow = page.text;\n else rows.push({ ...page, change: op.op });\n }\n } else {\n const value = isRecord(metadata?.value) ? metadata.value : undefined;\n if (!Array.isArray(value?.pins)) return undefined;\n for (const pin of value.pins) {\n const page = toPage(pin);\n if (!page) continue;\n if (page.id === OVERFLOW_ID) overflow = page.text;\n else rows.push(page);\n }\n }\n return { mode, rows, overflow };\n}\n"],"mappings":";;;;AAIA,IAAa,qBAAqB,WAAmB,mBAAmB,mBAAmB,MAAM,EAAE;;AAGnG,IAAM,kBAAkB;AACxB,IAAM,8BAAc,IAAI,IAAI,CAAC,oBAAoB,yBAAyB,CAAC;;AAE3E,IAAM,cAAc;AAoBpB,IAAM,OAAO,UAAwC,OAAO,UAAU,YAAY,QAAQ,QAAQ,KAAA;AAElG,SAAS,OAAO,OAAwC;CACtD,IAAI,CAACA,0CAAAA,SAAS,KAAK,GAAG,OAAO,KAAA;CAC7B,MAAM,KAAK,IAAI,MAAM,EAAE;CACvB,IAAI,CAAC,IAAI,OAAO,KAAA;CAChB,MAAM,OAAO,IAAI,MAAM,IAAI;CAC3B,IAAI,OAAO,IAAI,MAAM,IAAI;CACzB,IAAI,CAAC,QAAQ,MAAM;EACjB,MAAM,KAAK,KAAK,QAAQ,KAAK,GAAG,IAAI;EACpC,IAAI,KAAK,GAAG,OAAO,KAAK,MAAM,GAAG,EAAE;CACrC;CACA,OAAO;EAAE;EAAI;EAAM,OAAO,IAAI,MAAM,KAAK;EAAG;CAAK;AACnD;;AAGA,SAAgB,0BACd,QAC6B;CAC7B,MAAM,WAAWA,0CAAAA,SAAS,OAAO,QAAQ,IAAI,OAAO,WAAW,KAAA;CAC/D,MAAM,QAAQA,0CAAAA,SAAS,UAAU,KAAK,IAAI,SAAS,QAAQ,KAAA;CAE3D,KADgB,OAAO,MAAM,OAAO,YAAY,QAChC,mBAAmB,EAAE,OAAO,WAAW,YAAY,IAAI,OAAO,OAAO,IAAI,OAAO,KAAA;CAChG,MAAM,QAAQA,0CAAAA,SAAS,UAAU,KAAK,IAAI,SAAS,QAAQ,KAAA;CAC3D,MAAM,YAAY,OAAO,QAAQ,OAAO,YAAY;CACpD,MAAM,OACJ,cAAc,WAAY,CAAC,aAAa,OAAO,YAAY,4BAA6B,UAAU;CAEpG,IAAI;CACJ,MAAM,OAAoB,CAAC;CAC3B,IAAI,SAAS,SAAS;EACpB,IAAI,CAAC,MAAM,QAAQ,OAAO,GAAG,GAAG,OAAO,KAAA;EACvC,KAAK,MAAM,MAAM,MAAM,KAAK;GAC1B,IAAI,CAACA,0CAAAA,SAAS,EAAE,GAAG;GACnB,IAAI,GAAG,OAAO,UAAU;IACtB,MAAM,UAAU,OAAO,EAAE;IACzB,IAAI,WAAW,QAAQ,OAAO,aAAa,KAAK,KAAK;KAAE,GAAG;KAAS,QAAQ;IAAS,CAAC;IACrF;GACF;GACA,IAAI,GAAG,OAAO,SAAS,GAAG,OAAO,UAAU;GAC3C,MAAM,OAAO,OAAO,GAAG,GAAG;GAC1B,IAAI,CAAC,MAAM;GACX,IAAI,KAAK,OAAO,aAAa,WAAW,KAAK;QACxC,KAAK,KAAK;IAAE,GAAG;IAAM,QAAQ,GAAG;GAAG,CAAC;EAC3C;CACF,OAAO;EACL,MAAM,QAAQA,0CAAAA,SAAS,UAAU,KAAK,IAAI,SAAS,QAAQ,KAAA;EAC3D,IAAI,CAAC,MAAM,QAAQ,OAAO,IAAI,GAAG,OAAO,KAAA;EACxC,KAAK,MAAM,OAAO,MAAM,MAAM;GAC5B,MAAM,OAAO,OAAO,GAAG;GACvB,IAAI,CAAC,MAAM;GACX,IAAI,KAAK,OAAO,aAAa,WAAW,KAAK;QACxC,KAAK,KAAK,IAAI;EACrB;CACF;CACA,OAAO;EAAE;EAAM;EAAM;CAAS;AAChC"}
@@ -0,0 +1 @@
1
+ export * from '../../../src/domains/chat/knowledge/pinned-knowledge-data';
@@ -0,0 +1,77 @@
1
+ import { isRecord } from "../messages/signal-data.es.js";
2
+ // src/domains/chat/knowledge/pinned-knowledge-data.ts
3
+ /** The Studio Knowledge page for a page id, opened in Page view. */
4
+ var knowledgePageHref = (pageId) => `/knowledge?page=${encodeURIComponent(pageId)}&view=page`;
5
+ /** Core's pinned Knowledge state: `PINNED_KNOWLEDGE_STATE_ID` and its snapshot/delta tags in `@mastra/core/knowledge`. */
6
+ var PINNED_STATE_ID = "knowledge";
7
+ var PINNED_TAGS = /* @__PURE__ */ new Set(["pinned-knowledge", "pinned-knowledge-update"]);
8
+ /** The entry listing stored pins that didn't fit the budget (`PIN_OVERFLOW_ID`). */
9
+ var OVERFLOW_ID = "overflow";
10
+ var str = (value) => typeof value === "string" && value ? value : void 0;
11
+ function toPage(value) {
12
+ if (!isRecord(value)) return void 0;
13
+ const id = str(value.id);
14
+ if (!id) return void 0;
15
+ const text = str(value.text);
16
+ let name = str(value.name);
17
+ if (!name && text) {
18
+ const at = text.indexOf(` (${id}): `);
19
+ if (at > 0) name = text.slice(0, at);
20
+ }
21
+ return {
22
+ id,
23
+ name,
24
+ scope: str(value.scope),
25
+ text
26
+ };
27
+ }
28
+ /** A signal's pinned Knowledge, or undefined when it is some other signal or a shape we don't know. */
29
+ function pinnedKnowledgeFromSignal(signal) {
30
+ const metadata = isRecord(signal.metadata) ? signal.metadata : void 0;
31
+ const state = isRecord(metadata?.state) ? metadata.state : void 0;
32
+ if ((state?.id ?? signal.attributes?.id) !== PINNED_STATE_ID && !(signal.tagName && PINNED_TAGS.has(signal.tagName))) return void 0;
33
+ const delta = isRecord(metadata?.delta) ? metadata.delta : void 0;
34
+ const stateMode = state?.mode ?? signal.attributes?.mode;
35
+ const mode = stateMode === "delta" || !stateMode && signal.tagName === "pinned-knowledge-update" ? "delta" : "snapshot";
36
+ let overflow;
37
+ const rows = [];
38
+ if (mode === "delta") {
39
+ if (!Array.isArray(delta?.ops)) return void 0;
40
+ for (const op of delta.ops) {
41
+ if (!isRecord(op)) continue;
42
+ if (op.op === "remove") {
43
+ const removed = toPage(op);
44
+ if (removed && removed.id !== OVERFLOW_ID) rows.push({
45
+ ...removed,
46
+ change: "remove"
47
+ });
48
+ continue;
49
+ }
50
+ if (op.op !== "add" && op.op !== "change") continue;
51
+ const page = toPage(op.pin);
52
+ if (!page) continue;
53
+ if (page.id === OVERFLOW_ID) overflow = page.text;
54
+ else rows.push({
55
+ ...page,
56
+ change: op.op
57
+ });
58
+ }
59
+ } else {
60
+ const value = isRecord(metadata?.value) ? metadata.value : void 0;
61
+ if (!Array.isArray(value?.pins)) return void 0;
62
+ for (const pin of value.pins) {
63
+ const page = toPage(pin);
64
+ if (!page) continue;
65
+ if (page.id === OVERFLOW_ID) overflow = page.text;
66
+ else rows.push(page);
67
+ }
68
+ }
69
+ return {
70
+ mode,
71
+ rows,
72
+ overflow
73
+ };
74
+ }
75
+ export { knowledgePageHref, pinnedKnowledgeFromSignal };
76
+
77
+ //# sourceMappingURL=pinned-knowledge-data.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinned-knowledge-data.es.js","names":[],"sources":["../../../../src/domains/chat/knowledge/pinned-knowledge-data.ts"],"sourcesContent":["import { isRecord } from '../messages/signal-data';\nimport type { SignalData } from '../messages/signal-data';\n\n/** The Studio Knowledge page for a page id, opened in Page view. */\nexport const knowledgePageHref = (pageId: string) => `/knowledge?page=${encodeURIComponent(pageId)}&view=page`;\n\n/** Core's pinned Knowledge state: `PINNED_KNOWLEDGE_STATE_ID` and its snapshot/delta tags in `@mastra/core/knowledge`. */\nconst PINNED_STATE_ID = 'knowledge';\nconst PINNED_TAGS = new Set(['pinned-knowledge', 'pinned-knowledge-update']);\n/** The entry listing stored pins that didn't fit the budget (`PIN_OVERFLOW_ID`). */\nconst OVERFLOW_ID = 'overflow';\n\nexport interface PinnedPage {\n id: string;\n /** From the pin itself on newer cores; read off the delivered text's `<name> (<id>): ` prefix on older ones. */\n name?: string;\n scope?: string;\n /** What the agent was given for this pin, verbatim. */\n text?: string;\n}\n\nexport type PinnedRow = PinnedPage & { change?: 'add' | 'change' | 'remove' };\n\nexport interface PinnedKnowledge {\n mode: 'snapshot' | 'delta';\n rows: PinnedRow[];\n /** The \"Also pinned …\" line when stored pins overflowed the budget. */\n overflow?: string;\n}\n\nconst str = (value: unknown): string | undefined => (typeof value === 'string' && value ? value : undefined);\n\nfunction toPage(value: unknown): PinnedPage | undefined {\n if (!isRecord(value)) return undefined;\n const id = str(value.id);\n if (!id) return undefined;\n const text = str(value.text);\n let name = str(value.name);\n if (!name && text) {\n const at = text.indexOf(` (${id}): `);\n if (at > 0) name = text.slice(0, at);\n }\n return { id, name, scope: str(value.scope), text };\n}\n\n/** A signal's pinned Knowledge, or undefined when it is some other signal or a shape we don't know. */\nexport function pinnedKnowledgeFromSignal(\n signal: Pick<SignalData, 'tagName' | 'metadata' | 'attributes'>,\n): PinnedKnowledge | undefined {\n const metadata = isRecord(signal.metadata) ? signal.metadata : undefined;\n const state = isRecord(metadata?.state) ? metadata.state : undefined;\n const stateId = state?.id ?? signal.attributes?.id;\n if (stateId !== PINNED_STATE_ID && !(signal.tagName && PINNED_TAGS.has(signal.tagName))) return undefined;\n const delta = isRecord(metadata?.delta) ? metadata.delta : undefined;\n const stateMode = state?.mode ?? signal.attributes?.mode;\n const mode =\n stateMode === 'delta' || (!stateMode && signal.tagName === 'pinned-knowledge-update') ? 'delta' : 'snapshot';\n\n let overflow: string | undefined;\n const rows: PinnedRow[] = [];\n if (mode === 'delta') {\n if (!Array.isArray(delta?.ops)) return undefined;\n for (const op of delta.ops) {\n if (!isRecord(op)) continue;\n if (op.op === 'remove') {\n const removed = toPage(op);\n if (removed && removed.id !== OVERFLOW_ID) rows.push({ ...removed, change: 'remove' });\n continue;\n }\n if (op.op !== 'add' && op.op !== 'change') continue;\n const page = toPage(op.pin);\n if (!page) continue;\n if (page.id === OVERFLOW_ID) overflow = page.text;\n else rows.push({ ...page, change: op.op });\n }\n } else {\n const value = isRecord(metadata?.value) ? metadata.value : undefined;\n if (!Array.isArray(value?.pins)) return undefined;\n for (const pin of value.pins) {\n const page = toPage(pin);\n if (!page) continue;\n if (page.id === OVERFLOW_ID) overflow = page.text;\n else rows.push(page);\n }\n }\n return { mode, rows, overflow };\n}\n"],"mappings":";;;AAIA,IAAa,qBAAqB,WAAmB,mBAAmB,mBAAmB,MAAM,EAAE;;AAGnG,IAAM,kBAAkB;AACxB,IAAM,8BAAc,IAAI,IAAI,CAAC,oBAAoB,yBAAyB,CAAC;;AAE3E,IAAM,cAAc;AAoBpB,IAAM,OAAO,UAAwC,OAAO,UAAU,YAAY,QAAQ,QAAQ,KAAA;AAElG,SAAS,OAAO,OAAwC;CACtD,IAAI,CAAC,SAAS,KAAK,GAAG,OAAO,KAAA;CAC7B,MAAM,KAAK,IAAI,MAAM,EAAE;CACvB,IAAI,CAAC,IAAI,OAAO,KAAA;CAChB,MAAM,OAAO,IAAI,MAAM,IAAI;CAC3B,IAAI,OAAO,IAAI,MAAM,IAAI;CACzB,IAAI,CAAC,QAAQ,MAAM;EACjB,MAAM,KAAK,KAAK,QAAQ,KAAK,GAAG,IAAI;EACpC,IAAI,KAAK,GAAG,OAAO,KAAK,MAAM,GAAG,EAAE;CACrC;CACA,OAAO;EAAE;EAAI;EAAM,OAAO,IAAI,MAAM,KAAK;EAAG;CAAK;AACnD;;AAGA,SAAgB,0BACd,QAC6B;CAC7B,MAAM,WAAW,SAAS,OAAO,QAAQ,IAAI,OAAO,WAAW,KAAA;CAC/D,MAAM,QAAQ,SAAS,UAAU,KAAK,IAAI,SAAS,QAAQ,KAAA;CAE3D,KADgB,OAAO,MAAM,OAAO,YAAY,QAChC,mBAAmB,EAAE,OAAO,WAAW,YAAY,IAAI,OAAO,OAAO,IAAI,OAAO,KAAA;CAChG,MAAM,QAAQ,SAAS,UAAU,KAAK,IAAI,SAAS,QAAQ,KAAA;CAC3D,MAAM,YAAY,OAAO,QAAQ,OAAO,YAAY;CACpD,MAAM,OACJ,cAAc,WAAY,CAAC,aAAa,OAAO,YAAY,4BAA6B,UAAU;CAEpG,IAAI;CACJ,MAAM,OAAoB,CAAC;CAC3B,IAAI,SAAS,SAAS;EACpB,IAAI,CAAC,MAAM,QAAQ,OAAO,GAAG,GAAG,OAAO,KAAA;EACvC,KAAK,MAAM,MAAM,MAAM,KAAK;GAC1B,IAAI,CAAC,SAAS,EAAE,GAAG;GACnB,IAAI,GAAG,OAAO,UAAU;IACtB,MAAM,UAAU,OAAO,EAAE;IACzB,IAAI,WAAW,QAAQ,OAAO,aAAa,KAAK,KAAK;KAAE,GAAG;KAAS,QAAQ;IAAS,CAAC;IACrF;GACF;GACA,IAAI,GAAG,OAAO,SAAS,GAAG,OAAO,UAAU;GAC3C,MAAM,OAAO,OAAO,GAAG,GAAG;GAC1B,IAAI,CAAC,MAAM;GACX,IAAI,KAAK,OAAO,aAAa,WAAW,KAAK;QACxC,KAAK,KAAK;IAAE,GAAG;IAAM,QAAQ,GAAG;GAAG,CAAC;EAC3C;CACF,OAAO;EACL,MAAM,QAAQ,SAAS,UAAU,KAAK,IAAI,SAAS,QAAQ,KAAA;EAC3D,IAAI,CAAC,MAAM,QAAQ,OAAO,IAAI,GAAG,OAAO,KAAA;EACxC,KAAK,MAAM,OAAO,MAAM,MAAM;GAC5B,MAAM,OAAO,OAAO,GAAG;GACvB,IAAI,CAAC,MAAM;GACX,IAAI,KAAK,OAAO,aAAa,WAAW,KAAK;QACxC,KAAK,KAAK,IAAI;EACrB;CACF;CACA,OAAO;EAAE;EAAM;EAAM;CAAS;AAChC"}
@@ -0,0 +1,124 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_Txt = require("../../../Txt-BnoSqxKE.cjs");
3
+ const require_activity = require("../../../activity-DAK8tj7r.cjs");
4
+ const require_Badge = require("../../../Badge-DZ6r6bcw.cjs");
5
+ const require_domains_chat_knowledge_knowledge_links = require("./knowledge-links.cjs.js");
6
+ let react = require("react");
7
+ let react_jsx_runtime = require("react/jsx-runtime");
8
+ let lucide_react = require("lucide-react");
9
+ // src/domains/chat/knowledge/pinned-knowledge.tsx
10
+ var CHANGE_MARK = {
11
+ add: "+",
12
+ change: "~",
13
+ remove: "−"
14
+ };
15
+ var CHANGE_LABEL = {
16
+ add: "Added",
17
+ change: "Changed",
18
+ remove: "Removed"
19
+ };
20
+ function summary({ mode, rows }) {
21
+ if (mode === "snapshot") return rows.length === 1 ? "1 page" : `${rows.length} pages`;
22
+ const count = (change) => rows.filter((row) => row.change === change).length;
23
+ return [
24
+ "add",
25
+ "change",
26
+ "remove"
27
+ ].filter((change) => count(change) > 0).map((change) => `${CHANGE_MARK[change]}${count(change)}`).join(" ");
28
+ }
29
+ function PinnedRowItem({ row }) {
30
+ const [open, setOpen] = (0, react.useState)(false);
31
+ const removed = row.change === "remove";
32
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
33
+ className: "flex flex-col gap-1",
34
+ "data-testid": "pinned-knowledge-row",
35
+ "data-change": row.change,
36
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
37
+ className: "flex min-w-0 items-baseline gap-2",
38
+ children: [
39
+ row.change ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40
+ "aria-label": CHANGE_LABEL[row.change],
41
+ className: `w-3 shrink-0 text-center ${removed ? "text-muted-foreground" : "text-foreground"}`,
42
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
43
+ as: "span",
44
+ variant: "label",
45
+ children: CHANGE_MARK[row.change]
46
+ })
47
+ }) : null,
48
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
49
+ as: "span",
50
+ variant: "label",
51
+ className: `min-w-0 truncate ${removed ? "line-through opacity-70" : ""}`,
52
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_chat_knowledge_knowledge_links.KnowledgePageLink, {
53
+ pageId: row.id,
54
+ children: row.name ?? "A pinned page"
55
+ })
56
+ }),
57
+ row.scope ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
58
+ as: "span",
59
+ variant: "meta",
60
+ tone: "muted",
61
+ className: "truncate",
62
+ children: row.scope
63
+ }) : null,
64
+ row.text && !removed ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
65
+ type: "button",
66
+ "aria-expanded": open,
67
+ className: "ml-auto shrink-0 rounded px-1 text-muted-foreground hover:bg-fill hover:text-foreground",
68
+ onClick: () => setOpen((value) => !value),
69
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
70
+ as: "span",
71
+ variant: "meta",
72
+ children: open ? "Hide text" : "Text"
73
+ })
74
+ }) : null
75
+ ]
76
+ }), open && row.text ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
77
+ variant: "caption",
78
+ tone: "muted",
79
+ className: "ml-5 break-words whitespace-pre-wrap",
80
+ children: row.text
81
+ }) : null]
82
+ });
83
+ }
84
+ /**
85
+ * Pinned Knowledge as the agent received it: a snapshot lists every pinned page, a delta lists the pages
86
+ * added, changed or removed since. Each page links to the Knowledge viewer; its delivered text opens below it.
87
+ */
88
+ function PinnedKnowledgeActivity({ pinned, defaultOpen }) {
89
+ const label = pinned.mode === "snapshot" ? "Pinned knowledge" : "Pinned knowledge updated";
90
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_activity.ActivityItem, {
91
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Pin, {
92
+ className: "text-badge-amber-indicator",
93
+ "aria-hidden": true
94
+ }),
95
+ label,
96
+ detail: summary(pinned),
97
+ badges: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Badge.Badge, {
98
+ size: "xs",
99
+ children: pinned.mode
100
+ }),
101
+ defaultOpen,
102
+ "data-signal-kind": "state",
103
+ "data-testid": "pinned-knowledge",
104
+ "aria-label": `Signal: ${label}`,
105
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
106
+ className: "flex flex-col gap-2",
107
+ children: [pinned.rows.length ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
108
+ className: "flex flex-col gap-1.5",
109
+ children: pinned.rows.map((row) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PinnedRowItem, { row }, `${row.change ?? "pin"}-${row.id}`))
110
+ }) : pinned.overflow ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
111
+ variant: "meta",
112
+ tone: "muted",
113
+ children: "No pinned pages"
114
+ }), pinned.overflow ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Txt.Txt, {
115
+ variant: "meta",
116
+ tone: "muted",
117
+ children: pinned.overflow
118
+ }) : null]
119
+ })
120
+ });
121
+ }
122
+ exports.PinnedKnowledgeActivity = PinnedKnowledgeActivity;
123
+
124
+ //# sourceMappingURL=pinned-knowledge.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinned-knowledge.cjs.js","names":["useState","Txt","KnowledgePageLink","ActivityItem","Pin","Badge"],"sources":["../../../../src/domains/chat/knowledge/pinned-knowledge.tsx"],"sourcesContent":["import { Pin } from 'lucide-react';\nimport { useState } from 'react';\nimport { KnowledgePageLink } from './knowledge-links';\nimport type { PinnedKnowledge, PinnedRow } from './pinned-knowledge-data';\nimport { ActivityItem } from '@/ds/components/ai/activity';\nimport { Badge } from '@/ds/components/Badge';\nimport { Txt } from '@/ds/components/Txt';\n\nconst CHANGE_MARK = { add: '+', change: '~', remove: '−' } as const;\nconst CHANGE_LABEL = { add: 'Added', change: 'Changed', remove: 'Removed' } as const;\n\nfunction summary({ mode, rows }: PinnedKnowledge): string {\n if (mode === 'snapshot') return rows.length === 1 ? '1 page' : `${rows.length} pages`;\n const count = (change: PinnedRow['change']) => rows.filter(row => row.change === change).length;\n return (['add', 'change', 'remove'] as const)\n .filter(change => count(change) > 0)\n .map(change => `${CHANGE_MARK[change]}${count(change)}`)\n .join(' ');\n}\n\nfunction PinnedRowItem({ row }: { row: PinnedRow }) {\n const [open, setOpen] = useState(false);\n const removed = row.change === 'remove';\n return (\n <li className=\"flex flex-col gap-1\" data-testid=\"pinned-knowledge-row\" data-change={row.change}>\n <div className=\"flex min-w-0 items-baseline gap-2\">\n {row.change ? (\n <span\n aria-label={CHANGE_LABEL[row.change]}\n className={`w-3 shrink-0 text-center ${removed ? 'text-muted-foreground' : 'text-foreground'}`}\n >\n <Txt as=\"span\" variant=\"label\">\n {CHANGE_MARK[row.change]}\n </Txt>\n </span>\n ) : null}\n <Txt as=\"span\" variant=\"label\" className={`min-w-0 truncate ${removed ? 'line-through opacity-70' : ''}`}>\n <KnowledgePageLink pageId={row.id}>{row.name ?? 'A pinned page'}</KnowledgePageLink>\n </Txt>\n {row.scope ? (\n <Txt as=\"span\" variant=\"meta\" tone=\"muted\" className=\"truncate\">\n {row.scope}\n </Txt>\n ) : null}\n {row.text && !removed ? (\n <button\n type=\"button\"\n aria-expanded={open}\n className=\"ml-auto shrink-0 rounded px-1 text-muted-foreground hover:bg-fill hover:text-foreground\"\n onClick={() => setOpen(value => !value)}\n >\n <Txt as=\"span\" variant=\"meta\">\n {open ? 'Hide text' : 'Text'}\n </Txt>\n </button>\n ) : null}\n </div>\n {open && row.text ? (\n <Txt variant=\"caption\" tone=\"muted\" className=\"ml-5 break-words whitespace-pre-wrap\">\n {row.text}\n </Txt>\n ) : null}\n </li>\n );\n}\n\n/**\n * Pinned Knowledge as the agent received it: a snapshot lists every pinned page, a delta lists the pages\n * added, changed or removed since. Each page links to the Knowledge viewer; its delivered text opens below it.\n */\nexport function PinnedKnowledgeActivity({ pinned, defaultOpen }: { pinned: PinnedKnowledge; defaultOpen?: boolean }) {\n const label = pinned.mode === 'snapshot' ? 'Pinned knowledge' : 'Pinned knowledge updated';\n return (\n <ActivityItem\n icon={<Pin className=\"text-badge-amber-indicator\" aria-hidden />}\n label={label}\n detail={summary(pinned)}\n badges={<Badge size=\"xs\">{pinned.mode}</Badge>}\n defaultOpen={defaultOpen}\n data-signal-kind=\"state\"\n data-testid=\"pinned-knowledge\"\n aria-label={`Signal: ${label}`}\n >\n <div className=\"flex flex-col gap-2\">\n {pinned.rows.length ? (\n <ul className=\"flex flex-col gap-1.5\">\n {pinned.rows.map(row => (\n <PinnedRowItem key={`${row.change ?? 'pin'}-${row.id}`} row={row} />\n ))}\n </ul>\n ) : pinned.overflow ? null : (\n <Txt variant=\"meta\" tone=\"muted\">\n No pinned pages\n </Txt>\n )}\n {pinned.overflow ? (\n <Txt variant=\"meta\" tone=\"muted\">\n {pinned.overflow}\n </Txt>\n ) : null}\n </div>\n </ActivityItem>\n );\n}\n"],"mappings":";;;;;;;;;AAQA,IAAM,cAAc;CAAE,KAAK;CAAK,QAAQ;CAAK,QAAQ;AAAI;AACzD,IAAM,eAAe;CAAE,KAAK;CAAS,QAAQ;CAAW,QAAQ;AAAU;AAE1E,SAAS,QAAQ,EAAE,MAAM,QAAiC;CACxD,IAAI,SAAS,YAAY,OAAO,KAAK,WAAW,IAAI,WAAW,GAAG,KAAK,OAAO;CAC9E,MAAM,SAAS,WAAgC,KAAK,QAAO,QAAO,IAAI,WAAW,MAAM,CAAC,CAAC;CACzF,OAAQ;EAAC;EAAO;EAAU;CAAQ,CAAC,CAChC,QAAO,WAAU,MAAM,MAAM,IAAI,CAAC,CAAC,CACnC,KAAI,WAAU,GAAG,YAAY,UAAU,MAAM,MAAM,GAAG,CAAC,CACvD,KAAK,GAAG;AACb;AAEA,SAAS,cAAc,EAAE,OAA2B;CAClD,MAAM,CAAC,MAAM,YAAA,GAAWA,MAAAA,SAAAA,CAAS,KAAK;CACtC,MAAM,UAAU,IAAI,WAAW;CAC/B,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;EAAI,WAAU;EAAsB,eAAY;EAAuB,eAAa,IAAI;EAAxF,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACG,IAAI,SACH,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KACE,cAAY,aAAa,IAAI;KAC7B,WAAW,4BAA4B,UAAU,0BAA0B;KAE3E,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,YAAAA,KAAD;MAAK,IAAG;MAAO,SAAQ;MACpB,UAAA,YAAY,IAAI;KACd,CAAA;IACD,CAAA,IACJ;IACJ,iBAAA,GAAA,kBAAA,IAAA,CAACA,YAAAA,KAAD;KAAK,IAAG;KAAO,SAAQ;KAAQ,WAAW,oBAAoB,UAAU,4BAA4B;KAClG,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,+CAAAA,mBAAD;MAAmB,QAAQ,IAAI;MAAK,UAAA,IAAI,QAAQ;KAAmC,CAAA;IAChF,CAAA;IACJ,IAAI,QACH,iBAAA,GAAA,kBAAA,IAAA,CAACD,YAAAA,KAAD;KAAK,IAAG;KAAO,SAAQ;KAAO,MAAK;KAAQ,WAAU;KAClD,UAAA,IAAI;IACF,CAAA,IACH;IACH,IAAI,QAAQ,CAAC,UACZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KACE,MAAK;KACL,iBAAe;KACf,WAAU;KACV,eAAe,SAAQ,UAAS,CAAC,KAAK;KAEtC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACA,YAAAA,KAAD;MAAK,IAAG;MAAO,SAAQ;MACpB,UAAA,OAAO,cAAc;KACnB,CAAA;IACC,CAAA,IACN;GACD;EACJ,CAAA,GAAA,QAAQ,IAAI,OACX,iBAAA,GAAA,kBAAA,IAAA,CAACA,YAAAA,KAAD;GAAK,SAAQ;GAAU,MAAK;GAAQ,WAAU;GAC3C,UAAA,IAAI;EACF,CAAA,IACH,IACF;;AAER;;;;;AAMA,SAAgB,wBAAwB,EAAE,QAAQ,eAAmE;CACnH,MAAM,QAAQ,OAAO,SAAS,aAAa,qBAAqB;CAChE,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,iBAAAA,cAAD;EACE,MAAM,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,KAAD;GAAK,WAAU;GAA6B,eAAA;EAAa,CAAA;EACxD;EACP,QAAQ,QAAQ,MAAM;EACtB,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,OAAD;GAAO,MAAK;GAAM,UAAA,OAAO;EAAY,CAAA;EAChC;EACb,oBAAiB;EACjB,eAAY;EACZ,cAAY,WAAW;EAEvB,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACG,OAAO,KAAK,SACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;IAAI,WAAU;IACX,UAAA,OAAO,KAAK,KAAI,QACf,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD,EAA6D,IAAM,GAA/C,GAAG,IAAI,UAAU,MAAM,GAAG,IAAI,IAAiB,CACpE;GACC,CAAA,IACF,OAAO,WAAW,OACpB,iBAAA,GAAA,kBAAA,IAAA,CAACJ,YAAAA,KAAD;IAAK,SAAQ;IAAO,MAAK;IAAQ,UAAA;GAE5B,CAAA,GAEN,OAAO,WACN,iBAAA,GAAA,kBAAA,IAAA,CAACA,YAAAA,KAAD;IAAK,SAAQ;IAAO,MAAK;IACtB,UAAA,OAAO;GACL,CAAA,IACH,IACD;;CACO,CAAA;AAElB"}
@@ -0,0 +1 @@
1
+ export * from '../../../src/domains/chat/knowledge/pinned-knowledge';
@@ -0,0 +1,123 @@
1
+ import { t as Txt } from "../../../Txt-BM6TVV_c.js";
2
+ import { m as ActivityItem } from "../../../activity-CM34JyW-.js";
3
+ import { t as Badge } from "../../../Badge-aVu5iGAF.js";
4
+ import { KnowledgePageLink } from "./knowledge-links.es.js";
5
+ import { useState } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { Pin } from "lucide-react";
8
+ // src/domains/chat/knowledge/pinned-knowledge.tsx
9
+ var CHANGE_MARK = {
10
+ add: "+",
11
+ change: "~",
12
+ remove: "−"
13
+ };
14
+ var CHANGE_LABEL = {
15
+ add: "Added",
16
+ change: "Changed",
17
+ remove: "Removed"
18
+ };
19
+ function summary({ mode, rows }) {
20
+ if (mode === "snapshot") return rows.length === 1 ? "1 page" : `${rows.length} pages`;
21
+ const count = (change) => rows.filter((row) => row.change === change).length;
22
+ return [
23
+ "add",
24
+ "change",
25
+ "remove"
26
+ ].filter((change) => count(change) > 0).map((change) => `${CHANGE_MARK[change]}${count(change)}`).join(" ");
27
+ }
28
+ function PinnedRowItem({ row }) {
29
+ const [open, setOpen] = useState(false);
30
+ const removed = row.change === "remove";
31
+ return /* @__PURE__ */ jsxs("li", {
32
+ className: "flex flex-col gap-1",
33
+ "data-testid": "pinned-knowledge-row",
34
+ "data-change": row.change,
35
+ children: [/* @__PURE__ */ jsxs("div", {
36
+ className: "flex min-w-0 items-baseline gap-2",
37
+ children: [
38
+ row.change ? /* @__PURE__ */ jsx("span", {
39
+ "aria-label": CHANGE_LABEL[row.change],
40
+ className: `w-3 shrink-0 text-center ${removed ? "text-muted-foreground" : "text-foreground"}`,
41
+ children: /* @__PURE__ */ jsx(Txt, {
42
+ as: "span",
43
+ variant: "label",
44
+ children: CHANGE_MARK[row.change]
45
+ })
46
+ }) : null,
47
+ /* @__PURE__ */ jsx(Txt, {
48
+ as: "span",
49
+ variant: "label",
50
+ className: `min-w-0 truncate ${removed ? "line-through opacity-70" : ""}`,
51
+ children: /* @__PURE__ */ jsx(KnowledgePageLink, {
52
+ pageId: row.id,
53
+ children: row.name ?? "A pinned page"
54
+ })
55
+ }),
56
+ row.scope ? /* @__PURE__ */ jsx(Txt, {
57
+ as: "span",
58
+ variant: "meta",
59
+ tone: "muted",
60
+ className: "truncate",
61
+ children: row.scope
62
+ }) : null,
63
+ row.text && !removed ? /* @__PURE__ */ jsx("button", {
64
+ type: "button",
65
+ "aria-expanded": open,
66
+ className: "ml-auto shrink-0 rounded px-1 text-muted-foreground hover:bg-fill hover:text-foreground",
67
+ onClick: () => setOpen((value) => !value),
68
+ children: /* @__PURE__ */ jsx(Txt, {
69
+ as: "span",
70
+ variant: "meta",
71
+ children: open ? "Hide text" : "Text"
72
+ })
73
+ }) : null
74
+ ]
75
+ }), open && row.text ? /* @__PURE__ */ jsx(Txt, {
76
+ variant: "caption",
77
+ tone: "muted",
78
+ className: "ml-5 break-words whitespace-pre-wrap",
79
+ children: row.text
80
+ }) : null]
81
+ });
82
+ }
83
+ /**
84
+ * Pinned Knowledge as the agent received it: a snapshot lists every pinned page, a delta lists the pages
85
+ * added, changed or removed since. Each page links to the Knowledge viewer; its delivered text opens below it.
86
+ */
87
+ function PinnedKnowledgeActivity({ pinned, defaultOpen }) {
88
+ const label = pinned.mode === "snapshot" ? "Pinned knowledge" : "Pinned knowledge updated";
89
+ return /* @__PURE__ */ jsx(ActivityItem, {
90
+ icon: /* @__PURE__ */ jsx(Pin, {
91
+ className: "text-badge-amber-indicator",
92
+ "aria-hidden": true
93
+ }),
94
+ label,
95
+ detail: summary(pinned),
96
+ badges: /* @__PURE__ */ jsx(Badge, {
97
+ size: "xs",
98
+ children: pinned.mode
99
+ }),
100
+ defaultOpen,
101
+ "data-signal-kind": "state",
102
+ "data-testid": "pinned-knowledge",
103
+ "aria-label": `Signal: ${label}`,
104
+ children: /* @__PURE__ */ jsxs("div", {
105
+ className: "flex flex-col gap-2",
106
+ children: [pinned.rows.length ? /* @__PURE__ */ jsx("ul", {
107
+ className: "flex flex-col gap-1.5",
108
+ children: pinned.rows.map((row) => /* @__PURE__ */ jsx(PinnedRowItem, { row }, `${row.change ?? "pin"}-${row.id}`))
109
+ }) : pinned.overflow ? null : /* @__PURE__ */ jsx(Txt, {
110
+ variant: "meta",
111
+ tone: "muted",
112
+ children: "No pinned pages"
113
+ }), pinned.overflow ? /* @__PURE__ */ jsx(Txt, {
114
+ variant: "meta",
115
+ tone: "muted",
116
+ children: pinned.overflow
117
+ }) : null]
118
+ })
119
+ });
120
+ }
121
+ export { PinnedKnowledgeActivity };
122
+
123
+ //# sourceMappingURL=pinned-knowledge.es.js.map