@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,215 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useCallback, useEffect, useId, useMemo, useRef, useState } from "react";
4
- import { cn } from "@stigmer/theme";
5
- import { timestampDate } from "@bufbuild/protobuf/wkt";
6
- import { getRecordConstraint, getUserMessage } from "@stigmer/sdk";
7
- import { FieldValueControl } from "./FieldValueControl.js";
8
- import { buildUpdateFields, coerceFieldValue, formatSystemTimestamp, } from "./recordValues.js";
9
- import { formatSubject } from "./CollectionSchemaView.js";
10
- import { useInsertRecord } from "./useInsertRecord.js";
11
- import { useUpdateRecord } from "./useUpdateRecord.js";
12
- /**
13
- * The record write surface (DD-008 SD-4): one schema-generated panel
14
- * form serving insert and edit, with typed controls dispatched from
15
- * `FieldDeclaration`.
16
- *
17
- * - **Insert** submits every field the operator set; required fields
18
- * gate the submit (error prevention — the server remains the
19
- * enforcer).
20
- * - **Edit** submits a **partial merge**: only dirty fields travel, and
21
- * the per-field clear affordance sends an explicit `null` — the form
22
- * is honest about the RPC's tri-state. System fields render read-only
23
- * and never travel.
24
- * - **Errors replay the DD-002/DD-005 contract for humans**: a
25
- * constraint violation renders the declared message **verbatim** —
26
- * field-adjacent when the `ErrorInfo` constraint name maps through
27
- * the spec to declared fields (unique constraints), as a form-level
28
- * banner otherwise. The console operator and the WhatsApp patient
29
- * read the same bytes.
30
- *
31
- * All visual properties flow through `--stgm-*` design tokens.
32
- * Zero Console dependencies — safe for platform builder embedding.
33
- */
34
- export function RecordFormPanel({ open, onOpenChange, scope, collection, record, onSaved, }) {
35
- const dialogRef = useRef(null);
36
- const isEdit = record != null;
37
- const insert = useInsertRecord();
38
- const update = useUpdateRecord();
39
- const isSaving = insert.isInserting || update.isUpdating;
40
- const [edits, setEdits] = useState(new Map());
41
- const [fieldErrors, setFieldErrors] = useState(new Map());
42
- const [bannerError, setBannerError] = useState(null);
43
- // Reset form state whenever the panel opens (fresh draft per open).
44
- // Deps narrowed to the stable clearError callbacks (DD-010).
45
- const clearInsertError = insert.clearError;
46
- const clearUpdateError = update.clearError;
47
- useEffect(() => {
48
- if (open) {
49
- setEdits(new Map());
50
- setFieldErrors(new Map());
51
- setBannerError(null);
52
- clearInsertError();
53
- clearUpdateError();
54
- }
55
- }, [open, record?.id, clearInsertError, clearUpdateError]);
56
- // Native <dialog> open/close sync (the ConfirmDialog pattern).
57
- useEffect(() => {
58
- const dialog = dialogRef.current;
59
- if (!dialog)
60
- return;
61
- if (open && !dialog.open)
62
- dialog.showModal();
63
- else if (!open && dialog.open)
64
- dialog.close();
65
- }, [open]);
66
- const handleDialogCancel = useCallback((e) => {
67
- e.preventDefault();
68
- onOpenChange(false);
69
- }, [onOpenChange]);
70
- /** The effective value a field's control shows: edit > stored > empty. */
71
- const effectiveValue = useCallback((field) => {
72
- const edit = edits.get(field.name);
73
- if (edit)
74
- return edit.kind === "cleared" ? undefined : edit.value;
75
- if (isEdit) {
76
- const stored = record?.fields?.[field.name];
77
- return stored === null ? undefined : stored;
78
- }
79
- return undefined;
80
- }, [edits, isEdit, record]);
81
- const setFieldValue = useCallback((name, value) => {
82
- setEdits((prev) => {
83
- const next = new Map(prev);
84
- if (value === undefined) {
85
- // Emptying the control: in insert mode the field simply won't
86
- // travel; in edit mode an emptied control is an explicit clear.
87
- next.set(name, { kind: "cleared" });
88
- }
89
- else {
90
- next.set(name, { kind: "value", value });
91
- }
92
- return next;
93
- });
94
- setFieldErrors((prev) => {
95
- if (!prev.has(name))
96
- return prev;
97
- const next = new Map(prev);
98
- next.delete(name);
99
- return next;
100
- });
101
- }, []);
102
- const clearField = useCallback((name) => {
103
- setEdits((prev) => new Map(prev).set(name, { kind: "cleared" }));
104
- }, []);
105
- // Required fields gate the submit in insert mode (error prevention).
106
- const missingRequired = useMemo(() => {
107
- if (isEdit)
108
- return [];
109
- return collection.fields
110
- .filter((f) => f.required && f.default === undefined)
111
- .filter((f) => {
112
- const edit = edits.get(f.name);
113
- return !edit || edit.kind === "cleared";
114
- })
115
- .map((f) => f.name);
116
- }, [collection, edits, isEdit]);
117
- const handleSubmit = useCallback(async () => {
118
- setBannerError(null);
119
- // Client-side coercion (a projection of the server contract): fail
120
- // fast with field-adjacent messages; the server stays the enforcer.
121
- const coerced = new Map();
122
- const errors = new Map();
123
- for (const field of collection.fields) {
124
- const edit = edits.get(field.name);
125
- if (!edit)
126
- continue;
127
- if (edit.kind === "cleared") {
128
- if (isEdit)
129
- coerced.set(field.name, null);
130
- continue;
131
- }
132
- const result = coerceFieldValue(field, edit.value);
133
- if (result.ok) {
134
- coerced.set(field.name, result.value);
135
- }
136
- else {
137
- errors.set(field.name, result.error);
138
- }
139
- }
140
- if (errors.size > 0) {
141
- setFieldErrors(errors);
142
- return;
143
- }
144
- try {
145
- let saved;
146
- if (isEdit) {
147
- if (coerced.size === 0) {
148
- onOpenChange(false); // nothing dirty — an honest no-op
149
- return;
150
- }
151
- saved = await update.updateRecord({
152
- ...scope,
153
- id: record.id,
154
- fields: buildUpdateFields(coerced),
155
- });
156
- }
157
- else {
158
- const payload = {};
159
- for (const [name, value] of coerced) {
160
- if (value !== null)
161
- payload[name] = value;
162
- }
163
- saved = await insert.insertRecord({ ...scope, record: payload });
164
- }
165
- onSaved?.(saved);
166
- onOpenChange(false);
167
- }
168
- catch (err) {
169
- placeServerError(err, collection, setFieldErrors, setBannerError);
170
- }
171
- }, [collection, edits, isEdit, record, scope, insert, update, onSaved, onOpenChange]);
172
- if (!open)
173
- return null;
174
- return (_jsx("dialog", { ref: dialogRef, onCancel: handleDialogCancel, "aria-label": isEdit
175
- ? `Edit record in ${collection.name}`
176
- : `Insert record into ${collection.name}`, className: cn("stg:fixed stg:inset-0 stg:z-50 stg:m-auto stg:w-full stg:max-w-md stg:rounded-lg stg:border stg:border-border stg:bg-popover stg:p-0 stg:text-popover-foreground stg:shadow-lg", "stg:backdrop:bg-black/50", "stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95"), children: _jsxs("div", { className: "stg:flex stg:max-h-[80vh] stg:flex-col stg:gap-4 stg:overflow-y-auto stg:p-6", children: [_jsxs("h3", { className: "stg:text-base stg:font-semibold stg:text-foreground", children: [isEdit ? "Edit record" : "Insert record", _jsx("span", { className: "stg:ml-2 stg:font-mono stg:text-xs stg:font-normal stg:text-muted-foreground", children: collection.name })] }), bannerError && (_jsx("div", { role: "alert", className: "stg:rounded-md stg:border stg:border-destructive stg:bg-card stg:px-3 stg:py-2 stg:text-sm stg:text-destructive", children: bannerError })), isEdit && record && _jsx(SystemFieldsSummary, { record: record }), _jsx("div", { className: "stg:flex stg:flex-col stg:gap-3", children: collection.fields.map((field) => (_jsx(FieldRow, { field: field, value: effectiveValue(field), error: fieldErrors.get(field.name), isEdit: isEdit, cleared: edits.get(field.name)?.kind === "cleared", onChange: (v) => setFieldValue(field.name, v), onClear: () => clearField(field.name) }, field.name))) }), _jsxs("div", { className: "stg:flex stg:items-center stg:justify-end stg:gap-2", children: [missingRequired.length > 0 && (_jsxs("span", { className: "stg:mr-auto stg:text-xs stg:text-muted-foreground", children: ["Required: ", missingRequired.join(", ")] })), _jsx("button", { type: "button", onClick: () => onOpenChange(false), className: cn("stg:rounded-md stg:border stg:border-input stg:bg-background stg:px-3 stg:py-1.5 stg:text-sm stg:font-medium stg:text-foreground", "stg:hover:bg-accent stg:hover:text-accent-foreground", "stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring"), children: "Cancel" }), _jsx("button", { type: "button", onClick: handleSubmit, disabled: isSaving || missingRequired.length > 0, className: cn("stg:rounded-md stg:bg-primary stg:px-3 stg:py-1.5 stg:text-sm stg:font-medium stg:text-primary-foreground", "stg:hover:bg-primary-hover", "stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring", "stg:disabled:pointer-events-none stg:disabled:opacity-50"), children: isSaving ? "Saving…" : isEdit ? "Save changes" : "Insert" })] })] }) }));
177
- }
178
- // ---------------------------------------------------------------------------
179
- // Server-error placement (DD-008 SD-4)
180
- // ---------------------------------------------------------------------------
181
- /**
182
- * Place a record-write error: field-adjacent when the ErrorInfo
183
- * constraint name maps to a unique constraint's declared fields, a
184
- * form-level banner otherwise. Either way the message is the server's
185
- * bytes, verbatim.
186
- */
187
- function placeServerError(err, collection, setFieldErrors, setBannerError) {
188
- const message = getUserMessage(err);
189
- const constraintName = getRecordConstraint(err);
190
- if (constraintName) {
191
- const unique = collection.uniques.find((u) => u.name === constraintName);
192
- if (unique && unique.fields.length > 0) {
193
- setFieldErrors(new Map(unique.fields.map((f) => [f, message])));
194
- return;
195
- }
196
- }
197
- setBannerError(message);
198
- }
199
- // ---------------------------------------------------------------------------
200
- // Rows
201
- // ---------------------------------------------------------------------------
202
- function FieldRow({ field, value, error, isEdit, cleared, onChange, onClear, }) {
203
- const controlId = useId();
204
- const showClear = isEdit && !field.required && !cleared && value !== undefined;
205
- return (_jsxs("div", { className: "stg:flex stg:flex-col stg:gap-1", children: [_jsxs("div", { className: "stg:flex stg:items-baseline stg:gap-1", children: [_jsxs("label", { htmlFor: controlId, className: "stg:text-xs stg:font-medium stg:text-muted-foreground", children: [field.name, field.required && (_jsxs("span", { className: "stg:text-destructive", "aria-label": "required", children: [" ", "*"] }))] }), showClear && (_jsx("button", { type: "button", onClick: onClear, "aria-label": `Clear ${field.name}`, className: cn("stg:ml-auto stg:text-xs stg:text-muted-foreground stg:underline-offset-2 stg:hover:text-foreground stg:hover:underline", "stg:focus-visible:outline-none stg:focus-visible:ring-1 stg:focus-visible:ring-ring"), children: "Clear" })), cleared && (_jsx("span", { className: "stg:ml-auto stg:text-xs stg:italic stg:text-muted-foreground", children: "will be cleared" }))] }), field.description && (_jsx("p", { className: "stg:text-xs stg:leading-tight stg:text-muted-foreground", children: field.description })), _jsx(FieldValueControl, { id: controlId, field: field, value: value, onChange: onChange }), error && (_jsx("span", { role: "alert", className: "stg:text-xs stg:text-destructive", children: error }))] }));
206
- }
207
- /** Read-only envelope columns shown in edit mode; never editable, never submitted. */
208
- function SystemFieldsSummary({ record }) {
209
- return (_jsxs("dl", { className: "stg:grid stg:grid-cols-[auto_1fr] stg:gap-x-3 stg:gap-y-1 stg:rounded-md stg:bg-muted stg:p-3 stg:text-xs", children: [_jsx("dt", { className: "stg:font-medium stg:text-muted-foreground", children: "id" }), _jsx("dd", { className: "stg:truncate stg:font-mono stg:text-foreground", children: record.id }), _jsx("dt", { className: "stg:font-medium stg:text-muted-foreground", children: "created_at" }), _jsx("dd", { className: "stg:font-mono stg:text-foreground", children: record.createdAt
210
- ? formatSystemTimestamp(timestampDate(record.createdAt).toISOString())
211
- : "" }), _jsx("dt", { className: "stg:font-medium stg:text-muted-foreground", children: "updated_at" }), _jsx("dd", { className: "stg:font-mono stg:text-foreground", children: record.updatedAt
212
- ? formatSystemTimestamp(timestampDate(record.updatedAt).toISOString())
213
- : "" }), _jsx("dt", { className: "stg:font-medium stg:text-muted-foreground", children: "created_by" }), _jsx("dd", { className: "stg:truncate stg:font-mono stg:text-foreground", children: formatSubject(record.createdBy) })] }));
214
- }
215
- //# sourceMappingURL=RecordFormPanel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RecordFormPanel.js","sourceRoot":"","sources":["../../src/datastore/RecordFormPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- export { useDatastore } from "./useDatastore.js";
2
- export type { UseDatastoreReturn } from "./useDatastore.js";
3
- export { useDatastoreList } from "./useDatastoreList.js";
4
- export type { UseDatastoreListOptions, UseDatastoreListReturn, } from "./useDatastoreList.js";
5
- export { useDatastoreCount } from "./useDatastoreCount.js";
6
- export type { UseDatastoreCountOptions, UseDatastoreCountReturn, } from "./useDatastoreCount.js";
7
- export { useDatastoreSearch } from "./useDatastoreSearch.js";
8
- export type { UseDatastoreSearchOptions, UseDatastoreSearchReturn, } from "./useDatastoreSearch.js";
9
- export { useDatastoreDescription, DEFAULT_PARTITION } from "./useDatastoreDescription.js";
10
- export type { UseDatastoreDescriptionReturn } from "./useDatastoreDescription.js";
11
- export { useRecordList } from "./useRecordList.js";
12
- export type { RecordScope, UseRecordListParams, UseRecordListReturn, } from "./useRecordList.js";
13
- export { useInsertRecord } from "./useInsertRecord.js";
14
- export type { InsertRecordArgs, UseInsertRecordReturn, } from "./useInsertRecord.js";
15
- export { useUpdateRecord } from "./useUpdateRecord.js";
16
- export type { UpdateRecordArgs, UseUpdateRecordReturn, } from "./useUpdateRecord.js";
17
- export { useDeleteRecord } from "./useDeleteRecord.js";
18
- export type { DeleteRecordArgs, UseDeleteRecordReturn, } from "./useDeleteRecord.js";
19
- export { useRecordCollection } from "./useRecordCollection.js";
20
- export type { RecordColumnDef, UseRecordCollectionOptions, UseRecordCollectionReturn, } from "./useRecordCollection.js";
21
- export { useDeleteDatastore } from "./useDeleteDatastore.js";
22
- export type { DeleteDatastoreArgs, UseDeleteDatastoreReturn, } from "./useDeleteDatastore.js";
23
- export { buildUpdateFields, coerceFieldValue, formatFieldValue, formatSystemTimestamp, isListOperator, isSortableField, isValuelessOperator, operatorsForField, OPERATOR_LABELS, RESERVED_FIELD_NAMES, SYSTEM_FIELD_OPERATORS, } from "./recordValues.js";
24
- export type { CoerceResult } from "./recordValues.js";
25
- export { buildRecordFilter, filterableFields, formatConditionChip, isConditionComplete, } from "./recordFilter.js";
26
- export type { FilterableField, RecordConditionDraft } from "./recordFilter.js";
27
- export { FieldValueControl, FIELD_INPUT_CLASSES } from "./FieldValueControl.js";
28
- export type { FieldValueControlProps } from "./FieldValueControl.js";
29
- export { CollectionSchemaView, formatSubject } from "./CollectionSchemaView.js";
30
- export type { CollectionSchemaViewProps } from "./CollectionSchemaView.js";
31
- export { DatastoreSyncReport } from "./DatastoreSyncReport.js";
32
- export type { DatastoreSyncReportProps } from "./DatastoreSyncReport.js";
33
- export { RecordFilterBuilder } from "./RecordFilterBuilder.js";
34
- export type { RecordFilterBuilderProps } from "./RecordFilterBuilder.js";
35
- export { RecordFormPanel } from "./RecordFormPanel.js";
36
- export type { RecordFormPanelProps } from "./RecordFormPanel.js";
37
- export { CollectionRecordsBrowser } from "./CollectionRecordsBrowser.js";
38
- export type { CollectionRecordsBrowserProps } from "./CollectionRecordsBrowser.js";
39
- export { DeleteDatastoreDialog } from "./DeleteDatastoreDialog.js";
40
- export type { DeleteDatastoreDialogProps } from "./DeleteDatastoreDialog.js";
41
- export { DatastoreDetailView, DatastoreIcon } from "./DatastoreDetailView.js";
42
- export type { DatastoreDetailTab, DatastoreDetailViewProps, } from "./DatastoreDetailView.js";
43
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/datastore/index.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- export { useDatastore } from "./useDatastore.js";
2
- export { useDatastoreList } from "./useDatastoreList.js";
3
- export { useDatastoreCount } from "./useDatastoreCount.js";
4
- export { useDatastoreSearch } from "./useDatastoreSearch.js";
5
- export { useDatastoreDescription, DEFAULT_PARTITION } from "./useDatastoreDescription.js";
6
- export { useRecordList } from "./useRecordList.js";
7
- export { useInsertRecord } from "./useInsertRecord.js";
8
- export { useUpdateRecord } from "./useUpdateRecord.js";
9
- export { useDeleteRecord } from "./useDeleteRecord.js";
10
- export { useRecordCollection } from "./useRecordCollection.js";
11
- export { useDeleteDatastore } from "./useDeleteDatastore.js";
12
- export { buildUpdateFields, coerceFieldValue, formatFieldValue, formatSystemTimestamp, isListOperator, isSortableField, isValuelessOperator, operatorsForField, OPERATOR_LABELS, RESERVED_FIELD_NAMES, SYSTEM_FIELD_OPERATORS, } from "./recordValues.js";
13
- export { buildRecordFilter, filterableFields, formatConditionChip, isConditionComplete, } from "./recordFilter.js";
14
- export { FieldValueControl, FIELD_INPUT_CLASSES } from "./FieldValueControl.js";
15
- export { CollectionSchemaView, formatSubject } from "./CollectionSchemaView.js";
16
- export { DatastoreSyncReport } from "./DatastoreSyncReport.js";
17
- export { RecordFilterBuilder } from "./RecordFilterBuilder.js";
18
- export { RecordFormPanel } from "./RecordFormPanel.js";
19
- export { CollectionRecordsBrowser } from "./CollectionRecordsBrowser.js";
20
- export { DeleteDatastoreDialog } from "./DeleteDatastoreDialog.js";
21
- export { DatastoreDetailView, DatastoreIcon } from "./DatastoreDetailView.js";
22
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/datastore/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAMzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAM3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAM7D,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAG1F,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAO/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAM7D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAGhF,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,62 +0,0 @@
1
- import { type JsonValue } from "@bufbuild/protobuf";
2
- import { RecordConditionOp, type RecordFilter } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/record_io_pb";
3
- import { FieldType, type CollectionDeclaration, type FieldDeclaration } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/spec_pb";
4
- /**
5
- * One draft condition in the filter builder — the client-side twin of
6
- * the proto `RecordCondition`, with plain JSON values (converted to
7
- * `google.protobuf.Value` only at request-build time).
8
- */
9
- export interface RecordConditionDraft {
10
- /** Declared field name, or a filterable system field (`id`, `created_at`, `updated_at`). */
11
- readonly field: string;
12
- /** Comparison operator — must be admitted by the field's operator set. */
13
- readonly op: RecordConditionOp;
14
- /** Scalar comparison value. Absent for `is_null`/`not_null` and list operators. */
15
- readonly value?: JsonValue;
16
- /** Comparison values for `is_in`/`not_in`. */
17
- readonly values?: readonly JsonValue[];
18
- }
19
- /**
20
- * A field the builder can offer: a declared filterable field or a
21
- * filterable system field, with the exact operator set the server
22
- * admits for it.
23
- */
24
- export interface FilterableField {
25
- readonly name: string;
26
- /** The declaration, or `undefined` for system fields. */
27
- readonly declaration?: FieldDeclaration;
28
- /** The field type driving the value control (system fields use fixed types). */
29
- readonly type: FieldType;
30
- readonly operators: readonly RecordConditionOp[];
31
- }
32
- /**
33
- * The fields a collection's filter builder offers: declared filterable
34
- * fields (json is not filterable) followed by the filterable system
35
- * fields. `id` conditions take string values; the audit timestamps take
36
- * RFC 3339 timestamps — both ride the `timestamp`/`string` value
37
- * controls.
38
- *
39
- * `readableFields` is the caller's column-level read access from
40
- * `describeDatastore` (the read verb's `readable_fields`; empty means
41
- * every field). When restricted, unreadable declared fields are not
42
- * offered — the server refuses conditions on them (the existence-oracle
43
- * guard), and the builder must stay structurally unable to express an
44
- * unservable filter (DD-008 invariant 2). System fields are always
45
- * readable and always offered.
46
- */
47
- export declare function filterableFields(collection: CollectionDeclaration, readableFields?: readonly string[]): FilterableField[];
48
- /**
49
- * Whether a draft is complete enough to serve: value-less operators
50
- * need nothing, list operators need at least one value, scalar
51
- * operators need a value.
52
- */
53
- export declare function isConditionComplete(draft: RecordConditionDraft): boolean;
54
- /**
55
- * Build the proto `RecordFilter` from complete drafts. Returns
56
- * `undefined` for an empty set (an absent filter, not an empty one, is
57
- * the RPC's "no filter").
58
- */
59
- export declare function buildRecordFilter(conditions: readonly RecordConditionDraft[]): RecordFilter | undefined;
60
- /** Chip text for an active condition, e.g. `status = confirmed` or `notes is empty`. */
61
- export declare function formatConditionChip(draft: RecordConditionDraft): string;
62
- //# sourceMappingURL=recordFilter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recordFilter.d.ts","sourceRoot":"","sources":["../../src/datastore/recordFilter.ts"],"names":[],"mappings":"AAWA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EACL,iBAAiB,EAGjB,KAAK,YAAY,EAClB,MAAM,8DAA8D,CAAC;AACtE,OAAO,EACL,SAAS,EACT,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACtB,MAAM,yDAAyD,CAAC;AASjE;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,4FAA4F;IAC5F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC;IAC/B,mFAAmF;IACnF,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;CACxC;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IACxC,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAClD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,qBAAqB,EACjC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GACjC,eAAe,EAAE,CAwBnB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAKxE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,SAAS,oBAAoB,EAAE,GAC1C,YAAY,GAAG,SAAS,CAa1B;AAED,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAOvE"}
@@ -1,104 +0,0 @@
1
- // The records-specific filter model (DD-008 SD-3) — typed 1:1 against
2
- // `RecordConditionOp`.
3
- //
4
- // Deliberately NOT the workbench `FilterDef`/`FilterValue` model: its
5
- // `string | string[]` value shape cannot carry typed values or
6
- // value-less null operators, and its operator set includes `contains`,
7
- // which `findRecords` cannot serve. Welding a server-grammar contract
8
- // onto a client-filter model would couple two contracts that evolve
9
- // independently — so this model mirrors the RPC grammar exactly and can
10
- // express nothing the RPC cannot serve (DD-008 invariant 2).
11
- import { create, fromJson } from "@bufbuild/protobuf";
12
- import { ValueSchema } from "@bufbuild/protobuf/wkt";
13
- import { RecordConditionOp, RecordConditionSchema, RecordFilterSchema, } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/record_io_pb";
14
- import { FieldType, } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/spec_pb";
15
- import { isListOperator, isValuelessOperator, OPERATOR_LABELS, SYSTEM_FIELD_OPERATORS, operatorsForField, } from "./recordValues.js";
16
- /**
17
- * The fields a collection's filter builder offers: declared filterable
18
- * fields (json is not filterable) followed by the filterable system
19
- * fields. `id` conditions take string values; the audit timestamps take
20
- * RFC 3339 timestamps — both ride the `timestamp`/`string` value
21
- * controls.
22
- *
23
- * `readableFields` is the caller's column-level read access from
24
- * `describeDatastore` (the read verb's `readable_fields`; empty means
25
- * every field). When restricted, unreadable declared fields are not
26
- * offered — the server refuses conditions on them (the existence-oracle
27
- * guard), and the builder must stay structurally unable to express an
28
- * unservable filter (DD-008 invariant 2). System fields are always
29
- * readable and always offered.
30
- */
31
- export function filterableFields(collection, readableFields) {
32
- const readable = readableFields !== undefined && readableFields.length > 0 ? new Set(readableFields) : null;
33
- const declared = [];
34
- for (const field of collection.fields) {
35
- const operators = operatorsForField(field);
36
- if (operators.length === 0)
37
- continue; // json — not filterable
38
- if (readable !== null && !readable.has(field.name))
39
- continue; // not readable under the grant
40
- declared.push({ name: field.name, declaration: field, type: field.type, operators });
41
- }
42
- return [
43
- ...declared,
44
- { name: "id", type: FieldType.string, operators: SYSTEM_FIELD_OPERATORS.get("id") },
45
- {
46
- name: "created_at",
47
- type: FieldType.timestamp,
48
- operators: SYSTEM_FIELD_OPERATORS.get("created_at"),
49
- },
50
- {
51
- name: "updated_at",
52
- type: FieldType.timestamp,
53
- operators: SYSTEM_FIELD_OPERATORS.get("updated_at"),
54
- },
55
- ];
56
- }
57
- /**
58
- * Whether a draft is complete enough to serve: value-less operators
59
- * need nothing, list operators need at least one value, scalar
60
- * operators need a value.
61
- */
62
- export function isConditionComplete(draft) {
63
- if (draft.op === RecordConditionOp.record_condition_op_unspecified)
64
- return false;
65
- if (isValuelessOperator(draft.op))
66
- return true;
67
- if (isListOperator(draft.op))
68
- return (draft.values?.length ?? 0) > 0;
69
- return draft.value !== undefined;
70
- }
71
- /**
72
- * Build the proto `RecordFilter` from complete drafts. Returns
73
- * `undefined` for an empty set (an absent filter, not an empty one, is
74
- * the RPC's "no filter").
75
- */
76
- export function buildRecordFilter(conditions) {
77
- const complete = conditions.filter(isConditionComplete);
78
- if (complete.length === 0)
79
- return undefined;
80
- return create(RecordFilterSchema, {
81
- conditions: complete.map((draft) => create(RecordConditionSchema, {
82
- field: draft.field,
83
- op: draft.op,
84
- value: draft.value !== undefined ? fromJson(ValueSchema, draft.value) : undefined,
85
- values: (draft.values ?? []).map((v) => fromJson(ValueSchema, v)),
86
- })),
87
- });
88
- }
89
- /** Chip text for an active condition, e.g. `status = confirmed` or `notes is empty`. */
90
- export function formatConditionChip(draft) {
91
- const op = OPERATOR_LABELS.get(draft.op) ?? "?";
92
- if (isValuelessOperator(draft.op))
93
- return `${draft.field} ${op}`;
94
- if (isListOperator(draft.op)) {
95
- return `${draft.field} ${op} [${(draft.values ?? []).map(formatChipValue).join(", ")}]`;
96
- }
97
- return `${draft.field} ${op} ${formatChipValue(draft.value)}`;
98
- }
99
- function formatChipValue(value) {
100
- if (value === undefined || value === null)
101
- return "";
102
- return typeof value === "string" ? value : JSON.stringify(value);
103
- }
104
- //# sourceMappingURL=recordFilter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recordFilter.js","sourceRoot":"","sources":["../../src/datastore/recordFilter.ts"],"names":[],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- import type { JsonObject, JsonValue } from "@bufbuild/protobuf";
2
- import { FieldType, type FieldDeclaration } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/spec_pb";
3
- import { RecordConditionOp } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/record_io_pb";
4
- /**
5
- * Record-envelope system field names (plus the cloud tenancy column and
6
- * the DD-010 partition label). Never declarable, never caller-writable.
7
- */
8
- export declare const RESERVED_FIELD_NAMES: ReadonlySet<string>;
9
- /** Result of {@link coerceFieldValue}: a canonical value or a field-level message. */
10
- export type CoerceResult = {
11
- readonly ok: true;
12
- readonly value: JsonValue | null;
13
- } | {
14
- readonly ok: false;
15
- readonly error: string;
16
- };
17
- /**
18
- * Validate a caller-supplied field value against its declaration and
19
- * return the canonical JSON encoding (see module doc). `null` means
20
- * explicit null — valid here for any field; required-ness is write-path
21
- * policy (updates only see the supplied subset), exactly as in the
22
- * server's CanonicalizeValue.
23
- *
24
- * Error messages match the server's shape (`field "x" must be …`) so a
25
- * client-side rejection reads the same as the server rejection it
26
- * pre-empts.
27
- */
28
- export declare function coerceFieldValue(field: FieldDeclaration, value: JsonValue | null): CoerceResult;
29
- /**
30
- * Format a canonical field value for grid-cell display. Values render
31
- * in their DD-004 canonical encodings (honest, timezone-free); the one
32
- * concession to readability is trimming a timestamp's zero fractional
33
- * seconds (storage pads to nine digits for lexicographic ordering —
34
- * "…T04:30:00.000000000Z" and "…T04:30:00Z" are the same RFC 3339 UTC
35
- * instant).
36
- */
37
- export declare function formatFieldValue(type: FieldType, value: JsonValue | null | undefined): string;
38
- /** Also used for the envelope's created_at/updated_at system columns. */
39
- export declare function formatSystemTimestamp(value: string): string;
40
- /**
41
- * The per-type operator matrix (record_io.proto @internal, DD-005 SD-2)
42
- * — a projection of the server's opsForFieldType. The filter builder
43
- * offers exactly these, making an unservable operator structurally
44
- * unofferable (DD-008 invariant 2):
45
- *
46
- * string (incl. enum): eq, neq, is_in, not_in
47
- * bool: eq, neq
48
- * integer, number,
49
- * timestamp, date, time: eq, neq, gt, gte, lt, lte
50
- * json: not filterable
51
- * + is_null / not_null on any optional (non-required) field
52
- */
53
- export declare function operatorsForField(field: FieldDeclaration): RecordConditionOp[];
54
- /**
55
- * The filterable system fields and their operator sets (mirrors the
56
- * server's buildSystemCondition): `id` by identity, the audit
57
- * timestamps by range. `created_by`, `org`, and `partition` are not
58
- * filterable — attribution is the grant system's privacy boundary and
59
- * partition is ambient scope, never data.
60
- */
61
- export declare const SYSTEM_FIELD_OPERATORS: ReadonlyMap<string, readonly RecordConditionOp[]>;
62
- /** Operators that take no value (null tests). */
63
- export declare function isValuelessOperator(op: RecordConditionOp): boolean;
64
- /** Operators that take a value list (`values`) rather than a scalar. */
65
- export declare function isListOperator(op: RecordConditionOp): boolean;
66
- /**
67
- * Human labels for the filter builder and chips. `is_in` is displayed
68
- * as "in" — the proto spelling exists only because `in` is reserved in
69
- * Java/Python, a substrate detail operators never see.
70
- */
71
- export declare const OPERATOR_LABELS: ReadonlyMap<RecordConditionOp, string>;
72
- /**
73
- * Sortable fields: any declared non-json field, plus the system id and
74
- * audit timestamps (mirrors the server's BuildOrderBy).
75
- */
76
- export declare function isSortableField(field: FieldDeclaration): boolean;
77
- /**
78
- * Build an update payload from per-field edits (DD-005 partial merge).
79
- * The RPC's tri-state: a key present with a value replaces the field, a
80
- * key present with `null` explicitly clears it, an absent key leaves
81
- * the stored value untouched. Callers pass only the dirty fields —
82
- * cleared ones as `null`.
83
- */
84
- export declare function buildUpdateFields(edits: ReadonlyMap<string, JsonValue | null>): JsonObject;
85
- //# sourceMappingURL=recordValues.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recordValues.d.ts","sourceRoot":"","sources":["../../src/datastore/recordValues.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EACL,SAAS,EACT,KAAK,gBAAgB,EACtB,MAAM,yDAAyD,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8DAA8D,CAAC;AAEjG;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAOnD,CAAC;AAEH,sFAAsF;AACtF,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAgBnD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,SAAS,GAAG,IAAI,GACtB,YAAY,CA0Ed;AAeD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,GAClC,MAAM,CAaR;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,EAAE,CAM9E;AAgCD;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAWjF,CAAC;AAEL,iDAAiD;AACjD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAElE;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAE7D;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,iBAAiB,EAAE,MAAM,CAWjE,CAAC;AAEH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAEhE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC,GAC3C,UAAU,CAMZ"}