@stigmer/react 3.3.0 → 3.4.1

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 (344) hide show
  1. package/agent/useAgentCount.d.ts +2 -0
  2. package/agent/useAgentCount.d.ts.map +1 -1
  3. package/agent/useAgentCount.js.map +1 -1
  4. package/api-key/CreateApiKeyForm.d.ts +7 -1
  5. package/api-key/CreateApiKeyForm.d.ts.map +1 -1
  6. package/api-key/CreateApiKeyForm.js +2 -2
  7. package/api-key/CreateApiKeyForm.js.map +1 -1
  8. package/billing/index.d.ts +0 -18
  9. package/billing/index.d.ts.map +1 -1
  10. package/billing/index.js +4 -9
  11. package/billing/index.js.map +1 -1
  12. package/cursor-accounts/CursorAccountEditor.d.ts +7 -1
  13. package/cursor-accounts/CursorAccountEditor.d.ts.map +1 -1
  14. package/cursor-accounts/CursorAccountEditor.js +21 -5
  15. package/cursor-accounts/CursorAccountEditor.js.map +1 -1
  16. package/cursor-accounts/CursorAccountsConsole.d.ts +9 -5
  17. package/cursor-accounts/CursorAccountsConsole.d.ts.map +1 -1
  18. package/cursor-accounts/CursorAccountsConsole.js +34 -140
  19. package/cursor-accounts/CursorAccountsConsole.js.map +1 -1
  20. package/cursor-accounts/MemberCoverageTable.d.ts +29 -0
  21. package/cursor-accounts/MemberCoverageTable.d.ts.map +1 -0
  22. package/cursor-accounts/MemberCoverageTable.js +150 -0
  23. package/cursor-accounts/MemberCoverageTable.js.map +1 -0
  24. package/cursor-accounts/MemberKeysPanel.d.ts +25 -0
  25. package/cursor-accounts/MemberKeysPanel.d.ts.map +1 -0
  26. package/cursor-accounts/MemberKeysPanel.js +115 -0
  27. package/cursor-accounts/MemberKeysPanel.js.map +1 -0
  28. package/cursor-accounts/badges.d.ts +9 -0
  29. package/cursor-accounts/badges.d.ts.map +1 -0
  30. package/cursor-accounts/badges.js +10 -0
  31. package/cursor-accounts/badges.js.map +1 -0
  32. package/cursor-accounts/cursor-account-coverage.d.ts +41 -0
  33. package/cursor-accounts/cursor-account-coverage.d.ts.map +1 -0
  34. package/cursor-accounts/cursor-account-coverage.js +26 -0
  35. package/cursor-accounts/cursor-account-coverage.js.map +1 -0
  36. package/cursor-accounts/cursor-account-format.d.ts +13 -0
  37. package/cursor-accounts/cursor-account-format.d.ts.map +1 -1
  38. package/cursor-accounts/cursor-account-format.js +16 -1
  39. package/cursor-accounts/cursor-account-format.js.map +1 -1
  40. package/datastore/CollectionRecordsBrowser.js +18 -4
  41. package/datastore/CollectionRecordsBrowser.js.map +1 -1
  42. package/datastore/RecordFilterBuilder.d.ts +8 -1
  43. package/datastore/RecordFilterBuilder.d.ts.map +1 -1
  44. package/datastore/RecordFilterBuilder.js +2 -2
  45. package/datastore/RecordFilterBuilder.js.map +1 -1
  46. package/datastore/recordFilter.d.ts +9 -1
  47. package/datastore/recordFilter.d.ts.map +1 -1
  48. package/datastore/recordFilter.js +12 -1
  49. package/datastore/recordFilter.js.map +1 -1
  50. package/datastore/useDatastoreCount.d.ts +2 -0
  51. package/datastore/useDatastoreCount.d.ts.map +1 -1
  52. package/datastore/useDatastoreCount.js.map +1 -1
  53. package/execution/ExecutionProgress.d.ts.map +1 -1
  54. package/execution/ExecutionProgress.js +13 -4
  55. package/execution/ExecutionProgress.js.map +1 -1
  56. package/execution/MessageThread.d.ts.map +1 -1
  57. package/execution/MessageThread.js +10 -2
  58. package/execution/MessageThread.js.map +1 -1
  59. package/execution/useCreateAgentExecution.d.ts +31 -1
  60. package/execution/useCreateAgentExecution.d.ts.map +1 -1
  61. package/execution/useCreateAgentExecution.js +2 -0
  62. package/execution/useCreateAgentExecution.js.map +1 -1
  63. package/index.d.ts +8 -6
  64. package/index.d.ts.map +1 -1
  65. package/index.js +8 -4
  66. package/index.js.map +1 -1
  67. package/internal/form-primitives.d.ts +10 -0
  68. package/internal/form-primitives.d.ts.map +1 -0
  69. package/{billing → internal}/form-primitives.js +5 -9
  70. package/internal/form-primitives.js.map +1 -0
  71. package/manifest/ApplyManifestDialog.d.ts +10 -5
  72. package/manifest/ApplyManifestDialog.d.ts.map +1 -1
  73. package/manifest/ApplyManifestDialog.js +30 -13
  74. package/manifest/ApplyManifestDialog.js.map +1 -1
  75. package/manifest/useApplyManifest.d.ts +6 -2
  76. package/manifest/useApplyManifest.d.ts.map +1 -1
  77. package/manifest/useApplyManifest.js +5 -5
  78. package/manifest/useApplyManifest.js.map +1 -1
  79. package/mcp-server/McpServerDetailView.d.ts +38 -2
  80. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  81. package/mcp-server/McpServerDetailView.js +21 -5
  82. package/mcp-server/McpServerDetailView.js.map +1 -1
  83. package/mcp-server/index.d.ts +7 -0
  84. package/mcp-server/index.d.ts.map +1 -1
  85. package/mcp-server/index.js +9 -0
  86. package/mcp-server/index.js.map +1 -1
  87. package/mcp-server/steps/EnvironmentAuthStep.d.ts +4 -0
  88. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
  89. package/mcp-server/steps/EnvironmentAuthStep.js +4 -0
  90. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
  91. package/mcp-server/steps/IdentityTransportStep.d.ts +6 -0
  92. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
  93. package/mcp-server/steps/IdentityTransportStep.js +7 -1
  94. package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
  95. package/mcp-server/steps/ReviewStep.d.ts +5 -0
  96. package/mcp-server/steps/ReviewStep.d.ts.map +1 -1
  97. package/mcp-server/steps/ReviewStep.js +16 -2
  98. package/mcp-server/steps/ReviewStep.js.map +1 -1
  99. package/mcp-server/useMcpServerCount.d.ts +2 -0
  100. package/mcp-server/useMcpServerCount.d.ts.map +1 -1
  101. package/mcp-server/useMcpServerCount.js.map +1 -1
  102. package/package.json +4 -4
  103. package/pricing-governance/BaselineEditor.d.ts.map +1 -0
  104. package/{billing → pricing-governance}/BaselineEditor.js +19 -2
  105. package/pricing-governance/BaselineEditor.js.map +1 -0
  106. package/pricing-governance/ModelCatalogPanel.d.ts.map +1 -0
  107. package/pricing-governance/ModelCatalogPanel.js.map +1 -0
  108. package/pricing-governance/ModelGovernanceDetail.d.ts.map +1 -0
  109. package/pricing-governance/ModelGovernanceDetail.js.map +1 -0
  110. package/pricing-governance/OperatorAccessNotice.d.ts.map +1 -0
  111. package/pricing-governance/OperatorAccessNotice.js.map +1 -0
  112. package/pricing-governance/PricingGovernanceConsole.d.ts.map +1 -0
  113. package/{billing → pricing-governance}/PricingGovernanceConsole.js +1 -1
  114. package/pricing-governance/PricingGovernanceConsole.js.map +1 -0
  115. package/pricing-governance/PricingGovernancePanel.d.ts.map +1 -0
  116. package/pricing-governance/PricingGovernancePanel.js.map +1 -0
  117. package/pricing-governance/RetireConfirm.d.ts.map +1 -0
  118. package/{billing → pricing-governance}/RetireConfirm.js +1 -1
  119. package/pricing-governance/RetireConfirm.js.map +1 -0
  120. package/pricing-governance/governance-primitives.d.ts.map +1 -0
  121. package/pricing-governance/governance-primitives.js.map +1 -0
  122. package/pricing-governance/index.d.ts +19 -0
  123. package/pricing-governance/index.d.ts.map +1 -0
  124. package/pricing-governance/index.js +20 -0
  125. package/pricing-governance/index.js.map +1 -0
  126. package/pricing-governance/pricing-format.d.ts.map +1 -0
  127. package/pricing-governance/pricing-format.js.map +1 -0
  128. package/pricing-governance/useDecidePricingOverride.d.ts.map +1 -0
  129. package/pricing-governance/useDecidePricingOverride.js.map +1 -0
  130. package/pricing-governance/useModelGovernanceView.d.ts.map +1 -0
  131. package/pricing-governance/useModelGovernanceView.js.map +1 -0
  132. package/pricing-governance/useModelPricingBaselines.d.ts.map +1 -0
  133. package/pricing-governance/useModelPricingBaselines.js.map +1 -0
  134. package/pricing-governance/usePricingGovernance.d.ts.map +1 -0
  135. package/pricing-governance/usePricingGovernance.js.map +1 -0
  136. package/pricing-governance/useRetireModelPricingBaseline.d.ts.map +1 -0
  137. package/pricing-governance/useRetireModelPricingBaseline.js.map +1 -0
  138. package/pricing-governance/useUpsertModelPricingBaseline.d.ts.map +1 -0
  139. package/pricing-governance/useUpsertModelPricingBaseline.js.map +1 -0
  140. package/resource-creation/CreationPicker.d.ts.map +1 -1
  141. package/resource-creation/CreationPicker.js +3 -3
  142. package/resource-creation/CreationPicker.js.map +1 -1
  143. package/resource-creation/WizardNav.d.ts.map +1 -1
  144. package/resource-creation/WizardNav.js +1 -1
  145. package/resource-creation/WizardNav.js.map +1 -1
  146. package/resource-detail/Section.d.ts +8 -1
  147. package/resource-detail/Section.d.ts.map +1 -1
  148. package/resource-detail/Section.js +2 -2
  149. package/resource-detail/Section.js.map +1 -1
  150. package/resource-workbench/components/ResourceWorkbench.d.ts +9 -1
  151. package/resource-workbench/components/ResourceWorkbench.d.ts.map +1 -1
  152. package/resource-workbench/components/ResourceWorkbench.js +2 -1
  153. package/resource-workbench/components/ResourceWorkbench.js.map +1 -1
  154. package/resource-workbench/hooks/useResourceCollection.d.ts +9 -0
  155. package/resource-workbench/hooks/useResourceCollection.d.ts.map +1 -1
  156. package/resource-workbench/hooks/useResourceCollection.js +2 -2
  157. package/resource-workbench/hooks/useResourceCollection.js.map +1 -1
  158. package/search/useResourceCount.d.ts +7 -0
  159. package/search/useResourceCount.d.ts.map +1 -1
  160. package/search/useResourceCount.js +2 -1
  161. package/search/useResourceCount.js.map +1 -1
  162. package/session/NewSessionViewer.d.ts.map +1 -1
  163. package/session/NewSessionViewer.js +17 -3
  164. package/session/NewSessionViewer.js.map +1 -1
  165. package/session/SessionViewer.d.ts +2 -1
  166. package/session/SessionViewer.d.ts.map +1 -1
  167. package/session/SessionViewer.js +19 -11
  168. package/session/SessionViewer.js.map +1 -1
  169. package/session/SessionViewerLayout.d.ts +90 -0
  170. package/session/SessionViewerLayout.d.ts.map +1 -0
  171. package/session/SessionViewerLayout.js +32 -0
  172. package/session/SessionViewerLayout.js.map +1 -0
  173. package/session/index.d.ts +4 -0
  174. package/session/index.d.ts.map +1 -1
  175. package/session/index.js +10 -0
  176. package/session/index.js.map +1 -1
  177. package/session/useCreateSession.d.ts +28 -0
  178. package/session/useCreateSession.d.ts.map +1 -1
  179. package/session/useCreateSession.js +2 -1
  180. package/session/useCreateSession.js.map +1 -1
  181. package/session/useNewSessionFlow.d.ts +30 -0
  182. package/session/useNewSessionFlow.d.ts.map +1 -1
  183. package/session/useNewSessionFlow.js +7 -1
  184. package/session/useNewSessionFlow.js.map +1 -1
  185. package/session/useSessionRailViews.d.ts +2 -2
  186. package/session/useUpdateSession.d.ts +29 -10
  187. package/session/useUpdateSession.d.ts.map +1 -1
  188. package/session/useUpdateSession.js +29 -10
  189. package/session/useUpdateSession.js.map +1 -1
  190. package/skill/useSkillCount.d.ts +2 -0
  191. package/skill/useSkillCount.d.ts.map +1 -1
  192. package/skill/useSkillCount.js.map +1 -1
  193. package/src/agent/useAgentCount.ts +2 -0
  194. package/src/api-key/CreateApiKeyForm.tsx +8 -1
  195. package/src/api-key/__tests__/CreateApiKeyForm.test.tsx +58 -0
  196. package/src/billing/index.ts +5 -37
  197. package/src/cursor-accounts/CursorAccountEditor.tsx +61 -13
  198. package/src/cursor-accounts/CursorAccountsConsole.tsx +44 -400
  199. package/src/cursor-accounts/MemberCoverageTable.tsx +439 -0
  200. package/src/cursor-accounts/MemberKeysPanel.tsx +278 -0
  201. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +306 -10
  202. package/src/cursor-accounts/__tests__/cursor-account-coverage.test.ts +73 -0
  203. package/src/cursor-accounts/badges.tsx +26 -0
  204. package/src/cursor-accounts/cursor-account-coverage.ts +71 -0
  205. package/src/cursor-accounts/cursor-account-format.ts +17 -1
  206. package/src/datastore/CollectionRecordsBrowser.tsx +29 -3
  207. package/src/datastore/RecordFilterBuilder.tsx +12 -1
  208. package/src/datastore/__tests__/CollectionRecordsBrowser.test.tsx +38 -0
  209. package/src/datastore/__tests__/RecordFilterBuilder.test.tsx +14 -0
  210. package/src/datastore/__tests__/recordFilter.test.ts +13 -0
  211. package/src/datastore/recordFilter.ts +15 -1
  212. package/src/datastore/useDatastoreCount.ts +2 -0
  213. package/src/execution/ExecutionProgress.tsx +14 -4
  214. package/src/execution/MessageThread.tsx +10 -2
  215. package/src/execution/__tests__/ExecutionProgress.test.tsx +67 -0
  216. package/src/execution/__tests__/MessageThread.test.tsx +44 -0
  217. package/src/execution/__tests__/useCreateAgentExecution.test.tsx +86 -0
  218. package/src/execution/useCreateAgentExecution.ts +41 -6
  219. package/src/index.ts +43 -24
  220. package/src/{billing → internal}/form-primitives.tsx +4 -32
  221. package/src/manifest/ApplyManifestDialog.tsx +40 -16
  222. package/src/manifest/__tests__/ApplyManifestDialog.test.tsx +147 -0
  223. package/src/manifest/__tests__/useApplyManifest.test.tsx +6 -6
  224. package/src/manifest/useApplyManifest.ts +12 -8
  225. package/src/mcp-server/McpServerDetailView.tsx +52 -4
  226. package/src/mcp-server/__tests__/McpServerDetailView.test.tsx +345 -0
  227. package/src/mcp-server/index.ts +13 -0
  228. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +4 -0
  229. package/src/mcp-server/steps/IdentityTransportStep.tsx +9 -1
  230. package/src/mcp-server/steps/ReviewStep.tsx +18 -1
  231. package/src/mcp-server/useMcpServerCount.ts +2 -0
  232. package/src/{billing → pricing-governance}/BaselineEditor.tsx +36 -3
  233. package/src/{billing → pricing-governance}/PricingGovernanceConsole.tsx +1 -1
  234. package/src/{billing → pricing-governance}/RetireConfirm.tsx +1 -1
  235. package/src/pricing-governance/index.ts +50 -0
  236. package/src/resource-creation/CreationPicker.tsx +7 -0
  237. package/src/resource-creation/WizardNav.tsx +1 -0
  238. package/src/resource-detail/Section.tsx +9 -1
  239. package/src/resource-workbench/components/ResourceWorkbench.tsx +13 -0
  240. package/src/resource-workbench/hooks/useResourceCollection.ts +11 -1
  241. package/src/search/useResourceCount.ts +9 -1
  242. package/src/session/NewSessionViewer.tsx +48 -61
  243. package/src/session/SessionViewer.tsx +71 -86
  244. package/src/session/SessionViewerLayout.tsx +131 -0
  245. package/src/session/__tests__/SessionViewerLayout.test.tsx +140 -0
  246. package/src/session/__tests__/useCreateSession.test.tsx +94 -0
  247. package/src/session/__tests__/useNewSessionFlow.test.tsx +33 -0
  248. package/src/session/index.ts +14 -0
  249. package/src/session/useCreateSession.ts +30 -0
  250. package/src/session/useNewSessionFlow.ts +45 -1
  251. package/src/session/useSessionRailViews.tsx +2 -2
  252. package/src/session/useUpdateSession.ts +29 -10
  253. package/src/skill/useSkillCount.ts +2 -0
  254. package/src/test/__tests__/samples.test.ts +159 -2
  255. package/src/test/index.ts +1 -1
  256. package/src/test/samples.ts +109 -14
  257. package/src/workflow/useWorkflowCount.ts +2 -0
  258. package/styles.css +1 -1
  259. package/test/index.d.ts +1 -1
  260. package/test/index.d.ts.map +1 -1
  261. package/test/index.js +1 -1
  262. package/test/index.js.map +1 -1
  263. package/test/samples.d.ts +79 -7
  264. package/test/samples.d.ts.map +1 -1
  265. package/test/samples.js +101 -14
  266. package/test/samples.js.map +1 -1
  267. package/workflow/useWorkflowCount.d.ts +2 -0
  268. package/workflow/useWorkflowCount.d.ts.map +1 -1
  269. package/workflow/useWorkflowCount.js.map +1 -1
  270. package/billing/BaselineEditor.d.ts.map +0 -1
  271. package/billing/BaselineEditor.js.map +0 -1
  272. package/billing/ModelCatalogPanel.d.ts.map +0 -1
  273. package/billing/ModelCatalogPanel.js.map +0 -1
  274. package/billing/ModelGovernanceDetail.d.ts.map +0 -1
  275. package/billing/ModelGovernanceDetail.js.map +0 -1
  276. package/billing/OperatorAccessNotice.d.ts.map +0 -1
  277. package/billing/OperatorAccessNotice.js.map +0 -1
  278. package/billing/PricingGovernanceConsole.d.ts.map +0 -1
  279. package/billing/PricingGovernanceConsole.js.map +0 -1
  280. package/billing/PricingGovernancePanel.d.ts.map +0 -1
  281. package/billing/PricingGovernancePanel.js.map +0 -1
  282. package/billing/RetireConfirm.d.ts.map +0 -1
  283. package/billing/RetireConfirm.js.map +0 -1
  284. package/billing/form-primitives.d.ts +0 -18
  285. package/billing/form-primitives.d.ts.map +0 -1
  286. package/billing/form-primitives.js.map +0 -1
  287. package/billing/governance-primitives.d.ts.map +0 -1
  288. package/billing/governance-primitives.js.map +0 -1
  289. package/billing/pricing-format.d.ts.map +0 -1
  290. package/billing/pricing-format.js.map +0 -1
  291. package/billing/useDecidePricingOverride.d.ts.map +0 -1
  292. package/billing/useDecidePricingOverride.js.map +0 -1
  293. package/billing/useModelGovernanceView.d.ts.map +0 -1
  294. package/billing/useModelGovernanceView.js.map +0 -1
  295. package/billing/useModelPricingBaselines.d.ts.map +0 -1
  296. package/billing/useModelPricingBaselines.js.map +0 -1
  297. package/billing/usePricingGovernance.d.ts.map +0 -1
  298. package/billing/usePricingGovernance.js.map +0 -1
  299. package/billing/useRetireModelPricingBaseline.d.ts.map +0 -1
  300. package/billing/useRetireModelPricingBaseline.js.map +0 -1
  301. package/billing/useUpsertModelPricingBaseline.d.ts.map +0 -1
  302. package/billing/useUpsertModelPricingBaseline.js.map +0 -1
  303. /package/{billing → pricing-governance}/BaselineEditor.d.ts +0 -0
  304. /package/{billing → pricing-governance}/ModelCatalogPanel.d.ts +0 -0
  305. /package/{billing → pricing-governance}/ModelCatalogPanel.js +0 -0
  306. /package/{billing → pricing-governance}/ModelGovernanceDetail.d.ts +0 -0
  307. /package/{billing → pricing-governance}/ModelGovernanceDetail.js +0 -0
  308. /package/{billing → pricing-governance}/OperatorAccessNotice.d.ts +0 -0
  309. /package/{billing → pricing-governance}/OperatorAccessNotice.js +0 -0
  310. /package/{billing → pricing-governance}/PricingGovernanceConsole.d.ts +0 -0
  311. /package/{billing → pricing-governance}/PricingGovernancePanel.d.ts +0 -0
  312. /package/{billing → pricing-governance}/PricingGovernancePanel.js +0 -0
  313. /package/{billing → pricing-governance}/RetireConfirm.d.ts +0 -0
  314. /package/{billing → pricing-governance}/governance-primitives.d.ts +0 -0
  315. /package/{billing → pricing-governance}/governance-primitives.js +0 -0
  316. /package/{billing → pricing-governance}/pricing-format.d.ts +0 -0
  317. /package/{billing → pricing-governance}/pricing-format.js +0 -0
  318. /package/{billing → pricing-governance}/useDecidePricingOverride.d.ts +0 -0
  319. /package/{billing → pricing-governance}/useDecidePricingOverride.js +0 -0
  320. /package/{billing → pricing-governance}/useModelGovernanceView.d.ts +0 -0
  321. /package/{billing → pricing-governance}/useModelGovernanceView.js +0 -0
  322. /package/{billing → pricing-governance}/useModelPricingBaselines.d.ts +0 -0
  323. /package/{billing → pricing-governance}/useModelPricingBaselines.js +0 -0
  324. /package/{billing → pricing-governance}/usePricingGovernance.d.ts +0 -0
  325. /package/{billing → pricing-governance}/usePricingGovernance.js +0 -0
  326. /package/{billing → pricing-governance}/useRetireModelPricingBaseline.d.ts +0 -0
  327. /package/{billing → pricing-governance}/useRetireModelPricingBaseline.js +0 -0
  328. /package/{billing → pricing-governance}/useUpsertModelPricingBaseline.d.ts +0 -0
  329. /package/{billing → pricing-governance}/useUpsertModelPricingBaseline.js +0 -0
  330. /package/src/{billing → pricing-governance}/ModelCatalogPanel.tsx +0 -0
  331. /package/src/{billing → pricing-governance}/ModelGovernanceDetail.tsx +0 -0
  332. /package/src/{billing → pricing-governance}/OperatorAccessNotice.tsx +0 -0
  333. /package/src/{billing → pricing-governance}/PricingGovernancePanel.tsx +0 -0
  334. /package/src/{billing → pricing-governance}/__tests__/ModelCatalogPanel.test.tsx +0 -0
  335. /package/src/{billing → pricing-governance}/__tests__/PricingGovernanceConsole.test.tsx +0 -0
  336. /package/src/{billing → pricing-governance}/__tests__/useModelGovernanceView.test.tsx +0 -0
  337. /package/src/{billing → pricing-governance}/governance-primitives.tsx +0 -0
  338. /package/src/{billing → pricing-governance}/pricing-format.ts +0 -0
  339. /package/src/{billing → pricing-governance}/useDecidePricingOverride.ts +0 -0
  340. /package/src/{billing → pricing-governance}/useModelGovernanceView.ts +0 -0
  341. /package/src/{billing → pricing-governance}/useModelPricingBaselines.ts +0 -0
  342. /package/src/{billing → pricing-governance}/usePricingGovernance.ts +0 -0
  343. /package/src/{billing → pricing-governance}/useRetireModelPricingBaseline.ts +0 -0
  344. /package/src/{billing → pricing-governance}/useUpsertModelPricingBaseline.ts +0 -0
@@ -11,7 +11,7 @@ import { RetireConfirm } from "./RetireConfirm.js";
11
11
  import { ModelGovernanceDetail } from "./ModelGovernanceDetail.js";
12
12
  import { OperatorAccessNotice } from "./OperatorAccessNotice.js";
13
13
  import { GovernanceBadge, PendingOverrideCard, RateCell } from "./governance-primitives.js";
14
- import { INPUT_CLASSES } from "./form-primitives.js";
14
+ import { INPUT_CLASSES } from "../internal/form-primitives.js";
15
15
  import { ZERO } from "./pricing-format.js";
16
16
  import { useDecidePricingOverride } from "./useDecidePricingOverride.js";
17
17
  import { useRetireModelPricingBaseline } from "./useRetireModelPricingBaseline.js";
@@ -4,7 +4,7 @@ import { useState } from "react";
4
4
  import { getUserMessage } from "@stigmer/sdk";
5
5
  import type { ModelPricingBaseline } from "@stigmer/protos/ai/stigmer/billing/v1/model_pricing_baseline_pb";
6
6
  import { Button } from "../button/index.js";
7
- import { INPUT_CLASSES } from "./form-primitives.js";
7
+ import { INPUT_CLASSES } from "../internal/form-primitives.js";
8
8
 
9
9
  // ---------------------------------------------------------------------------
10
10
  // RetireConfirm — typed confirmation for retiring a catalog entry (a
@@ -0,0 +1,50 @@
1
+ // Pricing governance — the platform-operator surface for the model
2
+ // registry baseline and the reconciliation-driven pricing feedback loop.
3
+ // Every export here is gated on `can_manage_model_pricing` on
4
+ // `platform:stigmer`; nothing in this module is customer-facing (customer
5
+ // billing lives in ../billing). The module boundary is deliberate: the
6
+ // docs generator excludes operator-only domains wholesale, so operator
7
+ // exports must never be mixed into customer modules.
8
+
9
+ // Data hooks
10
+ export { usePricingGovernance } from "./usePricingGovernance.js";
11
+ export type { UsePricingGovernanceReturn } from "./usePricingGovernance.js";
12
+ export { useModelPricingBaselines } from "./useModelPricingBaselines.js";
13
+ export type {
14
+ UseModelPricingBaselinesOptions,
15
+ UseModelPricingBaselinesReturn,
16
+ } from "./useModelPricingBaselines.js";
17
+ export { useModelGovernanceView } from "./useModelGovernanceView.js";
18
+ export type {
19
+ GovernanceFlow,
20
+ ModelGovernanceRow,
21
+ UseModelGovernanceViewReturn,
22
+ } from "./useModelGovernanceView.js";
23
+
24
+ // Behavior hooks
25
+ export { useDecidePricingOverride } from "./useDecidePricingOverride.js";
26
+ export type {
27
+ DecidePricingOverrideInput,
28
+ UseDecidePricingOverrideReturn,
29
+ } from "./useDecidePricingOverride.js";
30
+ export { useUpsertModelPricingBaseline } from "./useUpsertModelPricingBaseline.js";
31
+ export type {
32
+ UpsertModelPricingBaselineInput,
33
+ UseUpsertModelPricingBaselineReturn,
34
+ } from "./useUpsertModelPricingBaseline.js";
35
+ export { useRetireModelPricingBaseline } from "./useRetireModelPricingBaseline.js";
36
+ export type {
37
+ RetireModelPricingBaselineInput,
38
+ UseRetireModelPricingBaselineReturn,
39
+ } from "./useRetireModelPricingBaseline.js";
40
+
41
+ // Styled components
42
+ export { PricingGovernancePanel } from "./PricingGovernancePanel.js";
43
+ export type { PricingGovernancePanelProps } from "./PricingGovernancePanel.js";
44
+ export { ModelCatalogPanel } from "./ModelCatalogPanel.js";
45
+ export type { ModelCatalogPanelProps } from "./ModelCatalogPanel.js";
46
+ export { PricingGovernanceConsole } from "./PricingGovernanceConsole.js";
47
+ export type {
48
+ PricingGovernanceConsoleProps,
49
+ PricingGovernanceTab,
50
+ } from "./PricingGovernanceConsole.js";
@@ -140,6 +140,7 @@ export function CreationPicker<TData>({
140
140
  description={`Create a blank ${resourceLabel} and configure it step by step.`}
141
141
  icon={<BlankPageIcon />}
142
142
  onClick={() => onSelect({ kind: "scratch" })}
143
+ cursorTarget="creation-path-scratch"
143
144
  />
144
145
 
145
146
  {/* Browse templates */}
@@ -150,6 +151,7 @@ export function CreationPicker<TData>({
150
151
  icon={<GridIcon />}
151
152
  onClick={() => setView("gallery")}
152
153
  badge={`${templates.length} available`}
154
+ cursorTarget="creation-path-template"
153
155
  />
154
156
  )}
155
157
 
@@ -159,6 +161,7 @@ export function CreationPicker<TData>({
159
161
  description="Upload a YAML or JSON configuration file."
160
162
  icon={<UploadIcon />}
161
163
  onClick={() => onSelect({ kind: "import" })}
164
+ cursorTarget="creation-path-import"
162
165
  />
163
166
  </div>
164
167
  </div>
@@ -175,17 +178,21 @@ function OptionCard({
175
178
  icon,
176
179
  onClick,
177
180
  badge,
181
+ cursorTarget,
178
182
  }: {
179
183
  readonly title: string;
180
184
  readonly description: string;
181
185
  readonly icon: React.ReactNode;
182
186
  readonly onClick: () => void;
183
187
  readonly badge?: string;
188
+ /** `data-cursor-target` hook for guided tours and demo playbacks. */
189
+ readonly cursorTarget?: string;
184
190
  }) {
185
191
  return (
186
192
  <button
187
193
  type="button"
188
194
  onClick={onClick}
195
+ data-cursor-target={cursorTarget}
189
196
  className={cn(
190
197
  "group flex flex-col items-center gap-3 rounded-lg border border-border bg-card p-6 text-center",
191
198
  "transition-colors hover:border-primary hover:bg-accent",
@@ -90,6 +90,7 @@ export function WizardNav({
90
90
  type="button"
91
91
  onClick={onNext}
92
92
  disabled={nextDisabled || isSubmitting}
93
+ data-cursor-target="wizard-next"
93
94
  className={cn(
94
95
  "inline-flex items-center gap-1.5 rounded-md bg-primary px-4 py-1.5 text-sm font-medium text-primary-foreground transition-colors",
95
96
  "hover:bg-primary-hover",
@@ -9,6 +9,13 @@ export interface SectionProps {
9
9
  /** Arbitrary action elements rendered in the header row (e.g. expand, share). */
10
10
  readonly headerActions?: ReactNode;
11
11
  readonly onEdit?: () => void;
12
+ /**
13
+ * Stable id emitted as `data-scroll-target` on the section element, so
14
+ * guided tours and demos can scroll the section into view by name (the
15
+ * same convention as `data-cursor-target`). Purely an annotation — no
16
+ * behavior attaches to it here.
17
+ */
18
+ readonly scrollTarget?: string;
12
19
  readonly children: ReactNode;
13
20
  readonly className?: string;
14
21
  }
@@ -26,11 +33,12 @@ export function Section({
26
33
  count,
27
34
  headerActions,
28
35
  onEdit,
36
+ scrollTarget,
29
37
  children,
30
38
  className,
31
39
  }: SectionProps) {
32
40
  return (
33
- <section className={className}>
41
+ <section className={className} data-scroll-target={scrollTarget}>
34
42
  <div className="mb-2 flex items-center gap-2">
35
43
  <h3 className="text-xs font-medium uppercase tracking-wider text-muted-foreground">
36
44
  {title}
@@ -112,6 +112,17 @@ export interface ResourceWorkbenchProps<TData = SearchResult> {
112
112
  /** Extracts a unique ID from an item (for selection tracking). */
113
113
  readonly getItemId?: (item: TData) => string;
114
114
 
115
+ // --- Refresh -----------------------------------------------------------
116
+
117
+ /**
118
+ * Opaque token that forces a background refetch of the list whenever
119
+ * its value changes — the current view stays rendered with a refetch
120
+ * shimmer (no remount flash), and pagination and sort are preserved.
121
+ * Bump it after an out-of-band mutation (applying a manifest, deleting
122
+ * a row) so the change appears without a reload.
123
+ */
124
+ readonly refetchToken?: unknown;
125
+
115
126
  // --- Empty & error states ----------------------------------------------
116
127
 
117
128
  /** Icon for the empty state. */
@@ -210,6 +221,7 @@ export function ResourceWorkbench<TData = SearchResult>({
210
221
  onStateChange,
211
222
  enableSelection = false,
212
223
  getItemId = defaultGetId as (item: TData) => string,
224
+ refetchToken,
213
225
  emptyIcon,
214
226
  emptyTitle = "No resources found",
215
227
  emptyDescription = "Try adjusting your search or filters.",
@@ -255,6 +267,7 @@ export function ResourceWorkbench<TData = SearchResult>({
255
267
  onSortChange: filtersHook.setSort,
256
268
  columns: columns as WorkbenchColumnDef<TData>[],
257
269
  enableSelection,
270
+ refetchToken,
258
271
  });
259
272
 
260
273
  // --- Selection ---------------------------------------------------------
@@ -57,6 +57,15 @@ export interface UseResourceCollectionOptions<TData = SearchResult> {
57
57
  readonly columns?: readonly WorkbenchColumnDef<TData>[];
58
58
  /** Enable row selection state tracking. @default false */
59
59
  readonly enableSelection?: boolean;
60
+ /**
61
+ * Opaque token that forces a background refetch whenever its value
62
+ * changes. Use it to re-read the list after an out-of-band mutation
63
+ * (e.g. applying a manifest or deleting a row) without remounting:
64
+ * bump a counter and pass it here. The current page stays rendered
65
+ * with an `isRefetching` shimmer — no full-list flash. A change to
66
+ * this token alone never resets pagination or sort.
67
+ */
68
+ readonly refetchToken?: unknown;
60
69
  }
61
70
 
62
71
  // ---------------------------------------------------------------------------
@@ -148,6 +157,7 @@ export function useResourceCollection<TData = SearchResult>(
148
157
  onSortChange,
149
158
  columns = [],
150
159
  enableSelection = false,
160
+ refetchToken,
151
161
  } = options;
152
162
 
153
163
  // --- Data fetching via useFetch -----------------------------------------
@@ -169,7 +179,7 @@ export function useResourceCollection<TData = SearchResult>(
169
179
  };
170
180
  }
171
181
  : null,
172
- [listFn, org, query, scope, page, pageSize],
182
+ [listFn, org, query, scope, page, pageSize, refetchToken],
173
183
  INITIAL_DATA,
174
184
  );
175
185
 
@@ -16,6 +16,13 @@ export interface UseResourceCountOptions {
16
16
  * @default "org"
17
17
  */
18
18
  readonly scope?: ResourceListScope;
19
+ /**
20
+ * Opaque token that forces a recount whenever its value changes. Use
21
+ * it to refresh the count after an out-of-band mutation (e.g. applying
22
+ * a manifest) without remounting. Mirrors the `refetchToken` on
23
+ * {@link useResourceCollection}.
24
+ */
25
+ readonly refetchToken?: unknown;
19
26
  }
20
27
 
21
28
  export interface UseResourceCountReturn {
@@ -52,6 +59,7 @@ export function useResourceCount(
52
59
  ): UseResourceCountReturn {
53
60
  const query = options?.query;
54
61
  const scope = options?.scope ?? "org";
62
+ const refetchToken = options?.refetchToken;
55
63
 
56
64
  const { data: count, isLoading, isRefetching, error, refetch } = useFetch<number | undefined>(
57
65
  org
@@ -66,7 +74,7 @@ export function useResourceCount(
66
74
  return result.totalCount;
67
75
  }
68
76
  : null,
69
- [listFn, org, query, scope],
77
+ [listFn, org, query, scope, refetchToken],
70
78
  undefined,
71
79
  );
72
80
 
@@ -1,7 +1,6 @@
1
1
  "use client";
2
2
 
3
3
  import { useCallback, useEffect, useMemo, useState, type ReactNode } from "react";
4
- import { cn } from "@stigmer/theme";
5
4
  import type { ResourceRef } from "@stigmer/sdk";
6
5
  import type { UseGitHubConnectionReturn } from "../github/useGitHubConnection.js";
7
6
  import type { WorkspaceFileLister } from "../workspace/WorkspaceFileLister.js";
@@ -10,7 +9,7 @@ import type { WorkspaceContentSearcher } from "../workspace/WorkspaceContentSear
10
9
  import type { InteractionModeOption } from "../composer/index.js";
11
10
  import { SessionComposer } from "../composer/index.js";
12
11
  import type { HarnessOption } from "../models/harness.js";
13
- import { ResizableSplit } from "../internal/ResizableSplit.js";
12
+ import { SessionViewerLayout } from "./SessionViewerLayout.js";
14
13
  import { useWorkspaceEditors } from "../internal/store/index.js";
15
14
  import { WorkspaceSurface } from "../workspace/WorkspaceSurface.js";
16
15
  import type { SetupTabProps } from "./facets/SetupTab.js";
@@ -383,68 +382,56 @@ export function NewSessionViewer({
383
382
  );
384
383
 
385
384
  return (
386
- <div className={cn("relative flex h-full w-full flex-col", className)}>
387
- {/* Persistent chrome: the chip is always mounted, matching SessionViewer
388
- (DD-016) rather than the launcher's earlier progressively-revealed
389
- inspector. A toggle that appears/disappears with attached context
390
- reads as instability and, worse, unmounts the open panel's only
391
- collapse control when the last context item is removed. Always-on is
392
- the predictable, discoverable shape; opening homes on the Config
393
- facet, which carries useful defaults (harness/model) pre-session.
394
- Guests are the exception: the panel exposes configuration a visitor
395
- has no business with, so the chip (the panel's only toggle) is
396
- simply absent and the panel can never open. */}
397
- {!isGuest && (
398
- <div className="absolute top-2 right-6 z-10">
385
+ // The launcher renders the same SessionViewerLayout as SessionViewer
386
+ // (DD-016) the shared frame is what makes "the two viewers behave
387
+ // identically" structural rather than hand-synchronized.
388
+ <SessionViewerLayout
389
+ className={className}
390
+ resizeAriaLabel="Resize composer panel"
391
+ splitStorageKey="stgm-new-session-chat-width"
392
+ // Persistent chrome: the chip is always mounted, matching SessionViewer
393
+ // (DD-016) rather than the launcher's earlier progressively-revealed
394
+ // inspector. A toggle that appears/disappears with attached context
395
+ // reads as instability and, worse, unmounts the open panel's only
396
+ // collapse control when the last context item is removed. Always-on is
397
+ // the predictable, discoverable shape; opening homes on the Config
398
+ // facet, which carries useful defaults (harness/model) pre-session.
399
+ // Guests are the exception: the panel exposes configuration a visitor
400
+ // has no business with, so the chip (the panel's only toggle) is
401
+ // simply absent and the panel can never open.
402
+ chip={
403
+ !isGuest ? (
399
404
  <SessionPanelChip
400
405
  isOpen={panel.isOpen}
401
406
  onToggle={panel.isOpen ? panel.closePanel : panel.openPanel}
402
407
  />
403
- </div>
404
- )}
405
-
406
- {/* Same unified-panel layout as SessionViewer (DD-016): collapsed by
407
- default (composer fills the row); opening makes the composer the
408
- fixed narrow pane and hands the flexible region to the surface.
409
- Collapse goes through the split's `collapsedPane` (CSS, not
410
- conditional structure), so the composer never remounts across an
411
- open/close toggle. */}
412
- <ResizableSplit
413
- resizablePane="primary"
414
- collapsedPane={panel.isOpen ? "none" : "secondary"}
415
- defaultSize={420}
416
- minSize={320}
417
- maxSize={640}
418
- storageKey="stgm-new-session-chat-width"
419
- responsiveCollapse={panel.isOpen ? "primary" : "none"}
420
- ariaLabel="Resize composer panel"
421
- className="min-h-0 flex-1"
422
- primary={composerNode}
423
- secondary={
424
- panel.isOpen ? (
425
- <WorkspaceSurface
426
- entries={flow.workspace.entries}
427
- lister={workspaceFileLister}
428
- reader={workspaceFileReader}
429
- searcher={workspaceContentSearcher}
430
- view={panel.view}
431
- onViewChange={panel.setView}
432
- extraViews={railViews}
433
- onRemoveEntry={flow.workspace.remove}
434
- onAddLocalFolder={canAddLocalFolder ? handleAddLocalFolder : undefined}
435
- editors={editors}
436
- selectedFile={activeFile}
437
- onOpenFile={panel.openFile}
438
- onActivateEditor={panel.activateEditor}
439
- onPinEditor={panel.pinEditor}
440
- onCloseEditor={panel.closeEditor}
441
- onCollapse={panel.closePanel}
442
- reveal={activeReveal}
443
- className="h-full"
444
- />
445
- ) : null
446
- }
447
- />
448
- </div>
408
+ ) : undefined
409
+ }
410
+ conversation={composerNode}
411
+ panel={
412
+ panel.isOpen ? (
413
+ <WorkspaceSurface
414
+ entries={flow.workspace.entries}
415
+ lister={workspaceFileLister}
416
+ reader={workspaceFileReader}
417
+ searcher={workspaceContentSearcher}
418
+ view={panel.view}
419
+ onViewChange={panel.setView}
420
+ extraViews={railViews}
421
+ onRemoveEntry={flow.workspace.remove}
422
+ onAddLocalFolder={canAddLocalFolder ? handleAddLocalFolder : undefined}
423
+ editors={editors}
424
+ selectedFile={activeFile}
425
+ onOpenFile={panel.openFile}
426
+ onActivateEditor={panel.activateEditor}
427
+ onPinEditor={panel.pinEditor}
428
+ onCloseEditor={panel.closeEditor}
429
+ onCollapse={panel.closePanel}
430
+ reveal={activeReveal}
431
+ className="h-full"
432
+ />
433
+ ) : null
434
+ }
435
+ />
449
436
  );
450
437
  }
@@ -19,7 +19,7 @@ import {
19
19
  } from "../workspace/WorkspaceSurface.js";
20
20
  import type { InteractionModeOption, SessionComposerHandle, SessionComposerSubmitContext } from "../composer/index.js";
21
21
  import type { ApplyResourceResult } from "../library/useApplyResource.js";
22
- import { ResizableSplit } from "../internal/ResizableSplit.js";
22
+ import { SessionViewerLayout } from "./SessionViewerLayout.js";
23
23
  import { useWorkspaceEditors, isVirtualEntryId } from "../internal/store/index.js";
24
24
  import { isTerminalPhase } from "../execution/execution-phases.js";
25
25
  import { MessageThread, type MessageThreadSlots } from "../execution/MessageThread.js";
@@ -267,7 +267,8 @@ export interface SessionViewerProps {
267
267
  * to a top-right chip; opening a file (tree, search, or a transcript path)
268
268
  * expands it.
269
269
  *
270
- * Connected via `ResizableSplit` with persisted chat width.
270
+ * Both regions render inside {@link SessionViewerLayout} — the frame shared
271
+ * with {@link NewSessionViewer} — with the chat width persisted per viewer.
271
272
  *
272
273
  * Framework-agnostic — no Next.js, no Tauri, no routing deps. Host
273
274
  * apps inject platform-specific values via props (DD-004/DD-016).
@@ -552,101 +553,85 @@ export function SessionViewer({
552
553
  }
553
554
 
554
555
  return (
555
- <div className={cn("relative flex h-full w-full flex-col", className)}>
556
- {/* Top-right controls: host actions + the panel chip. The chip is the
557
- panel's always-mounted toggle; while collapsed it carries only the
558
- pending-item count. Execution status is never surfaced as header
559
- chrome the thread itself communicates run state. Guests get no
560
- chip: the panel exposes session configuration a visitor has no
561
- business with, so its only toggle is simply absent. */}
562
- <div className="absolute top-2 right-6 z-10 flex items-center gap-2">
563
- {headerActions}
564
- {!isGuest && (
556
+ <SessionViewerLayout
557
+ className={className}
558
+ // Top-right controls: host actions + the panel chip. The chip is the
559
+ // panel's always-mounted toggle; while collapsed it carries only the
560
+ // pending-item count. Execution status is never surfaced as header
561
+ // chrome — the thread itself communicates run state. Guests get no
562
+ // chip: the panel exposes session configuration a visitor has no
563
+ // business with, so its only toggle is simply absent.
564
+ headerActions={headerActions}
565
+ chip={
566
+ !isGuest ? (
565
567
  <SessionPanelChip
566
568
  isOpen={panel.isOpen}
567
569
  onToggle={panel.isOpen ? panel.closePanel : panel.openPanel}
568
570
  badgeCount={writeBackCount + artifactCount}
569
571
  />
570
- )}
571
- </div>
572
-
573
- {/* One layout, collapsed by default: chat fills the row until the panel
574
- opens, then becomes the fixed narrow pane on the left while the
575
- panel takes the flexible region. Collapsing goes through the
576
- split's `collapsedPane` (CSS, not conditional structure), so the
577
- conversation is always the same first child and an open/close never
578
- remounts it (invariant 1). */}
579
- <ResizableSplit
580
- resizablePane="primary"
581
- collapsedPane={panel.isOpen ? "none" : "secondary"}
582
- defaultSize={420}
583
- minSize={320}
584
- maxSize={640}
585
- storageKey="stgm-session-chat-width"
586
- responsiveCollapse={panel.isOpen ? "primary" : "none"}
587
- ariaLabel="Resize chat panel"
588
- className="min-h-0 flex-1"
589
- primary={
590
- <ConversationColumn
572
+ ) : undefined
573
+ }
574
+ splitStorageKey="stgm-session-chat-width"
575
+ conversation={
576
+ <ConversationColumn
577
+ flow={flow}
578
+ modelId={modelId}
579
+ setModelId={setModelId}
580
+ interactionMode={interactionMode}
581
+ setInteractionMode={setInteractionMode}
582
+ composerRef={composerRef}
583
+ org={org}
584
+ gitHubConnection={gitHubConnection}
585
+ enableGitHub={enableGitHub}
586
+ enableLocal={enableLocal}
587
+ onBrowseLocalFolder={onBrowseLocalFolder}
588
+ onBuildFromPlan={handleBuildFromPlan}
589
+ onOpenPlan={handleOpenPlan}
590
+ isBuildingFromPlan={isBuildingFromPlan}
591
+ planAttachFailed={planAttachFailed}
592
+ onDismissPlanAttachFailed={() => setPlanAttachFailed(false)}
593
+ onFilePathClick={handleTranscriptFilePathClick}
594
+ isCurated={isCurated}
595
+ isGuest={isGuest}
596
+ isObserver={isObserver}
597
+ threadSlots={threadSlots}
598
+ />
599
+ }
600
+ panel={
601
+ panel.isOpen && !isGuest ? (
602
+ <SessionPanelRegion
591
603
  flow={flow}
592
- modelId={modelId}
593
- setModelId={setModelId}
594
- interactionMode={interactionMode}
595
- setInteractionMode={setInteractionMode}
596
- composerRef={composerRef}
597
604
  org={org}
598
- gitHubConnection={gitHubConnection}
599
- enableGitHub={enableGitHub}
605
+ panel={panel}
606
+ // Observers cannot manage access (no can_grant_access /
607
+ // can_view_access on a channel session) — the control is
608
+ // withheld rather than left to fail server-side.
609
+ accessSlot={isObserver ? undefined : accessSlot}
610
+ onApplied={onApplied}
611
+ // Implementing a plan submits an execution — a write an
612
+ // observer cannot make (can_create_execution_in is
613
+ // owner/viewer-only).
614
+ onImplementPlan={isObserver ? undefined : handleBuildFromPlan}
615
+ implementPlanDisabled={
616
+ isObserver || !conv.canSendFollowUp || isBuildingFromPlan
617
+ }
618
+ sessionPlan={sessionPlan}
619
+ streamingPlan={streamingPlan}
620
+ planDraft={planDraft}
621
+ openPlanExecutionId={openPlanExecutionId}
622
+ onOpenPlan={handleOpenPlan}
623
+ onOpenArtifact={handleOpenArtifact}
624
+ onActivateArtifact={handleActivateArtifact}
600
625
  enableLocal={enableLocal}
601
626
  onBrowseLocalFolder={onBrowseLocalFolder}
602
- onBuildFromPlan={handleBuildFromPlan}
603
- onOpenPlan={handleOpenPlan}
604
- isBuildingFromPlan={isBuildingFromPlan}
605
- planAttachFailed={planAttachFailed}
606
- onDismissPlanAttachFailed={() => setPlanAttachFailed(false)}
607
- onFilePathClick={handleTranscriptFilePathClick}
627
+ workspaceFileLister={workspaceFileLister}
628
+ workspaceFileReader={workspaceFileReader}
629
+ workspaceContentSearcher={workspaceContentSearcher}
608
630
  isCurated={isCurated}
609
- isGuest={isGuest}
610
- isObserver={isObserver}
611
- threadSlots={threadSlots}
612
631
  />
613
- }
614
- secondary={
615
- panel.isOpen && !isGuest ? (
616
- <SessionPanelRegion
617
- flow={flow}
618
- org={org}
619
- panel={panel}
620
- // Observers cannot manage access (no can_grant_access /
621
- // can_view_access on a channel session) — the control is
622
- // withheld rather than left to fail server-side.
623
- accessSlot={isObserver ? undefined : accessSlot}
624
- onApplied={onApplied}
625
- // Implementing a plan submits an execution — a write an
626
- // observer cannot make (can_create_execution_in is
627
- // owner/viewer-only).
628
- onImplementPlan={isObserver ? undefined : handleBuildFromPlan}
629
- implementPlanDisabled={
630
- isObserver || !conv.canSendFollowUp || isBuildingFromPlan
631
- }
632
- sessionPlan={sessionPlan}
633
- streamingPlan={streamingPlan}
634
- planDraft={planDraft}
635
- openPlanExecutionId={openPlanExecutionId}
636
- onOpenPlan={handleOpenPlan}
637
- onOpenArtifact={handleOpenArtifact}
638
- onActivateArtifact={handleActivateArtifact}
639
- enableLocal={enableLocal}
640
- onBrowseLocalFolder={onBrowseLocalFolder}
641
- workspaceFileLister={workspaceFileLister}
642
- workspaceFileReader={workspaceFileReader}
643
- workspaceContentSearcher={workspaceContentSearcher}
644
- isCurated={isCurated}
645
- />
646
- ) : null
647
- }
648
- />
649
- </div>
632
+ ) : null
633
+ }
634
+ />
650
635
  );
651
636
  }
652
637