@stigmer/react 3.2.2 → 3.3.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 (513) hide show
  1. package/agent/AgentDetailView.d.ts.map +1 -1
  2. package/agent/AgentDetailView.js +6 -3
  3. package/agent/AgentDetailView.js.map +1 -1
  4. package/agent/steps/ReviewStep.d.ts.map +1 -1
  5. package/agent/steps/ReviewStep.js +2 -3
  6. package/agent/steps/ReviewStep.js.map +1 -1
  7. package/billing/BaselineEditor.d.ts +9 -0
  8. package/billing/BaselineEditor.d.ts.map +1 -0
  9. package/billing/BaselineEditor.js +253 -0
  10. package/billing/BaselineEditor.js.map +1 -0
  11. package/billing/ModelCatalogPanel.d.ts +28 -0
  12. package/billing/ModelCatalogPanel.d.ts.map +1 -0
  13. package/billing/ModelCatalogPanel.js +102 -0
  14. package/billing/ModelCatalogPanel.js.map +1 -0
  15. package/billing/ModelGovernanceDetail.d.ts +8 -0
  16. package/billing/ModelGovernanceDetail.d.ts.map +1 -0
  17. package/billing/ModelGovernanceDetail.js +64 -0
  18. package/billing/ModelGovernanceDetail.js.map +1 -0
  19. package/billing/OperatorAccessNotice.d.ts +12 -0
  20. package/billing/OperatorAccessNotice.d.ts.map +1 -0
  21. package/billing/OperatorAccessNotice.js +15 -0
  22. package/billing/OperatorAccessNotice.js.map +1 -0
  23. package/billing/PricingGovernanceConsole.d.ts +57 -0
  24. package/billing/PricingGovernanceConsole.d.ts.map +1 -0
  25. package/billing/PricingGovernanceConsole.js +164 -0
  26. package/billing/PricingGovernanceConsole.js.map +1 -0
  27. package/billing/PricingGovernancePanel.d.ts +26 -0
  28. package/billing/PricingGovernancePanel.d.ts.map +1 -0
  29. package/billing/PricingGovernancePanel.js +64 -0
  30. package/billing/PricingGovernancePanel.js.map +1 -0
  31. package/billing/RetireConfirm.d.ts +9 -0
  32. package/billing/RetireConfirm.d.ts.map +1 -0
  33. package/billing/RetireConfirm.js +19 -0
  34. package/billing/RetireConfirm.js.map +1 -0
  35. package/billing/form-primitives.d.ts +18 -0
  36. package/billing/form-primitives.d.ts.map +1 -0
  37. package/billing/form-primitives.js +19 -0
  38. package/billing/form-primitives.js.map +1 -0
  39. package/billing/governance-primitives.d.ts +33 -0
  40. package/billing/governance-primitives.d.ts.map +1 -0
  41. package/billing/governance-primitives.js +43 -0
  42. package/billing/governance-primitives.js.map +1 -0
  43. package/billing/index.d.ts +18 -0
  44. package/billing/index.d.ts.map +1 -1
  45. package/billing/index.js +9 -0
  46. package/billing/index.js.map +1 -1
  47. package/billing/pricing-format.d.ts +12 -0
  48. package/billing/pricing-format.d.ts.map +1 -0
  49. package/billing/pricing-format.js +50 -0
  50. package/billing/pricing-format.js.map +1 -0
  51. package/billing/useDecidePricingOverride.d.ts +46 -0
  52. package/billing/useDecidePricingOverride.d.ts.map +1 -0
  53. package/billing/useDecidePricingOverride.js +44 -0
  54. package/billing/useDecidePricingOverride.js.map +1 -0
  55. package/billing/useModelGovernanceView.d.ts +103 -0
  56. package/billing/useModelGovernanceView.d.ts.map +1 -0
  57. package/billing/useModelGovernanceView.js +144 -0
  58. package/billing/useModelGovernanceView.js.map +1 -0
  59. package/billing/useModelPricingBaselines.d.ts +40 -0
  60. package/billing/useModelPricingBaselines.d.ts.map +1 -0
  61. package/billing/useModelPricingBaselines.js +32 -0
  62. package/billing/useModelPricingBaselines.js.map +1 -0
  63. package/billing/usePricingGovernance.d.ts +39 -0
  64. package/billing/usePricingGovernance.d.ts.map +1 -0
  65. package/billing/usePricingGovernance.js +31 -0
  66. package/billing/usePricingGovernance.js.map +1 -0
  67. package/billing/useRetireModelPricingBaseline.d.ts +31 -0
  68. package/billing/useRetireModelPricingBaseline.d.ts.map +1 -0
  69. package/billing/useRetireModelPricingBaseline.js +36 -0
  70. package/billing/useRetireModelPricingBaseline.js.map +1 -0
  71. package/billing/useUpsertModelPricingBaseline.d.ts +38 -0
  72. package/billing/useUpsertModelPricingBaseline.d.ts.map +1 -0
  73. package/billing/useUpsertModelPricingBaseline.js +37 -0
  74. package/billing/useUpsertModelPricingBaseline.js.map +1 -0
  75. package/channel/AgentChannelsPanel.d.ts.map +1 -1
  76. package/channel/AgentChannelsPanel.js +11 -5
  77. package/channel/AgentChannelsPanel.js.map +1 -1
  78. package/composer/SessionComposer.d.ts +1 -1
  79. package/cursor-accounts/CursorAccountEditor.d.ts +28 -0
  80. package/cursor-accounts/CursorAccountEditor.d.ts.map +1 -0
  81. package/cursor-accounts/CursorAccountEditor.js +51 -0
  82. package/cursor-accounts/CursorAccountEditor.js.map +1 -0
  83. package/cursor-accounts/CursorAccountsAccessNotice.d.ts +11 -0
  84. package/cursor-accounts/CursorAccountsAccessNotice.d.ts.map +1 -0
  85. package/cursor-accounts/CursorAccountsAccessNotice.js +14 -0
  86. package/cursor-accounts/CursorAccountsAccessNotice.js.map +1 -0
  87. package/cursor-accounts/CursorAccountsConsole.d.ts +28 -0
  88. package/cursor-accounts/CursorAccountsConsole.d.ts.map +1 -0
  89. package/cursor-accounts/CursorAccountsConsole.js +275 -0
  90. package/cursor-accounts/CursorAccountsConsole.js.map +1 -0
  91. package/cursor-accounts/cursor-account-format.d.ts +10 -0
  92. package/cursor-accounts/cursor-account-format.d.ts.map +1 -0
  93. package/cursor-accounts/cursor-account-format.js +26 -0
  94. package/cursor-accounts/cursor-account-format.js.map +1 -0
  95. package/cursor-accounts/index.d.ts +18 -0
  96. package/cursor-accounts/index.d.ts.map +1 -0
  97. package/cursor-accounts/index.js +13 -0
  98. package/cursor-accounts/index.js.map +1 -0
  99. package/cursor-accounts/useCursorAccountView.d.ts +30 -0
  100. package/cursor-accounts/useCursorAccountView.d.ts.map +1 -0
  101. package/cursor-accounts/useCursorAccountView.js +25 -0
  102. package/cursor-accounts/useCursorAccountView.js.map +1 -0
  103. package/cursor-accounts/useCursorAccounts.d.ts +33 -0
  104. package/cursor-accounts/useCursorAccounts.d.ts.map +1 -0
  105. package/cursor-accounts/useCursorAccounts.js +25 -0
  106. package/cursor-accounts/useCursorAccounts.js.map +1 -0
  107. package/cursor-accounts/useCursorMemberKeyActions.d.ts +49 -0
  108. package/cursor-accounts/useCursorMemberKeyActions.d.ts.map +1 -0
  109. package/cursor-accounts/useCursorMemberKeyActions.js +38 -0
  110. package/cursor-accounts/useCursorMemberKeyActions.js.map +1 -0
  111. package/cursor-accounts/useDeleteCursorAccount.d.ts +30 -0
  112. package/cursor-accounts/useDeleteCursorAccount.d.ts.map +1 -0
  113. package/cursor-accounts/useDeleteCursorAccount.js +32 -0
  114. package/cursor-accounts/useDeleteCursorAccount.js.map +1 -0
  115. package/cursor-accounts/useSyncCursorAccount.d.ts +23 -0
  116. package/cursor-accounts/useSyncCursorAccount.d.ts.map +1 -0
  117. package/cursor-accounts/useSyncCursorAccount.js +31 -0
  118. package/cursor-accounts/useSyncCursorAccount.js.map +1 -0
  119. package/cursor-accounts/useUpsertCursorAccount.d.ts +26 -0
  120. package/cursor-accounts/useUpsertCursorAccount.d.ts.map +1 -0
  121. package/cursor-accounts/useUpsertCursorAccount.js +34 -0
  122. package/cursor-accounts/useUpsertCursorAccount.js.map +1 -0
  123. package/datastore/CollectionRecordsBrowser.d.ts +34 -0
  124. package/datastore/CollectionRecordsBrowser.d.ts.map +1 -0
  125. package/datastore/CollectionRecordsBrowser.js +209 -0
  126. package/datastore/CollectionRecordsBrowser.js.map +1 -0
  127. package/datastore/CollectionSchemaView.d.ts +29 -0
  128. package/datastore/CollectionSchemaView.d.ts.map +1 -0
  129. package/datastore/CollectionSchemaView.js +93 -0
  130. package/datastore/CollectionSchemaView.js.map +1 -0
  131. package/datastore/DatastoreDetailView.d.ts +44 -0
  132. package/datastore/DatastoreDetailView.d.ts.map +1 -0
  133. package/datastore/DatastoreDetailView.js +76 -0
  134. package/datastore/DatastoreDetailView.js.map +1 -0
  135. package/datastore/DatastoreSyncReport.d.ts +19 -0
  136. package/datastore/DatastoreSyncReport.d.ts.map +1 -0
  137. package/datastore/DatastoreSyncReport.js +45 -0
  138. package/datastore/DatastoreSyncReport.js.map +1 -0
  139. package/datastore/DeleteDatastoreDialog.d.ts +35 -0
  140. package/datastore/DeleteDatastoreDialog.d.ts.map +1 -0
  141. package/datastore/DeleteDatastoreDialog.js +90 -0
  142. package/datastore/DeleteDatastoreDialog.js.map +1 -0
  143. package/datastore/FieldValueControl.d.ts +55 -0
  144. package/datastore/FieldValueControl.d.ts.map +1 -0
  145. package/datastore/FieldValueControl.js +138 -0
  146. package/datastore/FieldValueControl.js.map +1 -0
  147. package/datastore/RecordFilterBuilder.d.ts +30 -0
  148. package/datastore/RecordFilterBuilder.d.ts.map +1 -0
  149. package/datastore/RecordFilterBuilder.js +122 -0
  150. package/datastore/RecordFilterBuilder.js.map +1 -0
  151. package/datastore/RecordFormPanel.d.ts +45 -0
  152. package/datastore/RecordFormPanel.d.ts.map +1 -0
  153. package/datastore/RecordFormPanel.js +215 -0
  154. package/datastore/RecordFormPanel.js.map +1 -0
  155. package/datastore/index.d.ts +43 -0
  156. package/datastore/index.d.ts.map +1 -0
  157. package/datastore/index.js +22 -0
  158. package/datastore/index.js.map +1 -0
  159. package/datastore/recordFilter.d.ts +54 -0
  160. package/datastore/recordFilter.d.ts.map +1 -0
  161. package/datastore/recordFilter.js +93 -0
  162. package/datastore/recordFilter.js.map +1 -0
  163. package/datastore/recordValues.d.ts +85 -0
  164. package/datastore/recordValues.d.ts.map +1 -0
  165. package/datastore/recordValues.js +282 -0
  166. package/datastore/recordValues.js.map +1 -0
  167. package/datastore/useDatastore.d.ts +39 -0
  168. package/datastore/useDatastore.d.ts.map +1 -0
  169. package/datastore/useDatastore.js +44 -0
  170. package/datastore/useDatastore.js.map +1 -0
  171. package/datastore/useDatastoreCount.d.ts +48 -0
  172. package/datastore/useDatastoreCount.d.ts.map +1 -0
  173. package/datastore/useDatastoreCount.js +27 -0
  174. package/datastore/useDatastoreCount.js.map +1 -0
  175. package/datastore/useDatastoreDescription.d.ts +54 -0
  176. package/datastore/useDatastoreDescription.d.ts.map +1 -0
  177. package/datastore/useDatastoreDescription.js +50 -0
  178. package/datastore/useDatastoreDescription.js.map +1 -0
  179. package/datastore/useDatastoreList.d.ts +57 -0
  180. package/datastore/useDatastoreList.d.ts.map +1 -0
  181. package/datastore/useDatastoreList.js +29 -0
  182. package/datastore/useDatastoreList.js.map +1 -0
  183. package/datastore/useDatastoreSearch.d.ts +19 -0
  184. package/datastore/useDatastoreSearch.d.ts.map +1 -0
  185. package/datastore/useDatastoreSearch.js +22 -0
  186. package/datastore/useDatastoreSearch.js.map +1 -0
  187. package/datastore/useDeleteDatastore.d.ts +53 -0
  188. package/datastore/useDeleteDatastore.d.ts.map +1 -0
  189. package/datastore/useDeleteDatastore.js +40 -0
  190. package/datastore/useDeleteDatastore.js.map +1 -0
  191. package/datastore/useDeleteRecord.d.ts +34 -0
  192. package/datastore/useDeleteRecord.d.ts.map +1 -0
  193. package/datastore/useDeleteRecord.js +43 -0
  194. package/datastore/useDeleteRecord.js.map +1 -0
  195. package/datastore/useInsertRecord.d.ts +50 -0
  196. package/datastore/useInsertRecord.d.ts.map +1 -0
  197. package/datastore/useInsertRecord.js +55 -0
  198. package/datastore/useInsertRecord.js.map +1 -0
  199. package/datastore/useRecordCollection.d.ts +104 -0
  200. package/datastore/useRecordCollection.d.ts.map +1 -0
  201. package/datastore/useRecordCollection.js +136 -0
  202. package/datastore/useRecordCollection.js.map +1 -0
  203. package/datastore/useRecordList.d.ts +66 -0
  204. package/datastore/useRecordList.d.ts.map +1 -0
  205. package/datastore/useRecordList.js +58 -0
  206. package/datastore/useRecordList.js.map +1 -0
  207. package/datastore/useUpdateRecord.d.ts +52 -0
  208. package/datastore/useUpdateRecord.d.ts.map +1 -0
  209. package/datastore/useUpdateRecord.js +55 -0
  210. package/datastore/useUpdateRecord.js.map +1 -0
  211. package/environment/EnvironmentListPanel.d.ts.map +1 -1
  212. package/environment/EnvironmentListPanel.js +12 -7
  213. package/environment/EnvironmentListPanel.js.map +1 -1
  214. package/execution/index.d.ts +1 -2
  215. package/execution/index.d.ts.map +1 -1
  216. package/execution/index.js +0 -1
  217. package/execution/index.js.map +1 -1
  218. package/execution/useLiveAgentExecution.d.ts +17 -1
  219. package/execution/useLiveAgentExecution.d.ts.map +1 -1
  220. package/execution/useLiveAgentExecution.js +19 -4
  221. package/execution/useLiveAgentExecution.js.map +1 -1
  222. package/iam-policy/index.d.ts +1 -1
  223. package/iam-policy/index.d.ts.map +1 -1
  224. package/iam-policy/index.js.map +1 -1
  225. package/iam-policy/useCheckPermission.d.ts +32 -11
  226. package/iam-policy/useCheckPermission.d.ts.map +1 -1
  227. package/iam-policy/useCheckPermission.js +24 -19
  228. package/iam-policy/useCheckPermission.js.map +1 -1
  229. package/index.d.ts +16 -10
  230. package/index.d.ts.map +1 -1
  231. package/index.js +16 -5
  232. package/index.js.map +1 -1
  233. package/internal/useInViewport.d.ts +24 -0
  234. package/internal/useInViewport.d.ts.map +1 -0
  235. package/internal/useInViewport.js +49 -0
  236. package/internal/useInViewport.js.map +1 -0
  237. package/library/VisibilitySelector.d.ts +22 -6
  238. package/library/VisibilitySelector.d.ts.map +1 -1
  239. package/library/VisibilitySelector.js +12 -4
  240. package/library/VisibilitySelector.js.map +1 -1
  241. package/library/index.d.ts +1 -8
  242. package/library/index.d.ts.map +1 -1
  243. package/library/index.js +0 -4
  244. package/library/index.js.map +1 -1
  245. package/library/useApplyResource.d.ts +12 -12
  246. package/library/useApplyResource.d.ts.map +1 -1
  247. package/library/useApplyResource.js +16 -25
  248. package/library/useApplyResource.js.map +1 -1
  249. package/library/useExportResource.d.ts +13 -9
  250. package/library/useExportResource.d.ts.map +1 -1
  251. package/library/useExportResource.js +18 -36
  252. package/library/useExportResource.js.map +1 -1
  253. package/manifest/ApplyManifestDialog.d.ts +48 -0
  254. package/manifest/ApplyManifestDialog.d.ts.map +1 -0
  255. package/manifest/ApplyManifestDialog.js +135 -0
  256. package/manifest/ApplyManifestDialog.js.map +1 -0
  257. package/manifest/EditResourceYamlDialog.d.ts +51 -0
  258. package/manifest/EditResourceYamlDialog.d.ts.map +1 -0
  259. package/manifest/EditResourceYamlDialog.js +104 -0
  260. package/manifest/EditResourceYamlDialog.js.map +1 -0
  261. package/manifest/RedactedSecretsNotice.d.ts +14 -0
  262. package/manifest/RedactedSecretsNotice.d.ts.map +1 -0
  263. package/manifest/RedactedSecretsNotice.js +14 -0
  264. package/manifest/RedactedSecretsNotice.js.map +1 -0
  265. package/manifest/YamlEditor.d.ts +44 -0
  266. package/manifest/YamlEditor.d.ts.map +1 -0
  267. package/manifest/YamlEditor.js +216 -0
  268. package/manifest/YamlEditor.js.map +1 -0
  269. package/manifest/index.d.ts +13 -0
  270. package/manifest/index.d.ts.map +1 -0
  271. package/manifest/index.js +13 -0
  272. package/manifest/index.js.map +1 -0
  273. package/manifest/useApplyManifest.d.ts +82 -0
  274. package/manifest/useApplyManifest.d.ts.map +1 -0
  275. package/manifest/useApplyManifest.js +180 -0
  276. package/manifest/useApplyManifest.js.map +1 -0
  277. package/manifest/useEditResourceYaml.d.ts +106 -0
  278. package/manifest/useEditResourceYaml.d.ts.map +1 -0
  279. package/manifest/useEditResourceYaml.js +168 -0
  280. package/manifest/useEditResourceYaml.js.map +1 -0
  281. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  282. package/mcp-server/McpServerDetailView.js +4 -3
  283. package/mcp-server/McpServerDetailView.js.map +1 -1
  284. package/mcp-server/steps/ReviewStep.d.ts.map +1 -1
  285. package/mcp-server/steps/ReviewStep.js +2 -3
  286. package/mcp-server/steps/ReviewStep.js.map +1 -1
  287. package/package.json +4 -4
  288. package/resource-creation/templates/workflow-templates.js +4 -4
  289. package/session/SessionViewer.js +8 -1
  290. package/session/SessionViewer.js.map +1 -1
  291. package/session/audience.d.ts +6 -1
  292. package/session/audience.d.ts.map +1 -1
  293. package/session/useEditSessionPrep.js +3 -3
  294. package/session/useEditSessionPrep.js.map +1 -1
  295. package/settings/index.d.ts +2 -1
  296. package/settings/index.d.ts.map +1 -1
  297. package/settings/index.js +2 -1
  298. package/settings/index.js.map +1 -1
  299. package/settings/settings-nav.d.ts +22 -0
  300. package/settings/settings-nav.d.ts.map +1 -1
  301. package/settings/settings-nav.js +32 -1
  302. package/settings/settings-nav.js.map +1 -1
  303. package/settings/useSettingsNavGroups.d.ts +29 -0
  304. package/settings/useSettingsNavGroups.d.ts.map +1 -0
  305. package/settings/useSettingsNavGroups.js +61 -0
  306. package/settings/useSettingsNavGroups.js.map +1 -0
  307. package/skill/SkillDetailView.d.ts.map +1 -1
  308. package/skill/SkillDetailView.js +4 -3
  309. package/skill/SkillDetailView.js.map +1 -1
  310. package/src/access/__tests__/useManageAccess.test.tsx +104 -0
  311. package/src/agent/AgentDetailView.tsx +9 -3
  312. package/src/agent/steps/ReviewStep.tsx +2 -3
  313. package/src/billing/BaselineEditor.tsx +619 -0
  314. package/src/billing/ModelCatalogPanel.tsx +283 -0
  315. package/src/billing/ModelGovernanceDetail.tsx +289 -0
  316. package/src/billing/OperatorAccessNotice.tsx +32 -0
  317. package/src/billing/PricingGovernanceConsole.tsx +465 -0
  318. package/src/billing/PricingGovernancePanel.tsx +166 -0
  319. package/src/billing/RetireConfirm.tsx +82 -0
  320. package/src/billing/__tests__/ModelCatalogPanel.test.tsx +253 -0
  321. package/src/billing/__tests__/PricingGovernanceConsole.test.tsx +410 -0
  322. package/src/billing/__tests__/useModelGovernanceView.test.tsx +308 -0
  323. package/src/billing/form-primitives.tsx +68 -0
  324. package/src/billing/governance-primitives.tsx +133 -0
  325. package/src/billing/index.ts +37 -0
  326. package/src/billing/pricing-format.ts +53 -0
  327. package/src/billing/useDecidePricingOverride.ts +78 -0
  328. package/src/billing/useModelGovernanceView.ts +290 -0
  329. package/src/billing/useModelPricingBaselines.ts +69 -0
  330. package/src/billing/usePricingGovernance.ts +57 -0
  331. package/src/billing/useRetireModelPricingBaseline.ts +65 -0
  332. package/src/billing/useUpsertModelPricingBaseline.ts +72 -0
  333. package/src/channel/AgentChannelsPanel.tsx +27 -1
  334. package/src/composer/SessionComposer.tsx +1 -1
  335. package/src/cursor-accounts/CursorAccountEditor.tsx +181 -0
  336. package/src/cursor-accounts/CursorAccountsAccessNotice.tsx +36 -0
  337. package/src/cursor-accounts/CursorAccountsConsole.tsx +810 -0
  338. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +384 -0
  339. package/src/cursor-accounts/cursor-account-format.ts +29 -0
  340. package/src/cursor-accounts/index.ts +29 -0
  341. package/src/cursor-accounts/useCursorAccountView.ts +49 -0
  342. package/src/cursor-accounts/useCursorAccounts.ts +49 -0
  343. package/src/cursor-accounts/useCursorMemberKeyActions.ts +106 -0
  344. package/src/cursor-accounts/useDeleteCursorAccount.ts +62 -0
  345. package/src/cursor-accounts/useSyncCursorAccount.ts +54 -0
  346. package/src/cursor-accounts/useUpsertCursorAccount.ts +57 -0
  347. package/src/datastore/CollectionRecordsBrowser.tsx +544 -0
  348. package/src/datastore/CollectionSchemaView.tsx +247 -0
  349. package/src/datastore/DatastoreDetailView.tsx +201 -0
  350. package/src/datastore/DatastoreSyncReport.tsx +105 -0
  351. package/src/datastore/DeleteDatastoreDialog.tsx +202 -0
  352. package/src/datastore/FieldValueControl.tsx +289 -0
  353. package/src/datastore/RecordFilterBuilder.tsx +411 -0
  354. package/src/datastore/RecordFormPanel.tsx +432 -0
  355. package/src/datastore/__tests__/CollectionRecordsBrowser.test.tsx +207 -0
  356. package/src/datastore/__tests__/DeleteDatastoreDialog.test.tsx +133 -0
  357. package/src/datastore/__tests__/FieldValueControl.test.tsx +160 -0
  358. package/src/datastore/__tests__/RecordFilterBuilder.test.tsx +141 -0
  359. package/src/datastore/__tests__/RecordFormPanel.test.tsx +227 -0
  360. package/src/datastore/__tests__/recordFilter.test.ts +156 -0
  361. package/src/datastore/__tests__/recordMutations.test.tsx +195 -0
  362. package/src/datastore/__tests__/recordValues.test.ts +359 -0
  363. package/src/datastore/__tests__/schemaAndSyncViews.test.tsx +142 -0
  364. package/src/datastore/__tests__/useDatastoreDescription.test.tsx +143 -0
  365. package/src/datastore/__tests__/useRecordCollection.test.tsx +250 -0
  366. package/src/datastore/__tests__/useRecordList.test.tsx +85 -0
  367. package/src/datastore/index.ts +111 -0
  368. package/src/datastore/recordFilter.ts +140 -0
  369. package/src/datastore/recordValues.ts +327 -0
  370. package/src/datastore/useDatastore.ts +67 -0
  371. package/src/datastore/useDatastoreCount.ts +67 -0
  372. package/src/datastore/useDatastoreDescription.ts +90 -0
  373. package/src/datastore/useDatastoreList.ts +79 -0
  374. package/src/datastore/useDatastoreSearch.ts +39 -0
  375. package/src/datastore/useDeleteDatastore.ts +87 -0
  376. package/src/datastore/useDeleteRecord.ts +77 -0
  377. package/src/datastore/useInsertRecord.ts +92 -0
  378. package/src/datastore/useRecordCollection.ts +256 -0
  379. package/src/datastore/useRecordList.ts +131 -0
  380. package/src/datastore/useUpdateRecord.ts +95 -0
  381. package/src/environment/EnvironmentListPanel.tsx +24 -0
  382. package/src/execution/__tests__/useArtifactInspection.test.tsx +12 -2
  383. package/src/execution/__tests__/useLiveAgentExecution.test.tsx +125 -0
  384. package/src/execution/index.ts +4 -7
  385. package/src/execution/useLiveAgentExecution.ts +41 -3
  386. package/src/iam-policy/__tests__/useCheckPermission.test.tsx +221 -0
  387. package/src/iam-policy/index.ts +1 -0
  388. package/src/iam-policy/useCheckPermission.ts +45 -19
  389. package/src/index.ts +167 -18
  390. package/src/internal/__tests__/useInViewport.test.tsx +115 -0
  391. package/src/internal/useInViewport.ts +63 -0
  392. package/src/library/VisibilitySelector.tsx +50 -9
  393. package/src/library/__tests__/VisibilitySelector.test.tsx +38 -0
  394. package/src/library/index.ts +4 -21
  395. package/src/library/useApplyResource.ts +27 -34
  396. package/src/library/useExportResource.ts +21 -40
  397. package/src/manifest/ApplyManifestDialog.tsx +315 -0
  398. package/src/manifest/EditResourceYamlDialog.tsx +265 -0
  399. package/src/manifest/RedactedSecretsNotice.tsx +30 -0
  400. package/src/manifest/YamlEditor.tsx +272 -0
  401. package/src/manifest/__tests__/EditResourceYamlDialog.test.tsx +118 -0
  402. package/src/manifest/__tests__/useApplyManifest.test.tsx +237 -0
  403. package/src/manifest/__tests__/useEditResourceYaml.test.tsx +252 -0
  404. package/src/manifest/index.ts +33 -0
  405. package/src/manifest/useApplyManifest.ts +270 -0
  406. package/src/manifest/useEditResourceYaml.ts +273 -0
  407. package/src/mcp-server/McpServerDetailView.tsx +7 -3
  408. package/src/mcp-server/steps/ReviewStep.tsx +2 -3
  409. package/src/resource-creation/templates/workflow-templates.ts +4 -4
  410. package/src/session/SessionViewer.tsx +7 -1
  411. package/src/session/__tests__/audienceWiring.test.tsx +31 -1
  412. package/src/session/audience.ts +6 -1
  413. package/src/session/useEditSessionPrep.ts +3 -3
  414. package/src/settings/__tests__/useSettingsNavGroups.test.tsx +138 -0
  415. package/src/settings/index.ts +5 -1
  416. package/src/settings/settings-nav.ts +43 -0
  417. package/src/settings/useSettingsNavGroups.ts +81 -0
  418. package/src/skill/SkillDetailView.tsx +7 -3
  419. package/src/workflow/WorkflowAgentCallTranscript.tsx +279 -0
  420. package/src/workflow/WorkflowDetailView.tsx +7 -3
  421. package/src/workflow/WorkflowExecutionViewer.tsx +20 -77
  422. package/src/workflow/WorkflowTaskApprovalSummary.tsx +45 -8
  423. package/src/workflow/WorkflowYamlEditor.tsx +6 -270
  424. package/src/workflow/__tests__/WorkflowAgentCallTranscript.liveregion.test.tsx +124 -0
  425. package/src/workflow/__tests__/{WorkflowAgentExecutionDocument.test.tsx → WorkflowAgentCallTranscript.test.tsx} +146 -121
  426. package/src/workflow/__tests__/WorkflowExecutionViewer.approvals.test.tsx +81 -220
  427. package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +17 -16
  428. package/src/workflow/__tests__/WorkflowTaskApprovalSummary.test.tsx +52 -2
  429. package/src/workflow/__tests__/WorkflowTaskThread.test.tsx +168 -185
  430. package/src/workflow/__tests__/agent-call-live-experience.test.ts +4 -4
  431. package/src/workflow/__tests__/task-approval.test.ts +119 -0
  432. package/src/workflow/__tests__/task-presentation.test.ts +35 -1
  433. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +0 -57
  434. package/src/workflow/index.ts +6 -3
  435. package/src/workflow/task-detail/index.ts +3 -0
  436. package/src/workflow/task-detail/task-approval.ts +95 -1
  437. package/src/workflow/thread/WorkflowTaskThread.tsx +96 -252
  438. package/src/workflow/thread/task-presentation.ts +8 -2
  439. package/src/workflow/useWorkflowExecutionPanel.ts +0 -47
  440. package/styles.css +1 -1
  441. package/workflow/CanvasTransitionEdge.d.ts +1 -1
  442. package/workflow/WorkflowAgentCallTranscript.d.ts +87 -0
  443. package/workflow/WorkflowAgentCallTranscript.d.ts.map +1 -0
  444. package/workflow/WorkflowAgentCallTranscript.js +98 -0
  445. package/workflow/WorkflowAgentCallTranscript.js.map +1 -0
  446. package/workflow/WorkflowDetailView.d.ts.map +1 -1
  447. package/workflow/WorkflowDetailView.js +4 -3
  448. package/workflow/WorkflowDetailView.js.map +1 -1
  449. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  450. package/workflow/WorkflowExecutionViewer.js +23 -52
  451. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  452. package/workflow/WorkflowTaskApprovalSummary.d.ts +1 -1
  453. package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
  454. package/workflow/WorkflowTaskApprovalSummary.js +18 -1
  455. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  456. package/workflow/WorkflowYamlEditor.d.ts +2 -42
  457. package/workflow/WorkflowYamlEditor.d.ts.map +1 -1
  458. package/workflow/WorkflowYamlEditor.js +5 -214
  459. package/workflow/WorkflowYamlEditor.js.map +1 -1
  460. package/workflow/index.d.ts +2 -2
  461. package/workflow/index.d.ts.map +1 -1
  462. package/workflow/index.js +2 -2
  463. package/workflow/index.js.map +1 -1
  464. package/workflow/task-detail/index.d.ts +1 -1
  465. package/workflow/task-detail/index.d.ts.map +1 -1
  466. package/workflow/task-detail/index.js +1 -1
  467. package/workflow/task-detail/index.js.map +1 -1
  468. package/workflow/task-detail/task-approval.d.ts +44 -1
  469. package/workflow/task-detail/task-approval.d.ts.map +1 -1
  470. package/workflow/task-detail/task-approval.js +47 -0
  471. package/workflow/task-detail/task-approval.js.map +1 -1
  472. package/workflow/thread/WorkflowTaskThread.d.ts +17 -25
  473. package/workflow/thread/WorkflowTaskThread.d.ts.map +1 -1
  474. package/workflow/thread/WorkflowTaskThread.js +60 -105
  475. package/workflow/thread/WorkflowTaskThread.js.map +1 -1
  476. package/workflow/thread/task-presentation.d.ts.map +1 -1
  477. package/workflow/thread/task-presentation.js +7 -2
  478. package/workflow/thread/task-presentation.js.map +1 -1
  479. package/workflow/useWorkflowExecutionPanel.d.ts +0 -12
  480. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
  481. package/workflow/useWorkflowExecutionPanel.js +0 -12
  482. package/workflow/useWorkflowExecutionPanel.js.map +1 -1
  483. package/execution/agent-execution-document.d.ts +0 -31
  484. package/execution/agent-execution-document.d.ts.map +0 -1
  485. package/execution/agent-execution-document.js +0 -48
  486. package/execution/agent-execution-document.js.map +0 -1
  487. package/library/ImportResourceDialog.d.ts +0 -43
  488. package/library/ImportResourceDialog.d.ts.map +0 -1
  489. package/library/ImportResourceDialog.js +0 -90
  490. package/library/ImportResourceDialog.js.map +0 -1
  491. package/library/parse-resource-yaml.d.ts +0 -63
  492. package/library/parse-resource-yaml.d.ts.map +0 -1
  493. package/library/parse-resource-yaml.js +0 -407
  494. package/library/parse-resource-yaml.js.map +0 -1
  495. package/library/serialize-resource-yaml.d.ts +0 -103
  496. package/library/serialize-resource-yaml.d.ts.map +0 -1
  497. package/library/serialize-resource-yaml.js +0 -565
  498. package/library/serialize-resource-yaml.js.map +0 -1
  499. package/library/useImportResource.d.ts +0 -84
  500. package/library/useImportResource.d.ts.map +0 -1
  501. package/library/useImportResource.js +0 -188
  502. package/library/useImportResource.js.map +0 -1
  503. package/src/execution/__tests__/agent-execution-document.test.ts +0 -45
  504. package/src/execution/agent-execution-document.ts +0 -54
  505. package/src/library/ImportResourceDialog.tsx +0 -227
  506. package/src/library/parse-resource-yaml.ts +0 -630
  507. package/src/library/serialize-resource-yaml.ts +0 -756
  508. package/src/library/useImportResource.ts +0 -253
  509. package/src/workflow/WorkflowAgentExecutionDocument.tsx +0 -283
  510. package/workflow/WorkflowAgentExecutionDocument.d.ts +0 -79
  511. package/workflow/WorkflowAgentExecutionDocument.d.ts.map +0 -1
  512. package/workflow/WorkflowAgentExecutionDocument.js +0 -87
  513. package/workflow/WorkflowAgentExecutionDocument.js.map +0 -1
@@ -1,253 +0,0 @@
1
- "use client";
2
-
3
- import { useCallback, useMemo, useRef, useState } from "react";
4
- import { stringify as stringifyYaml } from "yaml";
5
- import { useStigmer } from "../hooks.js";
6
- import { toError } from "../internal/toError.js";
7
- import { parseResourceYaml, type ParsedResource } from "./parse-resource-yaml.js";
8
- import type { ApplyResourceResult } from "./useApplyResource.js";
9
-
10
- // ---------------------------------------------------------------------------
11
- // Types
12
- // ---------------------------------------------------------------------------
13
-
14
- /** Detected format of the imported file content. */
15
- export type ImportFormat = "yaml" | "json";
16
-
17
- /**
18
- * Validated preview of an imported resource, shown to the user before
19
- * they confirm the apply operation.
20
- */
21
- export interface ImportPreview {
22
- /** The detected resource kind. */
23
- readonly kind: "Agent" | "McpServer";
24
- /** The resource name from `metadata.name`. */
25
- readonly name: string;
26
- /** The resource slug from `metadata.slug`, if present. */
27
- readonly slug?: string;
28
- /** The detected file format. */
29
- readonly format: ImportFormat;
30
- /** The raw file content (for potential display or debugging). */
31
- readonly rawContent: string;
32
- }
33
-
34
- /** Return value of {@link useImportResource}. */
35
- export interface UseImportResourceReturn {
36
- /**
37
- * Read and validate a file selected by the user. On success, populates
38
- * `preview`. On failure, populates `error`. In both cases, clears the
39
- * previous state first.
40
- */
41
- readonly readFile: (file: File) => Promise<void>;
42
- /** The validation preview, or `null` when no file has been validated. */
43
- readonly preview: ImportPreview | null;
44
- /** Validation or apply error message, or `null` when healthy. */
45
- readonly error: string | null;
46
- /** Clear all state (preview, error, internal content). */
47
- readonly reset: () => void;
48
- /**
49
- * Apply the previewed resource to the given organization.
50
- * Only callable when `preview` is non-null.
51
- *
52
- * @throws Re-throws the original error after setting `error` state.
53
- */
54
- readonly apply: (org: string) => Promise<ApplyResourceResult>;
55
- /** `true` while the apply RPC is in-flight. */
56
- readonly isApplying: boolean;
57
- }
58
-
59
- // ---------------------------------------------------------------------------
60
- // Hook
61
- // ---------------------------------------------------------------------------
62
-
63
- /**
64
- * Headless import hook for Stigmer resources.
65
- *
66
- * Orchestrates the file import workflow:
67
- * 1. User selects a `.yaml`, `.yml`, or `.json` file
68
- * 2. `readFile` reads the content, detects the format, and validates
69
- * the structure via `parseResourceYaml`
70
- * 3. On success, `preview` is populated with kind, name, slug, format
71
- * 4. On validation error, `error` is populated with a user-facing message
72
- * 5. User confirms → `apply(org)` calls the appropriate SDK `apply()` method
73
- *
74
- * Follows the established mutation-hook pattern: `isApplying` + `error` +
75
- * `reset`. The `preview` state enables a confirmation step before committing
76
- * (Nielsen heuristic #3: user control, #5: error prevention).
77
- *
78
- * @example
79
- * ```tsx
80
- * const { readFile, preview, error, reset, apply, isApplying } = useImportResource();
81
- *
82
- * const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {
83
- * const file = e.target.files?.[0];
84
- * if (file) readFile(file);
85
- * };
86
- *
87
- * if (preview) {
88
- * return (
89
- * <div>
90
- * <p>Import {preview.kind}: {preview.name}</p>
91
- * <button onClick={() => apply(org)} disabled={isApplying}>
92
- * Confirm
93
- * </button>
94
- * </div>
95
- * );
96
- * }
97
- * ```
98
- *
99
- * @see {@link parseResourceYaml} for the validation logic
100
- * @see {@link ImportResourceDialog} for the styled component that composes this hook
101
- */
102
- export function useImportResource(): UseImportResourceReturn {
103
- const stigmer = useStigmer();
104
- const [preview, setPreview] = useState<ImportPreview | null>(null);
105
- const [error, setError] = useState<string | null>(null);
106
- const [isApplying, setIsApplying] = useState(false);
107
-
108
- const contentRef = useRef<string | null>(null);
109
- const parsedRef = useRef<ParsedResource | null>(null);
110
-
111
- const reset = useCallback(() => {
112
- setPreview(null);
113
- setError(null);
114
- setIsApplying(false);
115
- contentRef.current = null;
116
- parsedRef.current = null;
117
- }, []);
118
-
119
- const readFile = useCallback(async (file: File) => {
120
- setPreview(null);
121
- setError(null);
122
- contentRef.current = null;
123
- parsedRef.current = null;
124
-
125
- let text: string;
126
- try {
127
- text = await file.text();
128
- } catch {
129
- setError("Failed to read the selected file.");
130
- return;
131
- }
132
-
133
- if (!text.trim()) {
134
- setError("The selected file is empty.");
135
- return;
136
- }
137
-
138
- const format = detectFormat(file.name, text);
139
-
140
- // For JSON files, convert to YAML-parseable content first.
141
- // parseResourceYaml expects YAML, but since YAML is a superset of JSON,
142
- // we can pass JSON directly. However for cleaner error messages, we
143
- // normalize JSON → plain object → YAML string if needed.
144
- let yamlContent: string;
145
- if (format === "json") {
146
- try {
147
- const parsed = JSON.parse(text) as unknown;
148
- if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
149
- setError("JSON file must contain a single object (not an array or primitive).");
150
- return;
151
- }
152
- yamlContent = stringifyYaml(parsed);
153
- } catch {
154
- setError("The file does not contain valid JSON.");
155
- return;
156
- }
157
- } else {
158
- yamlContent = text;
159
- }
160
-
161
- // Validate structure using the existing parser. We use a dummy org
162
- // here — the real org is provided at apply time.
163
- let parsed: ParsedResource;
164
- try {
165
- parsed = parseResourceYaml(yamlContent, "__preview__");
166
- } catch (err) {
167
- setError(err instanceof Error ? err.message : "Failed to validate resource file.");
168
- return;
169
- }
170
-
171
- contentRef.current = yamlContent;
172
- parsedRef.current = parsed;
173
-
174
- setPreview({
175
- kind: parsed.kind,
176
- name: parsed.input.name,
177
- slug: "slug" in parsed.input ? (parsed.input.slug as string | undefined) : undefined,
178
- format,
179
- rawContent: text,
180
- });
181
- }, []);
182
-
183
- const apply = useCallback(async (org: string): Promise<ApplyResourceResult> => {
184
- const content = contentRef.current;
185
- if (!content) {
186
- throw new Error("No file has been validated. Call readFile first.");
187
- }
188
-
189
- setIsApplying(true);
190
- setError(null);
191
-
192
- try {
193
- const parsed = parseResourceYaml(content, org);
194
-
195
- switch (parsed.kind) {
196
- case "Agent": {
197
- const agent = await stigmer.agent.apply(parsed.input);
198
- return {
199
- kind: "Agent",
200
- name: agent.metadata?.name ?? parsed.input.name,
201
- org: agent.metadata?.org ?? org,
202
- slug: agent.metadata?.slug ?? parsed.input.name,
203
- };
204
- }
205
- case "McpServer": {
206
- const mcpServer = await stigmer.mcpServer.apply(parsed.input);
207
- return {
208
- kind: "McpServer",
209
- name: mcpServer.metadata?.name ?? parsed.input.name,
210
- org: mcpServer.metadata?.org ?? org,
211
- slug: mcpServer.metadata?.slug ?? parsed.input.name,
212
- };
213
- }
214
- }
215
- } catch (err) {
216
- const message = toError(err).message;
217
- setError(message);
218
- throw err;
219
- } finally {
220
- setIsApplying(false);
221
- }
222
- }, [stigmer]);
223
-
224
- return useMemo(
225
- () => ({ readFile, preview, error, reset, apply, isApplying }),
226
- [readFile, preview, error, reset, apply, isApplying],
227
- );
228
- }
229
-
230
- // ---------------------------------------------------------------------------
231
- // Format detection
232
- // ---------------------------------------------------------------------------
233
-
234
- const JSON_EXTENSIONS = new Set([".json"]);
235
- const YAML_EXTENSIONS = new Set([".yaml", ".yml"]);
236
-
237
- function detectFormat(filename: string, content: string): ImportFormat {
238
- const lowerName = filename.toLowerCase();
239
- const dotIndex = lowerName.lastIndexOf(".");
240
- if (dotIndex >= 0) {
241
- const ext = lowerName.slice(dotIndex);
242
- if (JSON_EXTENSIONS.has(ext)) return "json";
243
- if (YAML_EXTENSIONS.has(ext)) return "yaml";
244
- }
245
-
246
- // Fallback: try parsing as JSON. If it parses, treat as JSON.
247
- try {
248
- JSON.parse(content);
249
- return "json";
250
- } catch {
251
- return "yaml";
252
- }
253
- }
@@ -1,283 +0,0 @@
1
- "use client";
2
-
3
- // Editor-area document rendering one child AgentExecution's full transcript.
4
- // Domain: workflow (the AGENT_CALL counterpart of WorkflowArtifactDocument).
5
-
6
- import { memo, useCallback, useMemo } from "react";
7
- import type { AgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
8
- import {
9
- FileChangeSetStatus,
10
- type FileDecisionAction,
11
- } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
12
- import type { FileChangeSet } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/filereview_pb";
13
- import { displayFileChangeSets } from "@stigmer/sdk";
14
- import { cn } from "@stigmer/theme";
15
- import { useLiveAgentExecution } from "../execution/useLiveAgentExecution.js";
16
- import { MessageThread } from "../execution/MessageThread.js";
17
- import { ThreadSkeleton } from "../execution/ThreadSkeleton.js";
18
- import { ExecutionPhaseBadge } from "../execution/ExecutionPhaseBadge.js";
19
- import { FileReviewDock } from "../execution/FileReviewDock.js";
20
- import type { FileDecisionOptions } from "../execution/useFileReview.js";
21
- import { isTerminalPhase } from "../execution/execution-phases.js";
22
- import type { UseWorkflowExecutionActionsReturn } from "./useWorkflowExecutionActions.js";
23
-
24
- /** Stable empty list so the thread's memoized rows keep identity (DD-010). */
25
- const EMPTY_EXECUTIONS: readonly AgentExecution[] = [];
26
-
27
- /**
28
- * The HITL wiring for a child transcript: the slice of
29
- * {@link UseWorkflowExecutionActionsReturn} the document needs to submit
30
- * child-gate decisions at the WORKFLOW level.
31
- *
32
- * A `Pick` (not a new shape) so the bundle can never drift from the actions
33
- * hook — the viewer builds it from its single `useWorkflowExecutionActions`
34
- * instance, which is the same keyed in-flight/error state the bottom
35
- * Approvals tab renders. One instance, two surfaces: a spinner or failure on
36
- * a gate is identical wherever that gate is shown.
37
- */
38
- export type WorkflowAgentExecutionHitl = Pick<
39
- UseWorkflowExecutionActionsReturn,
40
- | "submitApproval"
41
- | "approvalSubmittingToolCallIds"
42
- | "approvalErrorsByToolCallId"
43
- | "submitFileDecision"
44
- | "fileDecisionSubmittingKeys"
45
- | "fileDecisionErrorsByKey"
46
- >;
47
-
48
- /** Props for {@link WorkflowAgentExecutionDocument}. */
49
- export interface WorkflowAgentExecutionDocumentProps {
50
- /** ID of the child AgentExecution whose transcript to render. */
51
- readonly childExecutionId: string;
52
- /** The AGENT_CALL task that spawned the child — the document's title. */
53
- readonly taskName: string;
54
- /** Slug of the agent the task called, when known (subtitle context). */
55
- readonly agentSlug?: string;
56
- /**
57
- * Open the child execution as a standalone page — the pop-out escape hatch
58
- * preserved from the inspector's Agent tab. Host-routed (DD-004).
59
- */
60
- readonly onNavigateToAgentExecution?: (agentExecutionId: string) => void;
61
- /**
62
- * Workflow-level HITL handlers (S5 of the UX-parity project). When
63
- * provided, the transcript becomes interactive: tool-approval gates render
64
- * their decision cards inline on the gated rows, and pending file reviews
65
- * dock at the bottom of the document. When omitted, the transcript is
66
- * read-only — gates show status only (backward compatible, DD-011).
67
- */
68
- readonly hitl?: WorkflowAgentExecutionHitl;
69
- /** Additional CSS classes for the root element. */
70
- readonly className?: string;
71
- }
72
-
73
- /**
74
- * The editor-pane rendering of a child AgentExecution's transcript — the
75
- * `SurfaceVirtualDocument` body the workflow execution panel mounts when an
76
- * AGENT_CALL task is opened in place (S4 of the UX-parity project). This is
77
- * the full session-grade experience — streaming `MessageThread` with tool
78
- * calls, sub-agents, plan cards, and (with {@link
79
- * WorkflowAgentExecutionDocumentProps.hitl | hitl}) in-place HITL —
80
- * replacing the inspector's cramped `max-h-[50vh]` thumbnail.
81
- *
82
- * HITL ROUTING. Child gates are decided through the WORKFLOW-level RPCs
83
- * (`WorkflowExecution.submitApproval` / `submitFileDecision`), never the
84
- * child's own `agentExecution.*` submit path. The two paths are
85
- * server-equivalent (the workflow RPC forwards to the child — see
86
- * workflowexecution command.proto), but they differ in authorization: the
87
- * workflow RPC checks `can_edit` on the workflow execution — the resource
88
- * the operator owns — while the child path checks the runner-spawned
89
- * AgentExecution, which the operator may not. Every workflow HITL surface
90
- * (bottom Approvals tab, inspector) routes this way; the transcript joins
91
- * them via the same actions instance, so in-flight/error state never forks.
92
- *
93
- * FILE-REVIEW DOCK. Pending (AWAITING_REVIEW) sets derive from the CHILD's
94
- * own live stream — the freshest source this document already holds — not
95
- * from the parent's `status.pending_file_reviews`: the parent snapshot is
96
- * fetched once at mount and may lag a mid-run gate, which would blank the
97
- * dock exactly when the reviewer is watching live. The server validates
98
- * routing against its own (fresh) stored status at submit time, so a
99
- * too-early decision degrades to a retryable in-card error, the same
100
- * treatment tool approvals get. Docked below the thread (mirroring the
101
- * session's composer dock) so a decision the agent is blocked on can never
102
- * scroll out of view; settled sets render as read-only records in-thread
103
- * (`showFileReviewRecords`), never in the dock — the two surfaces partition
104
- * by the same pending test `MessageThread` uses.
105
- *
106
- * Lifecycle: the surface's editor area mounts only the ACTIVE virtual
107
- * document, so `useLiveAgentExecution` fetches/streams only while this tab
108
- * is foregrounded (DD-LIVE-006 — at most one child stream is ever live) and
109
- * a tab-return re-renders instantly from the DD-014 fetch cache.
110
- *
111
- * All visual properties flow through `--stgm-*` tokens (DD-005).
112
- */
113
- export const WorkflowAgentExecutionDocument = memo(
114
- function WorkflowAgentExecutionDocument({
115
- childExecutionId,
116
- taskName,
117
- agentSlug,
118
- onNavigateToAgentExecution,
119
- hitl,
120
- className,
121
- }: WorkflowAgentExecutionDocumentProps) {
122
- const { execution, phase, isLoading, isStreaming, isReconnecting, error, reconnect } =
123
- useLiveAgentExecution(childExecutionId);
124
-
125
- // Pending file reviews from the child's own (streamed) status — see the
126
- // component doc for why the parent's pending_file_reviews is not the
127
- // source. Terminal executions never dock: their AWAITING_REVIEW sets are
128
- // settled history ("not reviewed") and render as in-thread records — the
129
- // exact complement of MessageThread's pending test, so no set ever
130
- // appears in both surfaces.
131
- const terminal = isTerminalPhase(phase);
132
- const pendingReviewSets = useMemo<readonly FileChangeSet[]>(() => {
133
- if (terminal) return [];
134
- return displayFileChangeSets(execution?.status).filter(
135
- (cs) =>
136
- cs.status === FileChangeSetStatus.AWAITING_REVIEW &&
137
- cs.changes.length > 0,
138
- );
139
- }, [execution?.status, terminal]);
140
-
141
- // Bind the child id into the dock's card-level submit signature. Deps are
142
- // the specific method (DD-010), so the callback survives unrelated
143
- // in-flight churn on the actions instance.
144
- const submitFileDecision = hitl?.submitFileDecision;
145
- const handleFileDecision = useCallback(
146
- (changeSetId: string, action: FileDecisionAction, options?: FileDecisionOptions) => {
147
- submitFileDecision?.(childExecutionId, changeSetId, action, options);
148
- },
149
- [submitFileDecision, childExecutionId],
150
- );
151
-
152
- return (
153
- <div
154
- role="article"
155
- aria-label={`Agent execution for task ${taskName}`}
156
- className={cn("flex h-full min-w-0 flex-col", className)}
157
- >
158
- {/* Slim identity header: task name (the DAG node this transcript
159
- belongs to), agent slug, live/phase state, and the standalone
160
- pop-out. Wraps on narrow panes rather than overflowing. */}
161
- <div className="flex min-w-0 shrink-0 flex-wrap items-center gap-x-3 gap-y-1 border-b border-border bg-background px-4 py-2">
162
- <span className="truncate text-sm font-medium text-foreground">
163
- {taskName}
164
- </span>
165
- {agentSlug && (
166
- <span className="shrink-0 text-xs text-muted-foreground">
167
- {agentSlug}
168
- </span>
169
- )}
170
-
171
- <span className="shrink-0">
172
- {isStreaming ? (
173
- <span className="inline-flex items-center gap-1.5 text-xs font-medium text-primary">
174
- <span className="inline-block size-1.5 animate-pulse rounded-full bg-primary" aria-hidden="true" />
175
- Live
176
- </span>
177
- ) : isReconnecting ? (
178
- <span className="text-xs text-muted-foreground">Reconnecting…</span>
179
- ) : isTerminalPhase(phase) ? (
180
- <ExecutionPhaseBadge phase={phase} />
181
- ) : null}
182
- </span>
183
-
184
- {onNavigateToAgentExecution && (
185
- <button
186
- type="button"
187
- onClick={() => onNavigateToAgentExecution(childExecutionId)}
188
- className="ml-auto inline-flex shrink-0 items-center gap-1.5 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:rounded-sm"
189
- >
190
- <PopOutIcon />
191
- Open standalone
192
- </button>
193
- )}
194
- </div>
195
-
196
- {/* The thread owns the scrolling (its auto-scroll machine + jump-to-
197
- latest need the scroll container); h-full keeps the surrounding
198
- editor-pane wrapper inert, so there is exactly one scrollbar. */}
199
- <div className="min-h-0 min-w-0 flex-1">
200
- {execution ? (
201
- <MessageThread
202
- executions={EMPTY_EXECUTIONS}
203
- activeStreamExecution={execution}
204
- onApprovalSubmit={hitl?.submitApproval}
205
- submittingApprovalIds={hitl?.approvalSubmittingToolCallIds}
206
- approvalErrors={hitl?.approvalErrorsByToolCallId}
207
- showFileReviewRecords={hitl != null}
208
- className="h-full"
209
- />
210
- ) : isLoading ? (
211
- <ThreadSkeleton className="px-4 py-4" />
212
- ) : error ? (
213
- <div
214
- role="alert"
215
- className="mx-auto flex w-full max-w-3xl flex-col items-center gap-2 px-4 py-8 text-center"
216
- >
217
- <p className="text-xs text-destructive">{error.message}</p>
218
- <button
219
- type="button"
220
- onClick={reconnect}
221
- className="rounded border border-border px-3 py-1.5 text-xs font-medium text-foreground hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
222
- >
223
- Retry
224
- </button>
225
- </div>
226
- ) : (
227
- <div
228
- role="status"
229
- className="mx-auto flex w-full max-w-3xl flex-col items-center gap-1 px-4 py-8 text-center"
230
- >
231
- <p className="text-xs font-medium text-foreground">
232
- This agent execution is no longer available.
233
- </p>
234
- <p className="text-xs text-muted-foreground">
235
- It may have been removed, or the workflow run predates
236
- transcript retention.
237
- </p>
238
- </div>
239
- )}
240
- </div>
241
-
242
- {/* Pending file reviews dock here — pinned below the thread (the
243
- document has no composer, so the panel bottom is the fixed strip)
244
- where the decision the child is blocked on can never scroll out
245
- of view. Same shape as the session's composer dock. */}
246
- {hitl && pendingReviewSets.length > 0 && (
247
- <FileReviewDock
248
- changeSets={pendingReviewSets}
249
- onSubmit={handleFileDecision}
250
- submittingDecisionKeys={hitl.fileDecisionSubmittingKeys}
251
- decisionErrors={hitl.fileDecisionErrorsByKey}
252
- className="shrink-0"
253
- />
254
- )}
255
- </div>
256
- );
257
- },
258
- );
259
-
260
- // ---------------------------------------------------------------------------
261
- // Inline SVG icons (SDK independence — no lucide dependency)
262
- // ---------------------------------------------------------------------------
263
-
264
- function PopOutIcon() {
265
- return (
266
- <svg
267
- width="12"
268
- height="12"
269
- viewBox="0 0 12 12"
270
- fill="none"
271
- stroke="currentColor"
272
- strokeWidth="1.3"
273
- strokeLinecap="round"
274
- strokeLinejoin="round"
275
- className="shrink-0"
276
- aria-hidden="true"
277
- >
278
- <path d="M10.5 4.5V1.5H7.5" />
279
- <path d="M10.5 1.5L6 6" />
280
- <path d="M8.5 7v3a1 1 0 0 1-1 1h-5a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h3" />
281
- </svg>
282
- );
283
- }
@@ -1,79 +0,0 @@
1
- import type { UseWorkflowExecutionActionsReturn } from "./useWorkflowExecutionActions.js";
2
- /**
3
- * The HITL wiring for a child transcript: the slice of
4
- * {@link UseWorkflowExecutionActionsReturn} the document needs to submit
5
- * child-gate decisions at the WORKFLOW level.
6
- *
7
- * A `Pick` (not a new shape) so the bundle can never drift from the actions
8
- * hook — the viewer builds it from its single `useWorkflowExecutionActions`
9
- * instance, which is the same keyed in-flight/error state the bottom
10
- * Approvals tab renders. One instance, two surfaces: a spinner or failure on
11
- * a gate is identical wherever that gate is shown.
12
- */
13
- export type WorkflowAgentExecutionHitl = Pick<UseWorkflowExecutionActionsReturn, "submitApproval" | "approvalSubmittingToolCallIds" | "approvalErrorsByToolCallId" | "submitFileDecision" | "fileDecisionSubmittingKeys" | "fileDecisionErrorsByKey">;
14
- /** Props for {@link WorkflowAgentExecutionDocument}. */
15
- export interface WorkflowAgentExecutionDocumentProps {
16
- /** ID of the child AgentExecution whose transcript to render. */
17
- readonly childExecutionId: string;
18
- /** The AGENT_CALL task that spawned the child — the document's title. */
19
- readonly taskName: string;
20
- /** Slug of the agent the task called, when known (subtitle context). */
21
- readonly agentSlug?: string;
22
- /**
23
- * Open the child execution as a standalone page — the pop-out escape hatch
24
- * preserved from the inspector's Agent tab. Host-routed (DD-004).
25
- */
26
- readonly onNavigateToAgentExecution?: (agentExecutionId: string) => void;
27
- /**
28
- * Workflow-level HITL handlers (S5 of the UX-parity project). When
29
- * provided, the transcript becomes interactive: tool-approval gates render
30
- * their decision cards inline on the gated rows, and pending file reviews
31
- * dock at the bottom of the document. When omitted, the transcript is
32
- * read-only — gates show status only (backward compatible, DD-011).
33
- */
34
- readonly hitl?: WorkflowAgentExecutionHitl;
35
- /** Additional CSS classes for the root element. */
36
- readonly className?: string;
37
- }
38
- /**
39
- * The editor-pane rendering of a child AgentExecution's transcript — the
40
- * `SurfaceVirtualDocument` body the workflow execution panel mounts when an
41
- * AGENT_CALL task is opened in place (S4 of the UX-parity project). This is
42
- * the full session-grade experience — streaming `MessageThread` with tool
43
- * calls, sub-agents, plan cards, and (with {@link
44
- * WorkflowAgentExecutionDocumentProps.hitl | hitl}) in-place HITL —
45
- * replacing the inspector's cramped `max-h-[50vh]` thumbnail.
46
- *
47
- * HITL ROUTING. Child gates are decided through the WORKFLOW-level RPCs
48
- * (`WorkflowExecution.submitApproval` / `submitFileDecision`), never the
49
- * child's own `agentExecution.*` submit path. The two paths are
50
- * server-equivalent (the workflow RPC forwards to the child — see
51
- * workflowexecution command.proto), but they differ in authorization: the
52
- * workflow RPC checks `can_edit` on the workflow execution — the resource
53
- * the operator owns — while the child path checks the runner-spawned
54
- * AgentExecution, which the operator may not. Every workflow HITL surface
55
- * (bottom Approvals tab, inspector) routes this way; the transcript joins
56
- * them via the same actions instance, so in-flight/error state never forks.
57
- *
58
- * FILE-REVIEW DOCK. Pending (AWAITING_REVIEW) sets derive from the CHILD's
59
- * own live stream — the freshest source this document already holds — not
60
- * from the parent's `status.pending_file_reviews`: the parent snapshot is
61
- * fetched once at mount and may lag a mid-run gate, which would blank the
62
- * dock exactly when the reviewer is watching live. The server validates
63
- * routing against its own (fresh) stored status at submit time, so a
64
- * too-early decision degrades to a retryable in-card error, the same
65
- * treatment tool approvals get. Docked below the thread (mirroring the
66
- * session's composer dock) so a decision the agent is blocked on can never
67
- * scroll out of view; settled sets render as read-only records in-thread
68
- * (`showFileReviewRecords`), never in the dock — the two surfaces partition
69
- * by the same pending test `MessageThread` uses.
70
- *
71
- * Lifecycle: the surface's editor area mounts only the ACTIVE virtual
72
- * document, so `useLiveAgentExecution` fetches/streams only while this tab
73
- * is foregrounded (DD-LIVE-006 — at most one child stream is ever live) and
74
- * a tab-return re-renders instantly from the DD-014 fetch cache.
75
- *
76
- * All visual properties flow through `--stgm-*` tokens (DD-005).
77
- */
78
- export declare const WorkflowAgentExecutionDocument: import("react").NamedExoticComponent<WorkflowAgentExecutionDocumentProps>;
79
- //# sourceMappingURL=WorkflowAgentExecutionDocument.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorkflowAgentExecutionDocument.d.ts","sourceRoot":"","sources":["../../src/workflow/WorkflowAgentExecutionDocument.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AAK1F;;;;;;;;;;GAUG;AACH,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC3C,iCAAiC,EAC/B,gBAAgB,GAChB,+BAA+B,GAC/B,4BAA4B,GAC5B,oBAAoB,GACpB,4BAA4B,GAC5B,yBAAyB,CAC5B,CAAC;AAEF,wDAAwD;AACxD,MAAM,WAAW,mCAAmC;IAClD,iEAAiE;IACjE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,0BAA0B,CAAC;IAC3C,mDAAmD;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,8BAA8B,2EAiJ1C,CAAC"}