@stigmer/react 3.11.0 → 3.12.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 (559) hide show
  1. package/activity/useRecentActivity.d.ts +3 -2
  2. package/activity/useRecentActivity.d.ts.map +1 -1
  3. package/activity/useRecentActivity.js +3 -2
  4. package/activity/useRecentActivity.js.map +1 -1
  5. package/agent/AgentDetailView.d.ts +2 -12
  6. package/agent/AgentDetailView.d.ts.map +1 -1
  7. package/agent/AgentDetailView.js +10 -42
  8. package/agent/AgentDetailView.js.map +1 -1
  9. package/agent/internal/agentToInput.d.ts.map +1 -1
  10. package/agent/internal/agentToInput.js +0 -8
  11. package/agent/internal/agentToInput.js.map +1 -1
  12. package/agent-instance/AgentInstanceList.d.ts.map +1 -1
  13. package/agent-instance/AgentInstanceList.js +2 -1
  14. package/agent-instance/AgentInstanceList.js.map +1 -1
  15. package/api-key/ApiKeyListPanel.d.ts.map +1 -1
  16. package/api-key/ApiKeyListPanel.js +2 -1
  17. package/api-key/ApiKeyListPanel.js.map +1 -1
  18. package/attachment/AttachmentChipList.d.ts.map +1 -1
  19. package/attachment/AttachmentChipList.js +9 -8
  20. package/attachment/AttachmentChipList.js.map +1 -1
  21. package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
  22. package/attachment/AttachmentImageLightbox.js +1 -1
  23. package/attachment/AttachmentImageLightbox.js.map +1 -1
  24. package/channel/AgentChannelsPanel.d.ts.map +1 -1
  25. package/channel/AgentChannelsPanel.js +2 -1
  26. package/channel/AgentChannelsPanel.js.map +1 -1
  27. package/channel/ChannelConversationsDialog.d.ts.map +1 -1
  28. package/channel/ChannelConversationsDialog.js +2 -1
  29. package/channel/ChannelConversationsDialog.js.map +1 -1
  30. package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
  31. package/channel/ChannelTemplatesDialog.js +2 -1
  32. package/channel/ChannelTemplatesDialog.js.map +1 -1
  33. package/channel-app/internal.d.ts.map +1 -1
  34. package/channel-app/internal.js +2 -1
  35. package/channel-app/internal.js.map +1 -1
  36. package/composer/ComposerToolbar.d.ts.map +1 -1
  37. package/composer/ComposerToolbar.js +10 -7
  38. package/composer/ComposerToolbar.js.map +1 -1
  39. package/composer/ConfigureMenu.d.ts.map +1 -1
  40. package/composer/ConfigureMenu.js +2 -1
  41. package/composer/ConfigureMenu.js.map +1 -1
  42. package/composer/ContextChip.d.ts.map +1 -1
  43. package/composer/ContextChip.js +2 -1
  44. package/composer/ContextChip.js.map +1 -1
  45. package/composer/ContextPopover.d.ts.map +1 -1
  46. package/composer/ContextPopover.js +2 -1
  47. package/composer/ContextPopover.js.map +1 -1
  48. package/composer/SessionComposer.d.ts +13 -0
  49. package/composer/SessionComposer.d.ts.map +1 -1
  50. package/composer/SessionComposer.js +12 -2
  51. package/composer/SessionComposer.js.map +1 -1
  52. package/conversation/ConversationMediaAttachment.d.ts.map +1 -1
  53. package/conversation/ConversationMediaAttachment.js +2 -1
  54. package/conversation/ConversationMediaAttachment.js.map +1 -1
  55. package/conversation/ConversationTimelineView.d.ts.map +1 -1
  56. package/conversation/ConversationTimelineView.js +14 -4
  57. package/conversation/ConversationTimelineView.js.map +1 -1
  58. package/conversation/conversationPresentation.d.ts +28 -0
  59. package/conversation/conversationPresentation.d.ts.map +1 -1
  60. package/conversation/conversationPresentation.js +38 -1
  61. package/conversation/conversationPresentation.js.map +1 -1
  62. package/cursor-accounts/MemberCoverageTable.d.ts.map +1 -1
  63. package/cursor-accounts/MemberCoverageTable.js +6 -5
  64. package/cursor-accounts/MemberCoverageTable.js.map +1 -1
  65. package/dashboard/DashboardKPICards.d.ts.map +1 -1
  66. package/dashboard/DashboardKPICards.js +3 -1
  67. package/dashboard/DashboardKPICards.js.map +1 -1
  68. package/dependency-graph/DependencyTreeNode.d.ts.map +1 -1
  69. package/dependency-graph/DependencyTreeNode.js +1 -7
  70. package/dependency-graph/DependencyTreeNode.js.map +1 -1
  71. package/dependency-graph/types.d.ts +8 -20
  72. package/dependency-graph/types.d.ts.map +1 -1
  73. package/dependency-graph/useDependencyGraph.d.ts.map +1 -1
  74. package/dependency-graph/useDependencyGraph.js +2 -20
  75. package/dependency-graph/useDependencyGraph.js.map +1 -1
  76. package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
  77. package/environment/EnvironmentVariableEditor.js +2 -1
  78. package/environment/EnvironmentVariableEditor.js.map +1 -1
  79. package/execution/ApprovalCard.d.ts.map +1 -1
  80. package/execution/ApprovalCard.js +1 -1
  81. package/execution/ApprovalCard.js.map +1 -1
  82. package/execution/ArtifactRowView.d.ts.map +1 -1
  83. package/execution/ArtifactRowView.js +2 -1
  84. package/execution/ArtifactRowView.js.map +1 -1
  85. package/execution/FilePathLink.d.ts +4 -4
  86. package/execution/FilePathLink.d.ts.map +1 -1
  87. package/execution/FilePathLink.js +4 -4
  88. package/execution/FilePathLink.js.map +1 -1
  89. package/execution/McpToolDetail.d.ts.map +1 -1
  90. package/execution/McpToolDetail.js +2 -1
  91. package/execution/McpToolDetail.js.map +1 -1
  92. package/execution/MessageAttachments.d.ts.map +1 -1
  93. package/execution/MessageAttachments.js +10 -8
  94. package/execution/MessageAttachments.js.map +1 -1
  95. package/execution/MessageEntry.d.ts.map +1 -1
  96. package/execution/MessageEntry.js +2 -1
  97. package/execution/MessageEntry.js.map +1 -1
  98. package/execution/PlanArtifactCard.d.ts.map +1 -1
  99. package/execution/PlanArtifactCard.js +7 -4
  100. package/execution/PlanArtifactCard.js.map +1 -1
  101. package/execution/ToolCallDetail.d.ts.map +1 -1
  102. package/execution/ToolCallDetail.js +1 -1
  103. package/execution/ToolCallDetail.js.map +1 -1
  104. package/execution/ToolCallItem.d.ts.map +1 -1
  105. package/execution/ToolCallItem.js +5 -1
  106. package/execution/ToolCallItem.js.map +1 -1
  107. package/execution/WriteBackCard.d.ts.map +1 -1
  108. package/execution/WriteBackCard.js +6 -4
  109. package/execution/WriteBackCard.js.map +1 -1
  110. package/execution/artifact-row-item.d.ts +1 -1
  111. package/execution/artifact-row-item.d.ts.map +1 -1
  112. package/file-reference/FileReferenceChipList.d.ts.map +1 -1
  113. package/file-reference/FileReferenceChipList.js +6 -1
  114. package/file-reference/FileReferenceChipList.js.map +1 -1
  115. package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
  116. package/iam-policy/OrgMembersPanel.js +6 -5
  117. package/iam-policy/OrgMembersPanel.js.map +1 -1
  118. package/iam-policy/ProviderBadge.d.ts.map +1 -1
  119. package/iam-policy/ProviderBadge.js +3 -2
  120. package/iam-policy/ProviderBadge.js.map +1 -1
  121. package/iam-policy/RoleSelector.d.ts.map +1 -1
  122. package/iam-policy/RoleSelector.js +1 -1
  123. package/iam-policy/RoleSelector.js.map +1 -1
  124. package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
  125. package/identity-provider/IdentityProviderListPanel.js +2 -1
  126. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  127. package/index.d.ts +0 -2
  128. package/index.d.ts.map +1 -1
  129. package/index.js +0 -6
  130. package/index.js.map +1 -1
  131. package/internal/truncated-text.d.ts +17 -0
  132. package/internal/truncated-text.d.ts.map +1 -0
  133. package/internal/truncated-text.js +27 -0
  134. package/internal/truncated-text.js.map +1 -0
  135. package/invitation/InvitationManager.d.ts.map +1 -1
  136. package/invitation/InvitationManager.js +4 -3
  137. package/invitation/InvitationManager.js.map +1 -1
  138. package/library/ScopeToggle.d.ts.map +1 -1
  139. package/library/ScopeToggle.js +10 -2
  140. package/library/ScopeToggle.js.map +1 -1
  141. package/library/VisibilitySelector.d.ts.map +1 -1
  142. package/library/VisibilitySelector.js +2 -1
  143. package/library/VisibilitySelector.js.map +1 -1
  144. package/library/useExportResource.d.ts +3 -4
  145. package/library/useExportResource.d.ts.map +1 -1
  146. package/library/useExportResource.js +1 -1
  147. package/library/useExportResource.js.map +1 -1
  148. package/manifest/EditResourceYamlDialog.d.ts.map +1 -1
  149. package/manifest/EditResourceYamlDialog.js.map +1 -1
  150. package/mcp-server/McpServerConfigPanel.d.ts +30 -1
  151. package/mcp-server/McpServerConfigPanel.d.ts.map +1 -1
  152. package/mcp-server/McpServerConfigPanel.js +18 -8
  153. package/mcp-server/McpServerConfigPanel.js.map +1 -1
  154. package/mcp-server/McpServerConnectDialog.d.ts +12 -1
  155. package/mcp-server/McpServerConnectDialog.d.ts.map +1 -1
  156. package/mcp-server/McpServerConnectDialog.js +8 -7
  157. package/mcp-server/McpServerConnectDialog.js.map +1 -1
  158. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  159. package/mcp-server/McpServerDetailView.js +4 -4
  160. package/mcp-server/McpServerDetailView.js.map +1 -1
  161. package/mcp-server/McpServerPicker.d.ts.map +1 -1
  162. package/mcp-server/McpServerPicker.js +86 -5
  163. package/mcp-server/McpServerPicker.js.map +1 -1
  164. package/mcp-server/McpToolSelector.d.ts.map +1 -1
  165. package/mcp-server/McpToolSelector.js +2 -1
  166. package/mcp-server/McpToolSelector.js.map +1 -1
  167. package/mcp-server/VendorApprovalBlockedNotice.d.ts +77 -0
  168. package/mcp-server/VendorApprovalBlockedNotice.d.ts.map +1 -0
  169. package/mcp-server/VendorApprovalBlockedNotice.js +62 -0
  170. package/mcp-server/VendorApprovalBlockedNotice.js.map +1 -0
  171. package/mcp-server/mcpServerSetupReducer.d.ts +18 -0
  172. package/mcp-server/mcpServerSetupReducer.d.ts.map +1 -1
  173. package/mcp-server/mcpServerSetupReducer.js +6 -0
  174. package/mcp-server/mcpServerSetupReducer.js.map +1 -1
  175. package/mcp-server/useMcpServerSetup.d.ts.map +1 -1
  176. package/mcp-server/useMcpServerSetup.js +7 -0
  177. package/mcp-server/useMcpServerSetup.js.map +1 -1
  178. package/oauth-app/OAuthAppListPanel.d.ts.map +1 -1
  179. package/oauth-app/OAuthAppListPanel.js +2 -1
  180. package/oauth-app/OAuthAppListPanel.js.map +1 -1
  181. package/package.json +4 -4
  182. package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
  183. package/platform-client/PlatformClientListPanel.js +3 -2
  184. package/platform-client/PlatformClientListPanel.js.map +1 -1
  185. package/pricing-governance/BaselineEditor.d.ts.map +1 -1
  186. package/pricing-governance/BaselineEditor.js +7 -1
  187. package/pricing-governance/BaselineEditor.js.map +1 -1
  188. package/pricing-governance/ModelCatalogPanel.d.ts.map +1 -1
  189. package/pricing-governance/ModelCatalogPanel.js +2 -1
  190. package/pricing-governance/ModelCatalogPanel.js.map +1 -1
  191. package/pricing-governance/PricingGovernanceConsole.d.ts.map +1 -1
  192. package/pricing-governance/PricingGovernanceConsole.js +2 -1
  193. package/pricing-governance/PricingGovernanceConsole.js.map +1 -1
  194. package/pricing-governance/PricingGovernancePanel.d.ts.map +1 -1
  195. package/pricing-governance/PricingGovernancePanel.js +2 -1
  196. package/pricing-governance/PricingGovernancePanel.js.map +1 -1
  197. package/resource-workbench/components/StatusBadge.d.ts.map +1 -1
  198. package/resource-workbench/components/StatusBadge.js +2 -1
  199. package/resource-workbench/components/StatusBadge.js.map +1 -1
  200. package/schedule/CadenceField.d.ts.map +1 -1
  201. package/schedule/CadenceField.js +15 -8
  202. package/schedule/CadenceField.js.map +1 -1
  203. package/schedule/ScheduleRunsTable.d.ts.map +1 -1
  204. package/schedule/ScheduleRunsTable.js +3 -2
  205. package/schedule/ScheduleRunsTable.js.map +1 -1
  206. package/session/PlanEditor.d.ts.map +1 -1
  207. package/session/PlanEditor.js +3 -5
  208. package/session/PlanEditor.js.map +1 -1
  209. package/sharing/AgentShareList.d.ts.map +1 -1
  210. package/sharing/AgentShareList.js +3 -1
  211. package/sharing/AgentShareList.js.map +1 -1
  212. package/sharing/ShareAgentDialog.d.ts.map +1 -1
  213. package/sharing/ShareAgentDialog.js +2 -1
  214. package/sharing/ShareAgentDialog.js.map +1 -1
  215. package/skill/SkillDetailView.d.ts.map +1 -1
  216. package/skill/SkillDetailView.js +3 -2
  217. package/skill/SkillDetailView.js.map +1 -1
  218. package/src/__tests__/helpers/open-menu.ts +88 -0
  219. package/src/__tests__/portal-container.test.tsx +3 -3
  220. package/src/activity/useRecentActivity.ts +3 -2
  221. package/src/agent/AgentDetailView.tsx +6 -130
  222. package/src/agent/internal/__tests__/agentToInput.test.ts +2 -11
  223. package/src/agent/internal/agentToInput.ts +0 -11
  224. package/src/agent-instance/AgentInstanceList.tsx +5 -6
  225. package/src/agent-instance/__tests__/AgentInstanceList.test.tsx +5 -4
  226. package/src/api-key/ApiKeyListPanel.tsx +11 -3
  227. package/src/attachment/AttachmentChipList.tsx +74 -65
  228. package/src/attachment/AttachmentImageLightbox.tsx +5 -4
  229. package/src/attachment/__tests__/AttachmentChipList.test.tsx +4 -3
  230. package/src/channel/AgentChannelsPanel.tsx +5 -6
  231. package/src/channel/ChannelConversationsDialog.tsx +5 -3
  232. package/src/channel/ChannelTemplatesDialog.tsx +5 -6
  233. package/src/channel/__tests__/AgentChannelsPanel.test.tsx +14 -9
  234. package/src/channel-app/internal.tsx +5 -6
  235. package/src/composer/ComposerToolbar.tsx +122 -90
  236. package/src/composer/ConfigureMenu.tsx +33 -24
  237. package/src/composer/ContextChip.tsx +2 -3
  238. package/src/composer/ContextPopover.tsx +27 -18
  239. package/src/composer/SessionComposer.tsx +41 -9
  240. package/src/composer/__tests__/SessionComposer-agentSetupError.test.tsx +124 -0
  241. package/src/composer/__tests__/SessionComposer-lockAgent.test.tsx +4 -9
  242. package/src/conversation/ConversationMediaAttachment.tsx +2 -2
  243. package/src/conversation/ConversationTimelineView.tsx +19 -2
  244. package/src/conversation/__tests__/ConversationTimelineView.test.tsx +106 -3
  245. package/src/conversation/conversationPresentation.ts +52 -1
  246. package/src/cursor-accounts/MemberCoverageTable.tsx +15 -13
  247. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +4 -4
  248. package/src/dashboard/DashboardKPICards.tsx +2 -1
  249. package/src/dependency-graph/DependencyTreeNode.tsx +1 -7
  250. package/src/dependency-graph/__tests__/useDependencyGraph.test.ts +18 -34
  251. package/src/dependency-graph/types.ts +8 -20
  252. package/src/dependency-graph/useDependencyGraph.ts +2 -22
  253. package/src/environment/EnvironmentVariableEditor.tsx +17 -6
  254. package/src/execution/ApprovalCard.tsx +1 -3
  255. package/src/execution/ArtifactRowView.tsx +68 -48
  256. package/src/execution/FilePathLink.tsx +43 -27
  257. package/src/execution/McpToolDetail.tsx +6 -2
  258. package/src/execution/MessageAttachments.tsx +57 -41
  259. package/src/execution/MessageEntry.tsx +22 -15
  260. package/src/execution/PlanArtifactCard.tsx +25 -18
  261. package/src/execution/ToolCallDetail.tsx +1 -4
  262. package/src/execution/ToolCallItem.tsx +18 -7
  263. package/src/execution/WriteBackCard.tsx +38 -29
  264. package/src/execution/__tests__/ArtifactRow.test.tsx +6 -2
  265. package/src/execution/__tests__/ArtifactRowView.test.tsx +5 -2
  266. package/src/execution/__tests__/FilePathLink.test.tsx +10 -6
  267. package/src/execution/__tests__/FileReviewCard.test.tsx +2 -1
  268. package/src/execution/__tests__/MessageEntry-attachments.test.tsx +3 -2
  269. package/src/execution/__tests__/MessageThread.test.tsx +6 -1
  270. package/src/execution/__tests__/artifact-row-tooltips.layout.test.tsx +115 -0
  271. package/src/execution/artifact-row-item.ts +1 -1
  272. package/src/file-reference/FileReferenceChipList.tsx +29 -17
  273. package/src/file-reference/__tests__/FileReferenceChipList.test.tsx +5 -2
  274. package/src/iam-policy/OrgMembersPanel.tsx +26 -19
  275. package/src/iam-policy/ProviderBadge.tsx +17 -10
  276. package/src/iam-policy/RoleSelector.tsx +0 -1
  277. package/src/identity-provider/IdentityProviderListPanel.tsx +11 -3
  278. package/src/index.ts +0 -82
  279. package/src/internal/__tests__/truncated-text.layout.test.tsx +68 -0
  280. package/src/internal/__tests__/truncated-text.test.tsx +33 -0
  281. package/src/internal/truncated-text.tsx +81 -0
  282. package/src/invitation/InvitationManager.tsx +18 -5
  283. package/src/library/ScopeToggle.tsx +14 -2
  284. package/src/library/VisibilitySelector.tsx +21 -14
  285. package/src/library/useExportResource.ts +3 -4
  286. package/src/manifest/EditResourceYamlDialog.tsx +1 -2
  287. package/src/manifest/__tests__/ApplyManifestDialog.test.tsx +2 -2
  288. package/src/manifest/__tests__/EditResourceYamlDialog.test.tsx +9 -9
  289. package/src/mcp-server/McpServerConfigPanel.tsx +79 -37
  290. package/src/mcp-server/McpServerConnectDialog.tsx +41 -5
  291. package/src/mcp-server/McpServerDetailView.tsx +23 -39
  292. package/src/mcp-server/McpServerPicker.tsx +99 -7
  293. package/src/mcp-server/McpToolSelector.tsx +12 -7
  294. package/src/mcp-server/VendorApprovalBlockedNotice.tsx +221 -0
  295. package/src/mcp-server/__tests__/McpServerPicker.test.tsx +504 -0
  296. package/src/mcp-server/__tests__/VendorApprovalBlocked.surfaces.test.tsx +321 -0
  297. package/src/mcp-server/__tests__/VendorApprovalBlockedNotice.test.tsx +154 -0
  298. package/src/mcp-server/mcpServerSetupReducer.ts +24 -0
  299. package/src/mcp-server/useMcpServerSetup.ts +9 -0
  300. package/src/oauth-app/OAuthAppListPanel.tsx +11 -3
  301. package/src/platform-client/PlatformClientListPanel.tsx +35 -18
  302. package/src/pricing-governance/BaselineEditor.tsx +20 -0
  303. package/src/pricing-governance/ModelCatalogPanel.tsx +9 -5
  304. package/src/pricing-governance/PricingGovernanceConsole.tsx +9 -5
  305. package/src/pricing-governance/PricingGovernancePanel.tsx +13 -4
  306. package/src/pricing-governance/__tests__/ModelCatalogPanel.test.tsx +37 -0
  307. package/src/resource-workbench/components/StatusBadge.tsx +7 -3
  308. package/src/schedule/CadenceField.tsx +38 -27
  309. package/src/schedule/ScheduleRunsTable.tsx +23 -11
  310. package/src/schedule/__tests__/cadence-tooltips.layout.test.tsx +86 -0
  311. package/src/session/PlanEditor.tsx +9 -8
  312. package/src/sharing/AgentShareList.tsx +28 -22
  313. package/src/sharing/ShareAgentDialog.tsx +5 -6
  314. package/src/sharing/__tests__/AgentShareList.test.tsx +4 -4
  315. package/src/skill/SkillDetailView.tsx +23 -12
  316. package/src/version-history/VersionTimelineEntry.tsx +21 -12
  317. package/src/workflow/CanvasTransitionEdge.tsx +23 -16
  318. package/src/workflow/ExecutionActiveTaskIndicator.tsx +74 -59
  319. package/src/workflow/TaskPickerPopover.tsx +0 -1
  320. package/src/workflow/WorkflowCanvasEditor.tsx +95 -64
  321. package/src/workflow/WorkflowNode.tsx +13 -6
  322. package/src/workflow/WorkflowTaskApprovalSummary.tsx +18 -11
  323. package/src/workflow/WorkflowTaskList.tsx +2 -2
  324. package/src/workflow/WorkflowVersionBadge.tsx +33 -18
  325. package/src/workflow/WorkflowVersionTimeline.tsx +7 -6
  326. package/src/workflow/__tests__/WorkflowTaskApprovalSummary.test.tsx +3 -1
  327. package/src/workflow/__tests__/structured-data-viewer.test.tsx +5 -2
  328. package/src/workflow/execution-comparison/ExecutionComparisonView.tsx +5 -3
  329. package/src/workflow/execution-comparison/TaskComparisonTable.tsx +12 -5
  330. package/src/workflow/execution-history/ExecutionHistoryTable.tsx +24 -15
  331. package/src/workflow/inspector/InspectorHeader.tsx +20 -11
  332. package/src/workflow/inspector/NestedTaskList.tsx +18 -11
  333. package/src/workflow/inspector/WorkflowSummaryPanel.tsx +5 -3
  334. package/src/workflow/inspector/tabs/BranchesTab.tsx +61 -31
  335. package/src/workflow/instance/WorkflowInstanceList.tsx +5 -6
  336. package/src/workflow/instance/__tests__/WorkflowInstanceList.test.tsx +5 -4
  337. package/src/workflow/node-shell/DiffBadge.tsx +18 -11
  338. package/src/workflow/node-shell/ExecutionBadge.tsx +73 -46
  339. package/src/workflow/node-shell/NodeActions.tsx +128 -94
  340. package/src/workflow/task-detail/StructuredDataViewer.tsx +4 -2
  341. package/src/workspace/EditorTabs.tsx +102 -85
  342. package/src/workspace/ExplorerTree.tsx +47 -30
  343. package/src/workspace/FileViewer.tsx +11 -3
  344. package/src/workspace/PanelChip.tsx +32 -23
  345. package/src/workspace/WorkspaceEditor.tsx +21 -9
  346. package/src/workspace/WorkspaceSummary.tsx +21 -12
  347. package/src/workspace/WorkspaceSurface.tsx +86 -61
  348. package/src/workspace/__tests__/EditorTabs.test.tsx +5 -2
  349. package/src/workspace/__tests__/WorkspaceSurface.test.tsx +5 -2
  350. package/styles.css +1 -1
  351. package/version-history/VersionTimelineEntry.d.ts.map +1 -1
  352. package/version-history/VersionTimelineEntry.js +2 -1
  353. package/version-history/VersionTimelineEntry.js.map +1 -1
  354. package/workflow/CanvasTransitionEdge.d.ts +1 -1
  355. package/workflow/CanvasTransitionEdge.d.ts.map +1 -1
  356. package/workflow/CanvasTransitionEdge.js +3 -2
  357. package/workflow/CanvasTransitionEdge.js.map +1 -1
  358. package/workflow/ExecutionActiveTaskIndicator.d.ts.map +1 -1
  359. package/workflow/ExecutionActiveTaskIndicator.js +12 -11
  360. package/workflow/ExecutionActiveTaskIndicator.js.map +1 -1
  361. package/workflow/TaskPickerPopover.js +1 -1
  362. package/workflow/TaskPickerPopover.js.map +1 -1
  363. package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
  364. package/workflow/WorkflowCanvasEditor.js +9 -2
  365. package/workflow/WorkflowCanvasEditor.js.map +1 -1
  366. package/workflow/WorkflowNode.d.ts.map +1 -1
  367. package/workflow/WorkflowNode.js +2 -1
  368. package/workflow/WorkflowNode.js.map +1 -1
  369. package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
  370. package/workflow/WorkflowTaskApprovalSummary.js +6 -4
  371. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  372. package/workflow/WorkflowTaskList.js +2 -2
  373. package/workflow/WorkflowTaskList.js.map +1 -1
  374. package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
  375. package/workflow/WorkflowVersionBadge.js +2 -1
  376. package/workflow/WorkflowVersionBadge.js.map +1 -1
  377. package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
  378. package/workflow/WorkflowVersionTimeline.js +2 -1
  379. package/workflow/WorkflowVersionTimeline.js.map +1 -1
  380. package/workflow/execution-comparison/ExecutionComparisonView.d.ts.map +1 -1
  381. package/workflow/execution-comparison/ExecutionComparisonView.js +2 -1
  382. package/workflow/execution-comparison/ExecutionComparisonView.js.map +1 -1
  383. package/workflow/execution-comparison/TaskComparisonTable.d.ts.map +1 -1
  384. package/workflow/execution-comparison/TaskComparisonTable.js +2 -1
  385. package/workflow/execution-comparison/TaskComparisonTable.js.map +1 -1
  386. package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
  387. package/workflow/execution-history/ExecutionHistoryTable.js +6 -4
  388. package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
  389. package/workflow/inspector/InspectorHeader.d.ts.map +1 -1
  390. package/workflow/inspector/InspectorHeader.js +4 -2
  391. package/workflow/inspector/InspectorHeader.js.map +1 -1
  392. package/workflow/inspector/NestedTaskList.d.ts.map +1 -1
  393. package/workflow/inspector/NestedTaskList.js +2 -1
  394. package/workflow/inspector/NestedTaskList.js.map +1 -1
  395. package/workflow/inspector/WorkflowSummaryPanel.d.ts.map +1 -1
  396. package/workflow/inspector/WorkflowSummaryPanel.js +2 -1
  397. package/workflow/inspector/WorkflowSummaryPanel.js.map +1 -1
  398. package/workflow/inspector/tabs/BranchesTab.d.ts.map +1 -1
  399. package/workflow/inspector/tabs/BranchesTab.js +5 -2
  400. package/workflow/inspector/tabs/BranchesTab.js.map +1 -1
  401. package/workflow/instance/WorkflowInstanceList.d.ts.map +1 -1
  402. package/workflow/instance/WorkflowInstanceList.js +2 -1
  403. package/workflow/instance/WorkflowInstanceList.js.map +1 -1
  404. package/workflow/node-shell/DiffBadge.d.ts.map +1 -1
  405. package/workflow/node-shell/DiffBadge.js +3 -2
  406. package/workflow/node-shell/DiffBadge.js.map +1 -1
  407. package/workflow/node-shell/ExecutionBadge.d.ts.map +1 -1
  408. package/workflow/node-shell/ExecutionBadge.js +5 -4
  409. package/workflow/node-shell/ExecutionBadge.js.map +1 -1
  410. package/workflow/node-shell/NodeActions.d.ts.map +1 -1
  411. package/workflow/node-shell/NodeActions.js +12 -11
  412. package/workflow/node-shell/NodeActions.js.map +1 -1
  413. package/workflow/task-detail/StructuredDataViewer.d.ts.map +1 -1
  414. package/workflow/task-detail/StructuredDataViewer.js +5 -1
  415. package/workflow/task-detail/StructuredDataViewer.js.map +1 -1
  416. package/workspace/EditorTabs.d.ts.map +1 -1
  417. package/workspace/EditorTabs.js +38 -37
  418. package/workspace/EditorTabs.js.map +1 -1
  419. package/workspace/ExplorerTree.d.ts.map +1 -1
  420. package/workspace/ExplorerTree.js +2 -1
  421. package/workspace/ExplorerTree.js.map +1 -1
  422. package/workspace/FileViewer.d.ts.map +1 -1
  423. package/workspace/FileViewer.js +2 -1
  424. package/workspace/FileViewer.js.map +1 -1
  425. package/workspace/PanelChip.d.ts.map +1 -1
  426. package/workspace/PanelChip.js +2 -1
  427. package/workspace/PanelChip.js.map +1 -1
  428. package/workspace/WorkspaceEditor.d.ts.map +1 -1
  429. package/workspace/WorkspaceEditor.js +2 -1
  430. package/workspace/WorkspaceEditor.js.map +1 -1
  431. package/workspace/WorkspaceSummary.d.ts.map +1 -1
  432. package/workspace/WorkspaceSummary.js +7 -2
  433. package/workspace/WorkspaceSummary.js.map +1 -1
  434. package/workspace/WorkspaceSurface.d.ts.map +1 -1
  435. package/workspace/WorkspaceSurface.js +12 -11
  436. package/workspace/WorkspaceSurface.js.map +1 -1
  437. package/datastore/CollectionRecordsBrowser.d.ts +0 -34
  438. package/datastore/CollectionRecordsBrowser.d.ts.map +0 -1
  439. package/datastore/CollectionRecordsBrowser.js +0 -223
  440. package/datastore/CollectionRecordsBrowser.js.map +0 -1
  441. package/datastore/CollectionSchemaView.d.ts +0 -29
  442. package/datastore/CollectionSchemaView.d.ts.map +0 -1
  443. package/datastore/CollectionSchemaView.js +0 -93
  444. package/datastore/CollectionSchemaView.js.map +0 -1
  445. package/datastore/DatastoreDetailView.d.ts +0 -44
  446. package/datastore/DatastoreDetailView.d.ts.map +0 -1
  447. package/datastore/DatastoreDetailView.js +0 -76
  448. package/datastore/DatastoreDetailView.js.map +0 -1
  449. package/datastore/DatastoreSyncReport.d.ts +0 -19
  450. package/datastore/DatastoreSyncReport.d.ts.map +0 -1
  451. package/datastore/DatastoreSyncReport.js +0 -45
  452. package/datastore/DatastoreSyncReport.js.map +0 -1
  453. package/datastore/DeleteDatastoreDialog.d.ts +0 -35
  454. package/datastore/DeleteDatastoreDialog.d.ts.map +0 -1
  455. package/datastore/DeleteDatastoreDialog.js +0 -90
  456. package/datastore/DeleteDatastoreDialog.js.map +0 -1
  457. package/datastore/FieldValueControl.d.ts +0 -55
  458. package/datastore/FieldValueControl.d.ts.map +0 -1
  459. package/datastore/FieldValueControl.js +0 -138
  460. package/datastore/FieldValueControl.js.map +0 -1
  461. package/datastore/RecordFilterBuilder.d.ts +0 -37
  462. package/datastore/RecordFilterBuilder.d.ts.map +0 -1
  463. package/datastore/RecordFilterBuilder.js +0 -122
  464. package/datastore/RecordFilterBuilder.js.map +0 -1
  465. package/datastore/RecordFormPanel.d.ts +0 -45
  466. package/datastore/RecordFormPanel.d.ts.map +0 -1
  467. package/datastore/RecordFormPanel.js +0 -215
  468. package/datastore/RecordFormPanel.js.map +0 -1
  469. package/datastore/index.d.ts +0 -43
  470. package/datastore/index.d.ts.map +0 -1
  471. package/datastore/index.js +0 -22
  472. package/datastore/index.js.map +0 -1
  473. package/datastore/recordFilter.d.ts +0 -62
  474. package/datastore/recordFilter.d.ts.map +0 -1
  475. package/datastore/recordFilter.js +0 -104
  476. package/datastore/recordFilter.js.map +0 -1
  477. package/datastore/recordValues.d.ts +0 -85
  478. package/datastore/recordValues.d.ts.map +0 -1
  479. package/datastore/recordValues.js +0 -282
  480. package/datastore/recordValues.js.map +0 -1
  481. package/datastore/useDatastore.d.ts +0 -39
  482. package/datastore/useDatastore.d.ts.map +0 -1
  483. package/datastore/useDatastore.js +0 -44
  484. package/datastore/useDatastore.js.map +0 -1
  485. package/datastore/useDatastoreCount.d.ts +0 -50
  486. package/datastore/useDatastoreCount.d.ts.map +0 -1
  487. package/datastore/useDatastoreCount.js +0 -27
  488. package/datastore/useDatastoreCount.js.map +0 -1
  489. package/datastore/useDatastoreDescription.d.ts +0 -54
  490. package/datastore/useDatastoreDescription.d.ts.map +0 -1
  491. package/datastore/useDatastoreDescription.js +0 -50
  492. package/datastore/useDatastoreDescription.js.map +0 -1
  493. package/datastore/useDatastoreList.d.ts +0 -57
  494. package/datastore/useDatastoreList.d.ts.map +0 -1
  495. package/datastore/useDatastoreList.js +0 -29
  496. package/datastore/useDatastoreList.js.map +0 -1
  497. package/datastore/useDatastoreSearch.d.ts +0 -19
  498. package/datastore/useDatastoreSearch.d.ts.map +0 -1
  499. package/datastore/useDatastoreSearch.js +0 -22
  500. package/datastore/useDatastoreSearch.js.map +0 -1
  501. package/datastore/useDeleteDatastore.d.ts +0 -53
  502. package/datastore/useDeleteDatastore.d.ts.map +0 -1
  503. package/datastore/useDeleteDatastore.js +0 -40
  504. package/datastore/useDeleteDatastore.js.map +0 -1
  505. package/datastore/useDeleteRecord.d.ts +0 -34
  506. package/datastore/useDeleteRecord.d.ts.map +0 -1
  507. package/datastore/useDeleteRecord.js +0 -43
  508. package/datastore/useDeleteRecord.js.map +0 -1
  509. package/datastore/useInsertRecord.d.ts +0 -50
  510. package/datastore/useInsertRecord.d.ts.map +0 -1
  511. package/datastore/useInsertRecord.js +0 -55
  512. package/datastore/useInsertRecord.js.map +0 -1
  513. package/datastore/useRecordCollection.d.ts +0 -104
  514. package/datastore/useRecordCollection.d.ts.map +0 -1
  515. package/datastore/useRecordCollection.js +0 -136
  516. package/datastore/useRecordCollection.js.map +0 -1
  517. package/datastore/useRecordList.d.ts +0 -66
  518. package/datastore/useRecordList.d.ts.map +0 -1
  519. package/datastore/useRecordList.js +0 -58
  520. package/datastore/useRecordList.js.map +0 -1
  521. package/datastore/useUpdateRecord.d.ts +0 -52
  522. package/datastore/useUpdateRecord.d.ts.map +0 -1
  523. package/datastore/useUpdateRecord.js +0 -55
  524. package/datastore/useUpdateRecord.js.map +0 -1
  525. package/src/agent/__tests__/AgentDetailView.datastores.test.tsx +0 -166
  526. package/src/datastore/CollectionRecordsBrowser.tsx +0 -570
  527. package/src/datastore/CollectionSchemaView.tsx +0 -247
  528. package/src/datastore/DatastoreDetailView.tsx +0 -201
  529. package/src/datastore/DatastoreSyncReport.tsx +0 -105
  530. package/src/datastore/DeleteDatastoreDialog.tsx +0 -202
  531. package/src/datastore/FieldValueControl.tsx +0 -289
  532. package/src/datastore/RecordFilterBuilder.tsx +0 -422
  533. package/src/datastore/RecordFormPanel.tsx +0 -432
  534. package/src/datastore/__tests__/CollectionRecordsBrowser.test.tsx +0 -245
  535. package/src/datastore/__tests__/DeleteDatastoreDialog.test.tsx +0 -133
  536. package/src/datastore/__tests__/FieldValueControl.test.tsx +0 -160
  537. package/src/datastore/__tests__/RecordFilterBuilder.test.tsx +0 -155
  538. package/src/datastore/__tests__/RecordFormPanel.test.tsx +0 -227
  539. package/src/datastore/__tests__/recordFilter.test.ts +0 -169
  540. package/src/datastore/__tests__/recordMutations.test.tsx +0 -195
  541. package/src/datastore/__tests__/recordValues.test.ts +0 -359
  542. package/src/datastore/__tests__/schemaAndSyncViews.test.tsx +0 -142
  543. package/src/datastore/__tests__/useDatastoreDescription.test.tsx +0 -143
  544. package/src/datastore/__tests__/useRecordCollection.test.tsx +0 -250
  545. package/src/datastore/__tests__/useRecordList.test.tsx +0 -85
  546. package/src/datastore/index.ts +0 -111
  547. package/src/datastore/recordFilter.ts +0 -154
  548. package/src/datastore/recordValues.ts +0 -327
  549. package/src/datastore/useDatastore.ts +0 -67
  550. package/src/datastore/useDatastoreCount.ts +0 -69
  551. package/src/datastore/useDatastoreDescription.ts +0 -90
  552. package/src/datastore/useDatastoreList.ts +0 -79
  553. package/src/datastore/useDatastoreSearch.ts +0 -39
  554. package/src/datastore/useDeleteDatastore.ts +0 -87
  555. package/src/datastore/useDeleteRecord.ts +0 -77
  556. package/src/datastore/useInsertRecord.ts +0 -92
  557. package/src/datastore/useRecordCollection.ts +0 -256
  558. package/src/datastore/useRecordList.ts +0 -131
  559. package/src/datastore/useUpdateRecord.ts +0 -95
@@ -1,247 +0,0 @@
1
- "use client";
2
-
3
- import { cn } from "@stigmer/theme";
4
- import { toJson } from "@bufbuild/protobuf";
5
- import { ValueSchema } from "@bufbuild/protobuf/wkt";
6
- import {
7
- FieldType,
8
- type CollectionDeclaration,
9
- type DatastoreAuthorization,
10
- type DatastoreSpec,
11
- type DatastoreSubject,
12
- } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/spec_pb";
13
- import { Section } from "../resource-detail/Section.js";
14
- import { formatFieldValue } from "./recordValues.js";
15
-
16
- /** Props for {@link CollectionSchemaView}. */
17
- export interface CollectionSchemaViewProps {
18
- /** The datastore spec — the authoritative source for structure (DD-008 SD-5). */
19
- readonly spec: DatastoreSpec;
20
- /** Additional CSS classes for the root container. */
21
- readonly className?: string;
22
- }
23
-
24
- /**
25
- * Structural view of a datastore's declared schema, rendered from the
26
- * loaded resource spec: per-collection typed field tables, the declared
27
- * constraints with their authored messages (the operator's own copy —
28
- * the same bytes agents relay), and the authorization block summary
29
- * (roles, bindings, `default_role` — operator-facing state the
30
- * describe projection deliberately excludes).
31
- *
32
- * Read-only by design: schema changes go through YAML apply, the one
33
- * write path for structure.
34
- *
35
- * All visual properties flow through `--stgm-*` design tokens.
36
- * Zero Console dependencies — safe for platform builder embedding.
37
- */
38
- export function CollectionSchemaView({ spec, className }: CollectionSchemaViewProps) {
39
- return (
40
- <div className={cn("stg:flex stg:flex-col stg:gap-6", className)}>
41
- <AuthorizationSummary authorization={spec.authorization} timezone={spec.timezone} />
42
- {spec.collections.map((coll) => (
43
- <CollectionSchema key={coll.name} collection={coll} />
44
- ))}
45
- </div>
46
- );
47
- }
48
-
49
- // ---------------------------------------------------------------------------
50
- // Authorization block summary
51
- // ---------------------------------------------------------------------------
52
-
53
- function AuthorizationSummary({
54
- authorization,
55
- timezone,
56
- }: {
57
- readonly authorization: DatastoreAuthorization | undefined;
58
- readonly timezone: string;
59
- }) {
60
- const roles = authorization?.roles ?? [];
61
- const bindings = authorization?.bindings ?? [];
62
- const defaultRole = authorization?.defaultRole ?? "";
63
-
64
- return (
65
- <Section title="Authorization">
66
- <div className="stg:flex stg:flex-col stg:gap-3 stg:p-3 stg:text-sm">
67
- <div className="stg:flex stg:flex-wrap stg:items-center stg:gap-2">
68
- <span className="stg:text-xs stg:font-medium stg:text-muted-foreground">Roles</span>
69
- {roles.length === 0 ? (
70
- <span className="stg:text-xs stg:text-muted-foreground">none declared</span>
71
- ) : (
72
- roles.map((r) => (
73
- <span
74
- key={r.name}
75
- className="stg:rounded-full stg:bg-muted stg:px-2 stg:py-0.5 stg:text-xs stg:font-medium stg:text-foreground"
76
- >
77
- {r.name}
78
- </span>
79
- ))
80
- )}
81
- </div>
82
- <div className="stg:flex stg:flex-wrap stg:items-center stg:gap-2">
83
- <span className="stg:text-xs stg:font-medium stg:text-muted-foreground">Default role</span>
84
- {defaultRole ? (
85
- <span className="stg:rounded-full stg:bg-muted stg:px-2 stg:py-0.5 stg:text-xs stg:font-medium stg:text-foreground">
86
- {defaultRole}
87
- </span>
88
- ) : (
89
- <span className="stg:text-xs stg:text-muted-foreground">
90
- none — unbound callers are denied
91
- </span>
92
- )}
93
- </div>
94
- {bindings.length > 0 && (
95
- <div className="stg:flex stg:flex-col stg:gap-1">
96
- <span className="stg:text-xs stg:font-medium stg:text-muted-foreground">
97
- Bindings ({bindings.length})
98
- </span>
99
- <ul className="stg:flex stg:flex-col stg:gap-0.5">
100
- {bindings.map((b, i) => (
101
- <li key={i} className="stg:text-xs stg:text-foreground">
102
- <code className="stg:font-mono">{formatSubject(b.subject)}</code>
103
- <span className="stg:text-muted-foreground"> → </span>
104
- {b.role}
105
- </li>
106
- ))}
107
- </ul>
108
- </div>
109
- )}
110
- {timezone && (
111
- <div className="stg:flex stg:items-center stg:gap-2">
112
- <span className="stg:text-xs stg:font-medium stg:text-muted-foreground">Timezone</span>
113
- <span className="stg:text-xs stg:text-foreground">{timezone}</span>
114
- </div>
115
- )}
116
- </div>
117
- </Section>
118
- );
119
- }
120
-
121
- /**
122
- * Plain kind+value rendering of a datastore subject (DD-008 SD-3: the
123
- * grant system is the privacy boundary; display is honest).
124
- */
125
- export function formatSubject(subject: DatastoreSubject | undefined): string {
126
- switch (subject?.kind.case) {
127
- case "channelSender": {
128
- const s = subject.kind.value;
129
- return `${s.senderKind}:${s.value}`;
130
- }
131
- case "principal": {
132
- const p = subject.kind.value;
133
- return `${p.kind}/${p.id}`;
134
- }
135
- default:
136
- return "unknown";
137
- }
138
- }
139
-
140
- // ---------------------------------------------------------------------------
141
- // Per-collection schema
142
- // ---------------------------------------------------------------------------
143
-
144
- const CONSTRAINT_KIND_LABELS = {
145
- uniques: "unique",
146
- checks: "check",
147
- exists: "exists",
148
- notExists: "not exists",
149
- } as const;
150
-
151
- function CollectionSchema({ collection }: { readonly collection: CollectionDeclaration }) {
152
- const constraints = [
153
- ...collection.uniques.map((c) => ({
154
- kind: CONSTRAINT_KIND_LABELS.uniques,
155
- name: c.name,
156
- fields: c.fields.join(", "),
157
- message: c.message,
158
- })),
159
- ...collection.checks.map((c) => ({
160
- kind: CONSTRAINT_KIND_LABELS.checks,
161
- name: c.name,
162
- fields: "",
163
- message: c.message,
164
- })),
165
- ...collection.exists.map((c) => ({
166
- kind: CONSTRAINT_KIND_LABELS.exists,
167
- name: c.name,
168
- fields: c.collection,
169
- message: c.message,
170
- })),
171
- ...collection.notExists.map((c) => ({
172
- kind: CONSTRAINT_KIND_LABELS.notExists,
173
- name: c.name,
174
- fields: c.collection,
175
- message: c.message,
176
- })),
177
- ];
178
-
179
- return (
180
- <Section title={collection.name} count={collection.fields.length}>
181
- <div className="stg:flex stg:flex-col">
182
- {collection.description && (
183
- <p className="stg:border-b stg:border-border stg:px-3 stg:py-2 stg:text-xs stg:text-muted-foreground">
184
- {collection.description}
185
- </p>
186
- )}
187
-
188
- <table className="stg:w-full stg:text-left stg:text-xs">
189
- <thead>
190
- <tr className="stg:border-b stg:border-border stg:text-muted-foreground">
191
- <th scope="col" className="stg:px-3 stg:py-2 stg:font-medium">Field</th>
192
- <th scope="col" className="stg:px-3 stg:py-2 stg:font-medium">Type</th>
193
- <th scope="col" className="stg:px-3 stg:py-2 stg:font-medium">Required</th>
194
- <th scope="col" className="stg:px-3 stg:py-2 stg:font-medium">Default</th>
195
- <th scope="col" className="stg:px-3 stg:py-2 stg:font-medium">Description</th>
196
- </tr>
197
- </thead>
198
- <tbody>
199
- {collection.fields.map((f) => (
200
- <tr key={f.name} className="stg:border-b stg:border-border stg:last:border-b-0">
201
- <td className="stg:px-3 stg:py-2 stg:font-mono stg:text-foreground">{f.name}</td>
202
- <td className="stg:px-3 stg:py-2 stg:text-foreground">
203
- {FieldType[f.type]}
204
- {f.enumValues.length > 0 && (
205
- <span className="stg:text-muted-foreground">
206
- {" "}
207
- ({f.enumValues.join(" | ")})
208
- </span>
209
- )}
210
- </td>
211
- <td className="stg:px-3 stg:py-2 stg:text-muted-foreground">{f.required ? "yes" : ""}</td>
212
- <td className="stg:px-3 stg:py-2 stg:font-mono stg:text-muted-foreground">
213
- {f.default !== undefined
214
- ? formatFieldValue(f.type, toJson(ValueSchema, f.default))
215
- : ""}
216
- </td>
217
- <td className="stg:px-3 stg:py-2 stg:text-muted-foreground">{f.description}</td>
218
- </tr>
219
- ))}
220
- </tbody>
221
- </table>
222
-
223
- {constraints.length > 0 && (
224
- <div className="stg:border-t stg:border-border">
225
- <h4 className="stg:px-3 stg:pt-2 stg:text-xs stg:font-medium stg:uppercase stg:tracking-wider stg:text-muted-foreground">
226
- Constraints
227
- </h4>
228
- <ul className="stg:flex stg:flex-col stg:gap-1 stg:p-3">
229
- {constraints.map((c) => (
230
- <li key={`${c.kind}:${c.name}`} className="stg:flex stg:flex-wrap stg:items-baseline stg:gap-2 stg:text-xs">
231
- <span className="stg:rounded stg:bg-muted stg:px-1.5 stg:py-0.5 stg:font-medium stg:text-muted-foreground">
232
- {c.kind}
233
- </span>
234
- <code className="stg:font-mono stg:text-foreground">{c.name}</code>
235
- {c.fields && <span className="stg:text-muted-foreground">({c.fields})</span>}
236
- {c.message && (
237
- <span className="stg:text-muted-foreground">— “{c.message}”</span>
238
- )}
239
- </li>
240
- ))}
241
- </ul>
242
- </div>
243
- )}
244
- </div>
245
- </Section>
246
- );
247
- }
@@ -1,201 +0,0 @@
1
- "use client";
2
-
3
- import { useEffect, useState } from "react";
4
- import { cn } from "@stigmer/theme";
5
- import { timestampDate } from "@bufbuild/protobuf/wkt";
6
- import type { Datastore } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/api_pb";
7
- import { ErrorMessage } from "../error/ErrorMessage.js";
8
- import { ResourceDetailShell } from "../resource-detail/ResourceDetailShell.js";
9
- import type { DetailAction, ResourceHeaderMeta } from "../resource-detail/types.js";
10
- import { CollectionRecordsBrowser } from "./CollectionRecordsBrowser.js";
11
- import { CollectionSchemaView } from "./CollectionSchemaView.js";
12
- import { DatastoreSyncReport } from "./DatastoreSyncReport.js";
13
- import { useDatastore } from "./useDatastore.js";
14
-
15
- /** The detail view's tabs. */
16
- export type DatastoreDetailTab = "overview" | "records";
17
-
18
- /** Props for {@link DatastoreDetailView}. */
19
- export interface DatastoreDetailViewProps {
20
- /** Organization slug. */
21
- readonly org: string;
22
- /** Datastore slug. */
23
- readonly slug: string;
24
- /** Primary action rendered as a visible button. */
25
- readonly primaryAction?: DetailAction;
26
- /** Overflow actions (Edit YAML / Export / Delete — assembled at the page level). */
27
- readonly actions?: readonly DetailAction[];
28
- /** Called when the datastore loads or reloads (e.g. breadcrumb label sync). */
29
- readonly onResourceLoad?: (datastore: Datastore) => void;
30
- /** Initial tab for uncontrolled usage. @default "overview" */
31
- readonly defaultTab?: DatastoreDetailTab;
32
- /** Controlled active tab. Uncontrolled (internal state) when omitted. */
33
- readonly activeTab?: DatastoreDetailTab;
34
- /** Tab-change callback for controlled usage. */
35
- readonly onTabChange?: (tab: DatastoreDetailTab) => void;
36
- /** Additional CSS classes for the root container. */
37
- readonly className?: string;
38
- }
39
-
40
- /**
41
- * Self-contained detail view for a Datastore — the Library-resource
42
- * home (DD-008 SD-1): an **Overview** tab (schema, authorization
43
- * summary, and the sync-report health strip — all from the loaded
44
- * resource, the authoritative source for structure and health) and a
45
- * **Records** tab (the browser, whose caller-effective verbs come from
46
- * `describeDatastore`). No version-history affordance —
47
- * `is_versioned: false` (DD-003).
48
- *
49
- * Handles loading, error, and not-found states automatically.
50
- * Zero Console dependencies — safe for platform builder embedding.
51
- * All visual properties flow through `--stgm-*` design tokens.
52
- */
53
- export function DatastoreDetailView({
54
- org,
55
- slug,
56
- primaryAction,
57
- actions,
58
- onResourceLoad,
59
- defaultTab = "overview",
60
- activeTab,
61
- onTabChange,
62
- className,
63
- }: DatastoreDetailViewProps) {
64
- const { datastore, isLoading, error, refetch } = useDatastore(org, slug);
65
-
66
- const [internalTab, setInternalTab] = useState<DatastoreDetailTab>(defaultTab);
67
- const tab = activeTab ?? internalTab;
68
- const setTab = onTabChange ?? setInternalTab;
69
-
70
- useEffect(() => {
71
- if (datastore) onResourceLoad?.(datastore);
72
- }, [datastore, onResourceLoad]);
73
-
74
- if (isLoading) return <LoadingSkeleton className={className} />;
75
- if (error)
76
- return <ErrorMessage error={error} retry={refetch} className={className} />;
77
- if (!datastore) return <NotFoundState className={className} />;
78
-
79
- const meta = datastore.metadata;
80
- const spec = datastore.spec;
81
- const status = datastore.status;
82
- const specAudit = status?.audit?.specAudit;
83
-
84
- const headerMeta: ResourceHeaderMeta = {
85
- name: meta?.name || meta?.slug || "Untitled",
86
- id: meta?.id || "",
87
- org: meta?.org,
88
- slug: meta?.slug,
89
- description: spec?.description,
90
- icon: <DatastoreIcon className="stg:size-6 stg:text-muted-foreground" />,
91
- createdAt: specAudit?.createdAt ? timestampDate(specAudit.createdAt) : null,
92
- updatedAt: specAudit?.updatedAt ? timestampDate(specAudit.updatedAt) : null,
93
- };
94
-
95
- return (
96
- <ResourceDetailShell
97
- header={headerMeta}
98
- primaryAction={primaryAction}
99
- actions={actions}
100
- tabs={[
101
- { id: "overview", label: "Overview" },
102
- { id: "records", label: "Records" },
103
- ]}
104
- activeTab={tab}
105
- onTabChange={(id) => setTab(id as DatastoreDetailTab)}
106
- tabsAriaLabel="Datastore sections"
107
- className={className}
108
- >
109
- {tab === "overview" ? (
110
- <div className="stg:flex stg:flex-col stg:gap-6">
111
- {status && <DatastoreSyncReport status={status} />}
112
- {spec && <CollectionSchemaView spec={spec} />}
113
- </div>
114
- ) : (
115
- spec &&
116
- meta && (
117
- <CollectionRecordsBrowser
118
- org={meta.org}
119
- datastoreSlug={meta.slug}
120
- spec={spec}
121
- />
122
- )
123
- )}
124
- </ResourceDetailShell>
125
- );
126
- }
127
-
128
- // ---------------------------------------------------------------------------
129
- // Non-happy states
130
- // ---------------------------------------------------------------------------
131
-
132
- function LoadingSkeleton({ className }: { readonly className?: string }) {
133
- return (
134
- <div
135
- className={cn("stg:flex stg:flex-col stg:gap-6", className)}
136
- aria-busy="true"
137
- aria-label="Loading datastore details"
138
- >
139
- <div className="stg:flex stg:items-start stg:gap-3">
140
- <div className="stg:mt-1 stg:size-6 stg:shrink-0 stg:animate-pulse stg:rounded stg:bg-muted" />
141
- <div className="stg:flex-1 stg:space-y-2">
142
- <div className="stg:h-5 stg:w-48 stg:animate-pulse stg:rounded stg:bg-muted" />
143
- <div className="stg:h-3 stg:w-64 stg:animate-pulse stg:rounded stg:bg-muted" />
144
- </div>
145
- </div>
146
- <div className="stg:space-y-2">
147
- <div className="stg:h-3 stg:w-28 stg:animate-pulse stg:rounded stg:bg-muted" />
148
- <div
149
- className="stg:animate-pulse stg:rounded-lg stg:border stg:border-border stg:bg-muted-faint"
150
- style={{ height: "160px" }}
151
- />
152
- </div>
153
- <div className="stg:space-y-2">
154
- <div className="stg:h-3 stg:w-20 stg:animate-pulse stg:rounded stg:bg-muted" />
155
- <div
156
- className="stg:animate-pulse stg:rounded-lg stg:border stg:border-border stg:bg-muted-faint"
157
- style={{ height: "240px" }}
158
- />
159
- </div>
160
- </div>
161
- );
162
- }
163
-
164
- function NotFoundState({ className }: { readonly className?: string }) {
165
- return (
166
- <div
167
- role="status"
168
- className={cn("stg:flex stg:flex-col stg:items-center stg:gap-2 stg:py-12 stg:text-center", className)}
169
- >
170
- <DatastoreIcon className="stg:size-10 stg:text-muted-foreground-faint" />
171
- <p className="stg:text-sm stg:font-medium stg:text-muted-foreground">Datastore not found</p>
172
- <p className="stg:text-xs stg:text-muted-foreground-subtle">
173
- This datastore doesn&apos;t exist or you don&apos;t have access to it.
174
- </p>
175
- </div>
176
- );
177
- }
178
-
179
- // ---------------------------------------------------------------------------
180
- // Icon (inline SVG — no icon-library dependency)
181
- // ---------------------------------------------------------------------------
182
-
183
- /** Database-cylinder icon shared by the detail view's states. */
184
- export function DatastoreIcon({ className }: { readonly className?: string }) {
185
- return (
186
- <svg
187
- className={className}
188
- viewBox="0 0 24 24"
189
- fill="none"
190
- stroke="currentColor"
191
- strokeWidth="1.5"
192
- strokeLinecap="round"
193
- strokeLinejoin="round"
194
- aria-hidden="true"
195
- >
196
- <ellipse cx="12" cy="5" rx="8" ry="3" />
197
- <path d="M4 5v6c0 1.66 3.58 3 8 3s8-1.34 8-3V5" />
198
- <path d="M4 11v6c0 1.66 3.58 3 8 3s8-1.34 8-3v-6" />
199
- </svg>
200
- );
201
- }
@@ -1,105 +0,0 @@
1
- "use client";
2
-
3
- import { timestampDate } from "@bufbuild/protobuf/wkt";
4
- import {
5
- CollectionMaterializationState,
6
- DatastoreSyncOutcome,
7
- type DatastoreStatus,
8
- } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/status_pb";
9
- import { Section } from "../resource-detail/Section.js";
10
- import { StatusBadge } from "../resource-workbench/components/StatusBadge.js";
11
-
12
- /** Props for {@link DatastoreSyncReport}. */
13
- export interface DatastoreSyncReportProps {
14
- /** The datastore status — the authoritative source for health (DD-008 SD-5). */
15
- readonly status: DatastoreStatus;
16
- /** Additional CSS classes for the root container. */
17
- readonly className?: string;
18
- }
19
-
20
- /**
21
- * The Overview health strip: projects `DatastoreStatus` — last apply
22
- * outcome, per-collection materialization state, and record counts —
23
- * so the operator can confirm an apply landed without leaving the
24
- * console (the cutover choreography's verification surface, DD-009).
25
- *
26
- * All visual properties flow through `--stgm-*` design tokens.
27
- * Zero Console dependencies — safe for platform builder embedding.
28
- */
29
- export function DatastoreSyncReport({ status, className }: DatastoreSyncReportProps) {
30
- const syncedAt = status.lastSyncedAt
31
- ? timestampDate(status.lastSyncedAt).toLocaleString()
32
- : null;
33
-
34
- return (
35
- <Section title="Sync report" className={className}>
36
- <div className="stg:flex stg:flex-col">
37
- <div className="stg:flex stg:flex-wrap stg:items-center stg:gap-2 stg:border-b stg:border-border stg:px-3 stg:py-2">
38
- <SyncOutcomeBadge outcome={status.lastSyncOutcome} />
39
- {syncedAt && (
40
- <span className="stg:text-xs stg:text-muted-foreground">last synced {syncedAt}</span>
41
- )}
42
- </div>
43
- {status.collections.length === 0 ? (
44
- <p className="stg:px-3 stg:py-2 stg:text-xs stg:text-muted-foreground">
45
- No collections have been synced yet.
46
- </p>
47
- ) : (
48
- <table className="stg:w-full stg:text-left stg:text-xs">
49
- <thead>
50
- <tr className="stg:border-b stg:border-border stg:text-muted-foreground">
51
- <th scope="col" className="stg:px-3 stg:py-2 stg:font-medium">Collection</th>
52
- <th scope="col" className="stg:px-3 stg:py-2 stg:font-medium">State</th>
53
- <th scope="col" className="stg:px-3 stg:py-2 stg:text-right stg:font-medium">Records</th>
54
- </tr>
55
- </thead>
56
- <tbody>
57
- {status.collections.map((coll) => (
58
- <tr key={coll.name} className="stg:border-b stg:border-border stg:last:border-b-0">
59
- <td className="stg:px-3 stg:py-2 stg:font-mono stg:text-foreground">{coll.name}</td>
60
- <td className="stg:px-3 stg:py-2">
61
- <MaterializationBadge state={coll.state} />
62
- </td>
63
- <td className="stg:px-3 stg:py-2 stg:text-right stg:tabular-nums stg:text-foreground">
64
- {String(coll.recordCount)}
65
- </td>
66
- </tr>
67
- ))}
68
- </tbody>
69
- </table>
70
- )}
71
- </div>
72
- </Section>
73
- );
74
- }
75
-
76
- function SyncOutcomeBadge({ outcome }: { readonly outcome: DatastoreSyncOutcome }) {
77
- switch (outcome) {
78
- case DatastoreSyncOutcome.synced:
79
- return <StatusBadge phase="ready" label="synced" />;
80
- case DatastoreSyncOutcome.rejected:
81
- return <StatusBadge phase="failed" label="rejected" />;
82
- default:
83
- return <StatusBadge phase="draft" label="never synced" />;
84
- }
85
- }
86
-
87
- function MaterializationBadge({ state }: { readonly state: CollectionMaterializationState }) {
88
- switch (state) {
89
- case CollectionMaterializationState.active:
90
- return <StatusBadge phase="ready" label="active" />;
91
- case CollectionMaterializationState.pending:
92
- return <StatusBadge phase="pending" label="pending" />;
93
- case CollectionMaterializationState.removed:
94
- // Removed from the spec; data retained until datastore delete.
95
- return (
96
- <StatusBadge
97
- phase="disabled"
98
- label="removed"
99
- tooltip="Removed from the spec — records retained until the datastore is deleted"
100
- />
101
- );
102
- default:
103
- return <StatusBadge phase="draft" label="unknown" />;
104
- }
105
- }