@flanksource/clicky-ui 0.3.27 → 0.3.28

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 (725) hide show
  1. package/NOTICE.md +14 -0
  2. package/dist/ai.cjs +52 -6
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +53 -7
  5. package/dist/ai.js.map +1 -1
  6. package/dist/comments/CommentCard.cjs +24 -39
  7. package/dist/comments/CommentCard.cjs.map +1 -1
  8. package/dist/comments/CommentCard.d.ts +9 -2
  9. package/dist/comments/CommentCard.d.ts.map +1 -1
  10. package/dist/comments/CommentCard.js +24 -39
  11. package/dist/comments/CommentCard.js.map +1 -1
  12. package/dist/comments/CommentProvider.cjs +4 -3
  13. package/dist/comments/CommentProvider.cjs.map +1 -1
  14. package/dist/comments/CommentProvider.d.ts +6 -1
  15. package/dist/comments/CommentProvider.d.ts.map +1 -1
  16. package/dist/comments/CommentProvider.js +4 -3
  17. package/dist/comments/CommentProvider.js.map +1 -1
  18. package/dist/comments/CommentSidePanel.cjs +65 -52
  19. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  20. package/dist/comments/CommentSidePanel.d.ts.map +1 -1
  21. package/dist/comments/CommentSidePanel.js +67 -54
  22. package/dist/comments/CommentSidePanel.js.map +1 -1
  23. package/dist/comments/CommentThread.cjs +2 -2
  24. package/dist/comments/CommentThread.cjs.map +1 -1
  25. package/dist/comments/CommentThread.d.ts +3 -3
  26. package/dist/comments/CommentThread.d.ts.map +1 -1
  27. package/dist/comments/CommentThread.js +2 -2
  28. package/dist/comments/CommentThread.js.map +1 -1
  29. package/dist/comments/CommentThreadList.cjs +85 -37
  30. package/dist/comments/CommentThreadList.cjs.map +1 -1
  31. package/dist/comments/CommentThreadList.d.ts +3 -3
  32. package/dist/comments/CommentThreadList.d.ts.map +1 -1
  33. package/dist/comments/CommentThreadList.js +86 -38
  34. package/dist/comments/CommentThreadList.js.map +1 -1
  35. package/dist/comments/comment-utils.cjs +26 -0
  36. package/dist/comments/comment-utils.cjs.map +1 -1
  37. package/dist/comments/comment-utils.d.ts +11 -0
  38. package/dist/comments/comment-utils.d.ts.map +1 -1
  39. package/dist/comments/comment-utils.js +26 -0
  40. package/dist/comments/comment-utils.js.map +1 -1
  41. package/dist/comments.cjs +2 -0
  42. package/dist/comments.cjs.map +1 -1
  43. package/dist/comments.js +3 -1
  44. package/dist/components/AccordionList.cjs +3 -0
  45. package/dist/components/AccordionList.cjs.map +1 -1
  46. package/dist/components/AccordionList.d.ts +3 -1
  47. package/dist/components/AccordionList.d.ts.map +1 -1
  48. package/dist/components/AccordionList.js +3 -0
  49. package/dist/components/AccordionList.js.map +1 -1
  50. package/dist/components/CopyButton.cjs +35 -0
  51. package/dist/components/CopyButton.cjs.map +1 -0
  52. package/dist/components/CopyButton.d.ts +20 -0
  53. package/dist/components/CopyButton.d.ts.map +1 -0
  54. package/dist/components/CopyButton.js +35 -0
  55. package/dist/components/CopyButton.js.map +1 -0
  56. package/dist/components/FilterBar.cjs +29 -6
  57. package/dist/components/FilterBar.cjs.map +1 -1
  58. package/dist/components/FilterBar.d.ts +10 -1
  59. package/dist/components/FilterBar.d.ts.map +1 -1
  60. package/dist/components/FilterBar.js +29 -6
  61. package/dist/components/FilterBar.js.map +1 -1
  62. package/dist/components/ListMenu.cjs +4 -1
  63. package/dist/components/ListMenu.cjs.map +1 -1
  64. package/dist/components/ListMenu.d.ts +5 -1
  65. package/dist/components/ListMenu.d.ts.map +1 -1
  66. package/dist/components/ListMenu.js +4 -1
  67. package/dist/components/ListMenu.js.map +1 -1
  68. package/dist/components/SegmentedControl.cjs +4 -2
  69. package/dist/components/SegmentedControl.cjs.map +1 -1
  70. package/dist/components/SegmentedControl.d.ts +4 -0
  71. package/dist/components/SegmentedControl.d.ts.map +1 -1
  72. package/dist/components/SegmentedControl.js +4 -2
  73. package/dist/components/SegmentedControl.js.map +1 -1
  74. package/dist/components/clipboard.cjs +60 -0
  75. package/dist/components/clipboard.cjs.map +1 -0
  76. package/dist/components/clipboard.d.ts +13 -0
  77. package/dist/components/clipboard.d.ts.map +1 -0
  78. package/dist/components/clipboard.js +60 -0
  79. package/dist/components/clipboard.js.map +1 -0
  80. package/dist/components/json-schema-form-array.cjs +15 -1
  81. package/dist/components/json-schema-form-array.cjs.map +1 -1
  82. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  83. package/dist/components/json-schema-form-array.js +15 -1
  84. package/dist/components/json-schema-form-array.js.map +1 -1
  85. package/dist/components/json-schema-form-list-array.cjs +113 -0
  86. package/dist/components/json-schema-form-list-array.cjs.map +1 -0
  87. package/dist/components/json-schema-form-list-array.d.ts +7 -0
  88. package/dist/components/json-schema-form-list-array.d.ts.map +1 -0
  89. package/dist/components/json-schema-form-list-array.js +113 -0
  90. package/dist/components/json-schema-form-list-array.js.map +1 -0
  91. package/dist/components/json-schema-form-resolve.cjs +1 -1
  92. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  93. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  94. package/dist/components/json-schema-form-resolve.js +1 -1
  95. package/dist/components/json-schema-form-resolve.js.map +1 -1
  96. package/dist/components/json-schema-form-types.d.ts +1 -1
  97. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  98. package/dist/components.cjs +5 -0
  99. package/dist/components.cjs.map +1 -1
  100. package/dist/components.d.ts +2 -0
  101. package/dist/components.d.ts.map +1 -1
  102. package/dist/components.js +5 -0
  103. package/dist/components.js.map +1 -1
  104. package/dist/data/Clicky.cjs +4 -1
  105. package/dist/data/Clicky.cjs.map +1 -1
  106. package/dist/data/Clicky.js +4 -1
  107. package/dist/data/Clicky.js.map +1 -1
  108. package/dist/data/DataTable.cjs +202 -40
  109. package/dist/data/DataTable.cjs.map +1 -1
  110. package/dist/data/DataTable.d.ts +163 -3
  111. package/dist/data/DataTable.d.ts.map +1 -1
  112. package/dist/data/DataTable.js +202 -40
  113. package/dist/data/DataTable.js.map +1 -1
  114. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs +1 -1
  115. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs.map +1 -1
  116. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js +1 -1
  117. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js.map +1 -1
  118. package/dist/data/FixtureEditor/fixture-frontmatter.cjs +8 -10
  119. package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -1
  120. package/dist/data/FixtureEditor/fixture-frontmatter.d.ts.map +1 -1
  121. package/dist/data/FixtureEditor/fixture-frontmatter.js +8 -10
  122. package/dist/data/FixtureEditor/fixture-frontmatter.js.map +1 -1
  123. package/dist/data/SelectionActionBar.cjs +242 -0
  124. package/dist/data/SelectionActionBar.cjs.map +1 -0
  125. package/dist/data/SelectionActionBar.d.ts +28 -0
  126. package/dist/data/SelectionActionBar.d.ts.map +1 -0
  127. package/dist/data/SelectionActionBar.js +242 -0
  128. package/dist/data/SelectionActionBar.js.map +1 -0
  129. package/dist/data/TaskManager.cjs +34 -12
  130. package/dist/data/TaskManager.cjs.map +1 -1
  131. package/dist/data/TaskManager.d.ts.map +1 -1
  132. package/dist/data/TaskManager.js +34 -12
  133. package/dist/data/TaskManager.js.map +1 -1
  134. package/dist/data/TaskManagerButton.cjs +11 -7
  135. package/dist/data/TaskManagerButton.cjs.map +1 -1
  136. package/dist/data/TaskManagerButton.d.ts.map +1 -1
  137. package/dist/data/TaskManagerButton.js +11 -7
  138. package/dist/data/TaskManagerButton.js.map +1 -1
  139. package/dist/data/TaskProgress.cjs +55 -11
  140. package/dist/data/TaskProgress.cjs.map +1 -1
  141. package/dist/data/TaskProgress.d.ts.map +1 -1
  142. package/dist/data/TaskProgress.js +53 -9
  143. package/dist/data/TaskProgress.js.map +1 -1
  144. package/dist/data/ai/ChatWindow.cjs +2 -4
  145. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  146. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  147. package/dist/data/ai/ChatWindow.js +2 -4
  148. package/dist/data/ai/ChatWindow.js.map +1 -1
  149. package/dist/data/ai/ChatWindow.runtime.cjs +1 -2
  150. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  151. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  152. package/dist/data/ai/ChatWindow.runtime.js +1 -2
  153. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  154. package/dist/data/ai/PromptCatalog/PromptCatalogTable.cjs +262 -0
  155. package/dist/data/ai/PromptCatalog/PromptCatalogTable.cjs.map +1 -0
  156. package/dist/data/ai/PromptCatalog/PromptCatalogTable.d.ts +16 -0
  157. package/dist/data/ai/PromptCatalog/PromptCatalogTable.d.ts.map +1 -0
  158. package/dist/data/ai/PromptCatalog/PromptCatalogTable.js +262 -0
  159. package/dist/data/ai/PromptCatalog/PromptCatalogTable.js.map +1 -0
  160. package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs +77 -0
  161. package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs.map +1 -0
  162. package/dist/data/ai/PromptCatalog/PromptLayerStrip.d.ts +8 -0
  163. package/dist/data/ai/PromptCatalog/PromptLayerStrip.d.ts.map +1 -0
  164. package/dist/data/ai/PromptCatalog/PromptLayerStrip.js +77 -0
  165. package/dist/data/ai/PromptCatalog/PromptLayerStrip.js.map +1 -0
  166. package/dist/data/ai/PromptCatalog/PromptPage.cjs +332 -0
  167. package/dist/data/ai/PromptCatalog/PromptPage.cjs.map +1 -0
  168. package/dist/data/ai/PromptCatalog/PromptPage.d.ts +17 -0
  169. package/dist/data/ai/PromptCatalog/PromptPage.d.ts.map +1 -0
  170. package/dist/data/ai/PromptCatalog/PromptPage.js +332 -0
  171. package/dist/data/ai/PromptCatalog/PromptPage.js.map +1 -0
  172. package/dist/data/ai/PromptCatalog/PromptPageEditor.cjs +102 -0
  173. package/dist/data/ai/PromptCatalog/PromptPageEditor.cjs.map +1 -0
  174. package/dist/data/ai/PromptCatalog/PromptPageEditor.d.ts +16 -0
  175. package/dist/data/ai/PromptCatalog/PromptPageEditor.d.ts.map +1 -0
  176. package/dist/data/ai/PromptCatalog/PromptPageEditor.js +102 -0
  177. package/dist/data/ai/PromptCatalog/PromptPageEditor.js.map +1 -0
  178. package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs +102 -0
  179. package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs.map +1 -0
  180. package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts +10 -0
  181. package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts.map +1 -0
  182. package/dist/data/ai/PromptCatalog/PromptPageHeader.js +102 -0
  183. package/dist/data/ai/PromptCatalog/PromptPageHeader.js.map +1 -0
  184. package/dist/data/ai/PromptCatalog/PromptPagePreview.cjs +90 -0
  185. package/dist/data/ai/PromptCatalog/PromptPagePreview.cjs.map +1 -0
  186. package/dist/data/ai/PromptCatalog/PromptPagePreview.d.ts +8 -0
  187. package/dist/data/ai/PromptCatalog/PromptPagePreview.d.ts.map +1 -0
  188. package/dist/data/ai/PromptCatalog/PromptPagePreview.js +90 -0
  189. package/dist/data/ai/PromptCatalog/PromptPagePreview.js.map +1 -0
  190. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs +168 -0
  191. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs.map +1 -0
  192. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts +17 -0
  193. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts.map +1 -0
  194. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js +168 -0
  195. package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js.map +1 -0
  196. package/dist/data/ai/PromptCatalog/PromptSourceBadge.cjs +36 -0
  197. package/dist/data/ai/PromptCatalog/PromptSourceBadge.cjs.map +1 -0
  198. package/dist/data/ai/PromptCatalog/PromptSourceBadge.d.ts +7 -0
  199. package/dist/data/ai/PromptCatalog/PromptSourceBadge.d.ts.map +1 -0
  200. package/dist/data/ai/PromptCatalog/PromptSourceBadge.js +36 -0
  201. package/dist/data/ai/PromptCatalog/PromptSourceBadge.js.map +1 -0
  202. package/dist/data/ai/PromptCatalog/index.d.ts +9 -0
  203. package/dist/data/ai/PromptCatalog/index.d.ts.map +1 -0
  204. package/dist/data/ai/PromptCatalog/prompt-catalog-model.cjs +137 -0
  205. package/dist/data/ai/PromptCatalog/prompt-catalog-model.cjs.map +1 -0
  206. package/dist/data/ai/PromptCatalog/prompt-catalog-model.d.ts +28 -0
  207. package/dist/data/ai/PromptCatalog/prompt-catalog-model.d.ts.map +1 -0
  208. package/dist/data/ai/PromptCatalog/prompt-catalog-model.js +137 -0
  209. package/dist/data/ai/PromptCatalog/prompt-catalog-model.js.map +1 -0
  210. package/dist/data/ai/PromptCatalog/prompt-page-model.cjs +114 -0
  211. package/dist/data/ai/PromptCatalog/prompt-page-model.cjs.map +1 -0
  212. package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts +45 -0
  213. package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts.map +1 -0
  214. package/dist/data/ai/PromptCatalog/prompt-page-model.js +114 -0
  215. package/dist/data/ai/PromptCatalog/prompt-page-model.js.map +1 -0
  216. package/dist/data/ai/PromptCatalog/types.d.ts +70 -0
  217. package/dist/data/ai/PromptCatalog/types.d.ts.map +1 -0
  218. package/dist/data/ai/PromptPicker/PromptPicker.cjs +9 -12
  219. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
  220. package/dist/data/ai/PromptPicker/PromptPicker.js +9 -12
  221. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
  222. package/dist/data/ai/PromptPicker/index.d.ts +1 -1
  223. package/dist/data/ai/PromptPicker/index.d.ts.map +1 -1
  224. package/dist/data/ai/PromptPicker/types.cjs.map +1 -1
  225. package/dist/data/ai/PromptPicker/types.d.ts +9 -0
  226. package/dist/data/ai/PromptPicker/types.d.ts.map +1 -1
  227. package/dist/data/ai/PromptPicker/types.js.map +1 -1
  228. package/dist/data/ai/PromptRunEditor/index.cjs +2 -2
  229. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  230. package/dist/data/ai/PromptRunEditor/index.js +3 -3
  231. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  232. package/dist/data/ai/PromptRunEditor/model.cjs +0 -1
  233. package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -1
  234. package/dist/data/ai/PromptRunEditor/model.d.ts +1 -1
  235. package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -1
  236. package/dist/data/ai/PromptRunEditor/model.js +0 -1
  237. package/dist/data/ai/PromptRunEditor/model.js.map +1 -1
  238. package/dist/data/ai/RuntimeModePicker.cjs +15 -6
  239. package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
  240. package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
  241. package/dist/data/ai/RuntimeModePicker.js +17 -8
  242. package/dist/data/ai/RuntimeModePicker.js.map +1 -1
  243. package/dist/data/ai/SessionInspector.collection-types.d.ts +1 -1
  244. package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -1
  245. package/dist/data/ai/SessionInspector.collection.cjs +3 -3
  246. package/dist/data/ai/SessionInspector.collection.cjs.map +1 -1
  247. package/dist/data/ai/SessionInspector.collection.js +3 -3
  248. package/dist/data/ai/SessionInspector.collection.js.map +1 -1
  249. package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
  250. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
  251. package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
  252. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
  253. package/dist/data/ai/SessionInspector.model.cjs +3 -3
  254. package/dist/data/ai/SessionInspector.model.cjs.map +1 -1
  255. package/dist/data/ai/SessionInspector.model.d.ts +1 -1
  256. package/dist/data/ai/SessionInspector.model.d.ts.map +1 -1
  257. package/dist/data/ai/SessionInspector.model.js +3 -3
  258. package/dist/data/ai/SessionInspector.model.js.map +1 -1
  259. package/dist/data/ai/SessionInspector.panels.cjs +1 -1
  260. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
  261. package/dist/data/ai/SessionInspector.panels.js +1 -1
  262. package/dist/data/ai/SessionInspector.panels.js.map +1 -1
  263. package/dist/data/ai/SessionInspector.summary.cjs +3 -3
  264. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
  265. package/dist/data/ai/SessionInspector.summary.js +3 -3
  266. package/dist/data/ai/SessionInspector.summary.js.map +1 -1
  267. package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
  268. package/dist/data/ai/SessionViewer.unified.d.ts +3 -2
  269. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  270. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +18 -30
  271. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
  272. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
  273. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +19 -31
  274. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
  275. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs +71 -86
  276. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs.map +1 -1
  277. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.d.ts.map +1 -1
  278. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js +72 -87
  279. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js.map +1 -1
  280. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.cjs +99 -0
  281. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.cjs.map +1 -0
  282. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.d.ts +13 -0
  283. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.d.ts.map +1 -0
  284. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.js +99 -0
  285. package/dist/data/ai/SpecRuntimeEditor/ModelContextAdvanced.js.map +1 -0
  286. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +34 -23
  287. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
  288. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +6 -2
  289. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
  290. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +35 -24
  291. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
  292. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.cjs +114 -0
  293. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.cjs.map +1 -0
  294. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.d.ts +10 -0
  295. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.d.ts.map +1 -0
  296. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.js +114 -0
  297. package/dist/data/ai/SpecRuntimeEditor/PermissionModeField.js.map +1 -0
  298. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.cjs +160 -0
  299. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.cjs.map +1 -0
  300. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.d.ts +9 -0
  301. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.d.ts.map +1 -0
  302. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.js +160 -0
  303. package/dist/data/ai/SpecRuntimeEditor/PermissionPolicyList.js.map +1 -0
  304. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs +27 -241
  305. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs.map +1 -1
  306. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts +5 -6
  307. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts.map +1 -1
  308. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js +25 -239
  309. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js.map +1 -1
  310. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +21 -8
  311. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
  312. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts +4 -1
  313. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -1
  314. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +22 -9
  315. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
  316. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.cjs +207 -164
  317. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.cjs.map +1 -1
  318. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.d.ts +4 -3
  319. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.d.ts.map +1 -1
  320. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.js +210 -167
  321. package/dist/data/ai/SpecRuntimeEditor/SandboxSection.js.map +1 -1
  322. package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs +15 -15
  323. package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs.map +1 -1
  324. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts.map +1 -1
  325. package/dist/data/ai/SpecRuntimeEditor/SectionCard.js +15 -15
  326. package/dist/data/ai/SpecRuntimeEditor/SectionCard.js.map +1 -1
  327. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +120 -42
  328. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -1
  329. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts +4 -1
  330. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -1
  331. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +123 -45
  332. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -1
  333. package/dist/data/ai/SpecRuntimeEditor/env-model.cjs.map +1 -1
  334. package/dist/data/ai/SpecRuntimeEditor/env-model.d.ts.map +1 -1
  335. package/dist/data/ai/SpecRuntimeEditor/env-model.js.map +1 -1
  336. package/dist/data/ai/SpecRuntimeEditor/index.cjs +136 -48
  337. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  338. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +13 -3
  339. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  340. package/dist/data/ai/SpecRuntimeEditor/index.js +137 -49
  341. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  342. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs +93 -0
  343. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs.map +1 -0
  344. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.d.ts +6 -0
  345. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.d.ts.map +1 -0
  346. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js +93 -0
  347. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js.map +1 -0
  348. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.cjs +35 -0
  349. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.cjs.map +1 -0
  350. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.d.ts +5 -0
  351. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.d.ts.map +1 -0
  352. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.js +35 -0
  353. package/dist/data/ai/SpecRuntimeEditor/permission-preset-storage.js.map +1 -0
  354. package/dist/data/ai/SpecRuntimeEditor/presets.cjs +2 -9
  355. package/dist/data/ai/SpecRuntimeEditor/presets.cjs.map +1 -1
  356. package/dist/data/ai/SpecRuntimeEditor/presets.d.ts +1 -2
  357. package/dist/data/ai/SpecRuntimeEditor/presets.d.ts.map +1 -1
  358. package/dist/data/ai/SpecRuntimeEditor/presets.js +2 -9
  359. package/dist/data/ai/SpecRuntimeEditor/presets.js.map +1 -1
  360. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
  361. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +1 -1
  362. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
  363. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
  364. package/dist/data/ai/SpecRuntimeEditor/types.cjs +2 -7
  365. package/dist/data/ai/SpecRuntimeEditor/types.cjs.map +1 -1
  366. package/dist/data/ai/SpecRuntimeEditor/types.d.ts +0 -1
  367. package/dist/data/ai/SpecRuntimeEditor/types.d.ts.map +1 -1
  368. package/dist/data/ai/SpecRuntimeEditor/types.js +3 -8
  369. package/dist/data/ai/SpecRuntimeEditor/types.js.map +1 -1
  370. package/dist/data/ai/SpecRuntimeEditor/update.cjs +43 -33
  371. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
  372. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +7 -13
  373. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
  374. package/dist/data/ai/SpecRuntimeEditor/update.js +43 -33
  375. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
  376. package/dist/data/ai/SpecRuntimeEditor.model.cjs +33 -49
  377. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
  378. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +52 -29
  379. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
  380. package/dist/data/ai/SpecRuntimeEditor.model.js +33 -48
  381. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
  382. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.cjs +276 -0
  383. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.cjs.map +1 -0
  384. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.d.ts +58 -0
  385. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.d.ts.map +1 -0
  386. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.js +276 -0
  387. package/dist/data/ai/SpecRuntimeEditor.sandbox-model.js.map +1 -0
  388. package/dist/data/ai/ThreadPicker.cjs +55 -42
  389. package/dist/data/ai/ThreadPicker.cjs.map +1 -1
  390. package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
  391. package/dist/data/ai/ThreadPicker.js +56 -43
  392. package/dist/data/ai/ThreadPicker.js.map +1 -1
  393. package/dist/data/ai/ToolPreferences.cjs +9 -1
  394. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  395. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  396. package/dist/data/ai/ToolPreferences.js +9 -1
  397. package/dist/data/ai/ToolPreferences.js.map +1 -1
  398. package/dist/data/ai/ToolSchemaBrowser.cjs +41 -487
  399. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
  400. package/dist/data/ai/ToolSchemaBrowser.d.ts +7 -2
  401. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
  402. package/dist/data/ai/ToolSchemaBrowser.detail.cjs +238 -0
  403. package/dist/data/ai/ToolSchemaBrowser.detail.cjs.map +1 -0
  404. package/dist/data/ai/ToolSchemaBrowser.detail.d.ts +8 -0
  405. package/dist/data/ai/ToolSchemaBrowser.detail.d.ts.map +1 -0
  406. package/dist/data/ai/ToolSchemaBrowser.detail.js +238 -0
  407. package/dist/data/ai/ToolSchemaBrowser.detail.js.map +1 -0
  408. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +57 -0
  409. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -0
  410. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +9 -0
  411. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -0
  412. package/dist/data/ai/ToolSchemaBrowser.directory-header.js +57 -0
  413. package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -0
  414. package/dist/data/ai/ToolSchemaBrowser.js +42 -488
  415. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
  416. package/dist/data/ai/ToolSchemaBrowser.model.cjs +130 -0
  417. package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -0
  418. package/dist/data/ai/ToolSchemaBrowser.model.d.ts +35 -0
  419. package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -0
  420. package/dist/data/ai/ToolSchemaBrowser.model.js +130 -0
  421. package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -0
  422. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +57 -0
  423. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +1 -0
  424. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +7 -0
  425. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +1 -0
  426. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +57 -0
  427. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +1 -0
  428. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +389 -0
  429. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -0
  430. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +23 -0
  431. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -0
  432. package/dist/data/ai/ToolSchemaBrowser.sidebar.js +389 -0
  433. package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -0
  434. package/dist/data/ai/agent-action-icons.cjs +14 -6
  435. package/dist/data/ai/agent-action-icons.cjs.map +1 -1
  436. package/dist/data/ai/agent-action-icons.d.ts.map +1 -1
  437. package/dist/data/ai/agent-action-icons.js +14 -6
  438. package/dist/data/ai/agent-action-icons.js.map +1 -1
  439. package/dist/data/ai/examples/sessions/claude-complete.cjs +17 -9
  440. package/dist/data/ai/examples/sessions/claude-complete.cjs.map +1 -1
  441. package/dist/data/ai/examples/sessions/claude-complete.d.ts.map +1 -1
  442. package/dist/data/ai/examples/sessions/claude-complete.js +17 -9
  443. package/dist/data/ai/examples/sessions/claude-complete.js.map +1 -1
  444. package/dist/data/ai/examples/sessions/claude.cjs +7 -4
  445. package/dist/data/ai/examples/sessions/claude.cjs.map +1 -1
  446. package/dist/data/ai/examples/sessions/claude.d.ts.map +1 -1
  447. package/dist/data/ai/examples/sessions/claude.js +7 -4
  448. package/dist/data/ai/examples/sessions/claude.js.map +1 -1
  449. package/dist/data/ai/examples/sessions/codex-complete.cjs +17 -10
  450. package/dist/data/ai/examples/sessions/codex-complete.cjs.map +1 -1
  451. package/dist/data/ai/examples/sessions/codex-complete.d.ts.map +1 -1
  452. package/dist/data/ai/examples/sessions/codex-complete.js +17 -10
  453. package/dist/data/ai/examples/sessions/codex-complete.js.map +1 -1
  454. package/dist/data/ai/examples/sessions/codex.cjs +7 -4
  455. package/dist/data/ai/examples/sessions/codex.cjs.map +1 -1
  456. package/dist/data/ai/examples/sessions/codex.d.ts.map +1 -1
  457. package/dist/data/ai/examples/sessions/codex.js +7 -4
  458. package/dist/data/ai/examples/sessions/codex.js.map +1 -1
  459. package/dist/data/ai/index.d.ts +6 -3
  460. package/dist/data/ai/index.d.ts.map +1 -1
  461. package/dist/data/ai/runtime-profile.cjs +93 -0
  462. package/dist/data/ai/runtime-profile.cjs.map +1 -0
  463. package/dist/data/ai/runtime-profile.d.ts +73 -0
  464. package/dist/data/ai/runtime-profile.d.ts.map +1 -0
  465. package/dist/data/ai/runtime-profile.js +93 -0
  466. package/dist/data/ai/runtime-profile.js.map +1 -0
  467. package/dist/data/ai/sandbox-kind-meta.cjs +38 -4
  468. package/dist/data/ai/sandbox-kind-meta.cjs.map +1 -1
  469. package/dist/data/ai/sandbox-kind-meta.d.ts +3 -0
  470. package/dist/data/ai/sandbox-kind-meta.d.ts.map +1 -1
  471. package/dist/data/ai/sandbox-kind-meta.js +38 -4
  472. package/dist/data/ai/sandbox-kind-meta.js.map +1 -1
  473. package/dist/data/chat/Chat.cjs +13 -3
  474. package/dist/data/chat/Chat.cjs.map +1 -1
  475. package/dist/data/chat/Chat.d.ts.map +1 -1
  476. package/dist/data/chat/Chat.fixtures.cjs +3 -3
  477. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  478. package/dist/data/chat/Chat.fixtures.js +3 -3
  479. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  480. package/dist/data/chat/Chat.js +14 -4
  481. package/dist/data/chat/Chat.js.map +1 -1
  482. package/dist/data/chat/Chat.runtime.cjs +4 -9
  483. package/dist/data/chat/Chat.runtime.cjs.map +1 -1
  484. package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
  485. package/dist/data/chat/Chat.runtime.js +4 -9
  486. package/dist/data/chat/Chat.runtime.js.map +1 -1
  487. package/dist/data/chat/ChatRuntimeToolbar.cjs +5 -5
  488. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  489. package/dist/data/chat/ChatRuntimeToolbar.js +5 -5
  490. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  491. package/dist/data/chat/ContextMeter.cjs +3 -3
  492. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  493. package/dist/data/chat/ContextMeter.d.ts +3 -3
  494. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  495. package/dist/data/chat/ContextMeter.js +3 -3
  496. package/dist/data/chat/ContextMeter.js.map +1 -1
  497. package/dist/data/chat/approval.cjs.map +1 -1
  498. package/dist/data/chat/approval.d.ts +21 -1
  499. package/dist/data/chat/approval.d.ts.map +1 -1
  500. package/dist/data/chat/approval.js.map +1 -1
  501. package/dist/data/chat/clickyOperationsToTools.cjs +5 -0
  502. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  503. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  504. package/dist/data/chat/clickyOperationsToTools.js +5 -0
  505. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  506. package/dist/data/chat/types.cjs.map +1 -1
  507. package/dist/data/chat/types.d.ts +7 -5
  508. package/dist/data/chat/types.d.ts.map +1 -1
  509. package/dist/data/chat/types.js.map +1 -1
  510. package/dist/data/chat/usage-snapshot.cjs +21 -1
  511. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  512. package/dist/data/chat/usage-snapshot.d.ts +2 -0
  513. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  514. package/dist/data/chat/usage-snapshot.js +22 -2
  515. package/dist/data/chat/usage-snapshot.js.map +1 -1
  516. package/dist/data/runtime/RuntimeBar.cjs +29 -16
  517. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  518. package/dist/data/runtime/RuntimeBar.d.ts +10 -2
  519. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  520. package/dist/data/runtime/RuntimeBar.js +31 -18
  521. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  522. package/dist/data/runtime/RuntimeBar.model.cjs +10 -20
  523. package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -1
  524. package/dist/data/runtime/RuntimeBar.model.d.ts +2 -2
  525. package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -1
  526. package/dist/data/runtime/RuntimeBar.model.js +11 -21
  527. package/dist/data/runtime/RuntimeBar.model.js.map +1 -1
  528. package/dist/data/runtime/RuntimeBarCombo.cjs +11 -6
  529. package/dist/data/runtime/RuntimeBarCombo.cjs.map +1 -1
  530. package/dist/data/runtime/RuntimeBarCombo.d.ts +3 -1
  531. package/dist/data/runtime/RuntimeBarCombo.d.ts.map +1 -1
  532. package/dist/data/runtime/RuntimeBarCombo.js +11 -6
  533. package/dist/data/runtime/RuntimeBarCombo.js.map +1 -1
  534. package/dist/data/runtime/RuntimeBarSegments.cjs +7 -5
  535. package/dist/data/runtime/RuntimeBarSegments.cjs.map +1 -1
  536. package/dist/data/runtime/RuntimeBarSegments.d.ts +4 -2
  537. package/dist/data/runtime/RuntimeBarSegments.d.ts.map +1 -1
  538. package/dist/data/runtime/RuntimeBarSegments.js +7 -5
  539. package/dist/data/runtime/RuntimeBarSegments.js.map +1 -1
  540. package/dist/data/runtime/model-capabilities.cjs +0 -3
  541. package/dist/data/runtime/model-capabilities.cjs.map +1 -1
  542. package/dist/data/runtime/model-capabilities.d.ts +0 -1
  543. package/dist/data/runtime/model-capabilities.d.ts.map +1 -1
  544. package/dist/data/runtime/model-capabilities.js +0 -3
  545. package/dist/data/runtime/model-capabilities.js.map +1 -1
  546. package/dist/data/runtime/provider-status.cjs +1 -1
  547. package/dist/data/runtime/provider-status.cjs.map +1 -1
  548. package/dist/data/runtime/provider-status.js +1 -1
  549. package/dist/data/runtime/provider-status.js.map +1 -1
  550. package/dist/data/runtime/runtime-field-support.cjs +63 -0
  551. package/dist/data/runtime/runtime-field-support.cjs.map +1 -0
  552. package/dist/data/runtime/runtime-field-support.d.ts +13 -0
  553. package/dist/data/runtime/runtime-field-support.d.ts.map +1 -0
  554. package/dist/data/runtime/runtime-field-support.js +63 -0
  555. package/dist/data/runtime/runtime-field-support.js.map +1 -0
  556. package/dist/data/runtime/runtime-mode.cjs +158 -116
  557. package/dist/data/runtime/runtime-mode.cjs.map +1 -1
  558. package/dist/data/runtime/runtime-mode.d.ts +57 -19
  559. package/dist/data/runtime/runtime-mode.d.ts.map +1 -1
  560. package/dist/data/runtime/runtime-mode.js +158 -116
  561. package/dist/data/runtime/runtime-mode.js.map +1 -1
  562. package/dist/data/selectionActionSplit.cjs +33 -0
  563. package/dist/data/selectionActionSplit.cjs.map +1 -0
  564. package/dist/data/selectionActionSplit.d.ts +36 -0
  565. package/dist/data/selectionActionSplit.d.ts.map +1 -0
  566. package/dist/data/selectionActionSplit.js +33 -0
  567. package/dist/data/selectionActionSplit.js.map +1 -0
  568. package/dist/data/task-copy.cjs +76 -0
  569. package/dist/data/task-copy.cjs.map +1 -0
  570. package/dist/data/task-copy.d.ts +12 -0
  571. package/dist/data/task-copy.d.ts.map +1 -0
  572. package/dist/data/task-copy.js +76 -0
  573. package/dist/data/task-copy.js.map +1 -0
  574. package/dist/data/version-info.cjs +3 -3
  575. package/dist/data/version-info.js +3 -3
  576. package/dist/data.cjs +34 -0
  577. package/dist/data.cjs.map +1 -1
  578. package/dist/data.d.ts +4 -1
  579. package/dist/data.d.ts.map +1 -1
  580. package/dist/data.js +34 -0
  581. package/dist/data.js.map +1 -1
  582. package/dist/hooks/use-task-run.cjs +24 -17
  583. package/dist/hooks/use-task-run.cjs.map +1 -1
  584. package/dist/hooks/use-task-run.d.ts +3 -1
  585. package/dist/hooks/use-task-run.d.ts.map +1 -1
  586. package/dist/hooks/use-task-run.js +25 -18
  587. package/dist/hooks/use-task-run.js.map +1 -1
  588. package/dist/icons/components/UiCalendarCheck.cjs +15 -0
  589. package/dist/icons/components/UiCalendarCheck.cjs.map +1 -0
  590. package/dist/icons/components/UiCalendarCheck.d.ts +15 -0
  591. package/dist/icons/components/UiCalendarCheck.d.ts.map +1 -0
  592. package/dist/icons/components/UiCalendarCheck.js +15 -0
  593. package/dist/icons/components/UiCalendarCheck.js.map +1 -0
  594. package/dist/icons/components/UiChartLineUp.cjs +15 -0
  595. package/dist/icons/components/UiChartLineUp.cjs.map +1 -0
  596. package/dist/icons/components/UiChartLineUp.d.ts +15 -0
  597. package/dist/icons/components/UiChartLineUp.d.ts.map +1 -0
  598. package/dist/icons/components/UiChartLineUp.js +15 -0
  599. package/dist/icons/components/UiChartLineUp.js.map +1 -0
  600. package/dist/icons/components/UiClockCountdown.cjs +15 -0
  601. package/dist/icons/components/UiClockCountdown.cjs.map +1 -0
  602. package/dist/icons/components/UiClockCountdown.d.ts +15 -0
  603. package/dist/icons/components/UiClockCountdown.d.ts.map +1 -0
  604. package/dist/icons/components/UiClockCountdown.js +15 -0
  605. package/dist/icons/components/UiClockCountdown.js.map +1 -0
  606. package/dist/icons/components/UiFactory.cjs +15 -0
  607. package/dist/icons/components/UiFactory.cjs.map +1 -0
  608. package/dist/icons/components/UiFactory.d.ts +15 -0
  609. package/dist/icons/components/UiFactory.d.ts.map +1 -0
  610. package/dist/icons/components/UiFactory.js +15 -0
  611. package/dist/icons/components/UiFactory.js.map +1 -0
  612. package/dist/icons/components/UiHandCoins.cjs +15 -0
  613. package/dist/icons/components/UiHandCoins.cjs.map +1 -0
  614. package/dist/icons/components/UiHandCoins.d.ts +15 -0
  615. package/dist/icons/components/UiHandCoins.d.ts.map +1 -0
  616. package/dist/icons/components/UiHandCoins.js +15 -0
  617. package/dist/icons/components/UiHandCoins.js.map +1 -0
  618. package/dist/icons/components/UiInvoice.cjs +15 -0
  619. package/dist/icons/components/UiInvoice.cjs.map +1 -0
  620. package/dist/icons/components/UiInvoice.d.ts +15 -0
  621. package/dist/icons/components/UiInvoice.d.ts.map +1 -0
  622. package/dist/icons/components/UiInvoice.js +15 -0
  623. package/dist/icons/components/UiInvoice.js.map +1 -0
  624. package/dist/icons/components/UiTax.cjs +15 -0
  625. package/dist/icons/components/UiTax.cjs.map +1 -0
  626. package/dist/icons/components/UiTax.d.ts +15 -0
  627. package/dist/icons/components/UiTax.d.ts.map +1 -0
  628. package/dist/icons/components/UiTax.js +15 -0
  629. package/dist/icons/components/UiTax.js.map +1 -0
  630. package/dist/icons/index.d.ts +14 -0
  631. package/dist/icons/index.d.ts.map +1 -1
  632. package/dist/icons/registry.cjs +14 -0
  633. package/dist/icons/registry.cjs.map +1 -1
  634. package/dist/icons/registry.d.ts.map +1 -1
  635. package/dist/icons/registry.js +14 -0
  636. package/dist/icons/registry.js.map +1 -1
  637. package/dist/icons.cjs +21 -0
  638. package/dist/icons.cjs.map +1 -1
  639. package/dist/icons.js +21 -0
  640. package/dist/icons.js.map +1 -1
  641. package/dist/index.cjs +43 -0
  642. package/dist/index.cjs.map +1 -1
  643. package/dist/index.js +44 -1
  644. package/dist/index.js.map +1 -1
  645. package/dist/layout/AppShell.cjs +17 -3
  646. package/dist/layout/AppShell.cjs.map +1 -1
  647. package/dist/layout/AppShell.d.ts.map +1 -1
  648. package/dist/layout/AppShell.js +17 -3
  649. package/dist/layout/AppShell.js.map +1 -1
  650. package/dist/overlay/DropdownMenu.cjs +46 -35
  651. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  652. package/dist/overlay/DropdownMenu.js +46 -35
  653. package/dist/overlay/DropdownMenu.js.map +1 -1
  654. package/dist/rpc/FilterForm.cjs +26 -11
  655. package/dist/rpc/FilterForm.cjs.map +1 -1
  656. package/dist/rpc/FilterForm.d.ts +4 -1
  657. package/dist/rpc/FilterForm.d.ts.map +1 -1
  658. package/dist/rpc/FilterForm.js +26 -11
  659. package/dist/rpc/FilterForm.js.map +1 -1
  660. package/dist/rpc/FilterFormFields.cjs +3 -2
  661. package/dist/rpc/FilterFormFields.cjs.map +1 -1
  662. package/dist/rpc/FilterFormFields.d.ts +2 -1
  663. package/dist/rpc/FilterFormFields.d.ts.map +1 -1
  664. package/dist/rpc/FilterFormFields.js +3 -2
  665. package/dist/rpc/FilterFormFields.js.map +1 -1
  666. package/dist/rpc/OperationActionBar.cjs +67 -15
  667. package/dist/rpc/OperationActionBar.cjs.map +1 -1
  668. package/dist/rpc/OperationActionBar.d.ts +11 -3
  669. package/dist/rpc/OperationActionBar.d.ts.map +1 -1
  670. package/dist/rpc/OperationActionBar.js +68 -16
  671. package/dist/rpc/OperationActionBar.js.map +1 -1
  672. package/dist/rpc/OperationCatalog.cjs +69 -76
  673. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  674. package/dist/rpc/OperationCatalog.d.ts +3 -1
  675. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  676. package/dist/rpc/OperationCatalog.js +69 -76
  677. package/dist/rpc/OperationCatalog.js.map +1 -1
  678. package/dist/rpc/OperationCatalogActions.cjs +69 -0
  679. package/dist/rpc/OperationCatalogActions.cjs.map +1 -0
  680. package/dist/rpc/OperationCatalogActions.d.ts +17 -0
  681. package/dist/rpc/OperationCatalogActions.d.ts.map +1 -0
  682. package/dist/rpc/OperationCatalogActions.js +69 -0
  683. package/dist/rpc/OperationCatalogActions.js.map +1 -0
  684. package/dist/rpc/OperationEntityContextPicker.cjs +129 -116
  685. package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -1
  686. package/dist/rpc/OperationEntityContextPicker.d.ts +18 -1
  687. package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -1
  688. package/dist/rpc/OperationEntityContextPicker.js +130 -117
  689. package/dist/rpc/OperationEntityContextPicker.js.map +1 -1
  690. package/dist/rpc/OperationResultView.cjs +7 -4
  691. package/dist/rpc/OperationResultView.cjs.map +1 -1
  692. package/dist/rpc/OperationResultView.d.ts +4 -2
  693. package/dist/rpc/OperationResultView.d.ts.map +1 -1
  694. package/dist/rpc/OperationResultView.js +7 -4
  695. package/dist/rpc/OperationResultView.js.map +1 -1
  696. package/dist/rpc/operationCatalogUrl.cjs +28 -0
  697. package/dist/rpc/operationCatalogUrl.cjs.map +1 -0
  698. package/dist/rpc/operationCatalogUrl.d.ts +3 -0
  699. package/dist/rpc/operationCatalogUrl.d.ts.map +1 -0
  700. package/dist/rpc/operationCatalogUrl.js +28 -0
  701. package/dist/rpc/operationCatalogUrl.js.map +1 -0
  702. package/dist/rpc/rowNavigation.cjs +4 -3
  703. package/dist/rpc/rowNavigation.cjs.map +1 -1
  704. package/dist/rpc/rowNavigation.d.ts +1 -1
  705. package/dist/rpc/rowNavigation.d.ts.map +1 -1
  706. package/dist/rpc/rowNavigation.js +4 -3
  707. package/dist/rpc/rowNavigation.js.map +1 -1
  708. package/dist/rpc/types.cjs.map +1 -1
  709. package/dist/rpc/types.d.ts +2 -2
  710. package/dist/rpc/types.d.ts.map +1 -1
  711. package/dist/rpc/types.js.map +1 -1
  712. package/dist/rpc.cjs +2 -0
  713. package/dist/rpc.cjs.map +1 -1
  714. package/dist/rpc.d.ts +2 -1
  715. package/dist/rpc.d.ts.map +1 -1
  716. package/dist/rpc.js +2 -0
  717. package/dist/rpc.js.map +1 -1
  718. package/dist/runtime-profile.cjs +7 -0
  719. package/dist/runtime-profile.cjs.map +1 -0
  720. package/dist/runtime-profile.d.ts +2 -0
  721. package/dist/runtime-profile.d.ts.map +1 -0
  722. package/dist/runtime-profile.js +7 -0
  723. package/dist/runtime-profile.js.map +1 -0
  724. package/dist/styles.css +1 -1
  725. package/package.json +6 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-catalog-model.cjs","sources":["../../../../src/data/ai/PromptCatalog/prompt-catalog-model.ts"],"sourcesContent":["import type {\n PromptCatalogEntry,\n PromptCatalogLayer,\n PromptCatalogRuntime,\n PromptCatalogSource,\n} from \"./types\";\n\n// Layer origins the hosts emit, with the labels the UI shows for them. An\n// unknown origin is shown as-is.\nconst LAYER_LABELS: Record<string, string> = {\n \"user-home\": \"Home (~/.gavel.yaml)\",\n \"git-root\": \"Repository root\",\n \"target-directory\": \"Project directory\",\n};\n\nexport function layerLabel(origin: string): string {\n return LAYER_LABELS[origin] ?? origin;\n}\n\n// effectiveLayer is the layer whose override actually runs: the highest layer\n// that sets a source. Undefined means the built-in default runs.\nexport function effectiveLayer(\n entry: PromptCatalogEntry,\n): PromptCatalogLayer | undefined {\n for (let i = entry.layers.length - 1; i >= 0; i -= 1) {\n const layer = entry.layers[i];\n if (layer && layer.source !== \"none\") return layer;\n }\n return undefined;\n}\n\n// defaultEditLayer picks where an edit should land when the user has not\n// chosen: the effective layer when it is editable (edit what runs), otherwise\n// the highest editable layer (the most specific place that can hold an\n// override). Undefined when nothing is editable.\nexport function defaultEditLayer(\n entry: PromptCatalogEntry,\n): PromptCatalogLayer | undefined {\n const effective = effectiveLayer(entry);\n if (effective?.editable) return effective;\n for (let i = entry.layers.length - 1; i >= 0; i -= 1) {\n const layer = entry.layers[i];\n if (layer?.editable) return layer;\n }\n return undefined;\n}\n\n// layersAbove lists the layers that would shadow an override written to\n// `layer` — a save there changes nothing while a higher layer sets the prompt.\nexport function layersAbove(\n entry: PromptCatalogEntry,\n layer: PromptCatalogLayer,\n): PromptCatalogLayer[] {\n const index = entry.layers.findIndex(\n (candidate) => candidate.origin === layer.origin,\n );\n if (index < 0) return [];\n return entry.layers\n .slice(index + 1)\n .filter((candidate) => candidate.source !== \"none\");\n}\n\nexport type SourceTone = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport function sourceTone(\n source: PromptCatalogSource | \"default\",\n): SourceTone {\n switch (source) {\n case \"inline\":\n return \"info\";\n case \"file\":\n return \"success\";\n case \"none\":\n return \"warning\";\n default:\n return \"neutral\";\n }\n}\n\nexport function sourceLabel(source: PromptCatalogSource | \"default\"): string {\n switch (source) {\n case \"builtin\":\n case \"default\":\n return \"Built-in\";\n case \"inline\":\n return \"Inline\";\n case \"file\":\n return \"File\";\n default:\n return \"Unset\";\n }\n}\n\n// runtimeSummary renders the effective model as one line (`claude-opus-4-6 ·\n// claude-agent · high`), or the reason there is none.\nexport function runtimeSummary(runtime: PromptCatalogRuntime): string {\n if (runtime.error) return runtime.error;\n if (!runtime.model) return `inherited at run time (${runtime.modelSource})`;\n return [runtime.model, runtime.backend, runtime.effort]\n .filter(Boolean)\n .join(\" · \");\n}\n\n// provenanceSummary condenses the per-field provenance to the layers that\n// override something, e.g. \"model ← Home; body ← Project directory\".\nexport function provenanceSummary(entry: PromptCatalogEntry): string {\n const provenance = entry.provenance ?? {};\n const overridden = Object.entries(provenance).filter(\n ([, origin]) => ![\"prompt default\", \"ai base\", \"runtime\"].includes(origin),\n );\n if (overridden.length === 0) return \"\";\n return overridden\n .map(([field, origin]) => `${field} ← ${layerLabel(origin)}`)\n .join(\"; \");\n}\n\nexport interface PromptCatalogFilterOptions {\n owners: string[];\n sources: PromptCatalogSource[];\n commands: string[];\n models: string[];\n}\n\n// catalogFilterOptions derives the distinct values the table's filter bar\n// offers, so the controls only show what is actually present.\nexport function catalogFilterOptions(\n entries: PromptCatalogEntry[],\n): PromptCatalogFilterOptions {\n const owners = new Set<string>();\n const sources = new Set<PromptCatalogSource>();\n const commands = new Set<string>();\n const models = new Set<string>();\n for (const entry of entries) {\n owners.add(entry.owner);\n sources.add(entry.source);\n for (const command of entry.usedBy ?? []) commands.add(command);\n if (entry.effective.model) models.add(entry.effective.model);\n }\n const sorted = (values: Iterable<string>) =>\n [...values].sort((a, b) => a.localeCompare(b));\n return {\n owners: sorted(owners),\n sources: [...sources].sort(),\n commands: sorted(commands),\n models: sorted(models),\n };\n}\n\nexport interface PromptCatalogFilter {\n query?: string | undefined;\n owners?: string[] | undefined;\n sources?: PromptCatalogSource[] | undefined;\n commands?: string[] | undefined;\n models?: string[] | undefined;\n overriddenOnly?: boolean | undefined;\n}\n\nfunction matchesAny(\n values: string[] | undefined,\n selected: string[] | undefined,\n): boolean {\n if (!selected || selected.length === 0) return true;\n return (values ?? []).some((value) => selected.includes(value));\n}\n\n// entryMatches applies the table's filter state to one entry: a free-text\n// query over id/title/description/commands/body, plus the facet selections.\nexport function entryMatches(\n entry: PromptCatalogEntry,\n filter: PromptCatalogFilter,\n): boolean {\n const query = filter.query?.trim().toLowerCase();\n if (query) {\n const haystack = [\n entry.id,\n entry.title,\n entry.description ?? \"\",\n entry.configPath ?? \"\",\n ...(entry.usedBy ?? []),\n entry.body ?? \"\",\n ]\n .join(\"\\n\")\n .toLowerCase();\n if (!haystack.includes(query)) return false;\n }\n if (!matchesAny([entry.owner], filter.owners)) return false;\n if (!matchesAny([entry.source], filter.sources)) return false;\n if (!matchesAny(entry.usedBy, filter.commands)) return false;\n if (\n !matchesAny(\n entry.effective.model ? [entry.effective.model] : [],\n filter.models,\n )\n )\n return false;\n if (\n filter.overriddenOnly &&\n entry.source !== \"inline\" &&\n entry.source !== \"file\"\n )\n return false;\n return true;\n}\n\n// previewText is the first meaningful line of a prompt body, for the table.\nexport function previewText(body: string | undefined, maxLength = 140): string {\n const line = (body ?? \"\")\n .split(\"\\n\")\n .map((part) => part.trim())\n .find((part) => part.length > 0 && !part.startsWith(\"{{\"));\n if (!line) return \"\";\n return line.length > maxLength ? `${line.slice(0, maxLength - 1)}…` : line;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { PromptCatalogEntry, PromptCatalogLayer, PromptCatalogRuntime, PromptCatalogSource } from './types';
2
+ export declare function layerLabel(origin: string): string;
3
+ export declare function effectiveLayer(entry: PromptCatalogEntry): PromptCatalogLayer | undefined;
4
+ export declare function defaultEditLayer(entry: PromptCatalogEntry): PromptCatalogLayer | undefined;
5
+ export declare function layersAbove(entry: PromptCatalogEntry, layer: PromptCatalogLayer): PromptCatalogLayer[];
6
+ export type SourceTone = "neutral" | "info" | "success" | "warning" | "danger";
7
+ export declare function sourceTone(source: PromptCatalogSource | "default"): SourceTone;
8
+ export declare function sourceLabel(source: PromptCatalogSource | "default"): string;
9
+ export declare function runtimeSummary(runtime: PromptCatalogRuntime): string;
10
+ export declare function provenanceSummary(entry: PromptCatalogEntry): string;
11
+ export interface PromptCatalogFilterOptions {
12
+ owners: string[];
13
+ sources: PromptCatalogSource[];
14
+ commands: string[];
15
+ models: string[];
16
+ }
17
+ export declare function catalogFilterOptions(entries: PromptCatalogEntry[]): PromptCatalogFilterOptions;
18
+ export interface PromptCatalogFilter {
19
+ query?: string | undefined;
20
+ owners?: string[] | undefined;
21
+ sources?: PromptCatalogSource[] | undefined;
22
+ commands?: string[] | undefined;
23
+ models?: string[] | undefined;
24
+ overriddenOnly?: boolean | undefined;
25
+ }
26
+ export declare function entryMatches(entry: PromptCatalogEntry, filter: PromptCatalogFilter): boolean;
27
+ export declare function previewText(body: string | undefined, maxLength?: number): string;
28
+ //# sourceMappingURL=prompt-catalog-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-catalog-model.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/PromptCatalog/prompt-catalog-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAUjB,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAID,wBAAgB,cAAc,CAC5B,KAAK,EAAE,kBAAkB,GACxB,kBAAkB,GAAG,SAAS,CAMhC;AAMD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,GACxB,kBAAkB,GAAG,SAAS,CAQhC;AAID,wBAAgB,WAAW,CACzB,KAAK,EAAE,kBAAkB,EACzB,KAAK,EAAE,kBAAkB,GACxB,kBAAkB,EAAE,CAQtB;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE/E,wBAAgB,UAAU,CACxB,MAAM,EAAE,mBAAmB,GAAG,SAAS,GACtC,UAAU,CAWZ;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,mBAAmB,GAAG,SAAS,GAAG,MAAM,CAY3E;AAID,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAMpE;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CASnE;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAID,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,kBAAkB,EAAE,GAC5B,0BAA0B,CAmB5B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,mBAAmB,EAAE,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC;AAYD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAgCT;AAGD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,SAAM,GAAG,MAAM,CAO7E"}
@@ -0,0 +1,137 @@
1
+ const LAYER_LABELS = {
2
+ "user-home": "Home (~/.gavel.yaml)",
3
+ "git-root": "Repository root",
4
+ "target-directory": "Project directory"
5
+ };
6
+ function layerLabel(origin) {
7
+ return LAYER_LABELS[origin] ?? origin;
8
+ }
9
+ function effectiveLayer(entry) {
10
+ for (let i = entry.layers.length - 1; i >= 0; i -= 1) {
11
+ const layer = entry.layers[i];
12
+ if (layer && layer.source !== "none") return layer;
13
+ }
14
+ return void 0;
15
+ }
16
+ function defaultEditLayer(entry) {
17
+ const effective = effectiveLayer(entry);
18
+ if (effective == null ? void 0 : effective.editable) return effective;
19
+ for (let i = entry.layers.length - 1; i >= 0; i -= 1) {
20
+ const layer = entry.layers[i];
21
+ if (layer == null ? void 0 : layer.editable) return layer;
22
+ }
23
+ return void 0;
24
+ }
25
+ function layersAbove(entry, layer) {
26
+ const index = entry.layers.findIndex(
27
+ (candidate) => candidate.origin === layer.origin
28
+ );
29
+ if (index < 0) return [];
30
+ return entry.layers.slice(index + 1).filter((candidate) => candidate.source !== "none");
31
+ }
32
+ function sourceTone(source) {
33
+ switch (source) {
34
+ case "inline":
35
+ return "info";
36
+ case "file":
37
+ return "success";
38
+ case "none":
39
+ return "warning";
40
+ default:
41
+ return "neutral";
42
+ }
43
+ }
44
+ function sourceLabel(source) {
45
+ switch (source) {
46
+ case "builtin":
47
+ case "default":
48
+ return "Built-in";
49
+ case "inline":
50
+ return "Inline";
51
+ case "file":
52
+ return "File";
53
+ default:
54
+ return "Unset";
55
+ }
56
+ }
57
+ function runtimeSummary(runtime) {
58
+ if (runtime.error) return runtime.error;
59
+ if (!runtime.model) return `inherited at run time (${runtime.modelSource})`;
60
+ return [runtime.model, runtime.backend, runtime.effort].filter(Boolean).join(" · ");
61
+ }
62
+ function provenanceSummary(entry) {
63
+ const provenance = entry.provenance ?? {};
64
+ const overridden = Object.entries(provenance).filter(
65
+ ([, origin]) => !["prompt default", "ai base", "runtime"].includes(origin)
66
+ );
67
+ if (overridden.length === 0) return "";
68
+ return overridden.map(([field, origin]) => `${field} ← ${layerLabel(origin)}`).join("; ");
69
+ }
70
+ function catalogFilterOptions(entries) {
71
+ const owners = /* @__PURE__ */ new Set();
72
+ const sources = /* @__PURE__ */ new Set();
73
+ const commands = /* @__PURE__ */ new Set();
74
+ const models = /* @__PURE__ */ new Set();
75
+ for (const entry of entries) {
76
+ owners.add(entry.owner);
77
+ sources.add(entry.source);
78
+ for (const command of entry.usedBy ?? []) commands.add(command);
79
+ if (entry.effective.model) models.add(entry.effective.model);
80
+ }
81
+ const sorted = (values) => [...values].sort((a, b) => a.localeCompare(b));
82
+ return {
83
+ owners: sorted(owners),
84
+ sources: [...sources].sort(),
85
+ commands: sorted(commands),
86
+ models: sorted(models)
87
+ };
88
+ }
89
+ function matchesAny(values, selected) {
90
+ if (!selected || selected.length === 0) return true;
91
+ return (values ?? []).some((value) => selected.includes(value));
92
+ }
93
+ function entryMatches(entry, filter) {
94
+ var _a;
95
+ const query = (_a = filter.query) == null ? void 0 : _a.trim().toLowerCase();
96
+ if (query) {
97
+ const haystack = [
98
+ entry.id,
99
+ entry.title,
100
+ entry.description ?? "",
101
+ entry.configPath ?? "",
102
+ ...entry.usedBy ?? [],
103
+ entry.body ?? ""
104
+ ].join("\n").toLowerCase();
105
+ if (!haystack.includes(query)) return false;
106
+ }
107
+ if (!matchesAny([entry.owner], filter.owners)) return false;
108
+ if (!matchesAny([entry.source], filter.sources)) return false;
109
+ if (!matchesAny(entry.usedBy, filter.commands)) return false;
110
+ if (!matchesAny(
111
+ entry.effective.model ? [entry.effective.model] : [],
112
+ filter.models
113
+ ))
114
+ return false;
115
+ if (filter.overriddenOnly && entry.source !== "inline" && entry.source !== "file")
116
+ return false;
117
+ return true;
118
+ }
119
+ function previewText(body, maxLength = 140) {
120
+ const line = (body ?? "").split("\n").map((part) => part.trim()).find((part) => part.length > 0 && !part.startsWith("{{"));
121
+ if (!line) return "";
122
+ return line.length > maxLength ? `${line.slice(0, maxLength - 1)}…` : line;
123
+ }
124
+ export {
125
+ catalogFilterOptions,
126
+ defaultEditLayer,
127
+ effectiveLayer,
128
+ entryMatches,
129
+ layerLabel,
130
+ layersAbove,
131
+ previewText,
132
+ provenanceSummary,
133
+ runtimeSummary,
134
+ sourceLabel,
135
+ sourceTone
136
+ };
137
+ //# sourceMappingURL=prompt-catalog-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-catalog-model.js","sources":["../../../../src/data/ai/PromptCatalog/prompt-catalog-model.ts"],"sourcesContent":["import type {\n PromptCatalogEntry,\n PromptCatalogLayer,\n PromptCatalogRuntime,\n PromptCatalogSource,\n} from \"./types\";\n\n// Layer origins the hosts emit, with the labels the UI shows for them. An\n// unknown origin is shown as-is.\nconst LAYER_LABELS: Record<string, string> = {\n \"user-home\": \"Home (~/.gavel.yaml)\",\n \"git-root\": \"Repository root\",\n \"target-directory\": \"Project directory\",\n};\n\nexport function layerLabel(origin: string): string {\n return LAYER_LABELS[origin] ?? origin;\n}\n\n// effectiveLayer is the layer whose override actually runs: the highest layer\n// that sets a source. Undefined means the built-in default runs.\nexport function effectiveLayer(\n entry: PromptCatalogEntry,\n): PromptCatalogLayer | undefined {\n for (let i = entry.layers.length - 1; i >= 0; i -= 1) {\n const layer = entry.layers[i];\n if (layer && layer.source !== \"none\") return layer;\n }\n return undefined;\n}\n\n// defaultEditLayer picks where an edit should land when the user has not\n// chosen: the effective layer when it is editable (edit what runs), otherwise\n// the highest editable layer (the most specific place that can hold an\n// override). Undefined when nothing is editable.\nexport function defaultEditLayer(\n entry: PromptCatalogEntry,\n): PromptCatalogLayer | undefined {\n const effective = effectiveLayer(entry);\n if (effective?.editable) return effective;\n for (let i = entry.layers.length - 1; i >= 0; i -= 1) {\n const layer = entry.layers[i];\n if (layer?.editable) return layer;\n }\n return undefined;\n}\n\n// layersAbove lists the layers that would shadow an override written to\n// `layer` — a save there changes nothing while a higher layer sets the prompt.\nexport function layersAbove(\n entry: PromptCatalogEntry,\n layer: PromptCatalogLayer,\n): PromptCatalogLayer[] {\n const index = entry.layers.findIndex(\n (candidate) => candidate.origin === layer.origin,\n );\n if (index < 0) return [];\n return entry.layers\n .slice(index + 1)\n .filter((candidate) => candidate.source !== \"none\");\n}\n\nexport type SourceTone = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport function sourceTone(\n source: PromptCatalogSource | \"default\",\n): SourceTone {\n switch (source) {\n case \"inline\":\n return \"info\";\n case \"file\":\n return \"success\";\n case \"none\":\n return \"warning\";\n default:\n return \"neutral\";\n }\n}\n\nexport function sourceLabel(source: PromptCatalogSource | \"default\"): string {\n switch (source) {\n case \"builtin\":\n case \"default\":\n return \"Built-in\";\n case \"inline\":\n return \"Inline\";\n case \"file\":\n return \"File\";\n default:\n return \"Unset\";\n }\n}\n\n// runtimeSummary renders the effective model as one line (`claude-opus-4-6 ·\n// claude-agent · high`), or the reason there is none.\nexport function runtimeSummary(runtime: PromptCatalogRuntime): string {\n if (runtime.error) return runtime.error;\n if (!runtime.model) return `inherited at run time (${runtime.modelSource})`;\n return [runtime.model, runtime.backend, runtime.effort]\n .filter(Boolean)\n .join(\" · \");\n}\n\n// provenanceSummary condenses the per-field provenance to the layers that\n// override something, e.g. \"model ← Home; body ← Project directory\".\nexport function provenanceSummary(entry: PromptCatalogEntry): string {\n const provenance = entry.provenance ?? {};\n const overridden = Object.entries(provenance).filter(\n ([, origin]) => ![\"prompt default\", \"ai base\", \"runtime\"].includes(origin),\n );\n if (overridden.length === 0) return \"\";\n return overridden\n .map(([field, origin]) => `${field} ← ${layerLabel(origin)}`)\n .join(\"; \");\n}\n\nexport interface PromptCatalogFilterOptions {\n owners: string[];\n sources: PromptCatalogSource[];\n commands: string[];\n models: string[];\n}\n\n// catalogFilterOptions derives the distinct values the table's filter bar\n// offers, so the controls only show what is actually present.\nexport function catalogFilterOptions(\n entries: PromptCatalogEntry[],\n): PromptCatalogFilterOptions {\n const owners = new Set<string>();\n const sources = new Set<PromptCatalogSource>();\n const commands = new Set<string>();\n const models = new Set<string>();\n for (const entry of entries) {\n owners.add(entry.owner);\n sources.add(entry.source);\n for (const command of entry.usedBy ?? []) commands.add(command);\n if (entry.effective.model) models.add(entry.effective.model);\n }\n const sorted = (values: Iterable<string>) =>\n [...values].sort((a, b) => a.localeCompare(b));\n return {\n owners: sorted(owners),\n sources: [...sources].sort(),\n commands: sorted(commands),\n models: sorted(models),\n };\n}\n\nexport interface PromptCatalogFilter {\n query?: string | undefined;\n owners?: string[] | undefined;\n sources?: PromptCatalogSource[] | undefined;\n commands?: string[] | undefined;\n models?: string[] | undefined;\n overriddenOnly?: boolean | undefined;\n}\n\nfunction matchesAny(\n values: string[] | undefined,\n selected: string[] | undefined,\n): boolean {\n if (!selected || selected.length === 0) return true;\n return (values ?? []).some((value) => selected.includes(value));\n}\n\n// entryMatches applies the table's filter state to one entry: a free-text\n// query over id/title/description/commands/body, plus the facet selections.\nexport function entryMatches(\n entry: PromptCatalogEntry,\n filter: PromptCatalogFilter,\n): boolean {\n const query = filter.query?.trim().toLowerCase();\n if (query) {\n const haystack = [\n entry.id,\n entry.title,\n entry.description ?? \"\",\n entry.configPath ?? \"\",\n ...(entry.usedBy ?? []),\n entry.body ?? \"\",\n ]\n .join(\"\\n\")\n .toLowerCase();\n if (!haystack.includes(query)) return false;\n }\n if (!matchesAny([entry.owner], filter.owners)) return false;\n if (!matchesAny([entry.source], filter.sources)) return false;\n if (!matchesAny(entry.usedBy, filter.commands)) return false;\n if (\n !matchesAny(\n entry.effective.model ? [entry.effective.model] : [],\n filter.models,\n )\n )\n return false;\n if (\n filter.overriddenOnly &&\n entry.source !== \"inline\" &&\n entry.source !== \"file\"\n )\n return false;\n return true;\n}\n\n// previewText is the first meaningful line of a prompt body, for the table.\nexport function previewText(body: string | undefined, maxLength = 140): string {\n const line = (body ?? \"\")\n .split(\"\\n\")\n .map((part) => part.trim())\n .find((part) => part.length > 0 && !part.startsWith(\"{{\"));\n if (!line) return \"\";\n return line.length > maxLength ? `${line.slice(0, maxLength - 1)}…` : line;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const yaml = require("yaml");
4
+ const promptRuntime = require("../PromptPicker/prompt-runtime.cjs");
5
+ const types = require("../PromptPicker/types.cjs");
6
+ const PROMPT_PAGE_TAB = {
7
+ prompt: "prompt",
8
+ preview: "preview",
9
+ diff: "diff"
10
+ };
11
+ function detailRuntimeValue(detail) {
12
+ return types.isValidPromptSpecDetail(detail) ? promptRuntime.specToPromptRuntimeValue(detail.spec, detail.body) : void 0;
13
+ }
14
+ function draftFor(detail, mode = "structured") {
15
+ const value = detailRuntimeValue(detail);
16
+ if (!value || mode === "raw")
17
+ return { mode: "raw", raw: detail.raw, value: void 0 };
18
+ return { mode: "structured", raw: detail.raw, value };
19
+ }
20
+ function isDraftDirty(draft, detail) {
21
+ if (draft.mode === "raw") return draft.raw !== detail.raw;
22
+ return JSON.stringify(draft.value ?? null) !== JSON.stringify(detailRuntimeValue(detail) ?? null);
23
+ }
24
+ function isPromptPageDirty({
25
+ draft,
26
+ detail,
27
+ source,
28
+ path,
29
+ entry,
30
+ layer
31
+ }) {
32
+ if (isDraftDirty(draft, detail)) return true;
33
+ const initialSource = initialSaveSource(detail);
34
+ if (source !== initialSource) return true;
35
+ return source === "file" && path !== defaultFilePath(entry, layer, detail);
36
+ }
37
+ function draftRaw(draft) {
38
+ if (draft.mode === "raw" || !draft.value) return draft.raw;
39
+ const { spec, body } = promptRuntime.promptRuntimeValueToPayload(draft.value);
40
+ if (Object.keys(spec).length === 0) return body;
41
+ return `---
42
+ ${yaml.stringify(spec)}---
43
+ ${body}`;
44
+ }
45
+ function buildSavePayload(draft, detail, source, path) {
46
+ const filePath = source === "file" ? path : void 0;
47
+ if (draft.mode === "raw" || !draft.value) {
48
+ return { source, path: filePath, raw: draft.raw, baseRaw: detail.raw };
49
+ }
50
+ const { spec, body } = promptRuntime.promptRuntimeValueToPayload(draft.value);
51
+ return { source, path: filePath, spec, body, baseRaw: detail.raw };
52
+ }
53
+ function initialSaveSource(detail) {
54
+ return detail.source === "file" ? "file" : "inline";
55
+ }
56
+ function defaultFilePath(entry, layer, detail) {
57
+ if ((detail == null ? void 0 : detail.source) === "file" && detail.path) return detail.path;
58
+ if (layer.filePath) return layer.filePath;
59
+ return `.gavel/prompts/${entry.id.replace(/\./g, "-")}.prompt`;
60
+ }
61
+ function isConflictError(message) {
62
+ return /changed since it was loaded|reload before saving/i.test(message);
63
+ }
64
+ function errorMessage(error, fallback) {
65
+ return error instanceof Error && error.message ? error.message : fallback;
66
+ }
67
+ function seedVariables(entry) {
68
+ const seed = {};
69
+ for (const name of entry.variables ?? []) seed[name] = "";
70
+ return JSON.stringify(seed, null, 2);
71
+ }
72
+ function parseVariables(text) {
73
+ const trimmed = text.trim();
74
+ if (!trimmed) return { variables: {} };
75
+ try {
76
+ const parsed = JSON.parse(trimmed);
77
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
78
+ return { error: "variables must be a JSON object" };
79
+ }
80
+ return { variables: parsed };
81
+ } catch (error) {
82
+ return { error: errorMessage(error, "invalid JSON") };
83
+ }
84
+ }
85
+ function pageTabs(options) {
86
+ const tabs = [{ id: PROMPT_PAGE_TAB.prompt, label: "Prompt" }];
87
+ if (options.canPreview)
88
+ tabs.push({ id: PROMPT_PAGE_TAB.preview, label: "Preview" });
89
+ if (options.canDiff)
90
+ tabs.push({ id: PROMPT_PAGE_TAB.diff, label: "Diff vs default" });
91
+ for (const tab of options.extraTabs ?? []) {
92
+ tabs.push({
93
+ id: tab.id,
94
+ label: tab.label,
95
+ ...tab.count !== void 0 ? { count: tab.count } : {}
96
+ });
97
+ }
98
+ return tabs;
99
+ }
100
+ exports.PROMPT_PAGE_TAB = PROMPT_PAGE_TAB;
101
+ exports.buildSavePayload = buildSavePayload;
102
+ exports.defaultFilePath = defaultFilePath;
103
+ exports.detailRuntimeValue = detailRuntimeValue;
104
+ exports.draftFor = draftFor;
105
+ exports.draftRaw = draftRaw;
106
+ exports.errorMessage = errorMessage;
107
+ exports.initialSaveSource = initialSaveSource;
108
+ exports.isConflictError = isConflictError;
109
+ exports.isDraftDirty = isDraftDirty;
110
+ exports.isPromptPageDirty = isPromptPageDirty;
111
+ exports.pageTabs = pageTabs;
112
+ exports.parseVariables = parseVariables;
113
+ exports.seedVariables = seedVariables;
114
+ //# sourceMappingURL=prompt-page-model.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-page-model.cjs","sources":["../../../../src/data/ai/PromptCatalog/prompt-page-model.ts"],"sourcesContent":["import { stringify } from \"yaml\";\nimport type { TabItem } from \"../../../layout/Tabs\";\nimport type { AISpecRuntimeValue } from \"../SpecRuntimeEditor.model\";\nimport {\n promptRuntimeValueToPayload,\n specToPromptRuntimeValue,\n} from \"../PromptPicker/prompt-runtime\";\nimport {\n isValidPromptSpecDetail,\n type PromptSpecDetail,\n type PromptSpecSavePayload,\n} from \"../PromptPicker/types\";\nimport type {\n PromptCatalogEntry,\n PromptCatalogLayer,\n PromptPageTab,\n} from \"./types\";\n\nexport type PromptEditMode = \"raw\" | \"structured\";\nexport type PromptSaveSource = \"inline\" | \"file\";\n\n// PromptDraft is the page's unsaved edit in exactly one representation: the\n// whole .prompt text, or the parsed spec + body the structured editor binds.\n// Switching representation while dirty would need a client-side parser, so\n// the page only switches from a clean state.\nexport type PromptDraft = {\n mode: PromptEditMode;\n raw: string;\n value: AISpecRuntimeValue | undefined;\n};\n\nexport const PROMPT_PAGE_TAB = {\n prompt: \"prompt\",\n preview: \"preview\",\n diff: \"diff\",\n} as const;\n\nexport function detailRuntimeValue(\n detail: PromptSpecDetail,\n): AISpecRuntimeValue | undefined {\n return isValidPromptSpecDetail(detail)\n ? specToPromptRuntimeValue(detail.spec, detail.body)\n : undefined;\n}\n\n// draftFor seeds a draft from a loaded detail: structured when the document\n// parsed, raw (the only repair path) when it did not.\nexport function draftFor(\n detail: PromptSpecDetail,\n mode: PromptEditMode = \"structured\",\n): PromptDraft {\n const value = detailRuntimeValue(detail);\n if (!value || mode === \"raw\")\n return { mode: \"raw\", raw: detail.raw, value: undefined };\n return { mode: \"structured\", raw: detail.raw, value };\n}\n\nexport function isDraftDirty(\n draft: PromptDraft,\n detail: PromptSpecDetail,\n): boolean {\n if (draft.mode === \"raw\") return draft.raw !== detail.raw;\n return (\n JSON.stringify(draft.value ?? null) !==\n JSON.stringify(detailRuntimeValue(detail) ?? null)\n );\n}\n\nexport function isPromptPageDirty({\n draft,\n detail,\n source,\n path,\n entry,\n layer,\n}: {\n draft: PromptDraft;\n detail: PromptSpecDetail;\n source: PromptSaveSource;\n path: string;\n entry: PromptCatalogEntry;\n layer: PromptCatalogLayer;\n}): boolean {\n if (isDraftDirty(draft, detail)) return true;\n const initialSource = initialSaveSource(detail);\n if (source !== initialSource) return true;\n return source === \"file\" && path !== defaultFilePath(entry, layer, detail);\n}\n\n// draftRaw is the .prompt text a draft stands for — the raw text itself, or a\n// structured edit composed back into frontmatter + body so it can be previewed\n// and diffed before it is saved.\nexport function draftRaw(draft: PromptDraft): string {\n if (draft.mode === \"raw\" || !draft.value) return draft.raw;\n const { spec, body } = promptRuntimeValueToPayload(draft.value);\n if (Object.keys(spec).length === 0) return body;\n return `---\\n${stringify(spec)}---\\n${body}`;\n}\n\nexport function buildSavePayload(\n draft: PromptDraft,\n detail: PromptSpecDetail,\n source: PromptSaveSource,\n path: string,\n): PromptSpecSavePayload {\n const filePath = source === \"file\" ? path : undefined;\n if (draft.mode === \"raw\" || !draft.value) {\n return { source, path: filePath, raw: draft.raw, baseRaw: detail.raw };\n }\n const { spec, body } = promptRuntimeValueToPayload(draft.value);\n return { source, path: filePath, spec, body, baseRaw: detail.raw };\n}\n\nexport function initialSaveSource(detail: PromptSpecDetail): PromptSaveSource {\n return detail.source === \"file\" ? \"file\" : \"inline\";\n}\n\n// defaultFilePath is where a file override lands unless the user types a\n// path: the file the layer already points at, else a conventional path under\n// the layer's directory.\nexport function defaultFilePath(\n entry: PromptCatalogEntry,\n layer: PromptCatalogLayer,\n detail?: PromptSpecDetail,\n): string {\n if (detail?.source === \"file\" && detail.path) return detail.path;\n if (layer.filePath) return layer.filePath;\n return `.gavel/prompts/${entry.id.replace(/\\./g, \"-\")}.prompt`;\n}\n\n// isConflictError recognises the backend's optimistic-concurrency rejection\n// (the layer changed after the detail loaded) so the page offers a reload\n// instead of a generic failure.\nexport function isConflictError(message: string): boolean {\n return /changed since it was loaded|reload before saving/i.test(message);\n}\n\nexport function errorMessage(error: unknown, fallback: string): string {\n return error instanceof Error && error.message ? error.message : fallback;\n}\n\nexport function seedVariables(entry: PromptCatalogEntry): string {\n const seed: Record<string, string> = {};\n for (const name of entry.variables ?? []) seed[name] = \"\";\n return JSON.stringify(seed, null, 2);\n}\n\nexport function parseVariables(\n text: string,\n): { variables: Record<string, unknown> } | { error: string } {\n const trimmed = text.trim();\n if (!trimmed) return { variables: {} };\n try {\n const parsed: unknown = JSON.parse(trimmed);\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return { error: \"variables must be a JSON object\" };\n }\n return { variables: parsed as Record<string, unknown> };\n } catch (error) {\n return { error: errorMessage(error, \"invalid JSON\") };\n }\n}\n\nexport function pageTabs(options: {\n canPreview: boolean;\n canDiff: boolean;\n extraTabs?: PromptPageTab[] | undefined;\n}): TabItem[] {\n const tabs: TabItem[] = [{ id: PROMPT_PAGE_TAB.prompt, label: \"Prompt\" }];\n if (options.canPreview)\n tabs.push({ id: PROMPT_PAGE_TAB.preview, label: \"Preview\" });\n if (options.canDiff)\n tabs.push({ id: PROMPT_PAGE_TAB.diff, label: \"Diff vs default\" });\n for (const tab of options.extraTabs ?? []) {\n tabs.push({\n id: tab.id,\n label: tab.label,\n ...(tab.count !== undefined ? { count: tab.count } : {}),\n });\n }\n return tabs;\n}\n"],"names":["isValidPromptSpecDetail","specToPromptRuntimeValue","promptRuntimeValueToPayload","stringify"],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { TabItem } from '../../../layout/Tabs';
2
+ import { AISpecRuntimeValue } from '../SpecRuntimeEditor.model';
3
+ import { PromptSpecDetail, PromptSpecSavePayload } from '../PromptPicker/types';
4
+ import { PromptCatalogEntry, PromptCatalogLayer, PromptPageTab } from './types';
5
+ export type PromptEditMode = "raw" | "structured";
6
+ export type PromptSaveSource = "inline" | "file";
7
+ export type PromptDraft = {
8
+ mode: PromptEditMode;
9
+ raw: string;
10
+ value: AISpecRuntimeValue | undefined;
11
+ };
12
+ export declare const PROMPT_PAGE_TAB: {
13
+ readonly prompt: "prompt";
14
+ readonly preview: "preview";
15
+ readonly diff: "diff";
16
+ };
17
+ export declare function detailRuntimeValue(detail: PromptSpecDetail): AISpecRuntimeValue | undefined;
18
+ export declare function draftFor(detail: PromptSpecDetail, mode?: PromptEditMode): PromptDraft;
19
+ export declare function isDraftDirty(draft: PromptDraft, detail: PromptSpecDetail): boolean;
20
+ export declare function isPromptPageDirty({ draft, detail, source, path, entry, layer, }: {
21
+ draft: PromptDraft;
22
+ detail: PromptSpecDetail;
23
+ source: PromptSaveSource;
24
+ path: string;
25
+ entry: PromptCatalogEntry;
26
+ layer: PromptCatalogLayer;
27
+ }): boolean;
28
+ export declare function draftRaw(draft: PromptDraft): string;
29
+ export declare function buildSavePayload(draft: PromptDraft, detail: PromptSpecDetail, source: PromptSaveSource, path: string): PromptSpecSavePayload;
30
+ export declare function initialSaveSource(detail: PromptSpecDetail): PromptSaveSource;
31
+ export declare function defaultFilePath(entry: PromptCatalogEntry, layer: PromptCatalogLayer, detail?: PromptSpecDetail): string;
32
+ export declare function isConflictError(message: string): boolean;
33
+ export declare function errorMessage(error: unknown, fallback: string): string;
34
+ export declare function seedVariables(entry: PromptCatalogEntry): string;
35
+ export declare function parseVariables(text: string): {
36
+ variables: Record<string, unknown>;
37
+ } | {
38
+ error: string;
39
+ };
40
+ export declare function pageTabs(options: {
41
+ canPreview: boolean;
42
+ canDiff: boolean;
43
+ extraTabs?: PromptPageTab[] | undefined;
44
+ }): TabItem[];
45
+ //# sourceMappingURL=prompt-page-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-page-model.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/PromptCatalog/prompt-page-model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAKrE,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,YAAY,CAAC;AAClD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAMjD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACvC,CAAC;AAEF,eAAO,MAAM,eAAe;;;;CAIlB,CAAC;AAEX,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,gBAAgB,GACvB,kBAAkB,GAAG,SAAS,CAIhC;AAID,wBAAgB,QAAQ,CACtB,MAAM,EAAE,gBAAgB,EACxB,IAAI,GAAE,cAA6B,GAClC,WAAW,CAKb;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAMT;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,MAAM,EACN,MAAM,EACN,IAAI,EACJ,KAAK,EACL,KAAK,GACN,EAAE;IACD,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE,kBAAkB,CAAC;CAC3B,GAAG,OAAO,CAKV;AAKD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAKnD;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,GACX,qBAAqB,CAOvB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAE5E;AAKD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,kBAAkB,EACzB,KAAK,EAAE,kBAAkB,EACzB,MAAM,CAAC,EAAE,gBAAgB,GACxB,MAAM,CAIR;AAKD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAI/D;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GACX;IAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAY5D;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;CACzC,GAAG,OAAO,EAAE,CAcZ"}
@@ -0,0 +1,114 @@
1
+ import { stringify } from "yaml";
2
+ import { promptRuntimeValueToPayload, specToPromptRuntimeValue } from "../PromptPicker/prompt-runtime.js";
3
+ import { isValidPromptSpecDetail } from "../PromptPicker/types.js";
4
+ const PROMPT_PAGE_TAB = {
5
+ prompt: "prompt",
6
+ preview: "preview",
7
+ diff: "diff"
8
+ };
9
+ function detailRuntimeValue(detail) {
10
+ return isValidPromptSpecDetail(detail) ? specToPromptRuntimeValue(detail.spec, detail.body) : void 0;
11
+ }
12
+ function draftFor(detail, mode = "structured") {
13
+ const value = detailRuntimeValue(detail);
14
+ if (!value || mode === "raw")
15
+ return { mode: "raw", raw: detail.raw, value: void 0 };
16
+ return { mode: "structured", raw: detail.raw, value };
17
+ }
18
+ function isDraftDirty(draft, detail) {
19
+ if (draft.mode === "raw") return draft.raw !== detail.raw;
20
+ return JSON.stringify(draft.value ?? null) !== JSON.stringify(detailRuntimeValue(detail) ?? null);
21
+ }
22
+ function isPromptPageDirty({
23
+ draft,
24
+ detail,
25
+ source,
26
+ path,
27
+ entry,
28
+ layer
29
+ }) {
30
+ if (isDraftDirty(draft, detail)) return true;
31
+ const initialSource = initialSaveSource(detail);
32
+ if (source !== initialSource) return true;
33
+ return source === "file" && path !== defaultFilePath(entry, layer, detail);
34
+ }
35
+ function draftRaw(draft) {
36
+ if (draft.mode === "raw" || !draft.value) return draft.raw;
37
+ const { spec, body } = promptRuntimeValueToPayload(draft.value);
38
+ if (Object.keys(spec).length === 0) return body;
39
+ return `---
40
+ ${stringify(spec)}---
41
+ ${body}`;
42
+ }
43
+ function buildSavePayload(draft, detail, source, path) {
44
+ const filePath = source === "file" ? path : void 0;
45
+ if (draft.mode === "raw" || !draft.value) {
46
+ return { source, path: filePath, raw: draft.raw, baseRaw: detail.raw };
47
+ }
48
+ const { spec, body } = promptRuntimeValueToPayload(draft.value);
49
+ return { source, path: filePath, spec, body, baseRaw: detail.raw };
50
+ }
51
+ function initialSaveSource(detail) {
52
+ return detail.source === "file" ? "file" : "inline";
53
+ }
54
+ function defaultFilePath(entry, layer, detail) {
55
+ if ((detail == null ? void 0 : detail.source) === "file" && detail.path) return detail.path;
56
+ if (layer.filePath) return layer.filePath;
57
+ return `.gavel/prompts/${entry.id.replace(/\./g, "-")}.prompt`;
58
+ }
59
+ function isConflictError(message) {
60
+ return /changed since it was loaded|reload before saving/i.test(message);
61
+ }
62
+ function errorMessage(error, fallback) {
63
+ return error instanceof Error && error.message ? error.message : fallback;
64
+ }
65
+ function seedVariables(entry) {
66
+ const seed = {};
67
+ for (const name of entry.variables ?? []) seed[name] = "";
68
+ return JSON.stringify(seed, null, 2);
69
+ }
70
+ function parseVariables(text) {
71
+ const trimmed = text.trim();
72
+ if (!trimmed) return { variables: {} };
73
+ try {
74
+ const parsed = JSON.parse(trimmed);
75
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
76
+ return { error: "variables must be a JSON object" };
77
+ }
78
+ return { variables: parsed };
79
+ } catch (error) {
80
+ return { error: errorMessage(error, "invalid JSON") };
81
+ }
82
+ }
83
+ function pageTabs(options) {
84
+ const tabs = [{ id: PROMPT_PAGE_TAB.prompt, label: "Prompt" }];
85
+ if (options.canPreview)
86
+ tabs.push({ id: PROMPT_PAGE_TAB.preview, label: "Preview" });
87
+ if (options.canDiff)
88
+ tabs.push({ id: PROMPT_PAGE_TAB.diff, label: "Diff vs default" });
89
+ for (const tab of options.extraTabs ?? []) {
90
+ tabs.push({
91
+ id: tab.id,
92
+ label: tab.label,
93
+ ...tab.count !== void 0 ? { count: tab.count } : {}
94
+ });
95
+ }
96
+ return tabs;
97
+ }
98
+ export {
99
+ PROMPT_PAGE_TAB,
100
+ buildSavePayload,
101
+ defaultFilePath,
102
+ detailRuntimeValue,
103
+ draftFor,
104
+ draftRaw,
105
+ errorMessage,
106
+ initialSaveSource,
107
+ isConflictError,
108
+ isDraftDirty,
109
+ isPromptPageDirty,
110
+ pageTabs,
111
+ parseVariables,
112
+ seedVariables
113
+ };
114
+ //# sourceMappingURL=prompt-page-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-page-model.js","sources":["../../../../src/data/ai/PromptCatalog/prompt-page-model.ts"],"sourcesContent":["import { stringify } from \"yaml\";\nimport type { TabItem } from \"../../../layout/Tabs\";\nimport type { AISpecRuntimeValue } from \"../SpecRuntimeEditor.model\";\nimport {\n promptRuntimeValueToPayload,\n specToPromptRuntimeValue,\n} from \"../PromptPicker/prompt-runtime\";\nimport {\n isValidPromptSpecDetail,\n type PromptSpecDetail,\n type PromptSpecSavePayload,\n} from \"../PromptPicker/types\";\nimport type {\n PromptCatalogEntry,\n PromptCatalogLayer,\n PromptPageTab,\n} from \"./types\";\n\nexport type PromptEditMode = \"raw\" | \"structured\";\nexport type PromptSaveSource = \"inline\" | \"file\";\n\n// PromptDraft is the page's unsaved edit in exactly one representation: the\n// whole .prompt text, or the parsed spec + body the structured editor binds.\n// Switching representation while dirty would need a client-side parser, so\n// the page only switches from a clean state.\nexport type PromptDraft = {\n mode: PromptEditMode;\n raw: string;\n value: AISpecRuntimeValue | undefined;\n};\n\nexport const PROMPT_PAGE_TAB = {\n prompt: \"prompt\",\n preview: \"preview\",\n diff: \"diff\",\n} as const;\n\nexport function detailRuntimeValue(\n detail: PromptSpecDetail,\n): AISpecRuntimeValue | undefined {\n return isValidPromptSpecDetail(detail)\n ? specToPromptRuntimeValue(detail.spec, detail.body)\n : undefined;\n}\n\n// draftFor seeds a draft from a loaded detail: structured when the document\n// parsed, raw (the only repair path) when it did not.\nexport function draftFor(\n detail: PromptSpecDetail,\n mode: PromptEditMode = \"structured\",\n): PromptDraft {\n const value = detailRuntimeValue(detail);\n if (!value || mode === \"raw\")\n return { mode: \"raw\", raw: detail.raw, value: undefined };\n return { mode: \"structured\", raw: detail.raw, value };\n}\n\nexport function isDraftDirty(\n draft: PromptDraft,\n detail: PromptSpecDetail,\n): boolean {\n if (draft.mode === \"raw\") return draft.raw !== detail.raw;\n return (\n JSON.stringify(draft.value ?? null) !==\n JSON.stringify(detailRuntimeValue(detail) ?? null)\n );\n}\n\nexport function isPromptPageDirty({\n draft,\n detail,\n source,\n path,\n entry,\n layer,\n}: {\n draft: PromptDraft;\n detail: PromptSpecDetail;\n source: PromptSaveSource;\n path: string;\n entry: PromptCatalogEntry;\n layer: PromptCatalogLayer;\n}): boolean {\n if (isDraftDirty(draft, detail)) return true;\n const initialSource = initialSaveSource(detail);\n if (source !== initialSource) return true;\n return source === \"file\" && path !== defaultFilePath(entry, layer, detail);\n}\n\n// draftRaw is the .prompt text a draft stands for — the raw text itself, or a\n// structured edit composed back into frontmatter + body so it can be previewed\n// and diffed before it is saved.\nexport function draftRaw(draft: PromptDraft): string {\n if (draft.mode === \"raw\" || !draft.value) return draft.raw;\n const { spec, body } = promptRuntimeValueToPayload(draft.value);\n if (Object.keys(spec).length === 0) return body;\n return `---\\n${stringify(spec)}---\\n${body}`;\n}\n\nexport function buildSavePayload(\n draft: PromptDraft,\n detail: PromptSpecDetail,\n source: PromptSaveSource,\n path: string,\n): PromptSpecSavePayload {\n const filePath = source === \"file\" ? path : undefined;\n if (draft.mode === \"raw\" || !draft.value) {\n return { source, path: filePath, raw: draft.raw, baseRaw: detail.raw };\n }\n const { spec, body } = promptRuntimeValueToPayload(draft.value);\n return { source, path: filePath, spec, body, baseRaw: detail.raw };\n}\n\nexport function initialSaveSource(detail: PromptSpecDetail): PromptSaveSource {\n return detail.source === \"file\" ? \"file\" : \"inline\";\n}\n\n// defaultFilePath is where a file override lands unless the user types a\n// path: the file the layer already points at, else a conventional path under\n// the layer's directory.\nexport function defaultFilePath(\n entry: PromptCatalogEntry,\n layer: PromptCatalogLayer,\n detail?: PromptSpecDetail,\n): string {\n if (detail?.source === \"file\" && detail.path) return detail.path;\n if (layer.filePath) return layer.filePath;\n return `.gavel/prompts/${entry.id.replace(/\\./g, \"-\")}.prompt`;\n}\n\n// isConflictError recognises the backend's optimistic-concurrency rejection\n// (the layer changed after the detail loaded) so the page offers a reload\n// instead of a generic failure.\nexport function isConflictError(message: string): boolean {\n return /changed since it was loaded|reload before saving/i.test(message);\n}\n\nexport function errorMessage(error: unknown, fallback: string): string {\n return error instanceof Error && error.message ? error.message : fallback;\n}\n\nexport function seedVariables(entry: PromptCatalogEntry): string {\n const seed: Record<string, string> = {};\n for (const name of entry.variables ?? []) seed[name] = \"\";\n return JSON.stringify(seed, null, 2);\n}\n\nexport function parseVariables(\n text: string,\n): { variables: Record<string, unknown> } | { error: string } {\n const trimmed = text.trim();\n if (!trimmed) return { variables: {} };\n try {\n const parsed: unknown = JSON.parse(trimmed);\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return { error: \"variables must be a JSON object\" };\n }\n return { variables: parsed as Record<string, unknown> };\n } catch (error) {\n return { error: errorMessage(error, \"invalid JSON\") };\n }\n}\n\nexport function pageTabs(options: {\n canPreview: boolean;\n canDiff: boolean;\n extraTabs?: PromptPageTab[] | undefined;\n}): TabItem[] {\n const tabs: TabItem[] = [{ id: PROMPT_PAGE_TAB.prompt, label: \"Prompt\" }];\n if (options.canPreview)\n tabs.push({ id: PROMPT_PAGE_TAB.preview, label: \"Preview\" });\n if (options.canDiff)\n tabs.push({ id: PROMPT_PAGE_TAB.diff, label: \"Diff vs default\" });\n for (const tab of options.extraTabs ?? []) {\n tabs.push({\n id: tab.id,\n label: tab.label,\n ...(tab.count !== undefined ? { count: tab.count } : {}),\n });\n }\n return tabs;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { ReactNode } from 'react';
2
+ import { PromptSpecDetail, PromptSpecSavePayload } from '../PromptPicker/types';
3
+ export interface PromptPageTab {
4
+ id: string;
5
+ label: ReactNode;
6
+ content: ReactNode;
7
+ count?: number | undefined;
8
+ }
9
+ export type PromptCatalogSource = "builtin" | "inline" | "file" | "none";
10
+ export interface PromptCatalogFilterState {
11
+ query: string;
12
+ commands: string[];
13
+ sources: PromptCatalogSource[];
14
+ models: string[];
15
+ owners: string[];
16
+ overriddenOnly: boolean;
17
+ }
18
+ export interface PromptCatalogLayer {
19
+ origin: string;
20
+ path: string;
21
+ scope?: string | undefined;
22
+ editable: boolean;
23
+ source: "none" | "inline" | "file";
24
+ filePath?: string | undefined;
25
+ fields?: string[] | undefined;
26
+ }
27
+ export interface PromptCatalogRuntime {
28
+ model?: string | undefined;
29
+ backend?: string | undefined;
30
+ effort?: string | undefined;
31
+ fallbacks?: string[] | undefined;
32
+ modelSource: string;
33
+ error?: string | undefined;
34
+ }
35
+ export interface PromptCatalogEntry {
36
+ id: string;
37
+ title: string;
38
+ description?: string | undefined;
39
+ configPath?: string | undefined;
40
+ owner: string;
41
+ usedBy?: string[] | undefined;
42
+ source: PromptCatalogSource;
43
+ path?: string | undefined;
44
+ raw?: string | undefined;
45
+ version?: string | undefined;
46
+ body?: string | undefined;
47
+ variables?: string[] | undefined;
48
+ parseError?: string | undefined;
49
+ effective: PromptCatalogRuntime;
50
+ provenance?: Record<string, string> | undefined;
51
+ layers: PromptCatalogLayer[];
52
+ defaultRaw?: string | undefined;
53
+ updatedAt?: string | undefined;
54
+ }
55
+ export interface PromptRenderInput {
56
+ raw?: string | undefined;
57
+ variables: Record<string, unknown>;
58
+ }
59
+ export interface PromptRenderResult {
60
+ user: string;
61
+ system?: string | undefined;
62
+ model?: string | undefined;
63
+ backend?: string | undefined;
64
+ }
65
+ export interface PromptPageAdapter {
66
+ loadDetail(entry: PromptCatalogEntry, layer: PromptCatalogLayer): Promise<PromptSpecDetail>;
67
+ saveDetail(entry: PromptCatalogEntry, layer: PromptCatalogLayer, payload: PromptSpecSavePayload): Promise<PromptSpecDetail>;
68
+ render?: ((entry: PromptCatalogEntry, input: PromptRenderInput) => Promise<PromptRenderResult>) | undefined;
69
+ }
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/PromptCatalog/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAI/B,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAKD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzE,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;CACzB;AAMD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC/B;AAKD,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAKD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,EAAE,oBAAoB,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAChD,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAG7B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAKD,MAAM,WAAW,iBAAiB;IAChC,UAAU,CACR,KAAK,EAAE,kBAAkB,EACzB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7B,UAAU,CACR,KAAK,EAAE,kBAAkB,EACzB,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7B,MAAM,CAAC,EACH,CAAC,CACC,KAAK,EAAE,kBAAkB,EACzB,KAAK,EAAE,iBAAiB,KACrB,OAAO,CAAC,kBAAkB,CAAC,CAAC,GACjC,SAAS,CAAC;CACf"}