@flanksource/clicky-ui 0.3.41 → 0.3.43

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 (487) hide show
  1. package/dist/ai.cjs +4 -0
  2. package/dist/ai.cjs.map +1 -1
  3. package/dist/ai.js +4 -0
  4. package/dist/ai.js.map +1 -1
  5. package/dist/comments/CommentCard.cjs +3 -1
  6. package/dist/comments/CommentCard.cjs.map +1 -1
  7. package/dist/comments/CommentCard.d.ts.map +1 -1
  8. package/dist/comments/CommentCard.js +4 -2
  9. package/dist/comments/CommentCard.js.map +1 -1
  10. package/dist/comments/CommentCardParts.cjs +16 -0
  11. package/dist/comments/CommentCardParts.cjs.map +1 -1
  12. package/dist/comments/CommentCardParts.d.ts +4 -1
  13. package/dist/comments/CommentCardParts.d.ts.map +1 -1
  14. package/dist/comments/CommentCardParts.js +16 -0
  15. package/dist/comments/CommentCardParts.js.map +1 -1
  16. package/dist/comments/comment-types.cjs.map +1 -1
  17. package/dist/comments/comment-types.d.ts +4 -0
  18. package/dist/comments/comment-types.d.ts.map +1 -1
  19. package/dist/comments/comment-types.js.map +1 -1
  20. package/dist/components/Combobox.cjs +54 -8
  21. package/dist/components/Combobox.cjs.map +1 -1
  22. package/dist/components/Combobox.d.ts.map +1 -1
  23. package/dist/components/Combobox.js +56 -10
  24. package/dist/components/Combobox.js.map +1 -1
  25. package/dist/components/ComboboxMenu.cjs +139 -113
  26. package/dist/components/ComboboxMenu.cjs.map +1 -1
  27. package/dist/components/ComboboxMenu.d.ts +3 -1
  28. package/dist/components/ComboboxMenu.d.ts.map +1 -1
  29. package/dist/components/ComboboxMenu.js +139 -113
  30. package/dist/components/ComboboxMenu.js.map +1 -1
  31. package/dist/components/ComboboxMenuTrigger.cjs +87 -0
  32. package/dist/components/ComboboxMenuTrigger.cjs.map +1 -0
  33. package/dist/components/ComboboxMenuTrigger.d.ts +23 -0
  34. package/dist/components/ComboboxMenuTrigger.d.ts.map +1 -0
  35. package/dist/components/ComboboxMenuTrigger.js +87 -0
  36. package/dist/components/ComboboxMenuTrigger.js.map +1 -0
  37. package/dist/components/JsonSchemaForm.cjs +30 -7
  38. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  39. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  40. package/dist/components/JsonSchemaForm.js +30 -7
  41. package/dist/components/JsonSchemaForm.js.map +1 -1
  42. package/dist/components/SegmentedControl.cjs +20 -3
  43. package/dist/components/SegmentedControl.cjs.map +1 -1
  44. package/dist/components/SegmentedControl.d.ts +11 -0
  45. package/dist/components/SegmentedControl.d.ts.map +1 -1
  46. package/dist/components/SegmentedControl.js +21 -4
  47. package/dist/components/SegmentedControl.js.map +1 -1
  48. package/dist/components/combobox-types.d.ts +8 -0
  49. package/dist/components/combobox-types.d.ts.map +1 -1
  50. package/dist/components/json-schema-form-debug-badge.cjs +108 -0
  51. package/dist/components/json-schema-form-debug-badge.cjs.map +1 -0
  52. package/dist/components/json-schema-form-debug-badge.d.ts +10 -0
  53. package/dist/components/json-schema-form-debug-badge.d.ts.map +1 -0
  54. package/dist/components/json-schema-form-debug-badge.js +108 -0
  55. package/dist/components/json-schema-form-debug-badge.js.map +1 -0
  56. package/dist/components/json-schema-form-debug-glyph-map.cjs +129 -0
  57. package/dist/components/json-schema-form-debug-glyph-map.cjs.map +1 -0
  58. package/dist/components/json-schema-form-debug-glyph-map.d.ts +20 -0
  59. package/dist/components/json-schema-form-debug-glyph-map.d.ts.map +1 -0
  60. package/dist/components/json-schema-form-debug-glyph-map.js +129 -0
  61. package/dist/components/json-schema-form-debug-glyph-map.js.map +1 -0
  62. package/dist/components/json-schema-form-debug-glyph.cjs +13 -0
  63. package/dist/components/json-schema-form-debug-glyph.cjs.map +1 -0
  64. package/dist/components/json-schema-form-debug-glyph.d.ts +6 -0
  65. package/dist/components/json-schema-form-debug-glyph.d.ts.map +1 -0
  66. package/dist/components/json-schema-form-debug-glyph.js +13 -0
  67. package/dist/components/json-schema-form-debug-glyph.js.map +1 -0
  68. package/dist/components/json-schema-form-debug-groups.cjs +56 -0
  69. package/dist/components/json-schema-form-debug-groups.cjs.map +1 -0
  70. package/dist/components/json-schema-form-debug-groups.d.ts +8 -0
  71. package/dist/components/json-schema-form-debug-groups.d.ts.map +1 -0
  72. package/dist/components/json-schema-form-debug-groups.js +56 -0
  73. package/dist/components/json-schema-form-debug-groups.js.map +1 -0
  74. package/dist/components/json-schema-form-debug-keywords.cjs +159 -0
  75. package/dist/components/json-schema-form-debug-keywords.cjs.map +1 -0
  76. package/dist/components/json-schema-form-debug-keywords.d.ts +6 -0
  77. package/dist/components/json-schema-form-debug-keywords.d.ts.map +1 -0
  78. package/dist/components/json-schema-form-debug-keywords.js +159 -0
  79. package/dist/components/json-schema-form-debug-keywords.js.map +1 -0
  80. package/dist/components/json-schema-form-debug-listeners.cjs +102 -0
  81. package/dist/components/json-schema-form-debug-listeners.cjs.map +1 -0
  82. package/dist/components/json-schema-form-debug-listeners.d.ts +6 -0
  83. package/dist/components/json-schema-form-debug-listeners.d.ts.map +1 -0
  84. package/dist/components/json-schema-form-debug-listeners.js +102 -0
  85. package/dist/components/json-schema-form-debug-listeners.js.map +1 -0
  86. package/dist/components/json-schema-form-debug.cjs +31 -0
  87. package/dist/components/json-schema-form-debug.cjs.map +1 -0
  88. package/dist/components/json-schema-form-debug.d.ts +11 -0
  89. package/dist/components/json-schema-form-debug.d.ts.map +1 -0
  90. package/dist/components/json-schema-form-debug.js +31 -0
  91. package/dist/components/json-schema-form-debug.js.map +1 -0
  92. package/dist/components/json-schema-form-enum-choice.cjs +114 -0
  93. package/dist/components/json-schema-form-enum-choice.cjs.map +1 -0
  94. package/dist/components/json-schema-form-enum-choice.d.ts +14 -0
  95. package/dist/components/json-schema-form-enum-choice.d.ts.map +1 -0
  96. package/dist/components/json-schema-form-enum-choice.js +114 -0
  97. package/dist/components/json-schema-form-enum-choice.js.map +1 -0
  98. package/dist/components/json-schema-form-fields.cjs +3 -93
  99. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  100. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  101. package/dist/components/json-schema-form-fields.js +1 -91
  102. package/dist/components/json-schema-form-fields.js.map +1 -1
  103. package/dist/components/json-schema-form-listeners.cjs +7 -1
  104. package/dist/components/json-schema-form-listeners.cjs.map +1 -1
  105. package/dist/components/json-schema-form-listeners.d.ts.map +1 -1
  106. package/dist/components/json-schema-form-listeners.js +7 -1
  107. package/dist/components/json-schema-form-listeners.js.map +1 -1
  108. package/dist/components/json-schema-form-preferences.cjs +1 -0
  109. package/dist/components/json-schema-form-preferences.cjs.map +1 -1
  110. package/dist/components/json-schema-form-preferences.d.ts +1 -0
  111. package/dist/components/json-schema-form-preferences.d.ts.map +1 -1
  112. package/dist/components/json-schema-form-preferences.js +1 -0
  113. package/dist/components/json-schema-form-preferences.js.map +1 -1
  114. package/dist/components/json-schema-form-render.cjs +21 -5
  115. package/dist/components/json-schema-form-render.cjs.map +1 -1
  116. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  117. package/dist/components/json-schema-form-render.js +21 -5
  118. package/dist/components/json-schema-form-render.js.map +1 -1
  119. package/dist/components/json-schema-form-runtime-types.d.ts +1 -0
  120. package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -1
  121. package/dist/components/json-schema-form-tone.cjs +12 -0
  122. package/dist/components/json-schema-form-tone.cjs.map +1 -1
  123. package/dist/components/json-schema-form-tone.js +12 -0
  124. package/dist/components/json-schema-form-tone.js.map +1 -1
  125. package/dist/components/json-schema-form-types.d.ts +1 -0
  126. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  127. package/dist/data/GraphDiagram.cjs +125 -138
  128. package/dist/data/GraphDiagram.cjs.map +1 -1
  129. package/dist/data/GraphDiagram.d.ts +30 -23
  130. package/dist/data/GraphDiagram.d.ts.map +1 -1
  131. package/dist/data/GraphDiagram.js +128 -141
  132. package/dist/data/GraphDiagram.js.map +1 -1
  133. package/dist/data/GraphDiagramEdges.cjs +208 -0
  134. package/dist/data/GraphDiagramEdges.cjs.map +1 -0
  135. package/dist/data/GraphDiagramEdges.d.ts +40 -0
  136. package/dist/data/GraphDiagramEdges.d.ts.map +1 -0
  137. package/dist/data/GraphDiagramEdges.js +208 -0
  138. package/dist/data/GraphDiagramEdges.js.map +1 -0
  139. package/dist/data/GraphDiagramNodes.cjs +142 -0
  140. package/dist/data/GraphDiagramNodes.cjs.map +1 -0
  141. package/dist/data/GraphDiagramNodes.d.ts +22 -0
  142. package/dist/data/GraphDiagramNodes.d.ts.map +1 -0
  143. package/dist/data/GraphDiagramNodes.js +142 -0
  144. package/dist/data/GraphDiagramNodes.js.map +1 -0
  145. package/dist/data/ai/PromptRunEditor/RuntimeRows.cjs +8 -3
  146. package/dist/data/ai/PromptRunEditor/RuntimeRows.cjs.map +1 -1
  147. package/dist/data/ai/PromptRunEditor/RuntimeRows.d.ts.map +1 -1
  148. package/dist/data/ai/PromptRunEditor/RuntimeRows.js +8 -3
  149. package/dist/data/ai/PromptRunEditor/RuntimeRows.js.map +1 -1
  150. package/dist/data/ai/PromptRunEditor/index.cjs +37 -43
  151. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  152. package/dist/data/ai/PromptRunEditor/index.d.ts +3 -1
  153. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  154. package/dist/data/ai/PromptRunEditor/index.js +38 -44
  155. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  156. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +16 -5
  157. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  158. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts +4 -1
  159. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  160. package/dist/data/ai/PromptRunEditor/runtimeActions.js +17 -6
  161. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  162. package/dist/data/ai/SessionInspector.approvals-model.cjs +12 -0
  163. package/dist/data/ai/SessionInspector.approvals-model.cjs.map +1 -1
  164. package/dist/data/ai/SessionInspector.approvals-model.d.ts +11 -2
  165. package/dist/data/ai/SessionInspector.approvals-model.d.ts.map +1 -1
  166. package/dist/data/ai/SessionInspector.approvals-model.js +12 -0
  167. package/dist/data/ai/SessionInspector.approvals-model.js.map +1 -1
  168. package/dist/data/ai/SessionInspector.approvals.cjs +25 -1
  169. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  170. package/dist/data/ai/SessionInspector.approvals.d.ts.map +1 -1
  171. package/dist/data/ai/SessionInspector.approvals.js +26 -2
  172. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  173. package/dist/data/ai/SessionInspector.summary.cjs +9 -3
  174. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
  175. package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -1
  176. package/dist/data/ai/SessionInspector.summary.js +9 -3
  177. package/dist/data/ai/SessionInspector.summary.js.map +1 -1
  178. package/dist/data/ai/SessionInspector.transcript.cjs +4 -0
  179. package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -1
  180. package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -1
  181. package/dist/data/ai/SessionInspector.transcript.js +4 -0
  182. package/dist/data/ai/SessionInspector.transcript.js.map +1 -1
  183. package/dist/data/ai/SessionViewer.approval-body.cjs +146 -0
  184. package/dist/data/ai/SessionViewer.approval-body.cjs.map +1 -0
  185. package/dist/data/ai/SessionViewer.approval-body.d.ts +11 -0
  186. package/dist/data/ai/SessionViewer.approval-body.d.ts.map +1 -0
  187. package/dist/data/ai/SessionViewer.approval-body.js +146 -0
  188. package/dist/data/ai/SessionViewer.approval-body.js.map +1 -0
  189. package/dist/data/ai/SessionViewer.approval-forms.cjs +150 -0
  190. package/dist/data/ai/SessionViewer.approval-forms.cjs.map +1 -0
  191. package/dist/data/ai/SessionViewer.approval-forms.d.ts +23 -0
  192. package/dist/data/ai/SessionViewer.approval-forms.d.ts.map +1 -0
  193. package/dist/data/ai/SessionViewer.approval-forms.js +150 -0
  194. package/dist/data/ai/SessionViewer.approval-forms.js.map +1 -0
  195. package/dist/data/ai/SessionViewer.cjs +57 -20
  196. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  197. package/dist/data/ai/SessionViewer.d.ts +13 -3
  198. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  199. package/dist/data/ai/SessionViewer.decision-controls.cjs +313 -0
  200. package/dist/data/ai/SessionViewer.decision-controls.cjs.map +1 -0
  201. package/dist/data/ai/SessionViewer.decision-controls.d.ts +43 -0
  202. package/dist/data/ai/SessionViewer.decision-controls.d.ts.map +1 -0
  203. package/dist/data/ai/SessionViewer.decision-controls.js +313 -0
  204. package/dist/data/ai/SessionViewer.decision-controls.js.map +1 -0
  205. package/dist/data/ai/SessionViewer.decision.cjs +21 -0
  206. package/dist/data/ai/SessionViewer.decision.cjs.map +1 -0
  207. package/dist/data/ai/SessionViewer.decision.d.ts +12 -0
  208. package/dist/data/ai/SessionViewer.decision.d.ts.map +1 -0
  209. package/dist/data/ai/SessionViewer.decision.js +21 -0
  210. package/dist/data/ai/SessionViewer.decision.js.map +1 -0
  211. package/dist/data/ai/SessionViewer.input.cjs +14 -0
  212. package/dist/data/ai/SessionViewer.input.cjs.map +1 -1
  213. package/dist/data/ai/SessionViewer.input.d.ts +5 -0
  214. package/dist/data/ai/SessionViewer.input.d.ts.map +1 -1
  215. package/dist/data/ai/SessionViewer.input.js +14 -0
  216. package/dist/data/ai/SessionViewer.input.js.map +1 -1
  217. package/dist/data/ai/SessionViewer.js +58 -21
  218. package/dist/data/ai/SessionViewer.js.map +1 -1
  219. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  220. package/dist/data/ai/SessionViewer.model.d.ts +4 -0
  221. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  222. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  223. package/dist/data/ai/SessionViewer.rows.cjs +6 -3
  224. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  225. package/dist/data/ai/SessionViewer.rows.d.ts +2 -1
  226. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  227. package/dist/data/ai/SessionViewer.rows.js +6 -3
  228. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  229. package/dist/data/ai/SessionViewer.tool-row.cjs +29 -237
  230. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  231. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  232. package/dist/data/ai/SessionViewer.tool-row.js +27 -235
  233. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  234. package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
  235. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  236. package/dist/data/ai/SessionViewerMenu.cjs +8 -2
  237. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  238. package/dist/data/ai/SessionViewerMenu.d.ts +4 -1
  239. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  240. package/dist/data/ai/SessionViewerMenu.js +8 -2
  241. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  242. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +28 -17
  243. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
  244. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts +10 -2
  245. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
  246. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +29 -18
  247. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
  248. package/dist/data/ai/SpecRuntimeEditor/index.cjs +9 -1
  249. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  250. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +9 -2
  251. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  252. package/dist/data/ai/SpecRuntimeEditor/index.js +9 -1
  253. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  254. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs +1 -1
  255. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js +1 -1
  256. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
  257. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +8 -2
  258. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
  259. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
  260. package/dist/data/ai/SpecRuntimeEditor/update.cjs +14 -6
  261. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
  262. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +1 -0
  263. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
  264. package/dist/data/ai/SpecRuntimeEditor/update.js +14 -6
  265. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
  266. package/dist/data/ai/approval-request.cjs +75 -0
  267. package/dist/data/ai/approval-request.cjs.map +1 -0
  268. package/dist/data/ai/approval-request.d.ts +155 -0
  269. package/dist/data/ai/approval-request.d.ts.map +1 -0
  270. package/dist/data/ai/approval-request.js +75 -0
  271. package/dist/data/ai/approval-request.js.map +1 -0
  272. package/dist/data/ai/index.d.ts +3 -0
  273. package/dist/data/ai/index.d.ts.map +1 -1
  274. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.cjs +125 -0
  275. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.cjs.map +1 -0
  276. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.d.ts +11 -0
  277. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.d.ts.map +1 -0
  278. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.js +125 -0
  279. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.js.map +1 -0
  280. package/dist/data/ai/runtime-preset-menu/index.d.ts +3 -0
  281. package/dist/data/ai/runtime-preset-menu/index.d.ts.map +1 -0
  282. package/dist/data/ai/runtime-preset-menu/model.cjs +73 -0
  283. package/dist/data/ai/runtime-preset-menu/model.cjs.map +1 -0
  284. package/dist/data/ai/runtime-preset-menu/model.d.ts +13 -0
  285. package/dist/data/ai/runtime-preset-menu/model.d.ts.map +1 -0
  286. package/dist/data/ai/runtime-preset-menu/model.js +73 -0
  287. package/dist/data/ai/runtime-preset-menu/model.js.map +1 -0
  288. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.cjs +149 -0
  289. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.cjs.map +1 -0
  290. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.d.ts +15 -0
  291. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.d.ts.map +1 -0
  292. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.js +149 -0
  293. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.js.map +1 -0
  294. package/dist/data/ai/runtime-spec-fields.cjs +166 -0
  295. package/dist/data/ai/runtime-spec-fields.cjs.map +1 -0
  296. package/dist/data/ai/runtime-spec-fields.d.ts +13 -0
  297. package/dist/data/ai/runtime-spec-fields.d.ts.map +1 -0
  298. package/dist/data/ai/runtime-spec-fields.js +166 -0
  299. package/dist/data/ai/runtime-spec-fields.js.map +1 -0
  300. package/dist/data/ai/session-categories.cjs +4 -0
  301. package/dist/data/ai/session-categories.cjs.map +1 -1
  302. package/dist/data/ai/session-categories.d.ts +1 -0
  303. package/dist/data/ai/session-categories.d.ts.map +1 -1
  304. package/dist/data/ai/session-categories.js +4 -0
  305. package/dist/data/ai/session-categories.js.map +1 -1
  306. package/dist/data/ai/use-session-scroll.cjs +49 -21
  307. package/dist/data/ai/use-session-scroll.cjs.map +1 -1
  308. package/dist/data/ai/use-session-scroll.d.ts +2 -0
  309. package/dist/data/ai/use-session-scroll.d.ts.map +1 -1
  310. package/dist/data/ai/use-session-scroll.js +49 -21
  311. package/dist/data/ai/use-session-scroll.js.map +1 -1
  312. package/dist/data/chat/Chat.runtime.cjs +1 -1
  313. package/dist/data/chat/Chat.runtime.cjs.map +1 -1
  314. package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
  315. package/dist/data/chat/Chat.runtime.js +1 -1
  316. package/dist/data/chat/Chat.runtime.js.map +1 -1
  317. package/dist/data/graph-columns-layout.cjs +216 -0
  318. package/dist/data/graph-columns-layout.cjs.map +1 -0
  319. package/dist/data/graph-columns-layout.d.ts +56 -0
  320. package/dist/data/graph-columns-layout.d.ts.map +1 -0
  321. package/dist/data/graph-columns-layout.js +216 -0
  322. package/dist/data/graph-columns-layout.js.map +1 -0
  323. package/dist/data/graph-diagram-model.cjs +73 -0
  324. package/dist/data/graph-diagram-model.cjs.map +1 -0
  325. package/dist/data/graph-diagram-model.d.ts +90 -0
  326. package/dist/data/graph-diagram-model.d.ts.map +1 -0
  327. package/dist/data/graph-diagram-model.js +73 -0
  328. package/dist/data/graph-diagram-model.js.map +1 -0
  329. package/dist/data/graph-edge-routing.cjs +235 -0
  330. package/dist/data/graph-edge-routing.cjs.map +1 -0
  331. package/dist/data/graph-edge-routing.d.ts +73 -0
  332. package/dist/data/graph-edge-routing.d.ts.map +1 -0
  333. package/dist/data/graph-edge-routing.js +235 -0
  334. package/dist/data/graph-edge-routing.js.map +1 -0
  335. package/dist/data/graph-layout.cjs +0 -82
  336. package/dist/data/graph-layout.cjs.map +1 -1
  337. package/dist/data/graph-layout.d.ts +1 -28
  338. package/dist/data/graph-layout.d.ts.map +1 -1
  339. package/dist/data/graph-layout.js +1 -83
  340. package/dist/data/graph-layout.js.map +1 -1
  341. package/dist/data/har/HarPanel.cjs +129 -33
  342. package/dist/data/har/HarPanel.cjs.map +1 -1
  343. package/dist/data/har/HarPanel.d.ts +13 -1
  344. package/dist/data/har/HarPanel.d.ts.map +1 -1
  345. package/dist/data/har/HarPanel.js +130 -34
  346. package/dist/data/har/HarPanel.js.map +1 -1
  347. package/dist/data/har/fixtures.d.ts +12 -0
  348. package/dist/data/har/fixtures.d.ts.map +1 -1
  349. package/dist/data/har/types.d.ts +12 -0
  350. package/dist/data/har/types.d.ts.map +1 -1
  351. package/dist/data/runtime/RuntimeBar.cjs +67 -84
  352. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  353. package/dist/data/runtime/RuntimeBar.d.ts +4 -5
  354. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  355. package/dist/data/runtime/RuntimeBar.fields.cjs +170 -0
  356. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -0
  357. package/dist/data/runtime/RuntimeBar.fields.d.ts +16 -0
  358. package/dist/data/runtime/RuntimeBar.fields.d.ts.map +1 -0
  359. package/dist/data/runtime/RuntimeBar.fields.js +170 -0
  360. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -0
  361. package/dist/data/runtime/RuntimeBar.js +70 -87
  362. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  363. package/dist/data/runtime/RuntimeBar.selection.cjs +56 -0
  364. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -0
  365. package/dist/data/runtime/RuntimeBar.selection.d.ts +20 -0
  366. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -0
  367. package/dist/data/runtime/RuntimeBar.selection.js +56 -0
  368. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -0
  369. package/dist/data/runtime/RuntimeBarActions.cjs +10 -6
  370. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  371. package/dist/data/runtime/RuntimeBarActions.d.ts +8 -1
  372. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  373. package/dist/data/runtime/RuntimeBarActions.js +10 -6
  374. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  375. package/dist/data/runtime/RuntimeBarIdentity.cjs +166 -0
  376. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -0
  377. package/dist/data/runtime/RuntimeBarIdentity.d.ts +25 -0
  378. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -0
  379. package/dist/data/runtime/RuntimeBarIdentity.js +166 -0
  380. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -0
  381. package/dist/data/runtime/RuntimeBarLayout.cjs +95 -0
  382. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -0
  383. package/dist/data/runtime/RuntimeBarLayout.d.ts +9 -0
  384. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -0
  385. package/dist/data/runtime/RuntimeBarLayout.js +95 -0
  386. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -0
  387. package/dist/data/runtime/RuntimeBarSegment.cjs +25 -14
  388. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  389. package/dist/data/runtime/RuntimeBarSegment.d.ts +4 -0
  390. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  391. package/dist/data/runtime/RuntimeBarSegment.js +25 -14
  392. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  393. package/dist/data/runtime/RuntimeLimitInput.cjs +41 -0
  394. package/dist/data/runtime/RuntimeLimitInput.cjs.map +1 -0
  395. package/dist/data/runtime/RuntimeLimitInput.d.ts +9 -0
  396. package/dist/data/runtime/RuntimeLimitInput.d.ts.map +1 -0
  397. package/dist/data/runtime/RuntimeLimitInput.js +41 -0
  398. package/dist/data/runtime/RuntimeLimitInput.js.map +1 -0
  399. package/dist/data/runtime/use-runtime-bar-overflow.cjs +70 -0
  400. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -0
  401. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +13 -0
  402. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -0
  403. package/dist/data/runtime/use-runtime-bar-overflow.js +70 -0
  404. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -0
  405. package/dist/data/use-edge-focus.cjs +20 -0
  406. package/dist/data/use-edge-focus.cjs.map +1 -0
  407. package/dist/data/use-edge-focus.d.ts +23 -0
  408. package/dist/data/use-edge-focus.d.ts.map +1 -0
  409. package/dist/data/use-edge-focus.js +20 -0
  410. package/dist/data/use-edge-focus.js.map +1 -0
  411. package/dist/data/use-pan-zoom.cjs +159 -0
  412. package/dist/data/use-pan-zoom.cjs.map +1 -0
  413. package/dist/data/use-pan-zoom.d.ts +79 -0
  414. package/dist/data/use-pan-zoom.d.ts.map +1 -0
  415. package/dist/data/use-pan-zoom.js +159 -0
  416. package/dist/data/use-pan-zoom.js.map +1 -0
  417. package/dist/data/version-info.cjs +3 -3
  418. package/dist/data/version-info.js +3 -3
  419. package/dist/data.cjs +5 -1
  420. package/dist/data.cjs.map +1 -1
  421. package/dist/data.d.ts +4 -3
  422. package/dist/data.d.ts.map +1 -1
  423. package/dist/data.js +6 -2
  424. package/dist/data.js.map +1 -1
  425. package/dist/index.cjs +5 -1
  426. package/dist/index.cjs.map +1 -1
  427. package/dist/index.js +6 -2
  428. package/dist/index.js.map +1 -1
  429. package/dist/overlay/DropdownMenu.cjs +1 -0
  430. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  431. package/dist/overlay/DropdownMenu.d.ts +4 -0
  432. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  433. package/dist/overlay/DropdownMenu.js +1 -0
  434. package/dist/overlay/DropdownMenu.js.map +1 -1
  435. package/dist/overlay/DropdownMenuSubmenu.cjs +31 -15
  436. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
  437. package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
  438. package/dist/overlay/DropdownMenuSubmenu.js +31 -15
  439. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
  440. package/dist/profiles/fields/profileFieldFilterEditor.cjs +5 -2
  441. package/dist/profiles/fields/profileFieldFilterEditor.cjs.map +1 -1
  442. package/dist/profiles/fields/profileFieldFilterEditor.js +5 -2
  443. package/dist/profiles/fields/profileFieldFilterEditor.js.map +1 -1
  444. package/dist/profiles/fields/profileFieldIcons.cjs +2 -0
  445. package/dist/profiles/fields/profileFieldIcons.cjs.map +1 -1
  446. package/dist/profiles/fields/profileFieldIcons.d.ts.map +1 -1
  447. package/dist/profiles/fields/profileFieldIcons.js +2 -0
  448. package/dist/profiles/fields/profileFieldIcons.js.map +1 -1
  449. package/dist/profiles/wizard/profileWizardModel.cjs +1 -0
  450. package/dist/profiles/wizard/profileWizardModel.cjs.map +1 -1
  451. package/dist/profiles/wizard/profileWizardModel.d.ts +3 -0
  452. package/dist/profiles/wizard/profileWizardModel.d.ts.map +1 -1
  453. package/dist/profiles/wizard/profileWizardModel.js +1 -0
  454. package/dist/profiles/wizard/profileWizardModel.js.map +1 -1
  455. package/dist/rpc/OperationCatalog.cjs +3 -1
  456. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  457. package/dist/rpc/OperationCatalog.d.ts +3 -1
  458. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  459. package/dist/rpc/OperationCatalog.js +3 -1
  460. package/dist/rpc/OperationCatalog.js.map +1 -1
  461. package/dist/rpc/useOperationPages.cjs +6 -1
  462. package/dist/rpc/useOperationPages.cjs.map +1 -1
  463. package/dist/rpc/useOperationPages.d.ts +3 -1
  464. package/dist/rpc/useOperationPages.d.ts.map +1 -1
  465. package/dist/rpc/useOperationPages.js +6 -1
  466. package/dist/rpc/useOperationPages.js.map +1 -1
  467. package/dist/styles.css +1 -1
  468. package/package.json +1 -1
  469. package/schemas/json-schema-form.schema.json +5 -0
  470. package/dist/data/runtime/RuntimeBarCombo.cjs +0 -423
  471. package/dist/data/runtime/RuntimeBarCombo.cjs.map +0 -1
  472. package/dist/data/runtime/RuntimeBarCombo.d.ts +0 -33
  473. package/dist/data/runtime/RuntimeBarCombo.d.ts.map +0 -1
  474. package/dist/data/runtime/RuntimeBarCombo.js +0 -423
  475. package/dist/data/runtime/RuntimeBarCombo.js.map +0 -1
  476. package/dist/data/runtime/RuntimeBarLimits.cjs +0 -262
  477. package/dist/data/runtime/RuntimeBarLimits.cjs.map +0 -1
  478. package/dist/data/runtime/RuntimeBarLimits.d.ts +0 -17
  479. package/dist/data/runtime/RuntimeBarLimits.d.ts.map +0 -1
  480. package/dist/data/runtime/RuntimeBarLimits.js +0 -262
  481. package/dist/data/runtime/RuntimeBarLimits.js.map +0 -1
  482. package/dist/data/runtime/RuntimeBarSegments.cjs +0 -346
  483. package/dist/data/runtime/RuntimeBarSegments.cjs.map +0 -1
  484. package/dist/data/runtime/RuntimeBarSegments.d.ts +0 -37
  485. package/dist/data/runtime/RuntimeBarSegments.d.ts.map +0 -1
  486. package/dist/data/runtime/RuntimeBarSegments.js +0 -346
  487. package/dist/data/runtime/RuntimeBarSegments.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SessionViewerMenu.cjs","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiCheck,\n UiDesktop,\n UiDotsVertical,\n UiListDashes,\n UiListFlat,\n UiMoon,\n UiResizeVertical,\n UiRows,\n UiSun,\n} from \"../../icons\";\nimport { type Density } from \"../../hooks/use-density\";\nimport { getSessionAction } from \"./SessionViewer.model\";\nimport {\n CATEGORY_ICONS,\n CATEGORY_LABELS,\n type SessionCategory,\n type SessionFilters,\n} from \"./session-categories\";\n\nexport type SessionThemeOverride = \"light\" | \"dark\";\n\ninterface SegmentedOption<T> {\n value: T | undefined;\n icon: StaticIconComponent;\n label: string;\n}\n\nconst DENSITY_OPTIONS: Array<SegmentedOption<Density>> = [\n { value: undefined, icon: UiResizeVertical, label: \"Use page density\" },\n { value: \"compact\", icon: UiRows, label: \"Compact\" },\n { value: \"comfortable\", icon: UiListFlat, label: \"Comfortable\" },\n { value: \"spacious\", icon: UiListDashes, label: \"Spacious\" },\n];\n\nconst THEME_OPTIONS: Array<SegmentedOption<SessionThemeOverride>> = [\n { value: undefined, icon: UiDesktop, label: \"Use page theme\" },\n { value: \"light\", icon: UiSun, label: \"Light\" },\n { value: \"dark\", icon: UiMoon, label: \"Dark\" },\n];\n\nexport interface SessionViewerMenuProps {\n menuHeader?: ReactNode;\n density: Density | undefined;\n onDensityChange: (density: Density | undefined) => void;\n theme: SessionThemeOverride | undefined;\n onThemeChange: (theme: SessionThemeOverride | undefined) => void;\n filters: SessionFilters;\n hiddenCategories: ReadonlySet<SessionCategory>;\n hiddenTools: ReadonlySet<string>;\n hiddenSources: ReadonlySet<string>;\n onToggleCategory: (category: SessionCategory) => void;\n onToggleTool: (tool: string) => void;\n onToggleSource: (source: string) => void;\n showThinking: boolean;\n onToggleThinking: () => void;\n hasThinking: boolean;\n}\n\n/** The SessionViewer's \"3-dot\" menu: density and theme overrides as one-line\n * segmented icon rows, plus visibility toggles for the captain category /\n * tool / source facets present in the session. */\nexport function SessionViewerMenu({\n menuHeader,\n density,\n onDensityChange,\n theme,\n onThemeChange,\n filters,\n hiddenCategories,\n hiddenTools,\n hiddenSources,\n onToggleCategory,\n onToggleTool,\n onToggleSource,\n showThinking,\n onToggleThinking,\n hasThinking,\n}: SessionViewerMenuProps) {\n return (\n <DropdownMenu\n icon={UiDotsVertical}\n hideChevron\n variant=\"ghost\"\n size=\"icon\"\n align=\"right\"\n title=\"Session options\"\n menuLabel=\"Session options\"\n menuClassName=\"min-w-[12rem] max-h-[70vh] overflow-auto px-1\"\n header={menuHeader}\n >\n {() => (\n <div className=\"text-popover-foreground\">\n <SegmentedRow\n label=\"Density\"\n options={DENSITY_OPTIONS}\n value={density}\n onChange={onDensityChange}\n />\n <SegmentedRow\n label=\"Theme\"\n options={THEME_OPTIONS}\n value={theme}\n onChange={onThemeChange}\n />\n\n {filters.categories.length > 0 && (\n <Section heading=\"Categories\">\n {filters.categories.map((category) => (\n <CheckRow\n key={category}\n label={CATEGORY_LABELS[category]}\n icon={CATEGORY_ICONS[category]}\n checked={!hiddenCategories.has(category)}\n onToggle={() => onToggleCategory(category)}\n />\n ))}\n </Section>\n )}\n\n {filters.tools.length > 0 && (\n <Section heading=\"Tools\">\n {filters.tools.map((tool) => (\n <CheckRow\n key={tool.key}\n label={tool.label}\n icon={getSessionAction(tool.key).icon}\n checked={!hiddenTools.has(tool.key)}\n onToggle={() => onToggleTool(tool.key)}\n />\n ))}\n </Section>\n )}\n\n {filters.sources.length > 1 && (\n <Section heading=\"Source\">\n {filters.sources.map((source) => (\n <CheckRow\n key={source}\n label={source}\n checked={!hiddenSources.has(source)}\n onToggle={() => onToggleSource(source)}\n />\n ))}\n </Section>\n )}\n\n {hasThinking && (\n <Section>\n <CheckRow label=\"Reasoning\" checked={showThinking} onToggle={onToggleThinking} />\n </Section>\n )}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\n// One line per setting: a dim label on the left, a bordered segmented group of\n// icon-only radio buttons on the right. Labels ride on aria-label/title so\n// menuitemradio queries (and tooltips) still see \"Compact\", \"Dark\", etc.\nfunction SegmentedRow<T extends string>({\n label,\n options,\n value,\n onChange,\n}: {\n label: string;\n options: Array<SegmentedOption<T>>;\n value: T | undefined;\n onChange: (value: T | undefined) => void;\n}) {\n return (\n <div className=\"flex items-center justify-between gap-2 px-2 py-1\">\n <span className=\"text-xs text-muted-foreground\">{label}</span>\n <div className=\"flex items-center gap-0.5 rounded-md border border-border p-0.5\">\n {options.map((option) => {\n const active = value === option.value;\n return (\n <button\n key={option.label}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n aria-label={option.label}\n title={option.label}\n onClick={() => onChange(option.value)}\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded transition-colors focus:outline-none\",\n active\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground focus:text-foreground\",\n )}\n >\n <Icon icon={option.icon} className=\"text-xs\" />\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction Section({ heading, children }: { heading?: string; children: ReactNode }) {\n return (\n <div className=\"mt-1 border-t border-border pt-0.5\">\n {heading && (\n <div className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">{heading}</div>\n )}\n {children}\n </div>\n );\n}\n\nconst ROW_CLASS =\n \"flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-xs transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\";\n\nfunction CheckRow({\n label,\n checked,\n onToggle,\n icon,\n}: {\n label: string;\n checked: boolean;\n onToggle: () => void;\n icon?: StaticIconComponent;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n className={cn(ROW_CLASS, !checked && \"text-muted-foreground\")}\n onClick={onToggle}\n >\n <span\n aria-hidden\n className={cn(\n \"flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded border\",\n checked ? \"border-primary bg-primary text-primary-foreground\" : \"border-input\",\n )}\n >\n {checked && <Icon icon={UiCheck} className=\"text-[0.6rem]\" />}\n </span>\n {icon && <Icon icon={icon} className=\"size-3.5 shrink-0 text-muted-foreground\" />}\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n </button>\n );\n}\n"],"names":["UiResizeVertical","UiRows","UiListFlat","UiListDashes","UiDesktop","UiSun","UiMoon","jsx","DropdownMenu","UiDotsVertical","jsxs","CATEGORY_LABELS","CATEGORY_ICONS","getSessionAction","cn","Icon","UiCheck"],"mappings":"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"}
1
+ {"version":3,"file":"SessionViewerMenu.cjs","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiCheck,\n UiDesktop,\n UiDotsVertical,\n UiListDashes,\n UiListFlat,\n UiMoon,\n UiResizeVertical,\n UiRows,\n UiSun,\n} from \"../../icons\";\nimport { type Density } from \"../../hooks/use-density\";\nimport { getSessionAction } from \"./SessionViewer.model\";\nimport {\n CATEGORY_ICONS,\n CATEGORY_LABELS,\n type SessionCategory,\n type SessionFilters,\n} from \"./session-categories\";\n\nexport type SessionThemeOverride = \"light\" | \"dark\";\n\ninterface SegmentedOption<T> {\n value: T | undefined;\n icon: StaticIconComponent;\n label: string;\n}\n\nconst DENSITY_OPTIONS: Array<SegmentedOption<Density>> = [\n { value: undefined, icon: UiResizeVertical, label: \"Use page density\" },\n { value: \"compact\", icon: UiRows, label: \"Compact\" },\n { value: \"comfortable\", icon: UiListFlat, label: \"Comfortable\" },\n { value: \"spacious\", icon: UiListDashes, label: \"Spacious\" },\n];\n\nconst THEME_OPTIONS: Array<SegmentedOption<SessionThemeOverride>> = [\n { value: undefined, icon: UiDesktop, label: \"Use page theme\" },\n { value: \"light\", icon: UiSun, label: \"Light\" },\n { value: \"dark\", icon: UiMoon, label: \"Dark\" },\n];\n\nexport interface SessionViewerMenuProps {\n menuHeader?: ReactNode;\n density: Density | undefined;\n onDensityChange: (density: Density | undefined) => void;\n theme: SessionThemeOverride | undefined;\n onThemeChange: (theme: SessionThemeOverride | undefined) => void;\n filters: SessionFilters;\n hiddenCategories: ReadonlySet<SessionCategory>;\n hiddenTools: ReadonlySet<string>;\n hiddenSources: ReadonlySet<string>;\n onToggleCategory: (category: SessionCategory) => void;\n onToggleTool: (tool: string) => void;\n onToggleSource: (source: string) => void;\n showThinking: boolean;\n onToggleThinking: () => void;\n hasThinking: boolean;\n hasEncryptedReasoning: boolean;\n showEncryptedReasoning: boolean;\n onToggleEncryptedReasoning: () => void;\n}\n\n/** The SessionViewer's \"3-dot\" menu: density and theme overrides as one-line\n * segmented icon rows, plus visibility toggles for the captain category /\n * tool / source facets present in the session. */\nexport function SessionViewerMenu({\n menuHeader,\n density,\n onDensityChange,\n theme,\n onThemeChange,\n filters,\n hiddenCategories,\n hiddenTools,\n hiddenSources,\n onToggleCategory,\n onToggleTool,\n onToggleSource,\n showThinking,\n onToggleThinking,\n hasThinking,\n hasEncryptedReasoning,\n showEncryptedReasoning,\n onToggleEncryptedReasoning,\n}: SessionViewerMenuProps) {\n return (\n <DropdownMenu\n icon={UiDotsVertical}\n hideChevron\n variant=\"ghost\"\n size=\"icon\"\n align=\"right\"\n title=\"Session options\"\n menuLabel=\"Session options\"\n menuClassName=\"min-w-[12rem] max-h-[70vh] overflow-auto px-1\"\n header={menuHeader}\n >\n {() => (\n <div className=\"text-popover-foreground\">\n <SegmentedRow\n label=\"Density\"\n options={DENSITY_OPTIONS}\n value={density}\n onChange={onDensityChange}\n />\n <SegmentedRow\n label=\"Theme\"\n options={THEME_OPTIONS}\n value={theme}\n onChange={onThemeChange}\n />\n\n {filters.categories.length > 0 && (\n <Section heading=\"Categories\">\n {filters.categories.map((category) => (\n <CheckRow\n key={category}\n label={CATEGORY_LABELS[category]}\n icon={CATEGORY_ICONS[category]}\n checked={!hiddenCategories.has(category)}\n onToggle={() => onToggleCategory(category)}\n />\n ))}\n </Section>\n )}\n\n {filters.tools.length > 0 && (\n <Section heading=\"Tools\">\n {filters.tools.map((tool) => (\n <CheckRow\n key={tool.key}\n label={tool.label}\n icon={getSessionAction(tool.key).icon}\n checked={!hiddenTools.has(tool.key)}\n onToggle={() => onToggleTool(tool.key)}\n />\n ))}\n </Section>\n )}\n\n {filters.sources.length > 1 && (\n <Section heading=\"Source\">\n {filters.sources.map((source) => (\n <CheckRow\n key={source}\n label={source}\n checked={!hiddenSources.has(source)}\n onToggle={() => onToggleSource(source)}\n />\n ))}\n </Section>\n )}\n\n {hasThinking && (\n <Section>\n <CheckRow label=\"Reasoning\" checked={showThinking} onToggle={onToggleThinking} />\n {hasEncryptedReasoning && (\n <CheckRow label=\"Encrypted reasoning\" checked={showEncryptedReasoning} onToggle={onToggleEncryptedReasoning} />\n )}\n </Section>\n )}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\n// One line per setting: a dim label on the left, a bordered segmented group of\n// icon-only radio buttons on the right. Labels ride on aria-label/title so\n// menuitemradio queries (and tooltips) still see \"Compact\", \"Dark\", etc.\nfunction SegmentedRow<T extends string>({\n label,\n options,\n value,\n onChange,\n}: {\n label: string;\n options: Array<SegmentedOption<T>>;\n value: T | undefined;\n onChange: (value: T | undefined) => void;\n}) {\n return (\n <div className=\"flex items-center justify-between gap-2 px-2 py-1\">\n <span className=\"text-xs text-muted-foreground\">{label}</span>\n <div className=\"flex items-center gap-0.5 rounded-md border border-border p-0.5\">\n {options.map((option) => {\n const active = value === option.value;\n return (\n <button\n key={option.label}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n aria-label={option.label}\n title={option.label}\n onClick={() => onChange(option.value)}\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded transition-colors focus:outline-none\",\n active\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground focus:text-foreground\",\n )}\n >\n <Icon icon={option.icon} className=\"text-xs\" />\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction Section({ heading, children }: { heading?: string; children: ReactNode }) {\n return (\n <div className=\"mt-1 border-t border-border pt-0.5\">\n {heading && (\n <div className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">{heading}</div>\n )}\n {children}\n </div>\n );\n}\n\nconst ROW_CLASS =\n \"flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-xs transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\";\n\nfunction CheckRow({\n label,\n checked,\n onToggle,\n icon,\n}: {\n label: string;\n checked: boolean;\n onToggle: () => void;\n icon?: StaticIconComponent;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n className={cn(ROW_CLASS, !checked && \"text-muted-foreground\")}\n onClick={onToggle}\n >\n <span\n aria-hidden\n className={cn(\n \"flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded border\",\n checked ? \"border-primary bg-primary text-primary-foreground\" : \"border-input\",\n )}\n >\n {checked && <Icon icon={UiCheck} className=\"text-[0.6rem]\" />}\n </span>\n {icon && <Icon icon={icon} className=\"size-3.5 shrink-0 text-muted-foreground\" />}\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n </button>\n );\n}\n"],"names":["UiResizeVertical","UiRows","UiListFlat","UiListDashes","UiDesktop","UiSun","UiMoon","jsx","DropdownMenu","UiDotsVertical","jsxs","CATEGORY_LABELS","CATEGORY_ICONS","getSessionAction","cn","Icon","UiCheck"],"mappings":"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"}
@@ -18,9 +18,12 @@ export interface SessionViewerMenuProps {
18
18
  showThinking: boolean;
19
19
  onToggleThinking: () => void;
20
20
  hasThinking: boolean;
21
+ hasEncryptedReasoning: boolean;
22
+ showEncryptedReasoning: boolean;
23
+ onToggleEncryptedReasoning: () => void;
21
24
  }
22
25
  /** The SessionViewer's "3-dot" menu: density and theme overrides as one-line
23
26
  * segmented icon rows, plus visibility toggles for the captain category /
24
27
  * tool / source facets present in the session. */
25
- export declare function SessionViewerMenu({ menuHeader, density, onDensityChange, theme, onThemeChange, filters, hiddenCategories, hiddenTools, hiddenSources, onToggleCategory, onToggleTool, onToggleSource, showThinking, onToggleThinking, hasThinking, }: SessionViewerMenuProps): import("react").JSX.Element;
28
+ export declare function SessionViewerMenu({ menuHeader, density, onDensityChange, theme, onThemeChange, filters, hiddenCategories, hiddenTools, hiddenSources, onToggleCategory, onToggleTool, onToggleSource, showThinking, onToggleThinking, hasThinking, hasEncryptedReasoning, showEncryptedReasoning, onToggleEncryptedReasoning, }: SessionViewerMenuProps): import("react").JSX.Element;
26
29
  //# sourceMappingURL=SessionViewerMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionViewerMenu.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAevC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,CAAC;AAqBpD,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,KAAK,IAAI,CAAC;IACxD,KAAK,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACxC,aAAa,EAAE,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,KAAK,IAAI,CAAC;IACjE,OAAO,EAAE,cAAc,CAAC;IACxB,gBAAgB,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IAC/C,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;mDAEmD;AACnD,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,OAAO,EACP,eAAe,EACf,KAAK,EACL,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,WAAW,GACZ,EAAE,sBAAsB,+BA8ExB"}
1
+ {"version":3,"file":"SessionViewerMenu.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAevC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,CAAC;AAqBpD,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,KAAK,IAAI,CAAC;IACxD,KAAK,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACxC,aAAa,EAAE,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,KAAK,IAAI,CAAC;IACjE,OAAO,EAAE,cAAc,CAAC;IACxB,gBAAgB,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IAC/C,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC;IAChC,0BAA0B,EAAE,MAAM,IAAI,CAAC;CACxC;AAED;;mDAEmD;AACnD,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,OAAO,EACP,eAAe,EACf,KAAK,EACL,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,GAC3B,EAAE,sBAAsB,+BAiFxB"}
@@ -39,7 +39,10 @@ function SessionViewerMenu({
39
39
  onToggleSource,
40
40
  showThinking,
41
41
  onToggleThinking,
42
- hasThinking
42
+ hasThinking,
43
+ hasEncryptedReasoning,
44
+ showEncryptedReasoning,
45
+ onToggleEncryptedReasoning
43
46
  }) {
44
47
  return /* @__PURE__ */ jsx(
45
48
  DropdownMenu,
@@ -101,7 +104,10 @@ function SessionViewerMenu({
101
104
  },
102
105
  source
103
106
  )) }),
104
- hasThinking && /* @__PURE__ */ jsx(Section, { children: /* @__PURE__ */ jsx(CheckRow, { label: "Reasoning", checked: showThinking, onToggle: onToggleThinking }) })
107
+ hasThinking && /* @__PURE__ */ jsxs(Section, { children: [
108
+ /* @__PURE__ */ jsx(CheckRow, { label: "Reasoning", checked: showThinking, onToggle: onToggleThinking }),
109
+ hasEncryptedReasoning && /* @__PURE__ */ jsx(CheckRow, { label: "Encrypted reasoning", checked: showEncryptedReasoning, onToggle: onToggleEncryptedReasoning })
110
+ ] })
105
111
  ] })
106
112
  }
107
113
  );
@@ -1 +1 @@
1
- {"version":3,"file":"SessionViewerMenu.js","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiCheck,\n UiDesktop,\n UiDotsVertical,\n UiListDashes,\n UiListFlat,\n UiMoon,\n UiResizeVertical,\n UiRows,\n UiSun,\n} from \"../../icons\";\nimport { type Density } from \"../../hooks/use-density\";\nimport { getSessionAction } from \"./SessionViewer.model\";\nimport {\n CATEGORY_ICONS,\n CATEGORY_LABELS,\n type SessionCategory,\n type SessionFilters,\n} from \"./session-categories\";\n\nexport type SessionThemeOverride = \"light\" | \"dark\";\n\ninterface SegmentedOption<T> {\n value: T | undefined;\n icon: StaticIconComponent;\n label: string;\n}\n\nconst DENSITY_OPTIONS: Array<SegmentedOption<Density>> = [\n { value: undefined, icon: UiResizeVertical, label: \"Use page density\" },\n { value: \"compact\", icon: UiRows, label: \"Compact\" },\n { value: \"comfortable\", icon: UiListFlat, label: \"Comfortable\" },\n { value: \"spacious\", icon: UiListDashes, label: \"Spacious\" },\n];\n\nconst THEME_OPTIONS: Array<SegmentedOption<SessionThemeOverride>> = [\n { value: undefined, icon: UiDesktop, label: \"Use page theme\" },\n { value: \"light\", icon: UiSun, label: \"Light\" },\n { value: \"dark\", icon: UiMoon, label: \"Dark\" },\n];\n\nexport interface SessionViewerMenuProps {\n menuHeader?: ReactNode;\n density: Density | undefined;\n onDensityChange: (density: Density | undefined) => void;\n theme: SessionThemeOverride | undefined;\n onThemeChange: (theme: SessionThemeOverride | undefined) => void;\n filters: SessionFilters;\n hiddenCategories: ReadonlySet<SessionCategory>;\n hiddenTools: ReadonlySet<string>;\n hiddenSources: ReadonlySet<string>;\n onToggleCategory: (category: SessionCategory) => void;\n onToggleTool: (tool: string) => void;\n onToggleSource: (source: string) => void;\n showThinking: boolean;\n onToggleThinking: () => void;\n hasThinking: boolean;\n}\n\n/** The SessionViewer's \"3-dot\" menu: density and theme overrides as one-line\n * segmented icon rows, plus visibility toggles for the captain category /\n * tool / source facets present in the session. */\nexport function SessionViewerMenu({\n menuHeader,\n density,\n onDensityChange,\n theme,\n onThemeChange,\n filters,\n hiddenCategories,\n hiddenTools,\n hiddenSources,\n onToggleCategory,\n onToggleTool,\n onToggleSource,\n showThinking,\n onToggleThinking,\n hasThinking,\n}: SessionViewerMenuProps) {\n return (\n <DropdownMenu\n icon={UiDotsVertical}\n hideChevron\n variant=\"ghost\"\n size=\"icon\"\n align=\"right\"\n title=\"Session options\"\n menuLabel=\"Session options\"\n menuClassName=\"min-w-[12rem] max-h-[70vh] overflow-auto px-1\"\n header={menuHeader}\n >\n {() => (\n <div className=\"text-popover-foreground\">\n <SegmentedRow\n label=\"Density\"\n options={DENSITY_OPTIONS}\n value={density}\n onChange={onDensityChange}\n />\n <SegmentedRow\n label=\"Theme\"\n options={THEME_OPTIONS}\n value={theme}\n onChange={onThemeChange}\n />\n\n {filters.categories.length > 0 && (\n <Section heading=\"Categories\">\n {filters.categories.map((category) => (\n <CheckRow\n key={category}\n label={CATEGORY_LABELS[category]}\n icon={CATEGORY_ICONS[category]}\n checked={!hiddenCategories.has(category)}\n onToggle={() => onToggleCategory(category)}\n />\n ))}\n </Section>\n )}\n\n {filters.tools.length > 0 && (\n <Section heading=\"Tools\">\n {filters.tools.map((tool) => (\n <CheckRow\n key={tool.key}\n label={tool.label}\n icon={getSessionAction(tool.key).icon}\n checked={!hiddenTools.has(tool.key)}\n onToggle={() => onToggleTool(tool.key)}\n />\n ))}\n </Section>\n )}\n\n {filters.sources.length > 1 && (\n <Section heading=\"Source\">\n {filters.sources.map((source) => (\n <CheckRow\n key={source}\n label={source}\n checked={!hiddenSources.has(source)}\n onToggle={() => onToggleSource(source)}\n />\n ))}\n </Section>\n )}\n\n {hasThinking && (\n <Section>\n <CheckRow label=\"Reasoning\" checked={showThinking} onToggle={onToggleThinking} />\n </Section>\n )}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\n// One line per setting: a dim label on the left, a bordered segmented group of\n// icon-only radio buttons on the right. Labels ride on aria-label/title so\n// menuitemradio queries (and tooltips) still see \"Compact\", \"Dark\", etc.\nfunction SegmentedRow<T extends string>({\n label,\n options,\n value,\n onChange,\n}: {\n label: string;\n options: Array<SegmentedOption<T>>;\n value: T | undefined;\n onChange: (value: T | undefined) => void;\n}) {\n return (\n <div className=\"flex items-center justify-between gap-2 px-2 py-1\">\n <span className=\"text-xs text-muted-foreground\">{label}</span>\n <div className=\"flex items-center gap-0.5 rounded-md border border-border p-0.5\">\n {options.map((option) => {\n const active = value === option.value;\n return (\n <button\n key={option.label}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n aria-label={option.label}\n title={option.label}\n onClick={() => onChange(option.value)}\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded transition-colors focus:outline-none\",\n active\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground focus:text-foreground\",\n )}\n >\n <Icon icon={option.icon} className=\"text-xs\" />\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction Section({ heading, children }: { heading?: string; children: ReactNode }) {\n return (\n <div className=\"mt-1 border-t border-border pt-0.5\">\n {heading && (\n <div className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">{heading}</div>\n )}\n {children}\n </div>\n );\n}\n\nconst ROW_CLASS =\n \"flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-xs transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\";\n\nfunction CheckRow({\n label,\n checked,\n onToggle,\n icon,\n}: {\n label: string;\n checked: boolean;\n onToggle: () => void;\n icon?: StaticIconComponent;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n className={cn(ROW_CLASS, !checked && \"text-muted-foreground\")}\n onClick={onToggle}\n >\n <span\n aria-hidden\n className={cn(\n \"flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded border\",\n checked ? \"border-primary bg-primary text-primary-foreground\" : \"border-input\",\n )}\n >\n {checked && <Icon icon={UiCheck} className=\"text-[0.6rem]\" />}\n </span>\n {icon && <Icon icon={icon} className=\"size-3.5 shrink-0 text-muted-foreground\" />}\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n </button>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionViewerMenu.js","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiCheck,\n UiDesktop,\n UiDotsVertical,\n UiListDashes,\n UiListFlat,\n UiMoon,\n UiResizeVertical,\n UiRows,\n UiSun,\n} from \"../../icons\";\nimport { type Density } from \"../../hooks/use-density\";\nimport { getSessionAction } from \"./SessionViewer.model\";\nimport {\n CATEGORY_ICONS,\n CATEGORY_LABELS,\n type SessionCategory,\n type SessionFilters,\n} from \"./session-categories\";\n\nexport type SessionThemeOverride = \"light\" | \"dark\";\n\ninterface SegmentedOption<T> {\n value: T | undefined;\n icon: StaticIconComponent;\n label: string;\n}\n\nconst DENSITY_OPTIONS: Array<SegmentedOption<Density>> = [\n { value: undefined, icon: UiResizeVertical, label: \"Use page density\" },\n { value: \"compact\", icon: UiRows, label: \"Compact\" },\n { value: \"comfortable\", icon: UiListFlat, label: \"Comfortable\" },\n { value: \"spacious\", icon: UiListDashes, label: \"Spacious\" },\n];\n\nconst THEME_OPTIONS: Array<SegmentedOption<SessionThemeOverride>> = [\n { value: undefined, icon: UiDesktop, label: \"Use page theme\" },\n { value: \"light\", icon: UiSun, label: \"Light\" },\n { value: \"dark\", icon: UiMoon, label: \"Dark\" },\n];\n\nexport interface SessionViewerMenuProps {\n menuHeader?: ReactNode;\n density: Density | undefined;\n onDensityChange: (density: Density | undefined) => void;\n theme: SessionThemeOverride | undefined;\n onThemeChange: (theme: SessionThemeOverride | undefined) => void;\n filters: SessionFilters;\n hiddenCategories: ReadonlySet<SessionCategory>;\n hiddenTools: ReadonlySet<string>;\n hiddenSources: ReadonlySet<string>;\n onToggleCategory: (category: SessionCategory) => void;\n onToggleTool: (tool: string) => void;\n onToggleSource: (source: string) => void;\n showThinking: boolean;\n onToggleThinking: () => void;\n hasThinking: boolean;\n hasEncryptedReasoning: boolean;\n showEncryptedReasoning: boolean;\n onToggleEncryptedReasoning: () => void;\n}\n\n/** The SessionViewer's \"3-dot\" menu: density and theme overrides as one-line\n * segmented icon rows, plus visibility toggles for the captain category /\n * tool / source facets present in the session. */\nexport function SessionViewerMenu({\n menuHeader,\n density,\n onDensityChange,\n theme,\n onThemeChange,\n filters,\n hiddenCategories,\n hiddenTools,\n hiddenSources,\n onToggleCategory,\n onToggleTool,\n onToggleSource,\n showThinking,\n onToggleThinking,\n hasThinking,\n hasEncryptedReasoning,\n showEncryptedReasoning,\n onToggleEncryptedReasoning,\n}: SessionViewerMenuProps) {\n return (\n <DropdownMenu\n icon={UiDotsVertical}\n hideChevron\n variant=\"ghost\"\n size=\"icon\"\n align=\"right\"\n title=\"Session options\"\n menuLabel=\"Session options\"\n menuClassName=\"min-w-[12rem] max-h-[70vh] overflow-auto px-1\"\n header={menuHeader}\n >\n {() => (\n <div className=\"text-popover-foreground\">\n <SegmentedRow\n label=\"Density\"\n options={DENSITY_OPTIONS}\n value={density}\n onChange={onDensityChange}\n />\n <SegmentedRow\n label=\"Theme\"\n options={THEME_OPTIONS}\n value={theme}\n onChange={onThemeChange}\n />\n\n {filters.categories.length > 0 && (\n <Section heading=\"Categories\">\n {filters.categories.map((category) => (\n <CheckRow\n key={category}\n label={CATEGORY_LABELS[category]}\n icon={CATEGORY_ICONS[category]}\n checked={!hiddenCategories.has(category)}\n onToggle={() => onToggleCategory(category)}\n />\n ))}\n </Section>\n )}\n\n {filters.tools.length > 0 && (\n <Section heading=\"Tools\">\n {filters.tools.map((tool) => (\n <CheckRow\n key={tool.key}\n label={tool.label}\n icon={getSessionAction(tool.key).icon}\n checked={!hiddenTools.has(tool.key)}\n onToggle={() => onToggleTool(tool.key)}\n />\n ))}\n </Section>\n )}\n\n {filters.sources.length > 1 && (\n <Section heading=\"Source\">\n {filters.sources.map((source) => (\n <CheckRow\n key={source}\n label={source}\n checked={!hiddenSources.has(source)}\n onToggle={() => onToggleSource(source)}\n />\n ))}\n </Section>\n )}\n\n {hasThinking && (\n <Section>\n <CheckRow label=\"Reasoning\" checked={showThinking} onToggle={onToggleThinking} />\n {hasEncryptedReasoning && (\n <CheckRow label=\"Encrypted reasoning\" checked={showEncryptedReasoning} onToggle={onToggleEncryptedReasoning} />\n )}\n </Section>\n )}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\n// One line per setting: a dim label on the left, a bordered segmented group of\n// icon-only radio buttons on the right. Labels ride on aria-label/title so\n// menuitemradio queries (and tooltips) still see \"Compact\", \"Dark\", etc.\nfunction SegmentedRow<T extends string>({\n label,\n options,\n value,\n onChange,\n}: {\n label: string;\n options: Array<SegmentedOption<T>>;\n value: T | undefined;\n onChange: (value: T | undefined) => void;\n}) {\n return (\n <div className=\"flex items-center justify-between gap-2 px-2 py-1\">\n <span className=\"text-xs text-muted-foreground\">{label}</span>\n <div className=\"flex items-center gap-0.5 rounded-md border border-border p-0.5\">\n {options.map((option) => {\n const active = value === option.value;\n return (\n <button\n key={option.label}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n aria-label={option.label}\n title={option.label}\n onClick={() => onChange(option.value)}\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded transition-colors focus:outline-none\",\n active\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground focus:text-foreground\",\n )}\n >\n <Icon icon={option.icon} className=\"text-xs\" />\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction Section({ heading, children }: { heading?: string; children: ReactNode }) {\n return (\n <div className=\"mt-1 border-t border-border pt-0.5\">\n {heading && (\n <div className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">{heading}</div>\n )}\n {children}\n </div>\n );\n}\n\nconst ROW_CLASS =\n \"flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-xs transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\";\n\nfunction CheckRow({\n label,\n checked,\n onToggle,\n icon,\n}: {\n label: string;\n checked: boolean;\n onToggle: () => void;\n icon?: StaticIconComponent;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n className={cn(ROW_CLASS, !checked && \"text-muted-foreground\")}\n onClick={onToggle}\n >\n <span\n aria-hidden\n className={cn(\n \"flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded border\",\n checked ? \"border-primary bg-primary text-primary-foreground\" : \"border-input\",\n )}\n >\n {checked && <Icon icon={UiCheck} className=\"text-[0.6rem]\" />}\n </span>\n {icon && <Icon icon={icon} className=\"size-3.5 shrink-0 text-muted-foreground\" />}\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n </button>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgCA,MAAM,kBAAmD;AAAA,EACvD,EAAE,OAAO,QAAW,MAAM,kBAAkB,OAAO,mBAAA;AAAA,EACnD,EAAE,OAAO,WAAW,MAAM,QAAQ,OAAO,UAAA;AAAA,EACzC,EAAE,OAAO,eAAe,MAAM,YAAY,OAAO,cAAA;AAAA,EACjD,EAAE,OAAO,YAAY,MAAM,cAAc,OAAO,WAAA;AAClD;AAEA,MAAM,gBAA8D;AAAA,EAClE,EAAE,OAAO,QAAW,MAAM,WAAW,OAAO,iBAAA;AAAA,EAC5C,EAAE,OAAO,SAAS,MAAM,OAAO,OAAO,QAAA;AAAA,EACtC,EAAE,OAAO,QAAQ,MAAM,QAAQ,OAAO,OAAA;AACxC;AA0BO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2B;AACzB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACN,aAAW;AAAA,MACX,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,OAAM;AAAA,MACN,WAAU;AAAA,MACV,eAAc;AAAA,MACd,QAAQ;AAAA,MAEP,UAAA,MACC,qBAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,SAAS;AAAA,YACT,OAAO;AAAA,YACP,UAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAEZ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,SAAS;AAAA,YACT,OAAO;AAAA,YACP,UAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAGX,QAAQ,WAAW,SAAS,KAC3B,oBAAC,SAAA,EAAQ,SAAQ,cACd,UAAA,QAAQ,WAAW,IAAI,CAAC,aACvB;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,OAAO,gBAAgB,QAAQ;AAAA,YAC/B,MAAM,eAAe,QAAQ;AAAA,YAC7B,SAAS,CAAC,iBAAiB,IAAI,QAAQ;AAAA,YACvC,UAAU,MAAM,iBAAiB,QAAQ;AAAA,UAAA;AAAA,UAJpC;AAAA,QAAA,CAMR,GACH;AAAA,QAGD,QAAQ,MAAM,SAAS,KACtB,oBAAC,SAAA,EAAQ,SAAQ,SACd,UAAA,QAAQ,MAAM,IAAI,CAAC,SAClB;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,OAAO,KAAK;AAAA,YACZ,MAAM,iBAAiB,KAAK,GAAG,EAAE;AAAA,YACjC,SAAS,CAAC,YAAY,IAAI,KAAK,GAAG;AAAA,YAClC,UAAU,MAAM,aAAa,KAAK,GAAG;AAAA,UAAA;AAAA,UAJhC,KAAK;AAAA,QAAA,CAMb,GACH;AAAA,QAGD,QAAQ,QAAQ,SAAS,KACxB,oBAAC,SAAA,EAAQ,SAAQ,UACd,UAAA,QAAQ,QAAQ,IAAI,CAAC,WACpB;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,OAAO;AAAA,YACP,SAAS,CAAC,cAAc,IAAI,MAAM;AAAA,YAClC,UAAU,MAAM,eAAe,MAAM;AAAA,UAAA;AAAA,UAHhC;AAAA,QAAA,CAKR,GACH;AAAA,QAGD,oCACE,SAAA,EACC,UAAA;AAAA,UAAA,oBAAC,YAAS,OAAM,aAAY,SAAS,cAAc,UAAU,kBAAkB;AAAA,UAC9E,6CACE,UAAA,EAAS,OAAM,uBAAsB,SAAS,wBAAwB,UAAU,2BAAA,CAA4B;AAAA,QAAA,EAAA,CAEjH;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA;AAAA,EAAA;AAIR;AAKA,SAAS,aAA+B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,SACE,qBAAC,OAAA,EAAI,WAAU,qDACb,UAAA;AAAA,IAAA,oBAAC,QAAA,EAAK,WAAU,iCAAiC,UAAA,OAAM;AAAA,wBACtD,OAAA,EAAI,WAAU,mEACZ,UAAA,QAAQ,IAAI,CAAC,WAAW;AACvB,YAAM,SAAS,UAAU,OAAO;AAChC,aACE;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,MAAK;AAAA,UACL,MAAK;AAAA,UACL,gBAAc;AAAA,UACd,cAAY,OAAO;AAAA,UACnB,OAAO,OAAO;AAAA,UACd,SAAS,MAAM,SAAS,OAAO,KAAK;AAAA,UACpC,WAAW;AAAA,YACT;AAAA,YACA,SACI,8BACA;AAAA,UAAA;AAAA,UAGN,8BAAC,MAAA,EAAK,MAAM,OAAO,MAAM,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,QAdxC,OAAO;AAAA,MAAA;AAAA,IAiBlB,CAAC,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;AAEA,SAAS,QAAQ,EAAE,SAAS,YAAuD;AACjF,SACE,qBAAC,OAAA,EAAI,WAAU,sCACZ,UAAA;AAAA,IAAA,WACC,oBAAC,OAAA,EAAI,WAAU,2DAA2D,UAAA,SAAQ;AAAA,IAEnF;AAAA,EAAA,GACH;AAEJ;AAEA,MAAM,YACJ;AAEF,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,MAAK;AAAA,MACL,gBAAc;AAAA,MACd,WAAW,GAAG,WAAW,CAAC,WAAW,uBAAuB;AAAA,MAC5D,SAAS;AAAA,MAET,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAW;AAAA,YACX,WAAW;AAAA,cACT;AAAA,cACA,UAAU,sDAAsD;AAAA,YAAA;AAAA,YAGjE,qBAAW,oBAAC,MAAA,EAAK,MAAM,SAAS,WAAU,gBAAA,CAAgB;AAAA,UAAA;AAAA,QAAA;AAAA,QAE5D,QAAQ,oBAAC,MAAA,EAAK,MAAY,WAAU,2CAA0C;AAAA,QAC/E,oBAAC,QAAA,EAAK,WAAU,2BAA2B,UAAA,MAAA,CAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGvD;"}
@@ -6,27 +6,38 @@ const update = require("./update.cjs");
6
6
  const UiGitCommit = require("../../../icons/components/UiGitCommit.cjs");
7
7
  function CommitSection({
8
8
  value,
9
- onChange
9
+ onChange,
10
+ inheritedCommits
10
11
  }) {
11
- var _a, _b;
12
- const phase = update.commitPhase(value);
13
- const commit = (_b = (_a = value.workflow) == null ? void 0 : _a.commits) == null ? void 0 : _b[0];
12
+ var _a, _b, _c;
13
+ const operatorSet = ((_a = value.workflow) == null ? void 0 : _a.commits) !== void 0;
14
+ const inheritedCommit = operatorSet ? void 0 : inheritedCommits == null ? void 0 : inheritedCommits[0];
15
+ const phase = operatorSet ? update.commitPhase(value) : inheritedCommit ? update.commitPhaseFromEntry(inheritedCommit) : "none";
16
+ const commit = operatorSet ? (_c = (_b = value.workflow) == null ? void 0 : _b.commits) == null ? void 0 : _c[0] : void 0;
14
17
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-density-2 md:grid-cols-[minmax(8rem,10rem)_minmax(0,1fr)]", children: [
15
- /* @__PURE__ */ jsxRuntime.jsx(fields.SpecField, { label: "Commit", composite: true, children: /* @__PURE__ */ jsxRuntime.jsx(
16
- fields.SpecSelect,
18
+ /* @__PURE__ */ jsxRuntime.jsx(
19
+ fields.SpecField,
17
20
  {
18
- ariaLabel: "Commit",
19
- value: phase,
20
- onChange: (next) => onChange(update.withCommitPhase(value, next)),
21
- icon: UiGitCommit.UiGitCommit,
22
- options: [
23
- { value: "none", label: "Never" },
24
- { value: "turn", label: "Every turn" },
25
- { value: "agent", label: "After the loop" },
26
- { value: "run", label: "End of run" }
27
- ]
21
+ label: "Commit",
22
+ hint: inheritedCommit ? "inherited" : void 0,
23
+ composite: true,
24
+ children: /* @__PURE__ */ jsxRuntime.jsx(
25
+ fields.SpecSelect,
26
+ {
27
+ ariaLabel: "Commit",
28
+ value: phase,
29
+ onChange: (next) => onChange(update.withCommitPhase(value, next)),
30
+ icon: UiGitCommit.UiGitCommit,
31
+ options: [
32
+ { value: "none", label: "Never" },
33
+ { value: "turn", label: "Every turn" },
34
+ { value: "agent", label: "After the loop" },
35
+ { value: "run", label: "End of run" }
36
+ ]
37
+ }
38
+ )
28
39
  }
29
- ) }),
40
+ ),
30
41
  phase !== "none" && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(
31
42
  fields.SpecField,
32
43
  {
@@ -1 +1 @@
1
- {"version":3,"file":"CommitSection.cjs","sources":["../../../../src/data/ai/SpecRuntimeEditor/CommitSection.tsx"],"sourcesContent":["import { UiGitCommit } from \"../../../icons\";\nimport type {\n AISpecRuntimeValue,\n SpecCommitPhase,\n} from \"../SpecRuntimeEditor.model\";\nimport { SpecField, SpecInput, SpecSelect } from \"./fields\";\nimport { commitPhase, withCommit, withCommitPhase } from \"./update\";\n\n// The phase select doubles as the on/off control, the way the checkout and\n// worktree sections use \"none\": the run either has a commit policy or it has\n// none, and a separate checkbox would leave a stanza that says nothing.\nexport function CommitSection({\n value,\n onChange,\n}: {\n value: AISpecRuntimeValue;\n onChange: (value: AISpecRuntimeValue) => void;\n}) {\n const phase = commitPhase(value);\n const commit = value.workflow?.commits?.[0];\n return (\n <div className=\"grid gap-density-2 md:grid-cols-[minmax(8rem,10rem)_minmax(0,1fr)]\">\n <SpecField label=\"Commit\" composite>\n <SpecSelect\n ariaLabel=\"Commit\"\n value={phase}\n onChange={(next) =>\n onChange(withCommitPhase(value, next as SpecCommitPhase | \"none\"))\n }\n icon={UiGitCommit}\n options={[\n { value: \"none\", label: \"Never\" },\n { value: \"turn\", label: \"Every turn\" },\n { value: \"agent\", label: \"After the loop\" },\n { value: \"run\", label: \"End of run\" },\n ]}\n />\n </SpecField>\n {phase !== \"none\" && (\n <>\n <SpecField\n label=\"Commit message\"\n hint={phase === \"turn\" ? \"subject of the anchor commit\" : undefined}\n >\n <SpecInput\n ariaLabel=\"Commit message\"\n value={commit?.message}\n onChange={(message) => onChange(withCommit(value, { message }))}\n placeholder=\"Apply AI changes\"\n icon={UiGitCommit}\n />\n </SpecField>\n </>\n )}\n </div>\n );\n}\n"],"names":["commitPhase","jsxs","jsx","SpecField","SpecSelect","withCommitPhase","UiGitCommit","Fragment","SpecInput","withCommit"],"mappings":";;;;;;AAWO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AACF,GAGG;;AACD,QAAM,QAAQA,OAAAA,YAAY,KAAK;AAC/B,QAAM,UAAS,iBAAM,aAAN,mBAAgB,YAAhB,mBAA0B;AACzC,SACEC,2BAAAA,KAAC,OAAA,EAAI,WAAU,sEACb,UAAA;AAAA,IAAAC,2BAAAA,IAACC,OAAAA,WAAA,EAAU,OAAM,UAAS,WAAS,MACjC,UAAAD,2BAAAA;AAAAA,MAACE,OAAAA;AAAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAU,CAAC,SACT,SAASC,OAAAA,gBAAgB,OAAO,IAAgC,CAAC;AAAA,QAEnE,MAAMC,YAAAA;AAAAA,QACN,SAAS;AAAA,UACP,EAAE,OAAO,QAAQ,OAAO,QAAA;AAAA,UACxB,EAAE,OAAO,QAAQ,OAAO,aAAA;AAAA,UACxB,EAAE,OAAO,SAAS,OAAO,iBAAA;AAAA,UACzB,EAAE,OAAO,OAAO,OAAO,aAAA;AAAA,QAAa;AAAA,MACtC;AAAA,IAAA,GAEJ;AAAA,IACC,UAAU,UACTJ,2BAAAA,IAAAK,WAAAA,UAAA,EACE,UAAAL,2BAAAA;AAAAA,MAACC,OAAAA;AAAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,MAAM,UAAU,SAAS,iCAAiC;AAAA,QAE1D,UAAAD,2BAAAA;AAAAA,UAACM,OAAAA;AAAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,iCAAQ;AAAA,YACf,UAAU,CAAC,YAAY,SAASC,OAAAA,WAAW,OAAO,EAAE,QAAA,CAAS,CAAC;AAAA,YAC9D,aAAY;AAAA,YACZ,MAAMH,YAAAA;AAAAA,UAAA;AAAA,QAAA;AAAA,MACR;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GAEJ;AAEJ;;"}
1
+ {"version":3,"file":"CommitSection.cjs","sources":["../../../../src/data/ai/SpecRuntimeEditor/CommitSection.tsx"],"sourcesContent":["import { UiGitCommit } from \"../../../icons\";\nimport type {\n AISpecRuntimeCommit,\n AISpecRuntimeValue,\n SpecCommitPhase,\n} from \"../SpecRuntimeEditor.model\";\nimport { SpecField, SpecInput, SpecSelect } from \"./fields\";\nimport { commitPhase, commitPhaseFromEntry, withCommit, withCommitPhase } from \"./update\";\n\n// The phase select doubles as the on/off control, the way the checkout and\n// worktree sections use \"none\": the run either has a commit policy or it has\n// none, and a separate checkbox would leave a stanza that says nothing.\nexport function CommitSection({\n value,\n onChange,\n inheritedCommits,\n}: {\n value: AISpecRuntimeValue;\n onChange: (value: AISpecRuntimeValue) => void;\n /**\n * Commit stanza(s) inherited from a lower spec layer (e.g. the lifecycle\n * step's own workflow). Shown as the current selection, marked inherited,\n * only while the operator has not set `workflow.commits` at all — the\n * request the editor emits stays delta-only (see `withCommitPhase`) until\n * the operator actually changes something.\n */\n inheritedCommits?: AISpecRuntimeCommit[] | undefined;\n}) {\n const operatorSet = value.workflow?.commits !== undefined;\n const inheritedCommit = operatorSet ? undefined : inheritedCommits?.[0];\n const phase = operatorSet\n ? commitPhase(value)\n : inheritedCommit\n ? commitPhaseFromEntry(inheritedCommit)\n : \"none\";\n const commit = operatorSet ? value.workflow?.commits?.[0] : undefined;\n return (\n <div className=\"grid gap-density-2 md:grid-cols-[minmax(8rem,10rem)_minmax(0,1fr)]\">\n <SpecField\n label=\"Commit\"\n hint={inheritedCommit ? \"inherited\" : undefined}\n composite\n >\n <SpecSelect\n ariaLabel=\"Commit\"\n value={phase}\n onChange={(next) =>\n onChange(withCommitPhase(value, next as SpecCommitPhase | \"none\"))\n }\n icon={UiGitCommit}\n options={[\n { value: \"none\", label: \"Never\" },\n { value: \"turn\", label: \"Every turn\" },\n { value: \"agent\", label: \"After the loop\" },\n { value: \"run\", label: \"End of run\" },\n ]}\n />\n </SpecField>\n {phase !== \"none\" && (\n <>\n <SpecField\n label=\"Commit message\"\n hint={phase === \"turn\" ? \"subject of the anchor commit\" : undefined}\n >\n <SpecInput\n ariaLabel=\"Commit message\"\n value={commit?.message}\n onChange={(message) => onChange(withCommit(value, { message }))}\n placeholder=\"Apply AI changes\"\n icon={UiGitCommit}\n />\n </SpecField>\n </>\n )}\n </div>\n );\n}\n"],"names":["commitPhase","commitPhaseFromEntry","jsxs","jsx","SpecField","SpecSelect","withCommitPhase","UiGitCommit","Fragment","SpecInput","withCommit"],"mappings":";;;;;;AAYO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,GAWG;;AACD,QAAM,gBAAc,WAAM,aAAN,mBAAgB,aAAY;AAChD,QAAM,kBAAkB,cAAc,SAAY,qDAAmB;AACrE,QAAM,QAAQ,cACVA,mBAAY,KAAK,IACjB,kBACEC,OAAAA,qBAAqB,eAAe,IACpC;AACN,QAAM,SAAS,eAAc,iBAAM,aAAN,mBAAgB,YAAhB,mBAA0B,KAAK;AAC5D,SACEC,2BAAAA,KAAC,OAAA,EAAI,WAAU,sEACb,UAAA;AAAA,IAAAC,2BAAAA;AAAAA,MAACC,OAAAA;AAAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,MAAM,kBAAkB,cAAc;AAAA,QACtC,WAAS;AAAA,QAET,UAAAD,2BAAAA;AAAAA,UAACE,OAAAA;AAAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,YACP,UAAU,CAAC,SACT,SAASC,OAAAA,gBAAgB,OAAO,IAAgC,CAAC;AAAA,YAEnE,MAAMC,YAAAA;AAAAA,YACN,SAAS;AAAA,cACP,EAAE,OAAO,QAAQ,OAAO,QAAA;AAAA,cACxB,EAAE,OAAO,QAAQ,OAAO,aAAA;AAAA,cACxB,EAAE,OAAO,SAAS,OAAO,iBAAA;AAAA,cACzB,EAAE,OAAO,OAAO,OAAO,aAAA;AAAA,YAAa;AAAA,UACtC;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAED,UAAU,UACTJ,2BAAAA,IAAAK,WAAAA,UAAA,EACE,UAAAL,2BAAAA;AAAAA,MAACC,OAAAA;AAAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,MAAM,UAAU,SAAS,iCAAiC;AAAA,QAE1D,UAAAD,2BAAAA;AAAAA,UAACM,OAAAA;AAAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,iCAAQ;AAAA,YACf,UAAU,CAAC,YAAY,SAASC,OAAAA,WAAW,OAAO,EAAE,QAAA,CAAS,CAAC;AAAA,YAC9D,aAAY;AAAA,YACZ,MAAMH,YAAAA;AAAAA,UAAA;AAAA,QAAA;AAAA,MACR;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GAEJ;AAEJ;;"}
@@ -1,6 +1,14 @@
1
- import { AISpecRuntimeValue } from '../SpecRuntimeEditor.model.js';
2
- export declare function CommitSection({ value, onChange, }: {
1
+ import { AISpecRuntimeCommit, AISpecRuntimeValue } from '../SpecRuntimeEditor.model.js';
2
+ export declare function CommitSection({ value, onChange, inheritedCommits, }: {
3
3
  value: AISpecRuntimeValue;
4
4
  onChange: (value: AISpecRuntimeValue) => void;
5
+ /**
6
+ * Commit stanza(s) inherited from a lower spec layer (e.g. the lifecycle
7
+ * step's own workflow). Shown as the current selection, marked inherited,
8
+ * only while the operator has not set `workflow.commits` at all — the
9
+ * request the editor emits stays delta-only (see `withCommitPhase`) until
10
+ * the operator actually changes something.
11
+ */
12
+ inheritedCommits?: AISpecRuntimeCommit[] | undefined;
5
13
  }): import("react").JSX.Element;
6
14
  //# sourceMappingURL=CommitSection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommitSection.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/SpecRuntimeEditor/CommitSection.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,4BAA4B,CAAC;AAOpC,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC/C,+BAuCA"}
1
+ {"version":3,"file":"CommitSection.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/SpecRuntimeEditor/CommitSection.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,4BAA4B,CAAC;AAOpC,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,gBAAgB,GACjB,EAAE;IACD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC9C;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,GAAG,SAAS,CAAC;CACtD,+BAiDA"}
@@ -1,30 +1,41 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
2
  import { SpecField, SpecSelect, SpecInput } from "./fields.js";
3
- import { commitPhase, withCommitPhase, withCommit } from "./update.js";
3
+ import { commitPhase, commitPhaseFromEntry, withCommitPhase, withCommit } from "./update.js";
4
4
  import { UiGitCommit } from "../../../icons/components/UiGitCommit.js";
5
5
  function CommitSection({
6
6
  value,
7
- onChange
7
+ onChange,
8
+ inheritedCommits
8
9
  }) {
9
- var _a, _b;
10
- const phase = commitPhase(value);
11
- const commit = (_b = (_a = value.workflow) == null ? void 0 : _a.commits) == null ? void 0 : _b[0];
10
+ var _a, _b, _c;
11
+ const operatorSet = ((_a = value.workflow) == null ? void 0 : _a.commits) !== void 0;
12
+ const inheritedCommit = operatorSet ? void 0 : inheritedCommits == null ? void 0 : inheritedCommits[0];
13
+ const phase = operatorSet ? commitPhase(value) : inheritedCommit ? commitPhaseFromEntry(inheritedCommit) : "none";
14
+ const commit = operatorSet ? (_c = (_b = value.workflow) == null ? void 0 : _b.commits) == null ? void 0 : _c[0] : void 0;
12
15
  return /* @__PURE__ */ jsxs("div", { className: "grid gap-density-2 md:grid-cols-[minmax(8rem,10rem)_minmax(0,1fr)]", children: [
13
- /* @__PURE__ */ jsx(SpecField, { label: "Commit", composite: true, children: /* @__PURE__ */ jsx(
14
- SpecSelect,
16
+ /* @__PURE__ */ jsx(
17
+ SpecField,
15
18
  {
16
- ariaLabel: "Commit",
17
- value: phase,
18
- onChange: (next) => onChange(withCommitPhase(value, next)),
19
- icon: UiGitCommit,
20
- options: [
21
- { value: "none", label: "Never" },
22
- { value: "turn", label: "Every turn" },
23
- { value: "agent", label: "After the loop" },
24
- { value: "run", label: "End of run" }
25
- ]
19
+ label: "Commit",
20
+ hint: inheritedCommit ? "inherited" : void 0,
21
+ composite: true,
22
+ children: /* @__PURE__ */ jsx(
23
+ SpecSelect,
24
+ {
25
+ ariaLabel: "Commit",
26
+ value: phase,
27
+ onChange: (next) => onChange(withCommitPhase(value, next)),
28
+ icon: UiGitCommit,
29
+ options: [
30
+ { value: "none", label: "Never" },
31
+ { value: "turn", label: "Every turn" },
32
+ { value: "agent", label: "After the loop" },
33
+ { value: "run", label: "End of run" }
34
+ ]
35
+ }
36
+ )
26
37
  }
27
- ) }),
38
+ ),
28
39
  phase !== "none" && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
29
40
  SpecField,
30
41
  {
@@ -1 +1 @@
1
- {"version":3,"file":"CommitSection.js","sources":["../../../../src/data/ai/SpecRuntimeEditor/CommitSection.tsx"],"sourcesContent":["import { UiGitCommit } from \"../../../icons\";\nimport type {\n AISpecRuntimeValue,\n SpecCommitPhase,\n} from \"../SpecRuntimeEditor.model\";\nimport { SpecField, SpecInput, SpecSelect } from \"./fields\";\nimport { commitPhase, withCommit, withCommitPhase } from \"./update\";\n\n// The phase select doubles as the on/off control, the way the checkout and\n// worktree sections use \"none\": the run either has a commit policy or it has\n// none, and a separate checkbox would leave a stanza that says nothing.\nexport function CommitSection({\n value,\n onChange,\n}: {\n value: AISpecRuntimeValue;\n onChange: (value: AISpecRuntimeValue) => void;\n}) {\n const phase = commitPhase(value);\n const commit = value.workflow?.commits?.[0];\n return (\n <div className=\"grid gap-density-2 md:grid-cols-[minmax(8rem,10rem)_minmax(0,1fr)]\">\n <SpecField label=\"Commit\" composite>\n <SpecSelect\n ariaLabel=\"Commit\"\n value={phase}\n onChange={(next) =>\n onChange(withCommitPhase(value, next as SpecCommitPhase | \"none\"))\n }\n icon={UiGitCommit}\n options={[\n { value: \"none\", label: \"Never\" },\n { value: \"turn\", label: \"Every turn\" },\n { value: \"agent\", label: \"After the loop\" },\n { value: \"run\", label: \"End of run\" },\n ]}\n />\n </SpecField>\n {phase !== \"none\" && (\n <>\n <SpecField\n label=\"Commit message\"\n hint={phase === \"turn\" ? \"subject of the anchor commit\" : undefined}\n >\n <SpecInput\n ariaLabel=\"Commit message\"\n value={commit?.message}\n onChange={(message) => onChange(withCommit(value, { message }))}\n placeholder=\"Apply AI changes\"\n icon={UiGitCommit}\n />\n </SpecField>\n </>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;AAWO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AACF,GAGG;;AACD,QAAM,QAAQ,YAAY,KAAK;AAC/B,QAAM,UAAS,iBAAM,aAAN,mBAAgB,YAAhB,mBAA0B;AACzC,SACE,qBAAC,OAAA,EAAI,WAAU,sEACb,UAAA;AAAA,IAAA,oBAAC,WAAA,EAAU,OAAM,UAAS,WAAS,MACjC,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAU,CAAC,SACT,SAAS,gBAAgB,OAAO,IAAgC,CAAC;AAAA,QAEnE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,EAAE,OAAO,QAAQ,OAAO,QAAA;AAAA,UACxB,EAAE,OAAO,QAAQ,OAAO,aAAA;AAAA,UACxB,EAAE,OAAO,SAAS,OAAO,iBAAA;AAAA,UACzB,EAAE,OAAO,OAAO,OAAO,aAAA;AAAA,QAAa;AAAA,MACtC;AAAA,IAAA,GAEJ;AAAA,IACC,UAAU,UACT,oBAAA,UAAA,EACE,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,MAAM,UAAU,SAAS,iCAAiC;AAAA,QAE1D,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,iCAAQ;AAAA,YACf,UAAU,CAAC,YAAY,SAAS,WAAW,OAAO,EAAE,QAAA,CAAS,CAAC;AAAA,YAC9D,aAAY;AAAA,YACZ,MAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MACR;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GAEJ;AAEJ;"}
1
+ {"version":3,"file":"CommitSection.js","sources":["../../../../src/data/ai/SpecRuntimeEditor/CommitSection.tsx"],"sourcesContent":["import { UiGitCommit } from \"../../../icons\";\nimport type {\n AISpecRuntimeCommit,\n AISpecRuntimeValue,\n SpecCommitPhase,\n} from \"../SpecRuntimeEditor.model\";\nimport { SpecField, SpecInput, SpecSelect } from \"./fields\";\nimport { commitPhase, commitPhaseFromEntry, withCommit, withCommitPhase } from \"./update\";\n\n// The phase select doubles as the on/off control, the way the checkout and\n// worktree sections use \"none\": the run either has a commit policy or it has\n// none, and a separate checkbox would leave a stanza that says nothing.\nexport function CommitSection({\n value,\n onChange,\n inheritedCommits,\n}: {\n value: AISpecRuntimeValue;\n onChange: (value: AISpecRuntimeValue) => void;\n /**\n * Commit stanza(s) inherited from a lower spec layer (e.g. the lifecycle\n * step's own workflow). Shown as the current selection, marked inherited,\n * only while the operator has not set `workflow.commits` at all — the\n * request the editor emits stays delta-only (see `withCommitPhase`) until\n * the operator actually changes something.\n */\n inheritedCommits?: AISpecRuntimeCommit[] | undefined;\n}) {\n const operatorSet = value.workflow?.commits !== undefined;\n const inheritedCommit = operatorSet ? undefined : inheritedCommits?.[0];\n const phase = operatorSet\n ? commitPhase(value)\n : inheritedCommit\n ? commitPhaseFromEntry(inheritedCommit)\n : \"none\";\n const commit = operatorSet ? value.workflow?.commits?.[0] : undefined;\n return (\n <div className=\"grid gap-density-2 md:grid-cols-[minmax(8rem,10rem)_minmax(0,1fr)]\">\n <SpecField\n label=\"Commit\"\n hint={inheritedCommit ? \"inherited\" : undefined}\n composite\n >\n <SpecSelect\n ariaLabel=\"Commit\"\n value={phase}\n onChange={(next) =>\n onChange(withCommitPhase(value, next as SpecCommitPhase | \"none\"))\n }\n icon={UiGitCommit}\n options={[\n { value: \"none\", label: \"Never\" },\n { value: \"turn\", label: \"Every turn\" },\n { value: \"agent\", label: \"After the loop\" },\n { value: \"run\", label: \"End of run\" },\n ]}\n />\n </SpecField>\n {phase !== \"none\" && (\n <>\n <SpecField\n label=\"Commit message\"\n hint={phase === \"turn\" ? \"subject of the anchor commit\" : undefined}\n >\n <SpecInput\n ariaLabel=\"Commit message\"\n value={commit?.message}\n onChange={(message) => onChange(withCommit(value, { message }))}\n placeholder=\"Apply AI changes\"\n icon={UiGitCommit}\n />\n </SpecField>\n </>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;AAYO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,GAWG;;AACD,QAAM,gBAAc,WAAM,aAAN,mBAAgB,aAAY;AAChD,QAAM,kBAAkB,cAAc,SAAY,qDAAmB;AACrE,QAAM,QAAQ,cACV,YAAY,KAAK,IACjB,kBACE,qBAAqB,eAAe,IACpC;AACN,QAAM,SAAS,eAAc,iBAAM,aAAN,mBAAgB,YAAhB,mBAA0B,KAAK;AAC5D,SACE,qBAAC,OAAA,EAAI,WAAU,sEACb,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,MAAM,kBAAkB,cAAc;AAAA,QACtC,WAAS;AAAA,QAET,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,YACP,UAAU,CAAC,SACT,SAAS,gBAAgB,OAAO,IAAgC,CAAC;AAAA,YAEnE,MAAM;AAAA,YACN,SAAS;AAAA,cACP,EAAE,OAAO,QAAQ,OAAO,QAAA;AAAA,cACxB,EAAE,OAAO,QAAQ,OAAO,aAAA;AAAA,cACxB,EAAE,OAAO,SAAS,OAAO,iBAAA;AAAA,cACzB,EAAE,OAAO,OAAO,OAAO,aAAA;AAAA,YAAa;AAAA,UACtC;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAED,UAAU,UACT,oBAAA,UAAA,EACE,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,MAAM,UAAU,SAAS,iCAAiC;AAAA,QAE1D,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,iCAAQ;AAAA,YACf,UAAU,CAAC,YAAY,SAAS,WAAW,OAAO,EAAE,QAAA,CAAS,CAAC;AAAA,YAC9D,aAAY;AAAA,YACZ,MAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MACR;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -61,6 +61,7 @@ function SpecRuntimeEditor({
61
61
  showHeader = true,
62
62
  beforeSections,
63
63
  defaultCollapsedSections,
64
+ inheritedCommits,
64
65
  variant = "run",
65
66
  onSave,
66
67
  onCancel,
@@ -216,7 +217,14 @@ function SpecRuntimeEditor({
216
217
  }
217
218
  );
218
219
  case "commit":
219
- return /* @__PURE__ */ jsxRuntime.jsx(CommitSection.CommitSection, { value, onChange: commitChange });
220
+ return /* @__PURE__ */ jsxRuntime.jsx(
221
+ CommitSection.CommitSection,
222
+ {
223
+ value,
224
+ onChange: commitChange,
225
+ ...inheritedCommits ? { inheritedCommits } : {}
226
+ }
227
+ );
220
228
  case "cli":
221
229
  return cliOptions ? /* @__PURE__ */ jsxRuntime.jsx(
222
230
  CLIArgsSection.CLIArgsSection,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/data/ai/SpecRuntimeEditor/index.tsx"],"sourcesContent":["import { useId, useMemo, type ReactNode } from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { ChatModel, ToolMeta } from \"../../chat/types\";\nimport type { FixtureFenceSchemas } from \"../../FixtureEditor/types\";\nimport type {\n AISpecRuntimePermissionCatalog,\n AISpecRuntimeValue,\n} from \"../SpecRuntimeEditor.model\";\nimport type { SpecRuntimeSandboxCreateConfig } from \"../SandboxCreateWizard.model\";\nimport { CLIArgsSection, type SpecRuntimeCLIOptions } from \"./CLIArgsSection\";\nimport { CommitSection } from \"./CommitSection\";\nimport { EnvironmentAdvanced, EnvironmentSection } from \"./EnvironmentSection\";\nimport { Footer } from \"./Footer\";\nimport { ModelContextAdvanced } from \"./ModelContextAdvanced\";\nimport { ModelAdvanced, ModelSection } from \"./ModelSection\";\nimport { PermissionsAdvanced, PermissionsSection } from \"./PermissionsSection\";\nimport { PromptAdvanced, PromptSection } from \"./PromptSection\";\nimport { Rail } from \"./Rail\";\nimport { SandboxSection } from \"./SandboxSection\";\nimport { SectionCard } from \"./SectionCard\";\nimport { SectionTabs } from \"./SectionTabs\";\nimport { VerifySection } from \"./VerifySection\";\nimport { WorkspaceSection } from \"./WorkspaceSection\";\nimport {\n buildPermissionCatalog,\n specPermissionEntries,\n withAddedPermission,\n withPermissionEntries,\n} from \"./permissions-model\";\nimport { summarizeTarget } from \"./summaries\";\nimport {\n SPEC_RUNTIME_SECTIONS,\n type SpecRuntimeSandboxCatalog,\n type SpecRuntimeHostField,\n type SpecRuntimeSecretSelectorConfig,\n type SpecRuntimeTab,\n type SpecSectionId,\n type SpecSectionMeta,\n} from \"./types\";\nimport {\n SPEC_RUNTIME_FAMILIES,\n firstMode,\n runtimeModeError,\n runtimeModeFromModel,\n runtimeModelError,\n modeOptionFor,\n type SpecRuntimeFamily,\n} from \"../../runtime/runtime-mode\";\nimport { familyForModel } from \"../../../lib/runtime-family\";\nimport {\n runtimeFieldSection,\n runtimeFieldSupport,\n runtimeSchemaPropertyAtPath,\n SUPPORT_ALL_RUNTIME_FIELDS,\n} from \"../../runtime/runtime-field-support\";\nimport { useScrollSpy } from \"./use-scrollspy\";\n\nexport type { AISpecRuntimeValue } from \"../SpecRuntimeEditor.model\";\nexport type {\n SpecRuntimeSandboxAgent,\n SpecRuntimeSandboxBackend,\n SpecRuntimeSandboxCatalog,\n SpecRuntimeSandboxKind,\n SpecRuntimeHostField,\n SpecRuntimeSecretSelectorConfig,\n SpecRuntimeTab,\n} from \"./types\";\nexport type { SpecRuntimeCLIOptions } from \"./CLIArgsSection\";\nexport {\n SPEC_RUNTIME_FAMILIES,\n type SpecRuntimeFamily,\n type SpecRuntimeModeOption,\n} from \"../../runtime/runtime-mode\";\n\nexport type SpecRuntimeEditorProps = {\n value: AISpecRuntimeValue;\n onChange: (value: AISpecRuntimeValue) => void;\n models?: ChatModel[] | undefined;\n /** Provider families for the two-axis Family → Mode picker in the model section. */\n families?: SpecRuntimeFamily[] | undefined;\n /** Resolved mode used to validate posture when this editable layer inherits it. */\n effectiveMode?: string | undefined;\n /** Resolved model used to identify the inherited provider family. */\n effectiveModel?: string | undefined;\n tools?: ToolMeta[] | undefined;\n permissionCatalog?: AISpecRuntimePermissionCatalog | undefined;\n secretSelector?: SpecRuntimeSecretSelectorConfig | undefined;\n /** Schema for the runtime's extra CLI args; enables the CLI flags section. */\n cliOptions?: SpecRuntimeCLIOptions | undefined;\n /** Runner schemas keyed by fixture kind or fence info, used by the verification editor. */\n fixtureSchemas?: FixtureFenceSchemas | undefined;\n /** Sandbox adapter catalog; enables the Sandbox section. */\n sandboxCatalog?: SpecRuntimeSandboxCatalog | undefined;\n /** Host-owned sandbox creation and credential-reference adapter. */\n sandboxCreate?: SpecRuntimeSandboxCreateConfig | undefined;\n /** Optional ordered section selection for embedded editors that only need part of the runtime spec. */\n sections?: readonly SpecSectionId[] | undefined;\n /** Groups sections behind a tab strip instead of stacking them; exclusive with `sections`. */\n tabs?: readonly SpecRuntimeTab[] | undefined;\n /** Controlled active tab id; falls back to the first visible tab when filtered out. */\n activeTab?: string | undefined;\n onActiveTabChange?: ((id: string) => void) | undefined;\n /** Model fields the host renders beside the editor; the Model section omits them. */\n hostFields?: readonly SpecRuntimeHostField[] | undefined;\n /**\n * `document` presents prompt.user as a complete .prompt body; `system` omits\n * prompt.user for hosts that edit it in their own composer.\n */\n promptVariant?: \"runtime\" | \"document\" | \"system\" | undefined;\n /** Disables value controls while preserving section navigation and disclosures. */\n readOnly?: boolean | undefined;\n className?: string | undefined;\n title?: ReactNode | undefined;\n eyebrow?: ReactNode | undefined;\n /** Hide the editor rail when a host modal already supplies the context. */\n showHeader?: boolean | undefined;\n /** Content rendered before the first section inside the editor column. */\n beforeSections?: ReactNode | undefined;\n /** Sections that should start collapsed in embedded contexts. */\n defaultCollapsedSections?: readonly SpecSectionId[] | undefined;\n /** Restrict task-owned fields when editing a reusable preset fragment. */\n variant?: \"run\" | \"preset\" | undefined;\n /** Renders the sticky footer's save action when set. */\n onSave?: (() => void) | undefined;\n /** Renders the sticky footer's cancel action when set. */\n onCancel?: (() => void) | undefined;\n saveLabel?: string | undefined;\n footerStatus?: ReactNode | undefined;\n};\n\nconst ADVANCED_HINTS: Partial<Record<SpecSectionId, string>> = {\n model: \"fallbacks, session, caching, memory, skills\",\n prompt: \"schema\",\n permissions: \"tools, MCP, plugins\",\n environment: \"dotenv files\",\n};\n\nconst PROMPT_VARIANT_HINTS = {\n document: \"The .prompt document body and its explicit system fields.\",\n system: \"System prompt fields layered on top of the base agent prompt.\",\n} as const;\n\n// Full-page runtime spec editor (design \"Runtime Spec Editor v2\"): a live\n// summary rail with scrollspy nav and stacked numbered sections.\n// Container-responsive so it works embedded in a modal or standalone.\nexport function SpecRuntimeEditor({\n value,\n onChange,\n models = [],\n families,\n effectiveMode,\n effectiveModel,\n tools = [],\n permissionCatalog,\n secretSelector,\n cliOptions,\n fixtureSchemas,\n sandboxCatalog,\n sandboxCreate,\n sections: sectionFilter,\n tabs,\n activeTab,\n onActiveTabChange,\n hostFields,\n promptVariant = \"runtime\",\n readOnly = false,\n className,\n title = \"Runtime Spec\",\n eyebrow = \"Agent configuration\",\n showHeader = true,\n beforeSections,\n defaultCollapsedSections,\n variant = \"run\",\n onSave,\n onCancel,\n saveLabel = \"Save & run\",\n footerStatus = \"Ready to run\",\n}: SpecRuntimeEditorProps) {\n const idPrefix = useId();\n const commitChange: (next: AISpecRuntimeValue) => void = readOnly\n ? () => undefined\n : onChange;\n const catalog = useMemo(\n () => buildPermissionCatalog(permissionCatalog, tools),\n [permissionCatalog, tools],\n );\n const runtimeFamilies = families?.length ? families : SPEC_RUNTIME_FAMILIES;\n const selectedFamily = familyForModel(\n runtimeFamilies,\n models,\n value.model || effectiveModel,\n );\n const specMode =\n runtimeModeFromModel(value.model) ||\n value.mode?.trim() ||\n effectiveMode?.trim() ||\n firstMode(runtimeFamilies[0] ?? SPEC_RUNTIME_FAMILIES[0]!).id;\n const runtimeError =\n runtimeModelError(value.model || effectiveModel) ??\n runtimeModeError(runtimeFamilies, specMode, selectedFamily?.id);\n const selectedRuntime = runtimeError\n ? undefined\n : modeOptionFor(runtimeFamilies, specMode, selectedFamily?.id);\n const supports = selectedRuntime\n ? runtimeFieldSupport(runtimeFamilies, specMode, selectedFamily?.id)\n : SUPPORT_ALL_RUNTIME_FIELDS;\n const runtimeSchema = selectedRuntime?.schema;\n const hasSandboxSection =\n runtimeSchema != null &&\n runtimeSchemaPropertyAtPath(runtimeSchema, \"sandbox.mode\") != null;\n const entries = useMemo(\n () => specPermissionEntries(value, catalog),\n [value, catalog],\n );\n const skillsSection = selectedRuntime\n ? (runtimeFieldSection(\n runtimeFamilies,\n specMode,\n \"permissions.skills\",\n selectedFamily?.id,\n ) ?? \"model\")\n : \"model\";\n const modelSkillEntries = entries.filter(\n (entry) =>\n entry.domain === \"skills\" &&\n skillsSection === \"model\" &&\n supports(\"permissions.skills\"),\n );\n const permissionEntries = entries.filter(\n (entry) =>\n (entry.domain !== \"skills\" || skillsSection === \"permissions\") &&\n supports(`permissions.${entry.domain}`),\n );\n const hasPermissionSection =\n supports(\"permissions.mode\") ||\n (skillsSection === \"permissions\" && supports(\"permissions.skills\")) ||\n ([\"tools\", \"mcp\", \"plugins\"] as const).some((domain) =>\n supports(`permissions.${domain}`),\n );\n\n if (tabs && sectionFilter) {\n throw new Error(\"SpecRuntimeEditor: pass either sections or tabs, not both\");\n }\n const requestedSections = useMemo(() => {\n const ids = tabs ? tabs.flatMap((tab) => tab.sections ?? []) : sectionFilter;\n if (!ids) return SPEC_RUNTIME_SECTIONS;\n return ids.map((id) => {\n const section = SPEC_RUNTIME_SECTIONS.find(\n (candidate) => candidate.id === id,\n );\n if (!section)\n throw new Error(`unknown runtime editor section ${JSON.stringify(id)}`);\n return section;\n });\n }, [sectionFilter, tabs]);\n // Sandbox modes come from the selected runtime schema. The adapter catalog is\n // optional metadata for configured Docker and Git Agent backends.\n const sections = requestedSections.filter(\n (section) =>\n (section.id !== \"cli\" || (cliOptions && supports(\"cliArgs\"))) &&\n (section.id !== \"sandbox\" || hasSandboxSection) &&\n (section.id !== \"permissions\" || hasPermissionSection),\n );\n const collapsedSections = useMemo(\n () => new Set(defaultCollapsedSections ?? []),\n [defaultCollapsedSections],\n );\n const domId = (id: SpecSectionId) => `${idPrefix}-${id}`;\n const { sectionRef } = useScrollSpy(\n sections.map((section) => domId(section.id)),\n );\n\n const applyEntries = (\n applied: Parameters<typeof withPermissionEntries>[1],\n mode: Parameters<typeof withPermissionEntries>[2],\n ) => commitChange(withPermissionEntries(value, applied, mode));\n const addEntry = (\n domain: Parameters<typeof withAddedPermission>[1],\n id: string,\n ) => {\n const next = withAddedPermission(value, domain, id);\n if (next) commitChange(next);\n };\n\n const sectionBody = (id: SpecSectionId): ReactNode => {\n switch (id) {\n case \"model\":\n return (\n <ModelSection\n value={value}\n onChange={commitChange}\n models={models}\n effectiveMode={effectiveMode}\n effectiveModel={effectiveModel}\n families={runtimeFamilies}\n {...(hostFields ? { hostFields } : {})}\n />\n );\n case \"prompt\":\n return (\n <PromptSection\n value={value}\n onChange={commitChange}\n supports={supports}\n variant={promptVariant}\n />\n );\n case \"workspace\":\n return (\n <WorkspaceSection\n value={value}\n onChange={commitChange}\n secretSelector={secretSelector}\n variant={variant}\n supports={supports}\n />\n );\n case \"sandbox\":\n return runtimeSchema ? (\n <SandboxSection\n value={value}\n onChange={commitChange}\n schema={runtimeSchema}\n {...(sandboxCatalog ? { catalog: sandboxCatalog } : {})}\n {...(sandboxCreate ? { createConfig: sandboxCreate } : {})}\n />\n ) : null;\n case \"permissions\":\n return supports(\"permissions\") ? (\n <PermissionsSection\n value={value}\n onChange={commitChange}\n families={runtimeFamilies}\n {...(runtimeSchema ? { schema: runtimeSchema } : {})}\n effectiveMode={effectiveMode}\n />\n ) : null;\n case \"environment\":\n return (\n <EnvironmentSection\n value={value}\n onChange={commitChange}\n secretSelector={secretSelector}\n />\n );\n case \"verify\":\n return (\n <VerifySection\n value={value}\n onChange={commitChange}\n models={models}\n families={runtimeFamilies}\n {...(secretSelector ? { secretSelector } : {})}\n {...(fixtureSchemas ? { fixtureSchemas } : {})}\n />\n );\n case \"commit\":\n return <CommitSection value={value} onChange={commitChange} />;\n case \"cli\":\n return cliOptions ? (\n <CLIArgsSection\n value={value}\n onChange={commitChange}\n cliOptions={cliOptions}\n />\n ) : null;\n }\n };\n\n const sectionAdvanced = (id: SpecSectionId): ReactNode => {\n switch (id) {\n case \"model\":\n return (\n <div className=\"grid gap-density-3\">\n <ModelAdvanced\n value={value}\n onChange={commitChange}\n models={models}\n supports={supports}\n families={runtimeFamilies}\n />\n <ModelContextAdvanced\n value={value}\n onChange={commitChange}\n entries={modelSkillEntries}\n onApplyEntries={applyEntries}\n onAddEntry={addEntry}\n showSkills={skillsSection === \"model\"}\n supports={supports}\n />\n </div>\n );\n case \"prompt\":\n return supports(\"prompt.schema\") ? (\n <PromptAdvanced value={value} onChange={commitChange} />\n ) : undefined;\n case \"permissions\":\n return (\n <PermissionsAdvanced\n entries={permissionEntries}\n onApplyEntries={applyEntries}\n onAddEntry={addEntry}\n includeSkills={skillsSection === \"permissions\"}\n supports={supports}\n />\n );\n case \"environment\":\n return variant === \"run\" ? (\n <EnvironmentAdvanced value={value} onChange={commitChange} />\n ) : undefined;\n default:\n return undefined;\n }\n };\n\n const valueControls = (content: ReactNode) =>\n readOnly && content ? (\n <fieldset disabled className=\"m-0 min-w-0 border-0 p-0\">\n {content}\n </fieldset>\n ) : (\n content\n );\n\n const sectionCard = (\n section: SpecSectionMeta,\n { number, bare = false }: { number?: string; bare?: boolean },\n ) => (\n <SectionCard\n key={section.id}\n meta={\n section.id === \"prompt\" && promptVariant !== \"runtime\"\n ? { ...section, hint: PROMPT_VARIANT_HINTS[promptVariant] }\n : section\n }\n {...(number ? { number } : {})}\n bare={bare}\n domId={domId(section.id)}\n sectionRef={sectionRef(domId(section.id))}\n advanced={valueControls(sectionAdvanced(section.id))}\n advancedHint={ADVANCED_HINTS[section.id]}\n defaultCollapsed={collapsedSections.has(section.id)}\n >\n {valueControls(sectionBody(section.id))}\n </SectionCard>\n );\n\n return (\n <div className={cn(\"@container\", className)}>\n <div\n className={\n tabs\n ? \"grid grid-cols-1 gap-density-3\"\n : \"mx-auto max-w-[820px] px-density-4 py-density-4\"\n }\n >\n {showHeader && (\n <Rail\n eyebrow={eyebrow}\n title={title}\n target={summarizeTarget(value)}\n />\n )}\n {runtimeError ? (\n <div\n role=\"alert\"\n className=\"mb-density-3 rounded-md border border-destructive/40 bg-destructive/10 px-density-3 py-density-2 text-sm text-destructive\"\n >\n {runtimeError} Select a valid mode below or switch to Raw to repair\n the prompt source.\n </div>\n ) : null}\n {beforeSections}\n {tabs ? (\n <SectionTabs\n tabs={tabs}\n sections={sections}\n activeTab={activeTab}\n onActiveTabChange={onActiveTabChange}\n renderSection={(section, { bare }) => sectionCard(section, { bare })}\n />\n ) : (\n sections.map((section, index) =>\n sectionCard(section, { number: String(index + 1).padStart(2, \"0\") }),\n )\n )}\n </div>\n {(onSave || onCancel) && (\n <Footer\n status={footerStatus}\n saveLabel={saveLabel}\n onSave={onSave}\n onCancel={onCancel}\n />\n )}\n </div>\n );\n}\n"],"names":["useId","useMemo","buildPermissionCatalog","SPEC_RUNTIME_FAMILIES","familyForModel","runtimeModeFromModel","firstMode","runtimeModelError","runtimeModeError","modeOptionFor","runtimeFieldSupport","SUPPORT_ALL_RUNTIME_FIELDS","runtimeSchemaPropertyAtPath","specPermissionEntries","runtimeFieldSection","SPEC_RUNTIME_SECTIONS","useScrollSpy","withPermissionEntries","withAddedPermission","jsx","ModelSection","PromptSection","WorkspaceSection","SandboxSection","PermissionsSection","EnvironmentSection","VerifySection","CommitSection","CLIArgsSection","jsxs","ModelAdvanced","ModelContextAdvanced","PromptAdvanced","PermissionsAdvanced","EnvironmentAdvanced","SectionCard","cn","Rail","summarizeTarget","SectionTabs","Footer"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/data/ai/SpecRuntimeEditor/index.tsx"],"sourcesContent":["import { useId, useMemo, type ReactNode } from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { ChatModel, ToolMeta } from \"../../chat/types\";\nimport type { FixtureFenceSchemas } from \"../../FixtureEditor/types\";\nimport type {\n AISpecRuntimeCommit,\n AISpecRuntimePermissionCatalog,\n AISpecRuntimeValue,\n} from \"../SpecRuntimeEditor.model\";\nimport type { SpecRuntimeSandboxCreateConfig } from \"../SandboxCreateWizard.model\";\nimport { CLIArgsSection, type SpecRuntimeCLIOptions } from \"./CLIArgsSection\";\nimport { CommitSection } from \"./CommitSection\";\nimport { EnvironmentAdvanced, EnvironmentSection } from \"./EnvironmentSection\";\nimport { Footer } from \"./Footer\";\nimport { ModelContextAdvanced } from \"./ModelContextAdvanced\";\nimport { ModelAdvanced, ModelSection } from \"./ModelSection\";\nimport { PermissionsAdvanced, PermissionsSection } from \"./PermissionsSection\";\nimport { PromptAdvanced, PromptSection } from \"./PromptSection\";\nimport { Rail } from \"./Rail\";\nimport { SandboxSection } from \"./SandboxSection\";\nimport { SectionCard } from \"./SectionCard\";\nimport { SectionTabs } from \"./SectionTabs\";\nimport { VerifySection } from \"./VerifySection\";\nimport { WorkspaceSection } from \"./WorkspaceSection\";\nimport {\n buildPermissionCatalog,\n specPermissionEntries,\n withAddedPermission,\n withPermissionEntries,\n} from \"./permissions-model\";\nimport { summarizeTarget } from \"./summaries\";\nimport {\n SPEC_RUNTIME_SECTIONS,\n type SpecRuntimeSandboxCatalog,\n type SpecRuntimeHostField,\n type SpecRuntimeSecretSelectorConfig,\n type SpecRuntimeTab,\n type SpecSectionId,\n type SpecSectionMeta,\n} from \"./types\";\nimport {\n SPEC_RUNTIME_FAMILIES,\n firstMode,\n runtimeModeError,\n runtimeModeFromModel,\n runtimeModelError,\n modeOptionFor,\n type SpecRuntimeFamily,\n} from \"../../runtime/runtime-mode\";\nimport { familyForModel } from \"../../../lib/runtime-family\";\nimport {\n runtimeFieldSection,\n runtimeFieldSupport,\n runtimeSchemaPropertyAtPath,\n SUPPORT_ALL_RUNTIME_FIELDS,\n} from \"../../runtime/runtime-field-support\";\nimport { useScrollSpy } from \"./use-scrollspy\";\n\nexport type { AISpecRuntimeValue } from \"../SpecRuntimeEditor.model\";\nexport type {\n SpecRuntimeSandboxAgent,\n SpecRuntimeSandboxBackend,\n SpecRuntimeSandboxCatalog,\n SpecRuntimeSandboxKind,\n SpecRuntimeHostField,\n SpecRuntimeSecretSelectorConfig,\n SpecRuntimeTab,\n} from \"./types\";\nexport type { SpecRuntimeCLIOptions } from \"./CLIArgsSection\";\nexport {\n SPEC_RUNTIME_FAMILIES,\n type SpecRuntimeFamily,\n type SpecRuntimeModeOption,\n} from \"../../runtime/runtime-mode\";\n\nexport type SpecRuntimeEditorProps = {\n value: AISpecRuntimeValue;\n onChange: (value: AISpecRuntimeValue) => void;\n models?: ChatModel[] | undefined;\n /** Provider families for the two-axis Family → Mode picker in the model section. */\n families?: SpecRuntimeFamily[] | undefined;\n /** Resolved mode used to validate posture when this editable layer inherits it. */\n effectiveMode?: string | undefined;\n /** Resolved model used to identify the inherited provider family. */\n effectiveModel?: string | undefined;\n tools?: ToolMeta[] | undefined;\n permissionCatalog?: AISpecRuntimePermissionCatalog | undefined;\n secretSelector?: SpecRuntimeSecretSelectorConfig | undefined;\n /** Schema for the runtime's extra CLI args; enables the CLI flags section. */\n cliOptions?: SpecRuntimeCLIOptions | undefined;\n /** Runner schemas keyed by fixture kind or fence info, used by the verification editor. */\n fixtureSchemas?: FixtureFenceSchemas | undefined;\n /** Sandbox adapter catalog; enables the Sandbox section. */\n sandboxCatalog?: SpecRuntimeSandboxCatalog | undefined;\n /** Host-owned sandbox creation and credential-reference adapter. */\n sandboxCreate?: SpecRuntimeSandboxCreateConfig | undefined;\n /** Optional ordered section selection for embedded editors that only need part of the runtime spec. */\n sections?: readonly SpecSectionId[] | undefined;\n /** Groups sections behind a tab strip instead of stacking them; exclusive with `sections`. */\n tabs?: readonly SpecRuntimeTab[] | undefined;\n /** Controlled active tab id; falls back to the first visible tab when filtered out. */\n activeTab?: string | undefined;\n onActiveTabChange?: ((id: string) => void) | undefined;\n /** Model fields the host renders beside the editor; the Model section omits them. */\n hostFields?: readonly SpecRuntimeHostField[] | undefined;\n /**\n * `document` presents prompt.user as a complete .prompt body; `system` omits\n * prompt.user for hosts that edit it in their own composer.\n */\n promptVariant?: \"runtime\" | \"document\" | \"system\" | undefined;\n /** Disables value controls while preserving section navigation and disclosures. */\n readOnly?: boolean | undefined;\n className?: string | undefined;\n title?: ReactNode | undefined;\n eyebrow?: ReactNode | undefined;\n /** Hide the editor rail when a host modal already supplies the context. */\n showHeader?: boolean | undefined;\n /** Content rendered before the first section inside the editor column. */\n beforeSections?: ReactNode | undefined;\n /** Sections that should start collapsed in embedded contexts. */\n defaultCollapsedSections?: readonly SpecSectionId[] | undefined;\n /**\n * Commit stanza(s) inherited from a lower spec layer (e.g. the lifecycle\n * step's own workflow), shown in the Commit section as the current\n * selection — clearly marked inherited — only while the operator has not\n * set `value.workflow.commits` at all.\n */\n inheritedCommits?: AISpecRuntimeCommit[] | undefined;\n /** Restrict task-owned fields when editing a reusable preset fragment. */\n variant?: \"run\" | \"preset\" | undefined;\n /** Renders the sticky footer's save action when set. */\n onSave?: (() => void) | undefined;\n /** Renders the sticky footer's cancel action when set. */\n onCancel?: (() => void) | undefined;\n saveLabel?: string | undefined;\n footerStatus?: ReactNode | undefined;\n};\n\nconst ADVANCED_HINTS: Partial<Record<SpecSectionId, string>> = {\n model: \"fallbacks, session, caching, memory, skills\",\n prompt: \"schema\",\n permissions: \"tools, MCP, plugins\",\n environment: \"dotenv files\",\n};\n\nconst PROMPT_VARIANT_HINTS = {\n document: \"The .prompt document body and its explicit system fields.\",\n system: \"System prompt fields layered on top of the base agent prompt.\",\n} as const;\n\n// Full-page runtime spec editor (design \"Runtime Spec Editor v2\"): a live\n// summary rail with scrollspy nav and stacked numbered sections.\n// Container-responsive so it works embedded in a modal or standalone.\nexport function SpecRuntimeEditor({\n value,\n onChange,\n models = [],\n families,\n effectiveMode,\n effectiveModel,\n tools = [],\n permissionCatalog,\n secretSelector,\n cliOptions,\n fixtureSchemas,\n sandboxCatalog,\n sandboxCreate,\n sections: sectionFilter,\n tabs,\n activeTab,\n onActiveTabChange,\n hostFields,\n promptVariant = \"runtime\",\n readOnly = false,\n className,\n title = \"Runtime Spec\",\n eyebrow = \"Agent configuration\",\n showHeader = true,\n beforeSections,\n defaultCollapsedSections,\n inheritedCommits,\n variant = \"run\",\n onSave,\n onCancel,\n saveLabel = \"Save & run\",\n footerStatus = \"Ready to run\",\n}: SpecRuntimeEditorProps) {\n const idPrefix = useId();\n const commitChange: (next: AISpecRuntimeValue) => void = readOnly\n ? () => undefined\n : onChange;\n const catalog = useMemo(\n () => buildPermissionCatalog(permissionCatalog, tools),\n [permissionCatalog, tools],\n );\n const runtimeFamilies = families?.length ? families : SPEC_RUNTIME_FAMILIES;\n const selectedFamily = familyForModel(\n runtimeFamilies,\n models,\n value.model || effectiveModel,\n );\n const specMode =\n runtimeModeFromModel(value.model) ||\n value.mode?.trim() ||\n effectiveMode?.trim() ||\n firstMode(runtimeFamilies[0] ?? SPEC_RUNTIME_FAMILIES[0]!).id;\n const runtimeError =\n runtimeModelError(value.model || effectiveModel) ??\n runtimeModeError(runtimeFamilies, specMode, selectedFamily?.id);\n const selectedRuntime = runtimeError\n ? undefined\n : modeOptionFor(runtimeFamilies, specMode, selectedFamily?.id);\n const supports = selectedRuntime\n ? runtimeFieldSupport(runtimeFamilies, specMode, selectedFamily?.id)\n : SUPPORT_ALL_RUNTIME_FIELDS;\n const runtimeSchema = selectedRuntime?.schema;\n const hasSandboxSection =\n runtimeSchema != null &&\n runtimeSchemaPropertyAtPath(runtimeSchema, \"sandbox.mode\") != null;\n const entries = useMemo(\n () => specPermissionEntries(value, catalog),\n [value, catalog],\n );\n const skillsSection = selectedRuntime\n ? (runtimeFieldSection(\n runtimeFamilies,\n specMode,\n \"permissions.skills\",\n selectedFamily?.id,\n ) ?? \"model\")\n : \"model\";\n const modelSkillEntries = entries.filter(\n (entry) =>\n entry.domain === \"skills\" &&\n skillsSection === \"model\" &&\n supports(\"permissions.skills\"),\n );\n const permissionEntries = entries.filter(\n (entry) =>\n (entry.domain !== \"skills\" || skillsSection === \"permissions\") &&\n supports(`permissions.${entry.domain}`),\n );\n const hasPermissionSection =\n supports(\"permissions.mode\") ||\n (skillsSection === \"permissions\" && supports(\"permissions.skills\")) ||\n ([\"tools\", \"mcp\", \"plugins\"] as const).some((domain) =>\n supports(`permissions.${domain}`),\n );\n\n if (tabs && sectionFilter) {\n throw new Error(\"SpecRuntimeEditor: pass either sections or tabs, not both\");\n }\n const requestedSections = useMemo(() => {\n const ids = tabs ? tabs.flatMap((tab) => tab.sections ?? []) : sectionFilter;\n if (!ids) return SPEC_RUNTIME_SECTIONS;\n return ids.map((id) => {\n const section = SPEC_RUNTIME_SECTIONS.find(\n (candidate) => candidate.id === id,\n );\n if (!section)\n throw new Error(`unknown runtime editor section ${JSON.stringify(id)}`);\n return section;\n });\n }, [sectionFilter, tabs]);\n // Sandbox modes come from the selected runtime schema. The adapter catalog is\n // optional metadata for configured Docker and Git Agent backends.\n const sections = requestedSections.filter(\n (section) =>\n (section.id !== \"cli\" || (cliOptions && supports(\"cliArgs\"))) &&\n (section.id !== \"sandbox\" || hasSandboxSection) &&\n (section.id !== \"permissions\" || hasPermissionSection),\n );\n const collapsedSections = useMemo(\n () => new Set(defaultCollapsedSections ?? []),\n [defaultCollapsedSections],\n );\n const domId = (id: SpecSectionId) => `${idPrefix}-${id}`;\n const { sectionRef } = useScrollSpy(\n sections.map((section) => domId(section.id)),\n );\n\n const applyEntries = (\n applied: Parameters<typeof withPermissionEntries>[1],\n mode: Parameters<typeof withPermissionEntries>[2],\n ) => commitChange(withPermissionEntries(value, applied, mode));\n const addEntry = (\n domain: Parameters<typeof withAddedPermission>[1],\n id: string,\n ) => {\n const next = withAddedPermission(value, domain, id);\n if (next) commitChange(next);\n };\n\n const sectionBody = (id: SpecSectionId): ReactNode => {\n switch (id) {\n case \"model\":\n return (\n <ModelSection\n value={value}\n onChange={commitChange}\n models={models}\n effectiveMode={effectiveMode}\n effectiveModel={effectiveModel}\n families={runtimeFamilies}\n {...(hostFields ? { hostFields } : {})}\n />\n );\n case \"prompt\":\n return (\n <PromptSection\n value={value}\n onChange={commitChange}\n supports={supports}\n variant={promptVariant}\n />\n );\n case \"workspace\":\n return (\n <WorkspaceSection\n value={value}\n onChange={commitChange}\n secretSelector={secretSelector}\n variant={variant}\n supports={supports}\n />\n );\n case \"sandbox\":\n return runtimeSchema ? (\n <SandboxSection\n value={value}\n onChange={commitChange}\n schema={runtimeSchema}\n {...(sandboxCatalog ? { catalog: sandboxCatalog } : {})}\n {...(sandboxCreate ? { createConfig: sandboxCreate } : {})}\n />\n ) : null;\n case \"permissions\":\n return supports(\"permissions\") ? (\n <PermissionsSection\n value={value}\n onChange={commitChange}\n families={runtimeFamilies}\n {...(runtimeSchema ? { schema: runtimeSchema } : {})}\n effectiveMode={effectiveMode}\n />\n ) : null;\n case \"environment\":\n return (\n <EnvironmentSection\n value={value}\n onChange={commitChange}\n secretSelector={secretSelector}\n />\n );\n case \"verify\":\n return (\n <VerifySection\n value={value}\n onChange={commitChange}\n models={models}\n families={runtimeFamilies}\n {...(secretSelector ? { secretSelector } : {})}\n {...(fixtureSchemas ? { fixtureSchemas } : {})}\n />\n );\n case \"commit\":\n return (\n <CommitSection\n value={value}\n onChange={commitChange}\n {...(inheritedCommits ? { inheritedCommits } : {})}\n />\n );\n case \"cli\":\n return cliOptions ? (\n <CLIArgsSection\n value={value}\n onChange={commitChange}\n cliOptions={cliOptions}\n />\n ) : null;\n }\n };\n\n const sectionAdvanced = (id: SpecSectionId): ReactNode => {\n switch (id) {\n case \"model\":\n return (\n <div className=\"grid gap-density-3\">\n <ModelAdvanced\n value={value}\n onChange={commitChange}\n models={models}\n supports={supports}\n families={runtimeFamilies}\n />\n <ModelContextAdvanced\n value={value}\n onChange={commitChange}\n entries={modelSkillEntries}\n onApplyEntries={applyEntries}\n onAddEntry={addEntry}\n showSkills={skillsSection === \"model\"}\n supports={supports}\n />\n </div>\n );\n case \"prompt\":\n return supports(\"prompt.schema\") ? (\n <PromptAdvanced value={value} onChange={commitChange} />\n ) : undefined;\n case \"permissions\":\n return (\n <PermissionsAdvanced\n entries={permissionEntries}\n onApplyEntries={applyEntries}\n onAddEntry={addEntry}\n includeSkills={skillsSection === \"permissions\"}\n supports={supports}\n />\n );\n case \"environment\":\n return variant === \"run\" ? (\n <EnvironmentAdvanced value={value} onChange={commitChange} />\n ) : undefined;\n default:\n return undefined;\n }\n };\n\n const valueControls = (content: ReactNode) =>\n readOnly && content ? (\n <fieldset disabled className=\"m-0 min-w-0 border-0 p-0\">\n {content}\n </fieldset>\n ) : (\n content\n );\n\n const sectionCard = (\n section: SpecSectionMeta,\n { number, bare = false }: { number?: string; bare?: boolean },\n ) => (\n <SectionCard\n key={section.id}\n meta={\n section.id === \"prompt\" && promptVariant !== \"runtime\"\n ? { ...section, hint: PROMPT_VARIANT_HINTS[promptVariant] }\n : section\n }\n {...(number ? { number } : {})}\n bare={bare}\n domId={domId(section.id)}\n sectionRef={sectionRef(domId(section.id))}\n advanced={valueControls(sectionAdvanced(section.id))}\n advancedHint={ADVANCED_HINTS[section.id]}\n defaultCollapsed={collapsedSections.has(section.id)}\n >\n {valueControls(sectionBody(section.id))}\n </SectionCard>\n );\n\n return (\n <div className={cn(\"@container\", className)}>\n <div\n className={\n tabs\n ? \"grid grid-cols-1 gap-density-3\"\n : \"mx-auto max-w-[820px] px-density-4 py-density-4\"\n }\n >\n {showHeader && (\n <Rail\n eyebrow={eyebrow}\n title={title}\n target={summarizeTarget(value)}\n />\n )}\n {runtimeError ? (\n <div\n role=\"alert\"\n className=\"mb-density-3 rounded-md border border-destructive/40 bg-destructive/10 px-density-3 py-density-2 text-sm text-destructive\"\n >\n {runtimeError} Select a valid mode below or switch to Raw to repair\n the prompt source.\n </div>\n ) : null}\n {beforeSections}\n {tabs ? (\n <SectionTabs\n tabs={tabs}\n sections={sections}\n activeTab={activeTab}\n onActiveTabChange={onActiveTabChange}\n renderSection={(section, { bare }) => sectionCard(section, { bare })}\n />\n ) : (\n sections.map((section, index) =>\n sectionCard(section, { number: String(index + 1).padStart(2, \"0\") }),\n )\n )}\n </div>\n {(onSave || onCancel) && (\n <Footer\n status={footerStatus}\n saveLabel={saveLabel}\n onSave={onSave}\n onCancel={onCancel}\n />\n )}\n </div>\n );\n}\n"],"names":["useId","useMemo","buildPermissionCatalog","SPEC_RUNTIME_FAMILIES","familyForModel","runtimeModeFromModel","firstMode","runtimeModelError","runtimeModeError","modeOptionFor","runtimeFieldSupport","SUPPORT_ALL_RUNTIME_FIELDS","runtimeSchemaPropertyAtPath","specPermissionEntries","runtimeFieldSection","SPEC_RUNTIME_SECTIONS","useScrollSpy","withPermissionEntries","withAddedPermission","jsx","ModelSection","PromptSection","WorkspaceSection","SandboxSection","PermissionsSection","EnvironmentSection","VerifySection","CommitSection","CLIArgsSection","jsxs","ModelAdvanced","ModelContextAdvanced","PromptAdvanced","PermissionsAdvanced","EnvironmentAdvanced","SectionCard","cn","Rail","summarizeTarget","SectionTabs","Footer"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { ChatModel, ToolMeta } from '../../chat/types.js';
3
3
  import { FixtureFenceSchemas } from '../../FixtureEditor/types.js';
4
- import { AISpecRuntimePermissionCatalog, AISpecRuntimeValue } from '../SpecRuntimeEditor.model.js';
4
+ import { AISpecRuntimeCommit, AISpecRuntimePermissionCatalog, AISpecRuntimeValue } from '../SpecRuntimeEditor.model.js';
5
5
  import { SpecRuntimeSandboxCreateConfig } from '../SandboxCreateWizard.model.js';
6
6
  import { SpecRuntimeCLIOptions } from './CLIArgsSection.js';
7
7
  import { SpecRuntimeSandboxCatalog, SpecRuntimeHostField, SpecRuntimeSecretSelectorConfig, SpecRuntimeTab, SpecSectionId } from './types.js';
@@ -56,6 +56,13 @@ export type SpecRuntimeEditorProps = {
56
56
  beforeSections?: ReactNode | undefined;
57
57
  /** Sections that should start collapsed in embedded contexts. */
58
58
  defaultCollapsedSections?: readonly SpecSectionId[] | undefined;
59
+ /**
60
+ * Commit stanza(s) inherited from a lower spec layer (e.g. the lifecycle
61
+ * step's own workflow), shown in the Commit section as the current
62
+ * selection — clearly marked inherited — only while the operator has not
63
+ * set `value.workflow.commits` at all.
64
+ */
65
+ inheritedCommits?: AISpecRuntimeCommit[] | undefined;
59
66
  /** Restrict task-owned fields when editing a reusable preset fragment. */
60
67
  variant?: "run" | "preset" | undefined;
61
68
  /** Renders the sticky footer's save action when set. */
@@ -65,5 +72,5 @@ export type SpecRuntimeEditorProps = {
65
72
  saveLabel?: string | undefined;
66
73
  footerStatus?: ReactNode | undefined;
67
74
  };
68
- export declare function SpecRuntimeEditor({ value, onChange, models, families, effectiveMode, effectiveModel, tools, permissionCatalog, secretSelector, cliOptions, fixtureSchemas, sandboxCatalog, sandboxCreate, sections: sectionFilter, tabs, activeTab, onActiveTabChange, hostFields, promptVariant, readOnly, className, title, eyebrow, showHeader, beforeSections, defaultCollapsedSections, variant, onSave, onCancel, saveLabel, footerStatus, }: SpecRuntimeEditorProps): import("react").JSX.Element;
75
+ export declare function SpecRuntimeEditor({ value, onChange, models, families, effectiveMode, effectiveModel, tools, permissionCatalog, secretSelector, cliOptions, fixtureSchemas, sandboxCatalog, sandboxCreate, sections: sectionFilter, tabs, activeTab, onActiveTabChange, hostFields, promptVariant, readOnly, className, title, eyebrow, showHeader, beforeSections, defaultCollapsedSections, inheritedCommits, variant, onSave, onCancel, saveLabel, footerStatus, }: SpecRuntimeEditorProps): import("react").JSX.Element;
69
76
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/SpecRuntimeEditor/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/SpecRuntimeEditor/index.tsx"],"names":[],"mappings":"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"}
@@ -59,6 +59,7 @@ function SpecRuntimeEditor({
59
59
  showHeader = true,
60
60
  beforeSections,
61
61
  defaultCollapsedSections,
62
+ inheritedCommits,
62
63
  variant = "run",
63
64
  onSave,
64
65
  onCancel,
@@ -214,7 +215,14 @@ function SpecRuntimeEditor({
214
215
  }
215
216
  );
216
217
  case "commit":
217
- return /* @__PURE__ */ jsx(CommitSection, { value, onChange: commitChange });
218
+ return /* @__PURE__ */ jsx(
219
+ CommitSection,
220
+ {
221
+ value,
222
+ onChange: commitChange,
223
+ ...inheritedCommits ? { inheritedCommits } : {}
224
+ }
225
+ );
218
226
  case "cli":
219
227
  return cliOptions ? /* @__PURE__ */ jsx(
220
228
  CLIArgsSection,