@flanksource/clicky-ui 0.3.15 → 0.3.16

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 (754) hide show
  1. package/NOTICE.md +10 -0
  2. package/dist/ai.cjs +33 -4
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +31 -2
  5. package/dist/ai.js.map +1 -1
  6. package/dist/chat.cjs +6 -0
  7. package/dist/chat.cjs.map +1 -1
  8. package/dist/chat.js +7 -1
  9. package/dist/chat.js.map +1 -1
  10. package/dist/components/Combobox.cjs +92 -170
  11. package/dist/components/Combobox.cjs.map +1 -1
  12. package/dist/components/Combobox.d.ts +2 -111
  13. package/dist/components/Combobox.d.ts.map +1 -1
  14. package/dist/components/Combobox.js +95 -173
  15. package/dist/components/Combobox.js.map +1 -1
  16. package/dist/components/ComboboxActions.cjs +70 -0
  17. package/dist/components/ComboboxActions.cjs.map +1 -0
  18. package/dist/components/ComboboxActions.d.ts +8 -0
  19. package/dist/components/ComboboxActions.d.ts.map +1 -0
  20. package/dist/components/ComboboxActions.js +70 -0
  21. package/dist/components/ComboboxActions.js.map +1 -0
  22. package/dist/components/ComboboxMenu.cjs +160 -0
  23. package/dist/components/ComboboxMenu.cjs.map +1 -0
  24. package/dist/components/ComboboxMenu.d.ts +22 -0
  25. package/dist/components/ComboboxMenu.d.ts.map +1 -0
  26. package/dist/components/ComboboxMenu.js +160 -0
  27. package/dist/components/ComboboxMenu.js.map +1 -0
  28. package/dist/components/EndpointSelector.cjs +407 -0
  29. package/dist/components/EndpointSelector.cjs.map +1 -0
  30. package/dist/components/EndpointSelector.d.ts +3 -0
  31. package/dist/components/EndpointSelector.d.ts.map +1 -0
  32. package/dist/components/EndpointSelector.js +407 -0
  33. package/dist/components/EndpointSelector.js.map +1 -0
  34. package/dist/components/EndpointSelector.model.d.ts +52 -0
  35. package/dist/components/EndpointSelector.model.d.ts.map +1 -0
  36. package/dist/components/FilterBar.cjs +12 -0
  37. package/dist/components/FilterBar.cjs.map +1 -1
  38. package/dist/components/FilterBar.d.ts +4 -0
  39. package/dist/components/FilterBar.d.ts.map +1 -1
  40. package/dist/components/FilterBar.js +12 -0
  41. package/dist/components/FilterBar.js.map +1 -1
  42. package/dist/components/InputField.cjs +11 -12
  43. package/dist/components/InputField.cjs.map +1 -1
  44. package/dist/components/InputField.d.ts +7 -0
  45. package/dist/components/InputField.d.ts.map +1 -1
  46. package/dist/components/InputField.js +12 -13
  47. package/dist/components/InputField.js.map +1 -1
  48. package/dist/components/JsonSchemaForm.cjs +22 -16
  49. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  50. package/dist/components/JsonSchemaForm.d.ts +1 -1
  51. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  52. package/dist/components/JsonSchemaForm.js +22 -16
  53. package/dist/components/JsonSchemaForm.js.map +1 -1
  54. package/dist/components/MultiSelect.cjs +3 -3
  55. package/dist/components/MultiSelect.cjs.map +1 -1
  56. package/dist/components/MultiSelect.d.ts.map +1 -1
  57. package/dist/components/MultiSelect.js +3 -3
  58. package/dist/components/MultiSelect.js.map +1 -1
  59. package/dist/components/SecretKeySelector.cjs +150 -77
  60. package/dist/components/SecretKeySelector.cjs.map +1 -1
  61. package/dist/components/SecretKeySelector.d.ts.map +1 -1
  62. package/dist/components/SecretKeySelector.js +151 -78
  63. package/dist/components/SecretKeySelector.js.map +1 -1
  64. package/dist/components/WorkloadPicker.cjs +2 -1
  65. package/dist/components/WorkloadPicker.cjs.map +1 -1
  66. package/dist/components/WorkloadPicker.d.ts +6 -1
  67. package/dist/components/WorkloadPicker.d.ts.map +1 -1
  68. package/dist/components/WorkloadPicker.js +2 -1
  69. package/dist/components/WorkloadPicker.js.map +1 -1
  70. package/dist/components/combobox-types.d.ts +107 -0
  71. package/dist/components/combobox-types.d.ts.map +1 -0
  72. package/dist/components/combobox-utils.cjs +21 -0
  73. package/dist/components/combobox-utils.cjs.map +1 -0
  74. package/dist/components/combobox-utils.d.ts +15 -0
  75. package/dist/components/combobox-utils.d.ts.map +1 -0
  76. package/dist/components/combobox-utils.js +21 -0
  77. package/dist/components/combobox-utils.js.map +1 -0
  78. package/dist/components/endpoint-port.cjs +12 -0
  79. package/dist/components/endpoint-port.cjs.map +1 -0
  80. package/dist/components/endpoint-port.d.ts +4 -0
  81. package/dist/components/endpoint-port.d.ts.map +1 -0
  82. package/dist/components/endpoint-port.js +12 -0
  83. package/dist/components/endpoint-port.js.map +1 -0
  84. package/dist/components/json-schema-form-array.cjs +12 -23
  85. package/dist/components/json-schema-form-array.cjs.map +1 -1
  86. package/dist/components/json-schema-form-array.d.ts +1 -1
  87. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  88. package/dist/components/json-schema-form-array.js +12 -23
  89. package/dist/components/json-schema-form-array.js.map +1 -1
  90. package/dist/components/json-schema-form-discriminator.cjs +6 -2
  91. package/dist/components/json-schema-form-discriminator.cjs.map +1 -1
  92. package/dist/components/json-schema-form-discriminator.d.ts.map +1 -1
  93. package/dist/components/json-schema-form-discriminator.js +6 -2
  94. package/dist/components/json-schema-form-discriminator.js.map +1 -1
  95. package/dist/components/json-schema-form-error-display.cjs +50 -0
  96. package/dist/components/json-schema-form-error-display.cjs.map +1 -0
  97. package/dist/components/json-schema-form-error-display.d.ts +12 -0
  98. package/dist/components/json-schema-form-error-display.d.ts.map +1 -0
  99. package/dist/components/json-schema-form-error-display.js +50 -0
  100. package/dist/components/json-schema-form-error-display.js.map +1 -0
  101. package/dist/components/json-schema-form-error-types.d.ts +26 -0
  102. package/dist/components/json-schema-form-error-types.d.ts.map +1 -0
  103. package/dist/components/json-schema-form-errors.cjs +169 -0
  104. package/dist/components/json-schema-form-errors.cjs.map +1 -0
  105. package/dist/components/json-schema-form-errors.d.ts +14 -0
  106. package/dist/components/json-schema-form-errors.d.ts.map +1 -0
  107. package/dist/components/json-schema-form-errors.js +169 -0
  108. package/dist/components/json-schema-form-errors.js.map +1 -0
  109. package/dist/components/json-schema-form-object.cjs +12 -2
  110. package/dist/components/json-schema-form-object.cjs.map +1 -1
  111. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  112. package/dist/components/json-schema-form-object.js +12 -2
  113. package/dist/components/json-schema-form-object.js.map +1 -1
  114. package/dist/components/json-schema-form-refs.cjs +84 -19
  115. package/dist/components/json-schema-form-refs.cjs.map +1 -1
  116. package/dist/components/json-schema-form-refs.d.ts.map +1 -1
  117. package/dist/components/json-schema-form-refs.js +84 -19
  118. package/dist/components/json-schema-form-refs.js.map +1 -1
  119. package/dist/components/json-schema-form-render.cjs +33 -10
  120. package/dist/components/json-schema-form-render.cjs.map +1 -1
  121. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  122. package/dist/components/json-schema-form-render.js +34 -11
  123. package/dist/components/json-schema-form-render.js.map +1 -1
  124. package/dist/components/json-schema-form-resolve.cjs +16 -4
  125. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  126. package/dist/components/json-schema-form-resolve.d.ts +1 -0
  127. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  128. package/dist/components/json-schema-form-resolve.js +17 -5
  129. package/dist/components/json-schema-form-resolve.js.map +1 -1
  130. package/dist/components/json-schema-form-types.d.ts +4 -3
  131. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  132. package/dist/components.cjs +13 -0
  133. package/dist/components.cjs.map +1 -1
  134. package/dist/components.d.ts +8 -1
  135. package/dist/components.d.ts.map +1 -1
  136. package/dist/components.js +15 -2
  137. package/dist/components.js.map +1 -1
  138. package/dist/data/DataTable.cjs +177 -6
  139. package/dist/data/DataTable.cjs.map +1 -1
  140. package/dist/data/DataTable.d.ts +39 -0
  141. package/dist/data/DataTable.d.ts.map +1 -1
  142. package/dist/data/DataTable.grouping.cjs +21 -0
  143. package/dist/data/DataTable.grouping.cjs.map +1 -0
  144. package/dist/data/DataTable.grouping.d.ts +26 -0
  145. package/dist/data/DataTable.grouping.d.ts.map +1 -0
  146. package/dist/data/DataTable.grouping.js +21 -0
  147. package/dist/data/DataTable.grouping.js.map +1 -0
  148. package/dist/data/DataTable.js +177 -6
  149. package/dist/data/DataTable.js.map +1 -1
  150. package/dist/data/Markdown.cjs +45 -1
  151. package/dist/data/Markdown.cjs.map +1 -1
  152. package/dist/data/Markdown.d.ts +3 -2
  153. package/dist/data/Markdown.d.ts.map +1 -1
  154. package/dist/data/Markdown.js +45 -1
  155. package/dist/data/Markdown.js.map +1 -1
  156. package/dist/data/MarkdownEditor.cjs +4 -3
  157. package/dist/data/MarkdownEditor.cjs.map +1 -1
  158. package/dist/data/MarkdownEditor.d.ts +6 -2
  159. package/dist/data/MarkdownEditor.d.ts.map +1 -1
  160. package/dist/data/MarkdownEditor.js +4 -3
  161. package/dist/data/MarkdownEditor.js.map +1 -1
  162. package/dist/data/StatStrip.cjs +99 -0
  163. package/dist/data/StatStrip.cjs.map +1 -0
  164. package/dist/data/StatStrip.d.ts +41 -0
  165. package/dist/data/StatStrip.d.ts.map +1 -0
  166. package/dist/data/StatStrip.js +99 -0
  167. package/dist/data/StatStrip.js.map +1 -0
  168. package/dist/data/TaskManager.cjs +20 -1
  169. package/dist/data/TaskManager.cjs.map +1 -1
  170. package/dist/data/TaskManager.d.ts +3 -1
  171. package/dist/data/TaskManager.d.ts.map +1 -1
  172. package/dist/data/TaskManager.js +20 -1
  173. package/dist/data/TaskManager.js.map +1 -1
  174. package/dist/data/TaskManagerButton.cjs +49 -0
  175. package/dist/data/TaskManagerButton.cjs.map +1 -0
  176. package/dist/data/TaskManagerButton.d.ts +8 -0
  177. package/dist/data/TaskManagerButton.d.ts.map +1 -0
  178. package/dist/data/TaskManagerButton.js +49 -0
  179. package/dist/data/TaskManagerButton.js.map +1 -0
  180. package/dist/data/TaskProcessDetails.cjs +113 -0
  181. package/dist/data/TaskProcessDetails.cjs.map +1 -0
  182. package/dist/data/TaskProcessDetails.d.ts +6 -0
  183. package/dist/data/TaskProcessDetails.d.ts.map +1 -0
  184. package/dist/data/TaskProcessDetails.js +113 -0
  185. package/dist/data/TaskProcessDetails.js.map +1 -0
  186. package/dist/data/TaskProgress.cjs +106 -19
  187. package/dist/data/TaskProgress.cjs.map +1 -1
  188. package/dist/data/TaskProgress.d.ts +4 -2
  189. package/dist/data/TaskProgress.d.ts.map +1 -1
  190. package/dist/data/TaskProgress.js +107 -20
  191. package/dist/data/TaskProgress.js.map +1 -1
  192. package/dist/data/TaskSnapshot.cjs.map +1 -1
  193. package/dist/data/TaskSnapshot.d.ts +43 -0
  194. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  195. package/dist/data/TaskSnapshot.js.map +1 -1
  196. package/dist/data/Tree.cjs +91 -82
  197. package/dist/data/Tree.cjs.map +1 -1
  198. package/dist/data/Tree.d.ts +3 -1
  199. package/dist/data/Tree.d.ts.map +1 -1
  200. package/dist/data/Tree.js +91 -82
  201. package/dist/data/Tree.js.map +1 -1
  202. package/dist/data/TreeNode.cjs +3 -0
  203. package/dist/data/TreeNode.cjs.map +1 -1
  204. package/dist/data/TreeNode.d.ts +2 -1
  205. package/dist/data/TreeNode.d.ts.map +1 -1
  206. package/dist/data/TreeNode.js +3 -0
  207. package/dist/data/TreeNode.js.map +1 -1
  208. package/dist/data/ai/ChatWindow.cjs +9 -140
  209. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  210. package/dist/data/ai/ChatWindow.d.ts +2 -40
  211. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  212. package/dist/data/ai/ChatWindow.js +6 -137
  213. package/dist/data/ai/ChatWindow.js.map +1 -1
  214. package/dist/data/ai/ChatWindow.models.cjs +11 -0
  215. package/dist/data/ai/ChatWindow.models.cjs.map +1 -0
  216. package/dist/data/ai/ChatWindow.models.d.ts +3 -0
  217. package/dist/data/ai/ChatWindow.models.d.ts.map +1 -0
  218. package/dist/data/ai/ChatWindow.models.js +11 -0
  219. package/dist/data/ai/ChatWindow.models.js.map +1 -0
  220. package/dist/data/ai/ChatWindow.preferences.cjs +57 -0
  221. package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -0
  222. package/dist/data/ai/ChatWindow.preferences.d.ts +13 -0
  223. package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -0
  224. package/dist/data/ai/ChatWindow.preferences.js +57 -0
  225. package/dist/data/ai/ChatWindow.preferences.js.map +1 -0
  226. package/dist/data/ai/ChatWindow.tool-catalog.cjs +99 -0
  227. package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -0
  228. package/dist/data/ai/ChatWindow.tool-catalog.d.ts +3 -0
  229. package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -0
  230. package/dist/data/ai/ChatWindow.tool-catalog.js +99 -0
  231. package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -0
  232. package/dist/data/ai/ChatWindow.types.d.ts +41 -0
  233. package/dist/data/ai/ChatWindow.types.d.ts.map +1 -0
  234. package/dist/data/ai/ContextBadges.cjs +76 -46
  235. package/dist/data/ai/ContextBadges.cjs.map +1 -1
  236. package/dist/data/ai/ContextBadges.d.ts.map +1 -1
  237. package/dist/data/ai/ContextBadges.js +77 -47
  238. package/dist/data/ai/ContextBadges.js.map +1 -1
  239. package/dist/data/ai/PromptPicker/PromptPicker.cjs +151 -32
  240. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
  241. package/dist/data/ai/PromptPicker/PromptPicker.d.ts +7 -4
  242. package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -1
  243. package/dist/data/ai/PromptPicker/PromptPicker.js +152 -33
  244. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
  245. package/dist/data/ai/PromptPicker/PromptSourceRepair.cjs +133 -0
  246. package/dist/data/ai/PromptPicker/PromptSourceRepair.cjs.map +1 -0
  247. package/dist/data/ai/PromptPicker/PromptSourceRepair.d.ts +11 -0
  248. package/dist/data/ai/PromptPicker/PromptSourceRepair.d.ts.map +1 -0
  249. package/dist/data/ai/PromptPicker/PromptSourceRepair.js +133 -0
  250. package/dist/data/ai/PromptPicker/PromptSourceRepair.js.map +1 -0
  251. package/dist/data/ai/PromptPicker/index.d.ts +2 -1
  252. package/dist/data/ai/PromptPicker/index.d.ts.map +1 -1
  253. package/dist/data/ai/PromptPicker/types.cjs +7 -0
  254. package/dist/data/ai/PromptPicker/types.cjs.map +1 -0
  255. package/dist/data/ai/PromptPicker/types.d.ts +18 -2
  256. package/dist/data/ai/PromptPicker/types.d.ts.map +1 -1
  257. package/dist/data/ai/PromptPicker/types.js +7 -0
  258. package/dist/data/ai/PromptPicker/types.js.map +1 -0
  259. package/dist/data/ai/PromptRunEditor/index.cjs +82 -14
  260. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  261. package/dist/data/ai/PromptRunEditor/index.d.ts +5 -1
  262. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  263. package/dist/data/ai/PromptRunEditor/index.js +83 -15
  264. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  265. package/dist/data/ai/RuntimeBar.cjs +336 -0
  266. package/dist/data/ai/RuntimeBar.cjs.map +1 -0
  267. package/dist/data/ai/RuntimeBar.d.ts +27 -0
  268. package/dist/data/ai/RuntimeBar.d.ts.map +1 -0
  269. package/dist/data/ai/RuntimeBar.js +336 -0
  270. package/dist/data/ai/RuntimeBar.js.map +1 -0
  271. package/dist/data/ai/SessionChatComposer.cjs +56 -0
  272. package/dist/data/ai/SessionChatComposer.cjs.map +1 -0
  273. package/dist/data/ai/SessionChatComposer.d.ts +24 -0
  274. package/dist/data/ai/SessionChatComposer.d.ts.map +1 -0
  275. package/dist/data/ai/SessionChatComposer.js +56 -0
  276. package/dist/data/ai/SessionChatComposer.js.map +1 -0
  277. package/dist/data/ai/SessionInspector.cjs +222 -382
  278. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  279. package/dist/data/ai/SessionInspector.collection-types.d.ts +55 -0
  280. package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -0
  281. package/dist/data/ai/SessionInspector.collection.cjs +377 -0
  282. package/dist/data/ai/SessionInspector.collection.cjs.map +1 -0
  283. package/dist/data/ai/SessionInspector.collection.d.ts +15 -0
  284. package/dist/data/ai/SessionInspector.collection.d.ts.map +1 -0
  285. package/dist/data/ai/SessionInspector.collection.js +377 -0
  286. package/dist/data/ai/SessionInspector.collection.js.map +1 -0
  287. package/dist/data/ai/SessionInspector.d.ts +9 -4
  288. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  289. package/dist/data/ai/SessionInspector.files.cjs +162 -0
  290. package/dist/data/ai/SessionInspector.files.cjs.map +1 -0
  291. package/dist/data/ai/SessionInspector.files.d.ts +5 -0
  292. package/dist/data/ai/SessionInspector.files.d.ts.map +1 -0
  293. package/dist/data/ai/SessionInspector.files.js +162 -0
  294. package/dist/data/ai/SessionInspector.files.js.map +1 -0
  295. package/dist/data/ai/SessionInspector.hierarchy-state.cjs +148 -0
  296. package/dist/data/ai/SessionInspector.hierarchy-state.cjs.map +1 -0
  297. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts +15 -0
  298. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts.map +1 -0
  299. package/dist/data/ai/SessionInspector.hierarchy-state.js +148 -0
  300. package/dist/data/ai/SessionInspector.hierarchy-state.js.map +1 -0
  301. package/dist/data/ai/SessionInspector.hierarchy.cjs +256 -0
  302. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -0
  303. package/dist/data/ai/SessionInspector.hierarchy.d.ts +9 -0
  304. package/dist/data/ai/SessionInspector.hierarchy.d.ts.map +1 -0
  305. package/dist/data/ai/SessionInspector.hierarchy.js +256 -0
  306. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -0
  307. package/dist/data/ai/SessionInspector.js +224 -384
  308. package/dist/data/ai/SessionInspector.js.map +1 -1
  309. package/dist/data/ai/SessionInspector.model.cjs +125 -0
  310. package/dist/data/ai/SessionInspector.model.cjs.map +1 -0
  311. package/dist/data/ai/SessionInspector.model.d.ts +14 -0
  312. package/dist/data/ai/SessionInspector.model.d.ts.map +1 -0
  313. package/dist/data/ai/SessionInspector.model.js +125 -0
  314. package/dist/data/ai/SessionInspector.model.js.map +1 -0
  315. package/dist/data/ai/SessionInspector.panels.cjs +265 -0
  316. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -0
  317. package/dist/data/ai/SessionInspector.panels.d.ts +10 -0
  318. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -0
  319. package/dist/data/ai/SessionInspector.panels.js +265 -0
  320. package/dist/data/ai/SessionInspector.panels.js.map +1 -0
  321. package/dist/data/ai/SessionInspector.plan.cjs +77 -0
  322. package/dist/data/ai/SessionInspector.plan.cjs.map +1 -0
  323. package/dist/data/ai/SessionInspector.plan.d.ts +6 -0
  324. package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -0
  325. package/dist/data/ai/SessionInspector.plan.js +77 -0
  326. package/dist/data/ai/SessionInspector.plan.js.map +1 -0
  327. package/dist/data/ai/SessionInspector.summary.cjs +182 -0
  328. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -0
  329. package/dist/data/ai/SessionInspector.summary.d.ts +8 -0
  330. package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -0
  331. package/dist/data/ai/SessionInspector.summary.js +182 -0
  332. package/dist/data/ai/SessionInspector.summary.js.map +1 -0
  333. package/dist/data/ai/SessionInspector.transcript.cjs +94 -0
  334. package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -0
  335. package/dist/data/ai/SessionInspector.transcript.d.ts +7 -0
  336. package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -0
  337. package/dist/data/ai/SessionInspector.transcript.js +94 -0
  338. package/dist/data/ai/SessionInspector.transcript.js.map +1 -0
  339. package/dist/data/ai/SessionInspector.turns.d.ts +11 -0
  340. package/dist/data/ai/SessionInspector.turns.d.ts.map +1 -0
  341. package/dist/data/ai/SessionViewer.cjs +86 -121
  342. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  343. package/dist/data/ai/SessionViewer.d.ts +8 -1
  344. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  345. package/dist/data/ai/SessionViewer.fixtures.d.ts +2 -0
  346. package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
  347. package/dist/data/ai/SessionViewer.header.cjs +110 -0
  348. package/dist/data/ai/SessionViewer.header.cjs.map +1 -0
  349. package/dist/data/ai/SessionViewer.header.d.ts +11 -0
  350. package/dist/data/ai/SessionViewer.header.d.ts.map +1 -0
  351. package/dist/data/ai/SessionViewer.header.js +110 -0
  352. package/dist/data/ai/SessionViewer.header.js.map +1 -0
  353. package/dist/data/ai/SessionViewer.js +87 -122
  354. package/dist/data/ai/SessionViewer.js.map +1 -1
  355. package/dist/data/ai/SessionViewer.model.cjs +109 -39
  356. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  357. package/dist/data/ai/SessionViewer.model.d.ts +2 -0
  358. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  359. package/dist/data/ai/SessionViewer.model.js +109 -39
  360. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  361. package/dist/data/ai/SessionViewer.row-metadata.cjs +132 -0
  362. package/dist/data/ai/SessionViewer.row-metadata.cjs.map +1 -0
  363. package/dist/data/ai/SessionViewer.row-metadata.d.ts +14 -0
  364. package/dist/data/ai/SessionViewer.row-metadata.d.ts.map +1 -0
  365. package/dist/data/ai/SessionViewer.row-metadata.js +132 -0
  366. package/dist/data/ai/SessionViewer.row-metadata.js.map +1 -0
  367. package/dist/data/ai/SessionViewer.row-time.cjs +15 -0
  368. package/dist/data/ai/SessionViewer.row-time.cjs.map +1 -0
  369. package/dist/data/ai/SessionViewer.row-time.d.ts +3 -0
  370. package/dist/data/ai/SessionViewer.row-time.d.ts.map +1 -0
  371. package/dist/data/ai/SessionViewer.row-time.js +15 -0
  372. package/dist/data/ai/SessionViewer.row-time.js.map +1 -0
  373. package/dist/data/ai/SessionViewer.rows.cjs +37 -424
  374. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  375. package/dist/data/ai/SessionViewer.rows.d.ts +5 -2
  376. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  377. package/dist/data/ai/SessionViewer.rows.js +31 -418
  378. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  379. package/dist/data/ai/SessionViewer.tool-details.cjs +65 -0
  380. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -0
  381. package/dist/data/ai/SessionViewer.tool-details.d.ts +20 -0
  382. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -0
  383. package/dist/data/ai/SessionViewer.tool-details.js +65 -0
  384. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -0
  385. package/dist/data/ai/SessionViewer.tool-row.cjs +404 -0
  386. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -0
  387. package/dist/data/ai/SessionViewer.tool-row.d.ts +12 -0
  388. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -0
  389. package/dist/data/ai/SessionViewer.tool-row.js +404 -0
  390. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -0
  391. package/dist/data/ai/SessionViewer.unified.d.ts +10 -2
  392. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  393. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +44 -26
  394. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
  395. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
  396. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +47 -29
  397. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
  398. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +45 -153
  399. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
  400. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
  401. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +51 -159
  402. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
  403. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +0 -1
  404. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
  405. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -1
  406. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +0 -1
  407. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
  408. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +0 -5
  409. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -1
  410. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -1
  411. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +0 -5
  412. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -1
  413. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
  414. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
  415. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
  416. package/dist/data/ai/SpecRuntimeEditor/update.cjs +19 -6
  417. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
  418. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +5 -2
  419. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
  420. package/dist/data/ai/SpecRuntimeEditor/update.js +19 -6
  421. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
  422. package/dist/data/ai/SpecRuntimeEditor.model.cjs +67 -10
  423. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
  424. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +31 -4
  425. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
  426. package/dist/data/ai/SpecRuntimeEditor.model.js +67 -10
  427. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
  428. package/dist/data/ai/ToolPreferences.cjs +2 -1
  429. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  430. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  431. package/dist/data/ai/ToolPreferences.js +2 -1
  432. package/dist/data/ai/ToolPreferences.js.map +1 -1
  433. package/dist/data/ai/agent-action-icons.cjs +7 -10
  434. package/dist/data/ai/agent-action-icons.cjs.map +1 -1
  435. package/dist/data/ai/agent-action-icons.d.ts +1 -2
  436. package/dist/data/ai/agent-action-icons.d.ts.map +1 -1
  437. package/dist/data/ai/agent-action-icons.js +8 -11
  438. package/dist/data/ai/agent-action-icons.js.map +1 -1
  439. package/dist/data/ai/context.cjs.map +1 -1
  440. package/dist/data/ai/context.d.ts +4 -0
  441. package/dist/data/ai/context.d.ts.map +1 -1
  442. package/dist/data/ai/context.js.map +1 -1
  443. package/dist/data/ai/examples/sessions/claude-complete.cjs +513 -0
  444. package/dist/data/ai/examples/sessions/claude-complete.cjs.map +1 -0
  445. package/dist/data/ai/examples/sessions/claude-complete.d.ts +3 -0
  446. package/dist/data/ai/examples/sessions/claude-complete.d.ts.map +1 -0
  447. package/dist/data/ai/examples/sessions/claude-complete.js +513 -0
  448. package/dist/data/ai/examples/sessions/claude-complete.js.map +1 -0
  449. package/dist/data/ai/examples/sessions/claude.cjs +252 -0
  450. package/dist/data/ai/examples/sessions/claude.cjs.map +1 -0
  451. package/dist/data/ai/examples/sessions/claude.d.ts +3 -0
  452. package/dist/data/ai/examples/sessions/claude.d.ts.map +1 -0
  453. package/dist/data/ai/examples/sessions/claude.js +252 -0
  454. package/dist/data/ai/examples/sessions/claude.js.map +1 -0
  455. package/dist/data/ai/examples/sessions/codex-complete.cjs +394 -0
  456. package/dist/data/ai/examples/sessions/codex-complete.cjs.map +1 -0
  457. package/dist/data/ai/examples/sessions/codex-complete.d.ts +3 -0
  458. package/dist/data/ai/examples/sessions/codex-complete.d.ts.map +1 -0
  459. package/dist/data/ai/examples/sessions/codex-complete.js +394 -0
  460. package/dist/data/ai/examples/sessions/codex-complete.js.map +1 -0
  461. package/dist/data/ai/examples/sessions/codex.cjs +236 -0
  462. package/dist/data/ai/examples/sessions/codex.cjs.map +1 -0
  463. package/dist/data/ai/examples/sessions/codex.d.ts +3 -0
  464. package/dist/data/ai/examples/sessions/codex.d.ts.map +1 -0
  465. package/dist/data/ai/examples/sessions/codex.js +236 -0
  466. package/dist/data/ai/examples/sessions/codex.js.map +1 -0
  467. package/dist/data/ai/examples/sessions/index.cjs +21 -0
  468. package/dist/data/ai/examples/sessions/index.cjs.map +1 -0
  469. package/dist/data/ai/examples/sessions/index.d.ts +10 -0
  470. package/dist/data/ai/examples/sessions/index.d.ts.map +1 -0
  471. package/dist/data/ai/examples/sessions/index.js +21 -0
  472. package/dist/data/ai/examples/sessions/index.js.map +1 -0
  473. package/dist/data/ai/index.d.ts +8 -3
  474. package/dist/data/ai/index.d.ts.map +1 -1
  475. package/dist/data/ai/runtime-mode.cjs +62 -0
  476. package/dist/data/ai/runtime-mode.cjs.map +1 -1
  477. package/dist/data/ai/runtime-mode.d.ts +27 -0
  478. package/dist/data/ai/runtime-mode.d.ts.map +1 -1
  479. package/dist/data/ai/runtime-mode.js +62 -0
  480. package/dist/data/ai/runtime-mode.js.map +1 -1
  481. package/dist/data/cells/EntityCell.cjs +64 -0
  482. package/dist/data/cells/EntityCell.cjs.map +1 -0
  483. package/dist/data/cells/EntityCell.d.ts +27 -0
  484. package/dist/data/cells/EntityCell.d.ts.map +1 -0
  485. package/dist/data/cells/EntityCell.js +64 -0
  486. package/dist/data/cells/EntityCell.js.map +1 -0
  487. package/dist/data/chat/Attachment.cjs +53 -13
  488. package/dist/data/chat/Attachment.cjs.map +1 -1
  489. package/dist/data/chat/Attachment.d.ts +9 -3
  490. package/dist/data/chat/Attachment.d.ts.map +1 -1
  491. package/dist/data/chat/Attachment.js +54 -14
  492. package/dist/data/chat/Attachment.js.map +1 -1
  493. package/dist/data/chat/Chat.cjs +25 -17
  494. package/dist/data/chat/Chat.cjs.map +1 -1
  495. package/dist/data/chat/Chat.d.ts +8 -4
  496. package/dist/data/chat/Chat.d.ts.map +1 -1
  497. package/dist/data/chat/Chat.js +22 -14
  498. package/dist/data/chat/Chat.js.map +1 -1
  499. package/dist/data/chat/ContextMeter.cjs +142 -39
  500. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  501. package/dist/data/chat/ContextMeter.d.ts +4 -1
  502. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  503. package/dist/data/chat/ContextMeter.js +143 -40
  504. package/dist/data/chat/ContextMeter.js.map +1 -1
  505. package/dist/data/chat/Conversation.cjs +55 -3
  506. package/dist/data/chat/Conversation.cjs.map +1 -1
  507. package/dist/data/chat/Conversation.d.ts +5 -1
  508. package/dist/data/chat/Conversation.d.ts.map +1 -1
  509. package/dist/data/chat/Conversation.js +55 -3
  510. package/dist/data/chat/Conversation.js.map +1 -1
  511. package/dist/data/chat/ModelSelector.cjs +8 -10
  512. package/dist/data/chat/ModelSelector.cjs.map +1 -1
  513. package/dist/data/chat/ModelSelector.d.ts.map +1 -1
  514. package/dist/data/chat/ModelSelector.js +9 -11
  515. package/dist/data/chat/ModelSelector.js.map +1 -1
  516. package/dist/data/chat/PromptInput.cjs +56 -5
  517. package/dist/data/chat/PromptInput.cjs.map +1 -1
  518. package/dist/data/chat/PromptInput.d.ts +10 -1
  519. package/dist/data/chat/PromptInput.d.ts.map +1 -1
  520. package/dist/data/chat/PromptInput.js +57 -6
  521. package/dist/data/chat/PromptInput.js.map +1 -1
  522. package/dist/data/chat/attachment-upload.cjs +33 -0
  523. package/dist/data/chat/attachment-upload.cjs.map +1 -0
  524. package/dist/data/chat/attachment-upload.d.ts +21 -0
  525. package/dist/data/chat/attachment-upload.d.ts.map +1 -0
  526. package/dist/data/chat/attachment-upload.js +33 -0
  527. package/dist/data/chat/attachment-upload.js.map +1 -0
  528. package/dist/data/chat/effort-icons.cjs +36 -6
  529. package/dist/data/chat/effort-icons.cjs.map +1 -1
  530. package/dist/data/chat/effort-icons.d.ts +6 -3
  531. package/dist/data/chat/effort-icons.d.ts.map +1 -1
  532. package/dist/data/chat/effort-icons.js +37 -7
  533. package/dist/data/chat/effort-icons.js.map +1 -1
  534. package/dist/data/chat/index.d.ts +3 -1
  535. package/dist/data/chat/index.d.ts.map +1 -1
  536. package/dist/data/chat/models.cjs +8 -0
  537. package/dist/data/chat/models.cjs.map +1 -0
  538. package/dist/data/chat/models.d.ts +11 -0
  539. package/dist/data/chat/models.d.ts.map +1 -0
  540. package/dist/data/chat/models.js +8 -0
  541. package/dist/data/chat/models.js.map +1 -0
  542. package/dist/data/chat/provider-icons.cjs +49 -16
  543. package/dist/data/chat/provider-icons.cjs.map +1 -1
  544. package/dist/data/chat/provider-icons.d.ts +2 -0
  545. package/dist/data/chat/provider-icons.d.ts.map +1 -1
  546. package/dist/data/chat/provider-icons.js +50 -17
  547. package/dist/data/chat/provider-icons.js.map +1 -1
  548. package/dist/data/chat/types.cjs.map +1 -1
  549. package/dist/data/chat/types.d.ts +9 -0
  550. package/dist/data/chat/types.d.ts.map +1 -1
  551. package/dist/data/chat/types.js.map +1 -1
  552. package/dist/data/examples/markdown-preview-mock.cjs +45 -0
  553. package/dist/data/examples/markdown-preview-mock.cjs.map +1 -0
  554. package/dist/data/examples/markdown-preview-mock.d.ts +23 -0
  555. package/dist/data/examples/markdown-preview-mock.d.ts.map +1 -0
  556. package/dist/data/examples/markdown-preview-mock.js +45 -0
  557. package/dist/data/examples/markdown-preview-mock.js.map +1 -0
  558. package/dist/data/examples/markdown-syntax.cjs +36 -0
  559. package/dist/data/examples/markdown-syntax.cjs.map +1 -0
  560. package/dist/data/examples/markdown-syntax.d.ts +12 -0
  561. package/dist/data/examples/markdown-syntax.d.ts.map +1 -0
  562. package/dist/data/examples/markdown-syntax.js +36 -0
  563. package/dist/data/examples/markdown-syntax.js.map +1 -0
  564. package/dist/data/examples/markdown-syntax.md.cjs +4 -0
  565. package/dist/data/examples/markdown-syntax.md.cjs.map +1 -0
  566. package/dist/data/examples/markdown-syntax.md.js +5 -0
  567. package/dist/data/examples/markdown-syntax.md.js.map +1 -0
  568. package/dist/data/task-process-details.cjs +48 -0
  569. package/dist/data/task-process-details.cjs.map +1 -0
  570. package/dist/data/task-process-details.d.ts +5 -0
  571. package/dist/data/task-process-details.d.ts.map +1 -0
  572. package/dist/data/task-process-details.js +48 -0
  573. package/dist/data/task-process-details.js.map +1 -0
  574. package/dist/data/version-info.cjs +2 -2
  575. package/dist/data/version-info.js +2 -2
  576. package/dist/data.cjs +30 -0
  577. package/dist/data.cjs.map +1 -1
  578. package/dist/data.d.ts +7 -1
  579. package/dist/data.d.ts.map +1 -1
  580. package/dist/data.js +30 -0
  581. package/dist/data.js.map +1 -1
  582. package/dist/hooks/use-hotkey.cjs +98 -0
  583. package/dist/hooks/use-hotkey.cjs.map +1 -0
  584. package/dist/hooks/use-hotkey.d.ts +42 -0
  585. package/dist/hooks/use-hotkey.d.ts.map +1 -0
  586. package/dist/hooks/use-hotkey.js +98 -0
  587. package/dist/hooks/use-hotkey.js.map +1 -0
  588. package/dist/hooks/use-task-run.cjs +23 -1
  589. package/dist/hooks/use-task-run.cjs.map +1 -1
  590. package/dist/hooks/use-task-run.d.ts.map +1 -1
  591. package/dist/hooks/use-task-run.js +23 -1
  592. package/dist/hooks/use-task-run.js.map +1 -1
  593. package/dist/hooks.cjs +4 -0
  594. package/dist/hooks.cjs.map +1 -1
  595. package/dist/hooks.d.ts +1 -0
  596. package/dist/hooks.d.ts.map +1 -1
  597. package/dist/hooks.js +4 -0
  598. package/dist/hooks.js.map +1 -1
  599. package/dist/icons/components/UiBank.cjs +15 -0
  600. package/dist/icons/components/UiBank.cjs.map +1 -0
  601. package/dist/icons/components/UiBank.d.ts +15 -0
  602. package/dist/icons/components/UiBank.d.ts.map +1 -0
  603. package/dist/icons/components/UiBank.js +15 -0
  604. package/dist/icons/components/UiBank.js.map +1 -0
  605. package/dist/icons/components/UiChartOfAccounts.cjs +15 -0
  606. package/dist/icons/components/UiChartOfAccounts.cjs.map +1 -0
  607. package/dist/icons/components/UiChartOfAccounts.d.ts +15 -0
  608. package/dist/icons/components/UiChartOfAccounts.d.ts.map +1 -0
  609. package/dist/icons/components/UiChartOfAccounts.js +15 -0
  610. package/dist/icons/components/UiChartOfAccounts.js.map +1 -0
  611. package/dist/icons/components/UiCloudUpload.cjs +15 -0
  612. package/dist/icons/components/UiCloudUpload.cjs.map +1 -0
  613. package/dist/icons/components/UiCloudUpload.d.ts +15 -0
  614. package/dist/icons/components/UiCloudUpload.d.ts.map +1 -0
  615. package/dist/icons/components/UiCloudUpload.js +15 -0
  616. package/dist/icons/components/UiCloudUpload.js.map +1 -0
  617. package/dist/icons/components/UiLedger.cjs +15 -0
  618. package/dist/icons/components/UiLedger.cjs.map +1 -0
  619. package/dist/icons/components/UiLedger.d.ts +15 -0
  620. package/dist/icons/components/UiLedger.d.ts.map +1 -0
  621. package/dist/icons/components/UiLedger.js +15 -0
  622. package/dist/icons/components/UiLedger.js.map +1 -0
  623. package/dist/icons/components/UiReceipt.cjs +15 -0
  624. package/dist/icons/components/UiReceipt.cjs.map +1 -0
  625. package/dist/icons/components/UiReceipt.d.ts +15 -0
  626. package/dist/icons/components/UiReceipt.d.ts.map +1 -0
  627. package/dist/icons/components/UiReceipt.js +15 -0
  628. package/dist/icons/components/UiReceipt.js.map +1 -0
  629. package/dist/icons/index.d.ts +10 -0
  630. package/dist/icons/index.d.ts.map +1 -1
  631. package/dist/icons.cjs +15 -0
  632. package/dist/icons.cjs.map +1 -1
  633. package/dist/icons.js +15 -0
  634. package/dist/icons.js.map +1 -1
  635. package/dist/index.cjs +47 -0
  636. package/dist/index.cjs.map +1 -1
  637. package/dist/index.js +49 -2
  638. package/dist/index.js.map +1 -1
  639. package/dist/layout/AppShell.cjs +270 -238
  640. package/dist/layout/AppShell.cjs.map +1 -1
  641. package/dist/layout/AppShell.d.ts +9 -0
  642. package/dist/layout/AppShell.d.ts.map +1 -1
  643. package/dist/layout/AppShell.debug.cjs +53 -0
  644. package/dist/layout/AppShell.debug.cjs.map +1 -0
  645. package/dist/layout/AppShell.debug.d.ts +6 -0
  646. package/dist/layout/AppShell.debug.d.ts.map +1 -0
  647. package/dist/layout/AppShell.debug.js +53 -0
  648. package/dist/layout/AppShell.debug.js.map +1 -0
  649. package/dist/layout/AppShell.js +269 -237
  650. package/dist/layout/AppShell.js.map +1 -1
  651. package/dist/layout/AppShell.nav.cjs +90 -0
  652. package/dist/layout/AppShell.nav.cjs.map +1 -0
  653. package/dist/layout/AppShell.nav.d.ts +7 -0
  654. package/dist/layout/AppShell.nav.d.ts.map +1 -0
  655. package/dist/layout/AppShell.nav.js +90 -0
  656. package/dist/layout/AppShell.nav.js.map +1 -0
  657. package/dist/layout/AppSidebar.cjs +35 -5
  658. package/dist/layout/AppSidebar.cjs.map +1 -1
  659. package/dist/layout/AppSidebar.d.ts +4 -1
  660. package/dist/layout/AppSidebar.d.ts.map +1 -1
  661. package/dist/layout/AppSidebar.js +35 -5
  662. package/dist/layout/AppSidebar.js.map +1 -1
  663. package/dist/layout/Panel.cjs +25 -41
  664. package/dist/layout/Panel.cjs.map +1 -1
  665. package/dist/layout/Panel.d.ts +2 -1
  666. package/dist/layout/Panel.d.ts.map +1 -1
  667. package/dist/layout/Panel.js +26 -42
  668. package/dist/layout/Panel.js.map +1 -1
  669. package/dist/layout/PanelFrame.cjs +56 -0
  670. package/dist/layout/PanelFrame.cjs.map +1 -0
  671. package/dist/layout/PanelFrame.d.ts +15 -0
  672. package/dist/layout/PanelFrame.d.ts.map +1 -0
  673. package/dist/layout/PanelFrame.js +56 -0
  674. package/dist/layout/PanelFrame.js.map +1 -0
  675. package/dist/layout/Section.cjs +51 -41
  676. package/dist/layout/Section.cjs.map +1 -1
  677. package/dist/layout/Section.d.ts +3 -2
  678. package/dist/layout/Section.d.ts.map +1 -1
  679. package/dist/layout/Section.js +51 -41
  680. package/dist/layout/Section.js.map +1 -1
  681. package/dist/layout/content-width.cjs +8 -0
  682. package/dist/layout/content-width.cjs.map +1 -0
  683. package/dist/layout/content-width.d.ts +3 -0
  684. package/dist/layout/content-width.d.ts.map +1 -0
  685. package/dist/layout/content-width.js +8 -0
  686. package/dist/layout/content-width.js.map +1 -0
  687. package/dist/overlay/CommandPalette.cjs +207 -0
  688. package/dist/overlay/CommandPalette.cjs.map +1 -0
  689. package/dist/overlay/CommandPalette.d.ts +71 -0
  690. package/dist/overlay/CommandPalette.d.ts.map +1 -0
  691. package/dist/overlay/CommandPalette.js +207 -0
  692. package/dist/overlay/CommandPalette.js.map +1 -0
  693. package/dist/overlay/CommandPalette.model.cjs +70 -0
  694. package/dist/overlay/CommandPalette.model.cjs.map +1 -0
  695. package/dist/overlay/CommandPalette.model.d.ts +71 -0
  696. package/dist/overlay/CommandPalette.model.d.ts.map +1 -0
  697. package/dist/overlay/CommandPalette.model.js +70 -0
  698. package/dist/overlay/CommandPalette.model.js.map +1 -0
  699. package/dist/overlay/CommandPaletteList.cjs +88 -0
  700. package/dist/overlay/CommandPaletteList.cjs.map +1 -0
  701. package/dist/overlay/CommandPaletteList.d.ts +23 -0
  702. package/dist/overlay/CommandPaletteList.d.ts.map +1 -0
  703. package/dist/overlay/CommandPaletteList.js +88 -0
  704. package/dist/overlay/CommandPaletteList.js.map +1 -0
  705. package/dist/overlay/CommandPaletteTrigger.cjs +36 -0
  706. package/dist/overlay/CommandPaletteTrigger.cjs.map +1 -0
  707. package/dist/overlay/CommandPaletteTrigger.d.ts +22 -0
  708. package/dist/overlay/CommandPaletteTrigger.d.ts.map +1 -0
  709. package/dist/overlay/CommandPaletteTrigger.js +36 -0
  710. package/dist/overlay/CommandPaletteTrigger.js.map +1 -0
  711. package/dist/overlay/Modal.cjs +12 -5
  712. package/dist/overlay/Modal.cjs.map +1 -1
  713. package/dist/overlay/Modal.d.ts.map +1 -1
  714. package/dist/overlay/Modal.js +12 -5
  715. package/dist/overlay/Modal.js.map +1 -1
  716. package/dist/overlay/modalStack.js +1 -1
  717. package/dist/overlay/zIndex.cjs +2 -0
  718. package/dist/overlay/zIndex.cjs.map +1 -1
  719. package/dist/overlay/zIndex.js +2 -0
  720. package/dist/overlay/zIndex.js.map +1 -1
  721. package/dist/rpc/EntityExplorerApp.cjs +6 -0
  722. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  723. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  724. package/dist/rpc/EntityExplorerApp.js +6 -0
  725. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  726. package/dist/rpc/OperationCatalog.cjs +49 -52
  727. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  728. package/dist/rpc/OperationCatalog.d.ts +17 -2
  729. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  730. package/dist/rpc/OperationCatalog.js +49 -52
  731. package/dist/rpc/OperationCatalog.js.map +1 -1
  732. package/dist/rpc/clickyMetadata.cjs +2 -1
  733. package/dist/rpc/clickyMetadata.cjs.map +1 -1
  734. package/dist/rpc/clickyMetadata.d.ts.map +1 -1
  735. package/dist/rpc/clickyMetadata.js +2 -1
  736. package/dist/rpc/clickyMetadata.js.map +1 -1
  737. package/dist/rpc/rpc-story-fixtures/orders.fixture.d.ts.map +1 -1
  738. package/dist/rpc/rpc-story-fixtures/services.fixture.d.ts.map +1 -1
  739. package/dist/rpc/rpc-story-fixtures/surface-fixture.d.ts +25 -2
  740. package/dist/rpc/rpc-story-fixtures/surface-fixture.d.ts.map +1 -1
  741. package/dist/rpc/rpc-story-fixtures/widgets.fixture.d.ts.map +1 -1
  742. package/dist/rpc/rpc-story.fixtures.d.ts +2 -1
  743. package/dist/rpc/rpc-story.fixtures.d.ts.map +1 -1
  744. package/dist/rpc/types.cjs.map +1 -1
  745. package/dist/rpc/types.d.ts +1 -0
  746. package/dist/rpc/types.d.ts.map +1 -1
  747. package/dist/rpc/types.js.map +1 -1
  748. package/dist/styles.css +1 -1
  749. package/dist/tailwind-preset.cjs +11 -0
  750. package/dist/tailwind-preset.cjs.map +1 -1
  751. package/dist/tailwind-preset.d.ts.map +1 -1
  752. package/dist/tailwind-preset.js +11 -0
  753. package/dist/tailwind-preset.js.map +1 -1
  754. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"WorkspaceSection.cjs","sources":["../../../../src/data/ai/SpecRuntimeEditor/WorkspaceSection.tsx"],"sourcesContent":["import { SecretKeySelector } from \"../../../components/SecretKeySelector\";\nimport { SegmentedControl } from \"../../../components/SegmentedControl\";\nimport {\n UiClock,\n UiFolder,\n UiFolderGit,\n UiGitBranch,\n UiLink,\n UiPlug,\n UiStack,\n UiTag,\n} from \"../../../icons\";\nimport {\n SPEC_STASH_MODES,\n SPEC_WORKTREE_MODES,\n type AISpecRuntimeValue,\n type SpecCheckoutMode,\n type SpecStashMode,\n type SpecWorktreeMode,\n} from \"../SpecRuntimeEditor.model\";\nimport { secretValueFromString, stringFromSecretValue } from \"./env-model\";\nimport {\n CheckboxField,\n Disclosure,\n NumberField,\n SpecField,\n SpecInput,\n} from \"./fields\";\nimport type { SpecRuntimeSecretSelectorConfig } from \"./types\";\nimport {\n checkoutMode,\n stashMode,\n withCheckout,\n withCheckoutMode,\n withDirty,\n withSetup,\n withStashMode,\n withWorktree,\n withWorktreeMode,\n worktreeMode,\n} from \"./update\";\n\nconst CHECKOUT_OPTIONS: Array<{ id: SpecCheckoutMode; label: string }> = [\n { id: \"none\", label: \"None\" },\n { id: \"remote\", label: \"Remote\" },\n { id: \"local\", label: \"Local\" },\n];\nconst WORKTREE_OPTIONS: Array<{ id: SpecWorktreeMode; label: string }> =\n SPEC_WORKTREE_MODES.map((mode) => ({\n id: mode,\n label: mode === \"none\" ? \"None\" : mode === \"new\" ? \"New\" : \"Existing\",\n }));\nconst STASH_OPTIONS: Array<{ id: SpecStashMode; label: string }> =\n SPEC_STASH_MODES.map((mode) => ({\n id: mode,\n label:\n mode === \"none\" ? \"None\" : mode.charAt(0).toUpperCase() + mode.slice(1),\n }));\n\nexport function WorkspaceSection({\n value,\n onChange,\n secretSelector,\n}: {\n value: AISpecRuntimeValue;\n onChange: (value: AISpecRuntimeValue) => void;\n secretSelector?: SpecRuntimeSecretSelectorConfig | undefined;\n}) {\n const checkout = checkoutMode(value);\n const worktree = worktreeMode(value);\n return (\n <div className=\"grid gap-density-3\">\n <div className=\"grid gap-density-2 md:grid-cols-2\">\n <SpecField label=\"Directory\">\n <SpecInput\n value={value.setup?.cwd}\n onChange={(cwd) => onChange(withSetup(value, { cwd }))}\n placeholder=\".\"\n icon={UiFolder}\n mono\n />\n </SpecField>\n <SpecField label=\"Base dir\">\n <SpecInput\n value={value.setup?.baseDir}\n onChange={(baseDir) => onChange(withSetup(value, { baseDir }))}\n placeholder=\".captain/workspaces\"\n icon={UiFolder}\n mono\n />\n </SpecField>\n </div>\n\n <div className=\"space-y-density-2\">\n <SpecField label=\"Git checkout\">\n <SegmentedControl\n aria-label=\"Checkout source\"\n size=\"sm\"\n value={checkout}\n onChange={(mode) => onChange(withCheckoutMode(value, mode))}\n options={CHECKOUT_OPTIONS}\n />\n </SpecField>\n {checkout !== \"none\" && (\n <>\n <div className=\"grid gap-density-2 md:grid-cols-[minmax(0,1fr)_9rem_6rem]\">\n {checkout === \"local\" ? (\n <SpecField label=\"Local path\">\n <SpecInput\n value={value.setup?.checkout?.path}\n onChange={(path) => onChange(withCheckout(value, { path }))}\n placeholder=\"/repo\"\n icon={UiFolderGit}\n mono\n />\n </SpecField>\n ) : (\n <SpecField label=\"Git URL\">\n <SpecInput\n value={value.setup?.checkout?.url}\n onChange={(url) => onChange(withCheckout(value, { url }))}\n placeholder=\"https://github.com/org/repo.git\"\n icon={UiLink}\n mono\n />\n </SpecField>\n )}\n <SpecField label=\"Ref\">\n <SpecInput\n value={value.setup?.checkout?.ref}\n onChange={(ref) => onChange(withCheckout(value, { ref }))}\n placeholder=\"main\"\n icon={UiGitBranch}\n mono\n />\n </SpecField>\n <NumberField\n label=\"Depth\"\n value={value.setup?.checkout?.depth}\n onChange={(depth) =>\n onChange(withCheckout(value, { depth: depth ?? 0 }))\n }\n icon={UiStack}\n min={0}\n step={1}\n integer\n />\n </div>\n {checkout !== \"local\" && (\n <Disclosure label=\"Advanced\" hint=\"connection\">\n <SpecField label=\"Connection\">\n {secretSelector ? (\n <SecretKeySelector\n value={secretValueFromString(\n value.setup?.checkout?.connection,\n )}\n onChange={(next) =>\n onChange(\n withCheckout(value, {\n connection: stringFromSecretValue(next),\n }),\n )\n }\n loadResources={secretSelector.loadResources}\n loadKeyPreview={secretSelector.loadKeyPreview}\n {...(secretSelector.allowLiteral !== undefined\n ? { allowLiteral: secretSelector.allowLiteral }\n : {})}\n {...(secretSelector.strict !== undefined\n ? { strict: secretSelector.strict }\n : {})}\n className=\"min-w-0 flex-wrap\"\n />\n ) : (\n <SpecInput\n value={value.setup?.checkout?.connection}\n onChange={(connection) =>\n onChange(withCheckout(value, { connection }))\n }\n placeholder=\"github\"\n icon={UiPlug}\n mono\n />\n )}\n </SpecField>\n </Disclosure>\n )}\n </>\n )}\n </div>\n\n <div className=\"space-y-density-2\">\n <SpecField label=\"Worktree\">\n <SegmentedControl\n aria-label=\"Worktree mode\"\n size=\"sm\"\n value={worktree}\n onChange={(mode) => onChange(withWorktreeMode(value, mode))}\n options={WORKTREE_OPTIONS}\n />\n </SpecField>\n {worktree !== \"none\" && (\n <>\n <div className=\"grid gap-density-2 md:grid-cols-3\">\n {worktree === \"new\" && (\n <>\n <SpecField label=\"Worktree prefix\">\n <SpecInput\n value={value.setup?.checkout?.worktree?.prefix}\n onChange={(prefix) =>\n onChange(withWorktree(value, { prefix }))\n }\n placeholder=\"ai\"\n icon={UiTag}\n mono\n />\n </SpecField>\n <SpecField label=\"Worktree base\">\n <SpecInput\n value={value.setup?.checkout?.worktree?.base}\n onChange={(base) =>\n onChange(withWorktree(value, { base }))\n }\n placeholder=\"main\"\n icon={UiGitBranch}\n mono\n />\n </SpecField>\n </>\n )}\n <SpecField label=\"Worktree path\">\n <SpecInput\n value={value.setup?.checkout?.worktree?.path}\n onChange={(path) => onChange(withWorktree(value, { path }))}\n placeholder=\".shell/worktrees/spec-runtime\"\n icon={UiFolder}\n mono\n />\n </SpecField>\n </div>\n {worktree === \"new\" && (\n <div className=\"grid gap-density-2 sm:grid-cols-[minmax(10rem,16rem)]\">\n <CheckboxField\n label=\"Keep worktree\"\n checked={value.setup?.checkout?.worktree?.keep}\n onChange={(keep) => onChange(withWorktree(value, { keep }))}\n />\n </div>\n )}\n </>\n )}\n </div>\n\n <div className=\"space-y-density-2\">\n <SpecField label=\"Stash\">\n <SegmentedControl\n aria-label=\"Stash mode\"\n size=\"sm\"\n value={stashMode(value)}\n onChange={(stash) => onChange(withStashMode(value, stash))}\n options={STASH_OPTIONS}\n />\n </SpecField>\n <div className=\"grid gap-density-2 md:grid-cols-2\">\n <SpecField label=\"Since\">\n <SpecInput\n value={value.setup?.checkout?.dirty?.since}\n onChange={(since) => onChange(withDirty(value, { since }))}\n placeholder=\"origin/main\"\n icon={UiClock}\n mono\n />\n </SpecField>\n </div>\n </div>\n </div>\n );\n}\n"],"names":["SPEC_WORKTREE_MODES","SPEC_STASH_MODES","checkoutMode","worktreeMode","jsxs","jsx","SpecField","SpecInput","withSetup","UiFolder","SegmentedControl","withCheckoutMode","Fragment","withCheckout","UiFolderGit","UiLink","UiGitBranch","NumberField","UiStack","Disclosure","SecretKeySelector","secretValueFromString","stringFromSecretValue","UiPlug","withWorktreeMode","withWorktree","UiTag","CheckboxField","stashMode","withStashMode","withDirty","UiClock"],"mappings":"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"}
1
+ {"version":3,"file":"WorkspaceSection.cjs","sources":["../../../../src/data/ai/SpecRuntimeEditor/WorkspaceSection.tsx"],"sourcesContent":["import { SecretKeySelector } from \"../../../components/SecretKeySelector\";\nimport { SegmentedControl } from \"../../../components/SegmentedControl\";\nimport {\n UiClock,\n UiFolder,\n UiFolderGit,\n UiGitBranch,\n UiLink,\n UiPlug,\n UiStack,\n UiTag,\n} from \"../../../icons\";\nimport {\n SPEC_STASH_MODES,\n SPEC_WORKTREE_MODES,\n type AISpecRuntimeValue,\n type SpecCheckoutMode,\n type SpecStashMode,\n type SpecWorktreeMode,\n} from \"../SpecRuntimeEditor.model\";\nimport { secretValueFromString, stringFromSecretValue } from \"./env-model\";\nimport {\n CheckboxField,\n Disclosure,\n NumberField,\n SpecField,\n SpecInput,\n} from \"./fields\";\nimport type { SpecRuntimeSecretSelectorConfig } from \"./types\";\nimport {\n checkoutMode,\n stashMode,\n withCheckout,\n withCheckoutMode,\n withDirty,\n withSetup,\n withStashMode,\n withWorktree,\n withWorktreeMode,\n worktreeMode,\n} from \"./update\";\n\nconst CHECKOUT_OPTIONS: Array<{ id: SpecCheckoutMode; label: string }> = [\n { id: \"none\", label: \"None\" },\n { id: \"remote\", label: \"Remote\" },\n { id: \"local\", label: \"Local\" },\n];\nconst WORKTREE_OPTIONS: Array<{ id: SpecWorktreeMode; label: string }> =\n SPEC_WORKTREE_MODES.map((mode) => ({\n id: mode,\n label: mode === \"none\" ? \"None\" : mode === \"new\" ? \"New\" : \"Existing\",\n }));\nconst STASH_OPTIONS: Array<{ id: SpecStashMode; label: string }> =\n SPEC_STASH_MODES.map((mode) => ({\n id: mode,\n label:\n mode === \"none\" ? \"None\" : mode.charAt(0).toUpperCase() + mode.slice(1),\n }));\n\nexport function WorkspaceSection({\n value,\n onChange,\n secretSelector,\n}: {\n value: AISpecRuntimeValue;\n onChange: (value: AISpecRuntimeValue) => void;\n secretSelector?: SpecRuntimeSecretSelectorConfig | undefined;\n}) {\n const checkout = checkoutMode(value);\n const worktree = worktreeMode(value);\n return (\n <div className=\"grid gap-density-3\">\n <div className=\"grid gap-density-2 md:grid-cols-2\">\n <SpecField label=\"Directory\">\n <SpecInput\n value={value.setup?.cwd}\n onChange={(cwd) => onChange(withSetup(value, { cwd }))}\n icon={UiFolder}\n mono\n />\n </SpecField>\n <SpecField label=\"Base dir\">\n <SpecInput\n value={value.setup?.baseDir}\n onChange={(baseDir) => onChange(withSetup(value, { baseDir }))}\n icon={UiFolder}\n mono\n />\n </SpecField>\n </div>\n\n <div className=\"space-y-density-2\">\n <SpecField label=\"Git checkout\">\n <SegmentedControl\n aria-label=\"Checkout source\"\n size=\"sm\"\n value={checkout}\n onChange={(mode) => onChange(withCheckoutMode(value, mode))}\n options={CHECKOUT_OPTIONS}\n />\n </SpecField>\n {checkout !== \"none\" && (\n <>\n <div className=\"grid gap-density-2 md:grid-cols-[minmax(0,1fr)_9rem_6rem]\">\n {checkout === \"local\" ? (\n <SpecField label=\"Local path\">\n <SpecInput\n value={value.setup?.checkout?.path}\n onChange={(path) => onChange(withCheckout(value, { path }))}\n placeholder=\"/repo\"\n icon={UiFolderGit}\n mono\n />\n </SpecField>\n ) : (\n <SpecField label=\"Git URL\">\n <SpecInput\n value={value.setup?.checkout?.url}\n onChange={(url) => onChange(withCheckout(value, { url }))}\n placeholder=\"https://github.com/org/repo.git\"\n icon={UiLink}\n mono\n />\n </SpecField>\n )}\n <SpecField label=\"Ref\">\n <SpecInput\n value={value.setup?.checkout?.ref}\n onChange={(ref) => onChange(withCheckout(value, { ref }))}\n placeholder=\"main\"\n icon={UiGitBranch}\n mono\n />\n </SpecField>\n <NumberField\n label=\"Depth\"\n value={value.setup?.checkout?.depth}\n onChange={(depth) =>\n onChange(withCheckout(value, { depth: depth ?? 0 }))\n }\n icon={UiStack}\n min={0}\n step={1}\n integer\n />\n </div>\n {checkout !== \"local\" && (\n <Disclosure label=\"Advanced\" hint=\"connection\">\n <SpecField label=\"Connection\">\n {secretSelector ? (\n <SecretKeySelector\n value={secretValueFromString(\n value.setup?.checkout?.connection,\n )}\n onChange={(next) =>\n onChange(\n withCheckout(value, {\n connection: stringFromSecretValue(next),\n }),\n )\n }\n loadResources={secretSelector.loadResources}\n loadKeyPreview={secretSelector.loadKeyPreview}\n {...(secretSelector.allowLiteral !== undefined\n ? { allowLiteral: secretSelector.allowLiteral }\n : {})}\n {...(secretSelector.strict !== undefined\n ? { strict: secretSelector.strict }\n : {})}\n className=\"min-w-0 flex-wrap\"\n />\n ) : (\n <SpecInput\n value={value.setup?.checkout?.connection}\n onChange={(connection) =>\n onChange(withCheckout(value, { connection }))\n }\n placeholder=\"github\"\n icon={UiPlug}\n mono\n />\n )}\n </SpecField>\n </Disclosure>\n )}\n </>\n )}\n </div>\n\n <div className=\"space-y-density-2\">\n <SpecField label=\"Worktree\">\n <SegmentedControl\n aria-label=\"Worktree mode\"\n size=\"sm\"\n value={worktree}\n onChange={(mode) => onChange(withWorktreeMode(value, mode))}\n options={WORKTREE_OPTIONS}\n />\n </SpecField>\n {worktree !== \"none\" && (\n <>\n <div className=\"grid gap-density-2 md:grid-cols-3\">\n {worktree === \"new\" && (\n <>\n <SpecField label=\"Worktree prefix\">\n <SpecInput\n value={value.setup?.checkout?.worktree?.prefix}\n onChange={(prefix) =>\n onChange(withWorktree(value, { prefix }))\n }\n placeholder=\"ai\"\n icon={UiTag}\n mono\n />\n </SpecField>\n <SpecField label=\"Worktree base\">\n <SpecInput\n value={value.setup?.checkout?.worktree?.base}\n onChange={(base) =>\n onChange(withWorktree(value, { base }))\n }\n icon={UiGitBranch}\n mono\n />\n </SpecField>\n </>\n )}\n <SpecField label=\"Worktree path\">\n <SpecInput\n value={value.setup?.checkout?.worktree?.path}\n onChange={(path) => onChange(withWorktree(value, { path }))}\n icon={UiFolder}\n mono\n />\n </SpecField>\n </div>\n {worktree === \"new\" && (\n <div className=\"grid gap-density-2 sm:grid-cols-[minmax(10rem,16rem)]\">\n <CheckboxField\n label=\"Keep worktree\"\n checked={value.setup?.checkout?.worktree?.keep}\n onChange={(keep) => onChange(withWorktree(value, { keep }))}\n />\n </div>\n )}\n </>\n )}\n </div>\n\n <div className=\"space-y-density-2\">\n <SpecField label=\"Stash\">\n <SegmentedControl\n aria-label=\"Stash mode\"\n size=\"sm\"\n value={stashMode(value)}\n onChange={(stash) => onChange(withStashMode(value, stash))}\n options={STASH_OPTIONS}\n />\n </SpecField>\n <div className=\"grid gap-density-2 md:grid-cols-2\">\n <SpecField label=\"Since\">\n <SpecInput\n value={value.setup?.checkout?.dirty?.since}\n onChange={(since) => onChange(withDirty(value, { since }))}\n icon={UiClock}\n mono\n />\n </SpecField>\n </div>\n </div>\n </div>\n );\n}\n"],"names":["SPEC_WORKTREE_MODES","SPEC_STASH_MODES","checkoutMode","worktreeMode","jsxs","jsx","SpecField","SpecInput","withSetup","UiFolder","SegmentedControl","withCheckoutMode","Fragment","withCheckout","UiFolderGit","UiLink","UiGitBranch","NumberField","UiStack","Disclosure","SecretKeySelector","secretValueFromString","stringFromSecretValue","UiPlug","withWorktreeMode","withWorktree","UiTag","CheckboxField","stashMode","withStashMode","withDirty","UiClock"],"mappings":";;;;;;;;;;;;;;;;;AA0CA,MAAM,mBAAmE;AAAA,EACvE,EAAE,IAAI,QAAQ,OAAO,OAAA;AAAA,EACrB,EAAE,IAAI,UAAU,OAAO,SAAA;AAAA,EACvB,EAAE,IAAI,SAAS,OAAO,QAAA;AACxB;AACA,MAAM,mBACJA,wBAAAA,oBAAoB,IAAI,CAAC,UAAU;AAAA,EACjC,IAAI;AAAA,EACJ,OAAO,SAAS,SAAS,SAAS,SAAS,QAAQ,QAAQ;AAC7D,EAAE;AACJ,MAAM,gBACJC,wBAAAA,iBAAiB,IAAI,CAAC,UAAU;AAAA,EAC9B,IAAI;AAAA,EACJ,OACE,SAAS,SAAS,SAAS,KAAK,OAAO,CAAC,EAAE,YAAA,IAAgB,KAAK,MAAM,CAAC;AAC1E,EAAE;AAEG,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AACF,GAIG;;AACD,QAAM,WAAWC,OAAAA,aAAa,KAAK;AACnC,QAAM,WAAWC,OAAAA,aAAa,KAAK;AACnC,SACEC,2BAAAA,KAAC,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,IAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,MAAAC,2BAAAA,IAACC,OAAAA,WAAA,EAAU,OAAM,aACf,UAAAD,2BAAAA;AAAAA,QAACE,OAAAA;AAAAA,QAAA;AAAA,UACC,QAAO,WAAM,UAAN,mBAAa;AAAA,UACpB,UAAU,CAAC,QAAQ,SAASC,OAAAA,UAAU,OAAO,EAAE,IAAA,CAAK,CAAC;AAAA,UACrD,MAAMC,SAAAA;AAAAA,UACN,MAAI;AAAA,QAAA;AAAA,MAAA,GAER;AAAA,MACAJ,2BAAAA,IAACC,OAAAA,WAAA,EAAU,OAAM,YACf,UAAAD,2BAAAA;AAAAA,QAACE,OAAAA;AAAAA,QAAA;AAAA,UACC,QAAO,WAAM,UAAN,mBAAa;AAAA,UACpB,UAAU,CAAC,YAAY,SAASC,OAAAA,UAAU,OAAO,EAAE,QAAA,CAAS,CAAC;AAAA,UAC7D,MAAMC,SAAAA;AAAAA,UACN,MAAI;AAAA,QAAA;AAAA,MAAA,EACN,CACF;AAAA,IAAA,GACF;AAAA,IAEAL,2BAAAA,KAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,MAAAC,2BAAAA,IAACC,OAAAA,WAAA,EAAU,OAAM,gBACf,UAAAD,2BAAAA;AAAAA,QAACK,iBAAAA;AAAAA,QAAA;AAAA,UACC,cAAW;AAAA,UACX,MAAK;AAAA,UACL,OAAO;AAAA,UACP,UAAU,CAAC,SAAS,SAASC,OAAAA,iBAAiB,OAAO,IAAI,CAAC;AAAA,UAC1D,SAAS;AAAA,QAAA;AAAA,MAAA,GAEb;AAAA,MACC,aAAa,UACZP,2BAAAA,KAAAQ,WAAAA,UAAA,EACE,UAAA;AAAA,QAAAR,2BAAAA,KAAC,OAAA,EAAI,WAAU,6DACZ,UAAA;AAAA,UAAA,aAAa,UACZC,+BAACC,OAAAA,WAAA,EAAU,OAAM,cACf,UAAAD,2BAAAA;AAAAA,YAACE,OAAAA;AAAAA,YAAA;AAAA,cACC,QAAO,iBAAM,UAAN,mBAAa,aAAb,mBAAuB;AAAA,cAC9B,UAAU,CAAC,SAAS,SAASM,OAAAA,aAAa,OAAO,EAAE,KAAA,CAAM,CAAC;AAAA,cAC1D,aAAY;AAAA,cACZ,MAAMC,YAAAA;AAAAA,cACN,MAAI;AAAA,YAAA;AAAA,UAAA,EACN,CACF,IAEAT,2BAAAA,IAACC,OAAAA,WAAA,EAAU,OAAM,WACf,UAAAD,2BAAAA;AAAAA,YAACE,OAAAA;AAAAA,YAAA;AAAA,cACC,QAAO,iBAAM,UAAN,mBAAa,aAAb,mBAAuB;AAAA,cAC9B,UAAU,CAAC,QAAQ,SAASM,OAAAA,aAAa,OAAO,EAAE,IAAA,CAAK,CAAC;AAAA,cACxD,aAAY;AAAA,cACZ,MAAME,OAAAA;AAAAA,cACN,MAAI;AAAA,YAAA;AAAA,UAAA,GAER;AAAA,UAEFV,2BAAAA,IAACC,OAAAA,WAAA,EAAU,OAAM,OACf,UAAAD,2BAAAA;AAAAA,YAACE,OAAAA;AAAAA,YAAA;AAAA,cACC,QAAO,iBAAM,UAAN,mBAAa,aAAb,mBAAuB;AAAA,cAC9B,UAAU,CAAC,QAAQ,SAASM,OAAAA,aAAa,OAAO,EAAE,IAAA,CAAK,CAAC;AAAA,cACxD,aAAY;AAAA,cACZ,MAAMG,YAAAA;AAAAA,cACN,MAAI;AAAA,YAAA;AAAA,UAAA,GAER;AAAA,UACAX,2BAAAA;AAAAA,YAACY,OAAAA;AAAAA,YAAA;AAAA,cACC,OAAM;AAAA,cACN,QAAO,iBAAM,UAAN,mBAAa,aAAb,mBAAuB;AAAA,cAC9B,UAAU,CAAC,UACT,SAASJ,OAAAA,aAAa,OAAO,EAAE,OAAO,SAAS,EAAA,CAAG,CAAC;AAAA,cAErD,MAAMK,QAAAA;AAAAA,cACN,KAAK;AAAA,cACL,MAAM;AAAA,cACN,SAAO;AAAA,YAAA;AAAA,UAAA;AAAA,QACT,GACF;AAAA,QACC,aAAa,WACZb,+BAACc,OAAAA,YAAA,EAAW,OAAM,YAAW,MAAK,cAChC,UAAAd,2BAAAA,IAACC,OAAAA,WAAA,EAAU,OAAM,cACd,UAAA,iBACCD,2BAAAA;AAAAA,UAACe,kBAAAA;AAAAA,UAAA;AAAA,YACC,OAAOC,SAAAA;AAAAA,eACL,iBAAM,UAAN,mBAAa,aAAb,mBAAuB;AAAA,YAAA;AAAA,YAEzB,UAAU,CAAC,SACT;AAAA,cACER,OAAAA,aAAa,OAAO;AAAA,gBAClB,YAAYS,SAAAA,sBAAsB,IAAI;AAAA,cAAA,CACvC;AAAA,YAAA;AAAA,YAGL,eAAe,eAAe;AAAA,YAC9B,gBAAgB,eAAe;AAAA,YAC9B,GAAI,eAAe,iBAAiB,SACjC,EAAE,cAAc,eAAe,aAAA,IAC/B,CAAA;AAAA,YACH,GAAI,eAAe,WAAW,SAC3B,EAAE,QAAQ,eAAe,OAAA,IACzB,CAAA;AAAA,YACJ,WAAU;AAAA,UAAA;AAAA,QAAA,IAGZjB,2BAAAA;AAAAA,UAACE,OAAAA;AAAAA,UAAA;AAAA,YACC,QAAO,iBAAM,UAAN,mBAAa,aAAb,mBAAuB;AAAA,YAC9B,UAAU,CAAC,eACT,SAASM,OAAAA,aAAa,OAAO,EAAE,WAAA,CAAY,CAAC;AAAA,YAE9C,aAAY;AAAA,YACZ,MAAMU,OAAAA;AAAAA,YACN,MAAI;AAAA,UAAA;AAAA,QAAA,GAGV,EAAA,CACF;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,GAEJ;AAAA,IAEAnB,2BAAAA,KAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,MAAAC,2BAAAA,IAACC,OAAAA,WAAA,EAAU,OAAM,YACf,UAAAD,2BAAAA;AAAAA,QAACK,iBAAAA;AAAAA,QAAA;AAAA,UACC,cAAW;AAAA,UACX,MAAK;AAAA,UACL,OAAO;AAAA,UACP,UAAU,CAAC,SAAS,SAASc,OAAAA,iBAAiB,OAAO,IAAI,CAAC;AAAA,UAC1D,SAAS;AAAA,QAAA;AAAA,MAAA,GAEb;AAAA,MACC,aAAa,UACZpB,2BAAAA,KAAAQ,WAAAA,UAAA,EACE,UAAA;AAAA,QAAAR,2BAAAA,KAAC,OAAA,EAAI,WAAU,qCACZ,UAAA;AAAA,UAAA,aAAa,SACZA,2BAAAA,KAAAQ,WAAAA,UAAA,EACE,UAAA;AAAA,YAAAP,2BAAAA,IAACC,OAAAA,WAAA,EAAU,OAAM,mBACf,UAAAD,2BAAAA;AAAAA,cAACE,OAAAA;AAAAA,cAAA;AAAA,gBACC,QAAO,uBAAM,UAAN,mBAAa,aAAb,mBAAuB,aAAvB,mBAAiC;AAAA,gBACxC,UAAU,CAAC,WACT,SAASkB,OAAAA,aAAa,OAAO,EAAE,OAAA,CAAQ,CAAC;AAAA,gBAE1C,aAAY;AAAA,gBACZ,MAAMC,MAAAA;AAAAA,gBACN,MAAI;AAAA,cAAA;AAAA,YAAA,GAER;AAAA,YACArB,2BAAAA,IAACC,OAAAA,WAAA,EAAU,OAAM,iBACf,UAAAD,2BAAAA;AAAAA,cAACE,OAAAA;AAAAA,cAAA;AAAA,gBACC,QAAO,uBAAM,UAAN,mBAAa,aAAb,mBAAuB,aAAvB,mBAAiC;AAAA,gBACxC,UAAU,CAAC,SACT,SAASkB,OAAAA,aAAa,OAAO,EAAE,KAAA,CAAM,CAAC;AAAA,gBAExC,MAAMT,YAAAA;AAAAA,gBACN,MAAI;AAAA,cAAA;AAAA,YAAA,EACN,CACF;AAAA,UAAA,GACF;AAAA,UAEFX,2BAAAA,IAACC,OAAAA,WAAA,EAAU,OAAM,iBACf,UAAAD,2BAAAA;AAAAA,YAACE,OAAAA;AAAAA,YAAA;AAAA,cACC,QAAO,uBAAM,UAAN,mBAAa,aAAb,mBAAuB,aAAvB,mBAAiC;AAAA,cACxC,UAAU,CAAC,SAAS,SAASkB,OAAAA,aAAa,OAAO,EAAE,KAAA,CAAM,CAAC;AAAA,cAC1D,MAAMhB,SAAAA;AAAAA,cACN,MAAI;AAAA,YAAA;AAAA,UAAA,EACN,CACF;AAAA,QAAA,GACF;AAAA,QACC,aAAa,SACZJ,+BAAC,OAAA,EAAI,WAAU,yDACb,UAAAA,2BAAAA;AAAAA,UAACsB,OAAAA;AAAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,UAAS,uBAAM,UAAN,mBAAa,aAAb,mBAAuB,aAAvB,mBAAiC;AAAA,YAC1C,UAAU,CAAC,SAAS,SAASF,OAAAA,aAAa,OAAO,EAAE,MAAM,CAAC;AAAA,UAAA;AAAA,QAAA,EAC5D,CACF;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,GAEJ;AAAA,IAEArB,2BAAAA,KAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,MAAAC,2BAAAA,IAACC,OAAAA,WAAA,EAAU,OAAM,SACf,UAAAD,2BAAAA;AAAAA,QAACK,iBAAAA;AAAAA,QAAA;AAAA,UACC,cAAW;AAAA,UACX,MAAK;AAAA,UACL,OAAOkB,OAAAA,UAAU,KAAK;AAAA,UACtB,UAAU,CAAC,UAAU,SAASC,OAAAA,cAAc,OAAO,KAAK,CAAC;AAAA,UACzD,SAAS;AAAA,QAAA;AAAA,MAAA,GAEb;AAAA,qCACC,OAAA,EAAI,WAAU,qCACb,UAAAxB,+BAACC,OAAAA,WAAA,EAAU,OAAM,SACf,UAAAD,2BAAAA;AAAAA,QAACE,OAAAA;AAAAA,QAAA;AAAA,UACC,QAAO,uBAAM,UAAN,mBAAa,aAAb,mBAAuB,UAAvB,mBAA8B;AAAA,UACrC,UAAU,CAAC,UAAU,SAASuB,OAAAA,UAAU,OAAO,EAAE,MAAA,CAAO,CAAC;AAAA,UACzD,MAAMC,QAAAA;AAAAA,UACN,MAAI;AAAA,QAAA;AAAA,MAAA,GAER,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"WorkspaceSection.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/SpecRuntimeEditor/WorkspaceSection.tsx"],"names":[],"mappings":"AAYA,OAAO,EAGL,KAAK,kBAAkB,EAIxB,MAAM,4BAA4B,CAAC;AASpC,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AA+B/D,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,cAAc,GACf,EAAE;IACD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,+BAA+B,GAAG,SAAS,CAAC;CAC9D,2CAkNA"}
1
+ {"version":3,"file":"WorkspaceSection.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/SpecRuntimeEditor/WorkspaceSection.tsx"],"names":[],"mappings":"AAYA,OAAO,EAGL,KAAK,kBAAkB,EAIxB,MAAM,4BAA4B,CAAC;AASpC,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AA+B/D,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,cAAc,GACf,EAAE;IACD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,+BAA+B,GAAG,SAAS,CAAC;CAC9D,2CA6MA"}
@@ -41,7 +41,6 @@ function WorkspaceSection({
41
41
  {
42
42
  value: (_a = value.setup) == null ? void 0 : _a.cwd,
43
43
  onChange: (cwd) => onChange(withSetup(value, { cwd })),
44
- placeholder: ".",
45
44
  icon: UiFolder,
46
45
  mono: true
47
46
  }
@@ -51,7 +50,6 @@ function WorkspaceSection({
51
50
  {
52
51
  value: (_b = value.setup) == null ? void 0 : _b.baseDir,
53
52
  onChange: (baseDir) => onChange(withSetup(value, { baseDir })),
54
- placeholder: ".captain/workspaces",
55
53
  icon: UiFolder,
56
54
  mono: true
57
55
  }
@@ -170,7 +168,6 @@ function WorkspaceSection({
170
168
  {
171
169
  value: (_t = (_s = (_r = value.setup) == null ? void 0 : _r.checkout) == null ? void 0 : _s.worktree) == null ? void 0 : _t.base,
172
170
  onChange: (base) => onChange(withWorktree(value, { base })),
173
- placeholder: "main",
174
171
  icon: UiGitBranch,
175
172
  mono: true
176
173
  }
@@ -181,7 +178,6 @@ function WorkspaceSection({
181
178
  {
182
179
  value: (_w = (_v = (_u = value.setup) == null ? void 0 : _u.checkout) == null ? void 0 : _v.worktree) == null ? void 0 : _w.path,
183
180
  onChange: (path) => onChange(withWorktree(value, { path })),
184
- placeholder: ".shell/worktrees/spec-runtime",
185
181
  icon: UiFolder,
186
182
  mono: true
187
183
  }
@@ -213,7 +209,6 @@ function WorkspaceSection({
213
209
  {
214
210
  value: (_C = (_B = (_A = value.setup) == null ? void 0 : _A.checkout) == null ? void 0 : _B.dirty) == null ? void 0 : _C.since,
215
211
  onChange: (since) => onChange(withDirty(value, { since })),
216
- placeholder: "origin/main",
217
212
  icon: UiClock,
218
213
  mono: true
219
214
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WorkspaceSection.js","sources":["../../../../src/data/ai/SpecRuntimeEditor/WorkspaceSection.tsx"],"sourcesContent":["import { SecretKeySelector } from \"../../../components/SecretKeySelector\";\nimport { SegmentedControl } from \"../../../components/SegmentedControl\";\nimport {\n UiClock,\n UiFolder,\n UiFolderGit,\n UiGitBranch,\n UiLink,\n UiPlug,\n UiStack,\n UiTag,\n} from \"../../../icons\";\nimport {\n SPEC_STASH_MODES,\n SPEC_WORKTREE_MODES,\n type AISpecRuntimeValue,\n type SpecCheckoutMode,\n type SpecStashMode,\n type SpecWorktreeMode,\n} from \"../SpecRuntimeEditor.model\";\nimport { secretValueFromString, stringFromSecretValue } from \"./env-model\";\nimport {\n CheckboxField,\n Disclosure,\n NumberField,\n SpecField,\n SpecInput,\n} from \"./fields\";\nimport type { SpecRuntimeSecretSelectorConfig } from \"./types\";\nimport {\n checkoutMode,\n stashMode,\n withCheckout,\n withCheckoutMode,\n withDirty,\n withSetup,\n withStashMode,\n withWorktree,\n withWorktreeMode,\n worktreeMode,\n} from \"./update\";\n\nconst CHECKOUT_OPTIONS: Array<{ id: SpecCheckoutMode; label: string }> = [\n { id: \"none\", label: \"None\" },\n { id: \"remote\", label: \"Remote\" },\n { id: \"local\", label: \"Local\" },\n];\nconst WORKTREE_OPTIONS: Array<{ id: SpecWorktreeMode; label: string }> =\n SPEC_WORKTREE_MODES.map((mode) => ({\n id: mode,\n label: mode === \"none\" ? \"None\" : mode === \"new\" ? \"New\" : \"Existing\",\n }));\nconst STASH_OPTIONS: Array<{ id: SpecStashMode; label: string }> =\n SPEC_STASH_MODES.map((mode) => ({\n id: mode,\n label:\n mode === \"none\" ? \"None\" : mode.charAt(0).toUpperCase() + mode.slice(1),\n }));\n\nexport function WorkspaceSection({\n value,\n onChange,\n secretSelector,\n}: {\n value: AISpecRuntimeValue;\n onChange: (value: AISpecRuntimeValue) => void;\n secretSelector?: SpecRuntimeSecretSelectorConfig | undefined;\n}) {\n const checkout = checkoutMode(value);\n const worktree = worktreeMode(value);\n return (\n <div className=\"grid gap-density-3\">\n <div className=\"grid gap-density-2 md:grid-cols-2\">\n <SpecField label=\"Directory\">\n <SpecInput\n value={value.setup?.cwd}\n onChange={(cwd) => onChange(withSetup(value, { cwd }))}\n placeholder=\".\"\n icon={UiFolder}\n mono\n />\n </SpecField>\n <SpecField label=\"Base dir\">\n <SpecInput\n value={value.setup?.baseDir}\n onChange={(baseDir) => onChange(withSetup(value, { baseDir }))}\n placeholder=\".captain/workspaces\"\n icon={UiFolder}\n mono\n />\n </SpecField>\n </div>\n\n <div className=\"space-y-density-2\">\n <SpecField label=\"Git checkout\">\n <SegmentedControl\n aria-label=\"Checkout source\"\n size=\"sm\"\n value={checkout}\n onChange={(mode) => onChange(withCheckoutMode(value, mode))}\n options={CHECKOUT_OPTIONS}\n />\n </SpecField>\n {checkout !== \"none\" && (\n <>\n <div className=\"grid gap-density-2 md:grid-cols-[minmax(0,1fr)_9rem_6rem]\">\n {checkout === \"local\" ? (\n <SpecField label=\"Local path\">\n <SpecInput\n value={value.setup?.checkout?.path}\n onChange={(path) => onChange(withCheckout(value, { path }))}\n placeholder=\"/repo\"\n icon={UiFolderGit}\n mono\n />\n </SpecField>\n ) : (\n <SpecField label=\"Git URL\">\n <SpecInput\n value={value.setup?.checkout?.url}\n onChange={(url) => onChange(withCheckout(value, { url }))}\n placeholder=\"https://github.com/org/repo.git\"\n icon={UiLink}\n mono\n />\n </SpecField>\n )}\n <SpecField label=\"Ref\">\n <SpecInput\n value={value.setup?.checkout?.ref}\n onChange={(ref) => onChange(withCheckout(value, { ref }))}\n placeholder=\"main\"\n icon={UiGitBranch}\n mono\n />\n </SpecField>\n <NumberField\n label=\"Depth\"\n value={value.setup?.checkout?.depth}\n onChange={(depth) =>\n onChange(withCheckout(value, { depth: depth ?? 0 }))\n }\n icon={UiStack}\n min={0}\n step={1}\n integer\n />\n </div>\n {checkout !== \"local\" && (\n <Disclosure label=\"Advanced\" hint=\"connection\">\n <SpecField label=\"Connection\">\n {secretSelector ? (\n <SecretKeySelector\n value={secretValueFromString(\n value.setup?.checkout?.connection,\n )}\n onChange={(next) =>\n onChange(\n withCheckout(value, {\n connection: stringFromSecretValue(next),\n }),\n )\n }\n loadResources={secretSelector.loadResources}\n loadKeyPreview={secretSelector.loadKeyPreview}\n {...(secretSelector.allowLiteral !== undefined\n ? { allowLiteral: secretSelector.allowLiteral }\n : {})}\n {...(secretSelector.strict !== undefined\n ? { strict: secretSelector.strict }\n : {})}\n className=\"min-w-0 flex-wrap\"\n />\n ) : (\n <SpecInput\n value={value.setup?.checkout?.connection}\n onChange={(connection) =>\n onChange(withCheckout(value, { connection }))\n }\n placeholder=\"github\"\n icon={UiPlug}\n mono\n />\n )}\n </SpecField>\n </Disclosure>\n )}\n </>\n )}\n </div>\n\n <div className=\"space-y-density-2\">\n <SpecField label=\"Worktree\">\n <SegmentedControl\n aria-label=\"Worktree mode\"\n size=\"sm\"\n value={worktree}\n onChange={(mode) => onChange(withWorktreeMode(value, mode))}\n options={WORKTREE_OPTIONS}\n />\n </SpecField>\n {worktree !== \"none\" && (\n <>\n <div className=\"grid gap-density-2 md:grid-cols-3\">\n {worktree === \"new\" && (\n <>\n <SpecField label=\"Worktree prefix\">\n <SpecInput\n value={value.setup?.checkout?.worktree?.prefix}\n onChange={(prefix) =>\n onChange(withWorktree(value, { prefix }))\n }\n placeholder=\"ai\"\n icon={UiTag}\n mono\n />\n </SpecField>\n <SpecField label=\"Worktree base\">\n <SpecInput\n value={value.setup?.checkout?.worktree?.base}\n onChange={(base) =>\n onChange(withWorktree(value, { base }))\n }\n placeholder=\"main\"\n icon={UiGitBranch}\n mono\n />\n </SpecField>\n </>\n )}\n <SpecField label=\"Worktree path\">\n <SpecInput\n value={value.setup?.checkout?.worktree?.path}\n onChange={(path) => onChange(withWorktree(value, { path }))}\n placeholder=\".shell/worktrees/spec-runtime\"\n icon={UiFolder}\n mono\n />\n </SpecField>\n </div>\n {worktree === \"new\" && (\n <div className=\"grid gap-density-2 sm:grid-cols-[minmax(10rem,16rem)]\">\n <CheckboxField\n label=\"Keep worktree\"\n checked={value.setup?.checkout?.worktree?.keep}\n onChange={(keep) => onChange(withWorktree(value, { keep }))}\n />\n </div>\n )}\n </>\n )}\n </div>\n\n <div className=\"space-y-density-2\">\n <SpecField label=\"Stash\">\n <SegmentedControl\n aria-label=\"Stash mode\"\n size=\"sm\"\n value={stashMode(value)}\n onChange={(stash) => onChange(withStashMode(value, stash))}\n options={STASH_OPTIONS}\n />\n </SpecField>\n <div className=\"grid gap-density-2 md:grid-cols-2\">\n <SpecField label=\"Since\">\n <SpecInput\n value={value.setup?.checkout?.dirty?.since}\n onChange={(since) => onChange(withDirty(value, { since }))}\n placeholder=\"origin/main\"\n icon={UiClock}\n mono\n />\n </SpecField>\n </div>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WorkspaceSection.js","sources":["../../../../src/data/ai/SpecRuntimeEditor/WorkspaceSection.tsx"],"sourcesContent":["import { SecretKeySelector } from \"../../../components/SecretKeySelector\";\nimport { SegmentedControl } from \"../../../components/SegmentedControl\";\nimport {\n UiClock,\n UiFolder,\n UiFolderGit,\n UiGitBranch,\n UiLink,\n UiPlug,\n UiStack,\n UiTag,\n} from \"../../../icons\";\nimport {\n SPEC_STASH_MODES,\n SPEC_WORKTREE_MODES,\n type AISpecRuntimeValue,\n type SpecCheckoutMode,\n type SpecStashMode,\n type SpecWorktreeMode,\n} from \"../SpecRuntimeEditor.model\";\nimport { secretValueFromString, stringFromSecretValue } from \"./env-model\";\nimport {\n CheckboxField,\n Disclosure,\n NumberField,\n SpecField,\n SpecInput,\n} from \"./fields\";\nimport type { SpecRuntimeSecretSelectorConfig } from \"./types\";\nimport {\n checkoutMode,\n stashMode,\n withCheckout,\n withCheckoutMode,\n withDirty,\n withSetup,\n withStashMode,\n withWorktree,\n withWorktreeMode,\n worktreeMode,\n} from \"./update\";\n\nconst CHECKOUT_OPTIONS: Array<{ id: SpecCheckoutMode; label: string }> = [\n { id: \"none\", label: \"None\" },\n { id: \"remote\", label: \"Remote\" },\n { id: \"local\", label: \"Local\" },\n];\nconst WORKTREE_OPTIONS: Array<{ id: SpecWorktreeMode; label: string }> =\n SPEC_WORKTREE_MODES.map((mode) => ({\n id: mode,\n label: mode === \"none\" ? \"None\" : mode === \"new\" ? \"New\" : \"Existing\",\n }));\nconst STASH_OPTIONS: Array<{ id: SpecStashMode; label: string }> =\n SPEC_STASH_MODES.map((mode) => ({\n id: mode,\n label:\n mode === \"none\" ? \"None\" : mode.charAt(0).toUpperCase() + mode.slice(1),\n }));\n\nexport function WorkspaceSection({\n value,\n onChange,\n secretSelector,\n}: {\n value: AISpecRuntimeValue;\n onChange: (value: AISpecRuntimeValue) => void;\n secretSelector?: SpecRuntimeSecretSelectorConfig | undefined;\n}) {\n const checkout = checkoutMode(value);\n const worktree = worktreeMode(value);\n return (\n <div className=\"grid gap-density-3\">\n <div className=\"grid gap-density-2 md:grid-cols-2\">\n <SpecField label=\"Directory\">\n <SpecInput\n value={value.setup?.cwd}\n onChange={(cwd) => onChange(withSetup(value, { cwd }))}\n icon={UiFolder}\n mono\n />\n </SpecField>\n <SpecField label=\"Base dir\">\n <SpecInput\n value={value.setup?.baseDir}\n onChange={(baseDir) => onChange(withSetup(value, { baseDir }))}\n icon={UiFolder}\n mono\n />\n </SpecField>\n </div>\n\n <div className=\"space-y-density-2\">\n <SpecField label=\"Git checkout\">\n <SegmentedControl\n aria-label=\"Checkout source\"\n size=\"sm\"\n value={checkout}\n onChange={(mode) => onChange(withCheckoutMode(value, mode))}\n options={CHECKOUT_OPTIONS}\n />\n </SpecField>\n {checkout !== \"none\" && (\n <>\n <div className=\"grid gap-density-2 md:grid-cols-[minmax(0,1fr)_9rem_6rem]\">\n {checkout === \"local\" ? (\n <SpecField label=\"Local path\">\n <SpecInput\n value={value.setup?.checkout?.path}\n onChange={(path) => onChange(withCheckout(value, { path }))}\n placeholder=\"/repo\"\n icon={UiFolderGit}\n mono\n />\n </SpecField>\n ) : (\n <SpecField label=\"Git URL\">\n <SpecInput\n value={value.setup?.checkout?.url}\n onChange={(url) => onChange(withCheckout(value, { url }))}\n placeholder=\"https://github.com/org/repo.git\"\n icon={UiLink}\n mono\n />\n </SpecField>\n )}\n <SpecField label=\"Ref\">\n <SpecInput\n value={value.setup?.checkout?.ref}\n onChange={(ref) => onChange(withCheckout(value, { ref }))}\n placeholder=\"main\"\n icon={UiGitBranch}\n mono\n />\n </SpecField>\n <NumberField\n label=\"Depth\"\n value={value.setup?.checkout?.depth}\n onChange={(depth) =>\n onChange(withCheckout(value, { depth: depth ?? 0 }))\n }\n icon={UiStack}\n min={0}\n step={1}\n integer\n />\n </div>\n {checkout !== \"local\" && (\n <Disclosure label=\"Advanced\" hint=\"connection\">\n <SpecField label=\"Connection\">\n {secretSelector ? (\n <SecretKeySelector\n value={secretValueFromString(\n value.setup?.checkout?.connection,\n )}\n onChange={(next) =>\n onChange(\n withCheckout(value, {\n connection: stringFromSecretValue(next),\n }),\n )\n }\n loadResources={secretSelector.loadResources}\n loadKeyPreview={secretSelector.loadKeyPreview}\n {...(secretSelector.allowLiteral !== undefined\n ? { allowLiteral: secretSelector.allowLiteral }\n : {})}\n {...(secretSelector.strict !== undefined\n ? { strict: secretSelector.strict }\n : {})}\n className=\"min-w-0 flex-wrap\"\n />\n ) : (\n <SpecInput\n value={value.setup?.checkout?.connection}\n onChange={(connection) =>\n onChange(withCheckout(value, { connection }))\n }\n placeholder=\"github\"\n icon={UiPlug}\n mono\n />\n )}\n </SpecField>\n </Disclosure>\n )}\n </>\n )}\n </div>\n\n <div className=\"space-y-density-2\">\n <SpecField label=\"Worktree\">\n <SegmentedControl\n aria-label=\"Worktree mode\"\n size=\"sm\"\n value={worktree}\n onChange={(mode) => onChange(withWorktreeMode(value, mode))}\n options={WORKTREE_OPTIONS}\n />\n </SpecField>\n {worktree !== \"none\" && (\n <>\n <div className=\"grid gap-density-2 md:grid-cols-3\">\n {worktree === \"new\" && (\n <>\n <SpecField label=\"Worktree prefix\">\n <SpecInput\n value={value.setup?.checkout?.worktree?.prefix}\n onChange={(prefix) =>\n onChange(withWorktree(value, { prefix }))\n }\n placeholder=\"ai\"\n icon={UiTag}\n mono\n />\n </SpecField>\n <SpecField label=\"Worktree base\">\n <SpecInput\n value={value.setup?.checkout?.worktree?.base}\n onChange={(base) =>\n onChange(withWorktree(value, { base }))\n }\n icon={UiGitBranch}\n mono\n />\n </SpecField>\n </>\n )}\n <SpecField label=\"Worktree path\">\n <SpecInput\n value={value.setup?.checkout?.worktree?.path}\n onChange={(path) => onChange(withWorktree(value, { path }))}\n icon={UiFolder}\n mono\n />\n </SpecField>\n </div>\n {worktree === \"new\" && (\n <div className=\"grid gap-density-2 sm:grid-cols-[minmax(10rem,16rem)]\">\n <CheckboxField\n label=\"Keep worktree\"\n checked={value.setup?.checkout?.worktree?.keep}\n onChange={(keep) => onChange(withWorktree(value, { keep }))}\n />\n </div>\n )}\n </>\n )}\n </div>\n\n <div className=\"space-y-density-2\">\n <SpecField label=\"Stash\">\n <SegmentedControl\n aria-label=\"Stash mode\"\n size=\"sm\"\n value={stashMode(value)}\n onChange={(stash) => onChange(withStashMode(value, stash))}\n options={STASH_OPTIONS}\n />\n </SpecField>\n <div className=\"grid gap-density-2 md:grid-cols-2\">\n <SpecField label=\"Since\">\n <SpecInput\n value={value.setup?.checkout?.dirty?.since}\n onChange={(since) => onChange(withDirty(value, { since }))}\n icon={UiClock}\n mono\n />\n </SpecField>\n </div>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"summaries.cjs","sources":["../../../../src/data/ai/SpecRuntimeEditor/summaries.ts"],"sourcesContent":["import type { ChatModel } from \"../../chat/types\";\nimport type { AISpecRuntimeValue } from \"../SpecRuntimeEditor.model\";\nimport { checkoutMode, worktreeMode } from \"./update\";\nimport { isDenyMode, type PermissionListEntry } from \"./permissions-model\";\n\nexport function summarizeModel(\n value: AISpecRuntimeValue,\n models: ChatModel[] = [],\n): string {\n const parts: string[] = [];\n const model = value.model?.trim();\n if (model) {\n parts.push(models.find((m) => m.id === model)?.label ?? model);\n }\n if (value.effort) parts.push(value.effort);\n if (value.temperature != null && Number.isFinite(value.temperature)) {\n parts.push(`temp ${value.temperature}`);\n }\n return parts.length > 0 ? parts.join(\" · \") : \"Default model\";\n}\n\nexport function summarizePrompt(value: AISpecRuntimeValue): string {\n const overrides = [\n value.prompt?.user,\n value.prompt?.system,\n value.prompt?.appendSystem,\n ].filter((text) => Boolean(text?.trim())).length;\n if (overrides === 0) return \"Base prompt only\";\n return `${overrides} override${overrides > 1 ? \"s\" : \"\"} set`;\n}\n\nexport function summarizeWorkspace(value: AISpecRuntimeValue): string {\n const mode = checkoutMode(value);\n if (mode === \"none\") return \"No checkout\";\n const parts: string[] = [mode];\n const ref = value.setup?.checkout?.ref?.trim();\n if (ref) parts.push(ref);\n const worktree = worktreeMode(value);\n parts.push(worktree === \"none\" ? \"in-place\" : `${worktree} worktree`);\n return parts.join(\" · \");\n}\n\nexport function summarizePermissions(\n value: AISpecRuntimeValue,\n entries: PermissionListEntry[],\n): string {\n const parts: string[] = [value.permissions?.mode || \"default\"];\n const denied = entries.filter(\n (entry) => entry.domain === \"tools\" && entry.mode === \"deny\",\n ).length;\n const off = entries.filter(\n (entry) => entry.domain !== \"tools\" && isDenyMode(entry.mode),\n ).length;\n if (denied > 0) parts.push(`${denied} denied`);\n if (off > 0) parts.push(`${off} off`);\n return parts.join(\" · \");\n}\n\nexport function summarizeEnvironment(value: AISpecRuntimeValue): string {\n const vars = (value.setup?.envVars ?? []).filter((item) =>\n Boolean(item.name?.trim()),\n );\n if (vars.length === 0) return \"No variables\";\n const secrets = vars.filter((item) => {\n if (typeof item.valueFrom === \"string\") {\n return item.valueFrom.trim().startsWith(\"secret://\");\n }\n return Boolean(item.valueFrom?.secretKeyRef);\n }).length;\n const parts = [`${vars.length} var${vars.length !== 1 ? \"s\" : \"\"}`];\n if (secrets > 0) parts.push(`${secrets} secret`);\n return parts.join(\" · \");\n}\n\nexport function summarizeVerify(value: AISpecRuntimeValue): string {\n const verify = value.workflow?.verify;\n if (!verify) return \"No fixture\";\n const parts: string[] = [];\n if (verify.fixture?.trim()) parts.push(\"Fixture\");\n if (verify.scope === \"changed\") parts.push(\"changed files\");\n if (verify.maxIterations != null && verify.maxIterations > 0) {\n parts.push(\n `${verify.maxIterations} iteration${verify.maxIterations !== 1 ? \"s\" : \"\"}`,\n );\n }\n return parts.length > 0 ? parts.join(\" · \") : \"No fixture\";\n}\n\nexport function summarizeCommit(value: AISpecRuntimeValue): string {\n const postRun = value.workflow?.postRun;\n if (postRun?.dryRun) return \"Dry run\";\n return postRun?.commit ? \"Commit changes\" : \"Leave uncommitted\";\n}\n\nexport function summarizeCLIArgs(value: AISpecRuntimeValue): string {\n const flags = Object.entries(value.cliArgs ?? {}).filter(\n ([, item]) =>\n item !== undefined &&\n item !== \"\" &&\n item !== false &&\n (!Array.isArray(item) || item.length > 0),\n ).length;\n if (flags === 0) return \"Defaults\";\n return `${flags} flag${flags !== 1 ? \"s\" : \"\"} set`;\n}\n\n// The rail target chip: repo (from checkout URL or local path) plus ref.\nexport function summarizeTarget(value: AISpecRuntimeValue): string | undefined {\n const checkout = value.setup?.checkout;\n const source = checkout?.url?.trim() || checkout?.path?.trim();\n if (!source) return undefined;\n // Split-and-filter instead of `.replace(/\\/+$/, \"\")`: the trailing-slash\n // strip was a polynomial (ReDoS) match on many-`/` inputs. Empty segments\n // from trailing/duplicate slashes are dropped, so the last one is the repo.\n const segments = source.split(\"/\").filter(Boolean);\n const repo = segments[segments.length - 1]?.replace(/\\.git$/, \"\");\n if (!repo) return undefined;\n const ref = checkout?.ref?.trim();\n return ref ? `${repo} · ${ref}` : repo;\n}\n"],"names":[],"mappings":";;AA2GO,SAAS,gBAAgB,OAA+C;;AAC7E,QAAM,YAAW,WAAM,UAAN,mBAAa;AAC9B,QAAM,WAAS,0CAAU,QAAV,mBAAe,aAAU,0CAAU,SAAV,mBAAgB;AACxD,MAAI,CAAC,OAAQ,QAAO;AAIpB,QAAM,WAAW,OAAO,MAAM,GAAG,EAAE,OAAO,OAAO;AACjD,QAAM,QAAO,cAAS,SAAS,SAAS,CAAC,MAA5B,mBAA+B,QAAQ,UAAU;AAC9D,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,OAAM,0CAAU,QAAV,mBAAe;AAC3B,SAAO,MAAM,GAAG,IAAI,MAAM,GAAG,KAAK;AACpC;;"}
1
+ {"version":3,"file":"summaries.cjs","sources":["../../../../src/data/ai/SpecRuntimeEditor/summaries.ts"],"sourcesContent":["import type { ChatModel } from \"../../chat/types\";\nimport type { AISpecRuntimeValue } from \"../SpecRuntimeEditor.model\";\nimport { checkoutMode, commitPhase, worktreeMode } from \"./update\";\nimport { isDenyMode, type PermissionListEntry } from \"./permissions-model\";\n\nexport function summarizeModel(\n value: AISpecRuntimeValue,\n models: ChatModel[] = [],\n): string {\n const parts: string[] = [];\n const model = value.model?.trim();\n if (model) {\n parts.push(models.find((m) => m.id === model)?.label ?? model);\n }\n if (value.effort) parts.push(value.effort);\n return parts.length > 0 ? parts.join(\" · \") : \"Default model\";\n}\n\nexport function summarizePrompt(value: AISpecRuntimeValue): string {\n const overrides = [\n value.prompt?.user,\n value.prompt?.system,\n value.prompt?.appendSystem,\n ].filter((text) => Boolean(text?.trim())).length;\n if (overrides === 0) return \"Base prompt only\";\n return `${overrides} override${overrides > 1 ? \"s\" : \"\"} set`;\n}\n\nexport function summarizeWorkspace(value: AISpecRuntimeValue): string {\n const mode = checkoutMode(value);\n if (mode === \"none\") return \"No checkout\";\n const parts: string[] = [mode];\n const ref = value.setup?.checkout?.ref?.trim();\n if (ref) parts.push(ref);\n const worktree = worktreeMode(value);\n parts.push(worktree === \"none\" ? \"in-place\" : `${worktree} worktree`);\n return parts.join(\" · \");\n}\n\nexport function summarizePermissions(\n value: AISpecRuntimeValue,\n entries: PermissionListEntry[],\n): string {\n const parts: string[] = [value.permissions?.mode || \"default\"];\n const denied = entries.filter(\n (entry) => entry.domain === \"tools\" && entry.mode === \"deny\",\n ).length;\n const off = entries.filter(\n (entry) => entry.domain !== \"tools\" && isDenyMode(entry.mode),\n ).length;\n if (denied > 0) parts.push(`${denied} denied`);\n if (off > 0) parts.push(`${off} off`);\n return parts.join(\" · \");\n}\n\nexport function summarizeEnvironment(value: AISpecRuntimeValue): string {\n const vars = (value.setup?.envVars ?? []).filter((item) =>\n Boolean(item.name?.trim()),\n );\n if (vars.length === 0) return \"No variables\";\n const secrets = vars.filter((item) => {\n if (typeof item.valueFrom === \"string\") {\n return item.valueFrom.trim().startsWith(\"secret://\");\n }\n return Boolean(item.valueFrom?.secretKeyRef);\n }).length;\n const parts = [`${vars.length} var${vars.length !== 1 ? \"s\" : \"\"}`];\n if (secrets > 0) parts.push(`${secrets} secret`);\n return parts.join(\" · \");\n}\n\nexport function summarizeVerify(value: AISpecRuntimeValue): string {\n const verify = value.workflow?.verify;\n if (!verify) return \"No fixture\";\n const parts: string[] = [];\n if (verify.fixture?.trim()) parts.push(\"Fixture\");\n if (verify.scope === \"changed\") parts.push(\"changed files\");\n if (verify.maxIterations != null && verify.maxIterations > 0) {\n parts.push(\n `${verify.maxIterations} iteration${verify.maxIterations !== 1 ? \"s\" : \"\"}`,\n );\n }\n return parts.length > 0 ? parts.join(\" · \") : \"No fixture\";\n}\n\nconst COMMIT_PHASE_SUMMARIES = {\n none: \"Leave uncommitted\",\n turn: \"Commit every turn\",\n agent: \"Commit after the loop\",\n run: \"Commit changes\",\n} as const;\n\nexport function summarizeCommit(value: AISpecRuntimeValue): string {\n const phase = commitPhase(value);\n const summary = COMMIT_PHASE_SUMMARIES[phase];\n return value.workflow?.commits?.[0]?.dryRun\n ? `${summary} · dry run`\n : summary;\n}\n\nexport function summarizeCLIArgs(value: AISpecRuntimeValue): string {\n const flags = Object.entries(value.cliArgs ?? {}).filter(\n ([, item]) =>\n item !== undefined &&\n item !== \"\" &&\n item !== false &&\n (!Array.isArray(item) || item.length > 0),\n ).length;\n if (flags === 0) return \"Defaults\";\n return `${flags} flag${flags !== 1 ? \"s\" : \"\"} set`;\n}\n\n// The rail target chip: repo (from checkout URL or local path) plus ref.\nexport function summarizeTarget(value: AISpecRuntimeValue): string | undefined {\n const checkout = value.setup?.checkout;\n const source = checkout?.url?.trim() || checkout?.path?.trim();\n if (!source) return undefined;\n // Split-and-filter instead of `.replace(/\\/+$/, \"\")`: the trailing-slash\n // strip was a polynomial (ReDoS) match on many-`/` inputs. Empty segments\n // from trailing/duplicate slashes are dropped, so the last one is the repo.\n const segments = source.split(\"/\").filter(Boolean);\n const repo = segments[segments.length - 1]?.replace(/\\.git$/, \"\");\n if (!repo) return undefined;\n const ref = checkout?.ref?.trim();\n return ref ? `${repo} · ${ref}` : repo;\n}\n"],"names":[],"mappings":";;AAiHO,SAAS,gBAAgB,OAA+C;;AAC7E,QAAM,YAAW,WAAM,UAAN,mBAAa;AAC9B,QAAM,WAAS,0CAAU,QAAV,mBAAe,aAAU,0CAAU,SAAV,mBAAgB;AACxD,MAAI,CAAC,OAAQ,QAAO;AAIpB,QAAM,WAAW,OAAO,MAAM,GAAG,EAAE,OAAO,OAAO;AACjD,QAAM,QAAO,cAAS,SAAS,SAAS,CAAC,MAA5B,mBAA+B,QAAQ,UAAU;AAC9D,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,OAAM,0CAAU,QAAV,mBAAe;AAC3B,SAAO,MAAM,GAAG,IAAI,MAAM,GAAG,KAAK;AACpC;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"summaries.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/SpecRuntimeEditor/summaries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAc,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,wBAAgB,cAAc,CAC5B,KAAK,EAAE,kBAAkB,EACzB,MAAM,GAAE,SAAS,EAAO,GACvB,MAAM,CAWR;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAQjE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CASpE;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,mBAAmB,EAAE,GAC7B,MAAM,CAWR;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CActE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAYjE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAIjE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAUlE;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,SAAS,CAY7E"}
1
+ {"version":3,"file":"summaries.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/SpecRuntimeEditor/summaries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAc,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,wBAAgB,cAAc,CAC5B,KAAK,EAAE,kBAAkB,EACzB,MAAM,GAAE,SAAS,EAAO,GACvB,MAAM,CAQR;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAQjE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CASpE;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,mBAAmB,EAAE,GAC7B,MAAM,CAWR;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CActE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAYjE;AASD,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAMjE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAUlE;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,SAAS,CAY7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"summaries.js","sources":["../../../../src/data/ai/SpecRuntimeEditor/summaries.ts"],"sourcesContent":["import type { ChatModel } from \"../../chat/types\";\nimport type { AISpecRuntimeValue } from \"../SpecRuntimeEditor.model\";\nimport { checkoutMode, worktreeMode } from \"./update\";\nimport { isDenyMode, type PermissionListEntry } from \"./permissions-model\";\n\nexport function summarizeModel(\n value: AISpecRuntimeValue,\n models: ChatModel[] = [],\n): string {\n const parts: string[] = [];\n const model = value.model?.trim();\n if (model) {\n parts.push(models.find((m) => m.id === model)?.label ?? model);\n }\n if (value.effort) parts.push(value.effort);\n if (value.temperature != null && Number.isFinite(value.temperature)) {\n parts.push(`temp ${value.temperature}`);\n }\n return parts.length > 0 ? parts.join(\" · \") : \"Default model\";\n}\n\nexport function summarizePrompt(value: AISpecRuntimeValue): string {\n const overrides = [\n value.prompt?.user,\n value.prompt?.system,\n value.prompt?.appendSystem,\n ].filter((text) => Boolean(text?.trim())).length;\n if (overrides === 0) return \"Base prompt only\";\n return `${overrides} override${overrides > 1 ? \"s\" : \"\"} set`;\n}\n\nexport function summarizeWorkspace(value: AISpecRuntimeValue): string {\n const mode = checkoutMode(value);\n if (mode === \"none\") return \"No checkout\";\n const parts: string[] = [mode];\n const ref = value.setup?.checkout?.ref?.trim();\n if (ref) parts.push(ref);\n const worktree = worktreeMode(value);\n parts.push(worktree === \"none\" ? \"in-place\" : `${worktree} worktree`);\n return parts.join(\" · \");\n}\n\nexport function summarizePermissions(\n value: AISpecRuntimeValue,\n entries: PermissionListEntry[],\n): string {\n const parts: string[] = [value.permissions?.mode || \"default\"];\n const denied = entries.filter(\n (entry) => entry.domain === \"tools\" && entry.mode === \"deny\",\n ).length;\n const off = entries.filter(\n (entry) => entry.domain !== \"tools\" && isDenyMode(entry.mode),\n ).length;\n if (denied > 0) parts.push(`${denied} denied`);\n if (off > 0) parts.push(`${off} off`);\n return parts.join(\" · \");\n}\n\nexport function summarizeEnvironment(value: AISpecRuntimeValue): string {\n const vars = (value.setup?.envVars ?? []).filter((item) =>\n Boolean(item.name?.trim()),\n );\n if (vars.length === 0) return \"No variables\";\n const secrets = vars.filter((item) => {\n if (typeof item.valueFrom === \"string\") {\n return item.valueFrom.trim().startsWith(\"secret://\");\n }\n return Boolean(item.valueFrom?.secretKeyRef);\n }).length;\n const parts = [`${vars.length} var${vars.length !== 1 ? \"s\" : \"\"}`];\n if (secrets > 0) parts.push(`${secrets} secret`);\n return parts.join(\" · \");\n}\n\nexport function summarizeVerify(value: AISpecRuntimeValue): string {\n const verify = value.workflow?.verify;\n if (!verify) return \"No fixture\";\n const parts: string[] = [];\n if (verify.fixture?.trim()) parts.push(\"Fixture\");\n if (verify.scope === \"changed\") parts.push(\"changed files\");\n if (verify.maxIterations != null && verify.maxIterations > 0) {\n parts.push(\n `${verify.maxIterations} iteration${verify.maxIterations !== 1 ? \"s\" : \"\"}`,\n );\n }\n return parts.length > 0 ? parts.join(\" · \") : \"No fixture\";\n}\n\nexport function summarizeCommit(value: AISpecRuntimeValue): string {\n const postRun = value.workflow?.postRun;\n if (postRun?.dryRun) return \"Dry run\";\n return postRun?.commit ? \"Commit changes\" : \"Leave uncommitted\";\n}\n\nexport function summarizeCLIArgs(value: AISpecRuntimeValue): string {\n const flags = Object.entries(value.cliArgs ?? {}).filter(\n ([, item]) =>\n item !== undefined &&\n item !== \"\" &&\n item !== false &&\n (!Array.isArray(item) || item.length > 0),\n ).length;\n if (flags === 0) return \"Defaults\";\n return `${flags} flag${flags !== 1 ? \"s\" : \"\"} set`;\n}\n\n// The rail target chip: repo (from checkout URL or local path) plus ref.\nexport function summarizeTarget(value: AISpecRuntimeValue): string | undefined {\n const checkout = value.setup?.checkout;\n const source = checkout?.url?.trim() || checkout?.path?.trim();\n if (!source) return undefined;\n // Split-and-filter instead of `.replace(/\\/+$/, \"\")`: the trailing-slash\n // strip was a polynomial (ReDoS) match on many-`/` inputs. Empty segments\n // from trailing/duplicate slashes are dropped, so the last one is the repo.\n const segments = source.split(\"/\").filter(Boolean);\n const repo = segments[segments.length - 1]?.replace(/\\.git$/, \"\");\n if (!repo) return undefined;\n const ref = checkout?.ref?.trim();\n return ref ? `${repo} · ${ref}` : repo;\n}\n"],"names":[],"mappings":"AA2GO,SAAS,gBAAgB,OAA+C;AAAxE;AACL,QAAM,YAAW,WAAM,UAAN,mBAAa;AAC9B,QAAM,WAAS,0CAAU,QAAV,mBAAe,aAAU,0CAAU,SAAV,mBAAgB;AACxD,MAAI,CAAC,OAAQ,QAAO;AAIpB,QAAM,WAAW,OAAO,MAAM,GAAG,EAAE,OAAO,OAAO;AACjD,QAAM,QAAO,cAAS,SAAS,SAAS,CAAC,MAA5B,mBAA+B,QAAQ,UAAU;AAC9D,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,OAAM,0CAAU,QAAV,mBAAe;AAC3B,SAAO,MAAM,GAAG,IAAI,MAAM,GAAG,KAAK;AACpC;"}
1
+ {"version":3,"file":"summaries.js","sources":["../../../../src/data/ai/SpecRuntimeEditor/summaries.ts"],"sourcesContent":["import type { ChatModel } from \"../../chat/types\";\nimport type { AISpecRuntimeValue } from \"../SpecRuntimeEditor.model\";\nimport { checkoutMode, commitPhase, worktreeMode } from \"./update\";\nimport { isDenyMode, type PermissionListEntry } from \"./permissions-model\";\n\nexport function summarizeModel(\n value: AISpecRuntimeValue,\n models: ChatModel[] = [],\n): string {\n const parts: string[] = [];\n const model = value.model?.trim();\n if (model) {\n parts.push(models.find((m) => m.id === model)?.label ?? model);\n }\n if (value.effort) parts.push(value.effort);\n return parts.length > 0 ? parts.join(\" · \") : \"Default model\";\n}\n\nexport function summarizePrompt(value: AISpecRuntimeValue): string {\n const overrides = [\n value.prompt?.user,\n value.prompt?.system,\n value.prompt?.appendSystem,\n ].filter((text) => Boolean(text?.trim())).length;\n if (overrides === 0) return \"Base prompt only\";\n return `${overrides} override${overrides > 1 ? \"s\" : \"\"} set`;\n}\n\nexport function summarizeWorkspace(value: AISpecRuntimeValue): string {\n const mode = checkoutMode(value);\n if (mode === \"none\") return \"No checkout\";\n const parts: string[] = [mode];\n const ref = value.setup?.checkout?.ref?.trim();\n if (ref) parts.push(ref);\n const worktree = worktreeMode(value);\n parts.push(worktree === \"none\" ? \"in-place\" : `${worktree} worktree`);\n return parts.join(\" · \");\n}\n\nexport function summarizePermissions(\n value: AISpecRuntimeValue,\n entries: PermissionListEntry[],\n): string {\n const parts: string[] = [value.permissions?.mode || \"default\"];\n const denied = entries.filter(\n (entry) => entry.domain === \"tools\" && entry.mode === \"deny\",\n ).length;\n const off = entries.filter(\n (entry) => entry.domain !== \"tools\" && isDenyMode(entry.mode),\n ).length;\n if (denied > 0) parts.push(`${denied} denied`);\n if (off > 0) parts.push(`${off} off`);\n return parts.join(\" · \");\n}\n\nexport function summarizeEnvironment(value: AISpecRuntimeValue): string {\n const vars = (value.setup?.envVars ?? []).filter((item) =>\n Boolean(item.name?.trim()),\n );\n if (vars.length === 0) return \"No variables\";\n const secrets = vars.filter((item) => {\n if (typeof item.valueFrom === \"string\") {\n return item.valueFrom.trim().startsWith(\"secret://\");\n }\n return Boolean(item.valueFrom?.secretKeyRef);\n }).length;\n const parts = [`${vars.length} var${vars.length !== 1 ? \"s\" : \"\"}`];\n if (secrets > 0) parts.push(`${secrets} secret`);\n return parts.join(\" · \");\n}\n\nexport function summarizeVerify(value: AISpecRuntimeValue): string {\n const verify = value.workflow?.verify;\n if (!verify) return \"No fixture\";\n const parts: string[] = [];\n if (verify.fixture?.trim()) parts.push(\"Fixture\");\n if (verify.scope === \"changed\") parts.push(\"changed files\");\n if (verify.maxIterations != null && verify.maxIterations > 0) {\n parts.push(\n `${verify.maxIterations} iteration${verify.maxIterations !== 1 ? \"s\" : \"\"}`,\n );\n }\n return parts.length > 0 ? parts.join(\" · \") : \"No fixture\";\n}\n\nconst COMMIT_PHASE_SUMMARIES = {\n none: \"Leave uncommitted\",\n turn: \"Commit every turn\",\n agent: \"Commit after the loop\",\n run: \"Commit changes\",\n} as const;\n\nexport function summarizeCommit(value: AISpecRuntimeValue): string {\n const phase = commitPhase(value);\n const summary = COMMIT_PHASE_SUMMARIES[phase];\n return value.workflow?.commits?.[0]?.dryRun\n ? `${summary} · dry run`\n : summary;\n}\n\nexport function summarizeCLIArgs(value: AISpecRuntimeValue): string {\n const flags = Object.entries(value.cliArgs ?? {}).filter(\n ([, item]) =>\n item !== undefined &&\n item !== \"\" &&\n item !== false &&\n (!Array.isArray(item) || item.length > 0),\n ).length;\n if (flags === 0) return \"Defaults\";\n return `${flags} flag${flags !== 1 ? \"s\" : \"\"} set`;\n}\n\n// The rail target chip: repo (from checkout URL or local path) plus ref.\nexport function summarizeTarget(value: AISpecRuntimeValue): string | undefined {\n const checkout = value.setup?.checkout;\n const source = checkout?.url?.trim() || checkout?.path?.trim();\n if (!source) return undefined;\n // Split-and-filter instead of `.replace(/\\/+$/, \"\")`: the trailing-slash\n // strip was a polynomial (ReDoS) match on many-`/` inputs. Empty segments\n // from trailing/duplicate slashes are dropped, so the last one is the repo.\n const segments = source.split(\"/\").filter(Boolean);\n const repo = segments[segments.length - 1]?.replace(/\\.git$/, \"\");\n if (!repo) return undefined;\n const ref = checkout?.ref?.trim();\n return ref ? `${repo} · ${ref}` : repo;\n}\n"],"names":[],"mappings":"AAiHO,SAAS,gBAAgB,OAA+C;AAAxE;AACL,QAAM,YAAW,WAAM,UAAN,mBAAa;AAC9B,QAAM,WAAS,0CAAU,QAAV,mBAAe,aAAU,0CAAU,SAAV,mBAAgB;AACxD,MAAI,CAAC,OAAQ,QAAO;AAIpB,QAAM,WAAW,OAAO,MAAM,GAAG,EAAE,OAAO,OAAO;AACjD,QAAM,QAAO,cAAS,SAAS,SAAS,CAAC,MAA5B,mBAA+B,QAAQ,UAAU;AAC9D,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,OAAM,0CAAU,QAAV,mBAAe;AAC3B,SAAO,MAAM,GAAG,IAAI,MAAM,GAAG,KAAK;AACpC;"}
@@ -60,15 +60,26 @@ function withVerify(value, patch) {
60
60
  }
61
61
  });
62
62
  }
63
- function withPostRun(value, patch) {
63
+ function withCommit(value, patch) {
64
64
  var _a;
65
+ const [first, ...rest] = ((_a = value.workflow) == null ? void 0 : _a.commits) ?? [];
65
66
  return withRoot(value, {
66
- workflow: {
67
- ...value.workflow,
68
- postRun: { ...(_a = value.workflow) == null ? void 0 : _a.postRun, ...patch }
69
- }
67
+ workflow: { ...value.workflow, commits: [{ ...first, ...patch }, ...rest] }
70
68
  });
71
69
  }
70
+ function withCommitPhase(value, phase) {
71
+ if (phase === "none") {
72
+ return withRoot(value, { workflow: { ...value.workflow, commits: [] } });
73
+ }
74
+ return withCommit(value, { on: phase });
75
+ }
76
+ function commitPhase(value) {
77
+ var _a, _b;
78
+ const commits = (_a = value.workflow) == null ? void 0 : _a.commits;
79
+ if (!(commits == null ? void 0 : commits.length)) return "none";
80
+ const on = (_b = commits[0]) == null ? void 0 : _b.on;
81
+ return on === "turn" || on === "agent" ? on : "run";
82
+ }
72
83
  function withCheckoutMode(value, mode) {
73
84
  if (mode === "none") {
74
85
  return withCheckout(value, {
@@ -124,15 +135,17 @@ function stashMode(value) {
124
135
  return "none";
125
136
  }
126
137
  exports.checkoutMode = checkoutMode;
138
+ exports.commitPhase = commitPhase;
127
139
  exports.stashMode = stashMode;
128
140
  exports.withBudgetValue = withBudgetValue;
129
141
  exports.withCheckout = withCheckout;
130
142
  exports.withCheckoutMode = withCheckoutMode;
143
+ exports.withCommit = withCommit;
144
+ exports.withCommitPhase = withCommitPhase;
131
145
  exports.withDirty = withDirty;
132
146
  exports.withMemory = withMemory;
133
147
  exports.withOptionalRoot = withOptionalRoot;
134
148
  exports.withPermissions = withPermissions;
135
- exports.withPostRun = withPostRun;
136
149
  exports.withPrompt = withPrompt;
137
150
  exports.withRoot = withRoot;
138
151
  exports.withSetup = withSetup;
@@ -1 +1 @@
1
- {"version":3,"file":"update.cjs","sources":["../../../../src/data/ai/SpecRuntimeEditor/update.ts"],"sourcesContent":["import type {\n AISpecRuntimeMemory,\n AISpecRuntimePermissions,\n AISpecRuntimePrompt,\n AISpecRuntimeSetup,\n AISpecRuntimeValue,\n SpecCheckoutMode,\n SpecStashMode,\n SpecWorktreeMode,\n} from \"../SpecRuntimeEditor.model\";\n\ntype SpecCheckout = NonNullable<AISpecRuntimeSetup[\"checkout\"]>;\ntype SpecWorktree = NonNullable<SpecCheckout[\"worktree\"]>;\ntype SpecDirty = NonNullable<SpecCheckout[\"dirty\"]>;\ntype SpecWorkflow = NonNullable<AISpecRuntimeValue[\"workflow\"]>;\ntype SpecBudget = NonNullable<AISpecRuntimeValue[\"budget\"]>;\n\nexport function withRoot(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimeValue>,\n): AISpecRuntimeValue {\n return { ...value, ...patch };\n}\n\n// Sets a top-level scalar, deleting the key entirely when cleared so the\n// compacted payload omits it instead of carrying an empty string/undefined.\nexport function withOptionalRoot(\n value: AISpecRuntimeValue,\n key: keyof AISpecRuntimeValue,\n next: unknown,\n): AISpecRuntimeValue {\n const updated = { ...value } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete updated[key];\n } else {\n updated[key] = next;\n }\n return updated as AISpecRuntimeValue;\n}\n\nexport function withPrompt(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimePrompt>,\n): AISpecRuntimeValue {\n return withRoot(value, { prompt: { ...value.prompt, ...patch } });\n}\n\nexport function withBudget(\n value: AISpecRuntimeValue,\n budget: SpecBudget,\n): AISpecRuntimeValue {\n return withRoot(value, { budget });\n}\n\nexport function withBudgetValue(\n value: AISpecRuntimeValue,\n key: keyof SpecBudget,\n next: number | string | undefined,\n): AISpecRuntimeValue {\n const budget = { ...value.budget } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete budget[key];\n } else {\n budget[key] = next;\n }\n return withRoot(value, { budget: budget as SpecBudget });\n}\n\nexport function withMemory(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimeMemory>,\n): AISpecRuntimeValue {\n return withRoot(value, { memory: { ...value.memory, ...patch } });\n}\n\nexport function withPermissions(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimePermissions>,\n): AISpecRuntimeValue {\n return withRoot(value, { permissions: { ...value.permissions, ...patch } });\n}\n\nexport function withSetup(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimeSetup>,\n): AISpecRuntimeValue {\n return withRoot(value, { setup: { ...value.setup, ...patch } });\n}\n\nexport function withCheckout(\n value: AISpecRuntimeValue,\n patch: SpecCheckout,\n): AISpecRuntimeValue {\n return withSetup(value, {\n checkout: { ...value.setup?.checkout, ...patch },\n });\n}\n\nexport function withWorktree(\n value: AISpecRuntimeValue,\n patch: SpecWorktree,\n): AISpecRuntimeValue {\n return withCheckout(value, {\n worktree: { ...value.setup?.checkout?.worktree, ...patch },\n });\n}\n\nexport function withDirty(\n value: AISpecRuntimeValue,\n patch: SpecDirty,\n): AISpecRuntimeValue {\n return withCheckout(value, {\n dirty: { ...value.setup?.checkout?.dirty, ...patch },\n });\n}\n\nexport function withVerify(\n value: AISpecRuntimeValue,\n patch: NonNullable<SpecWorkflow[\"verify\"]>,\n): AISpecRuntimeValue {\n return withRoot(value, {\n workflow: {\n ...value.workflow,\n verify: { ...value.workflow?.verify, ...patch },\n },\n });\n}\n\nexport function withPostRun(\n value: AISpecRuntimeValue,\n patch: NonNullable<SpecWorkflow[\"postRun\"]>,\n): AISpecRuntimeValue {\n return withRoot(value, {\n workflow: {\n ...value.workflow,\n postRun: { ...value.workflow?.postRun, ...patch },\n },\n });\n}\n\n// Mode switches clear the fields that no longer apply, so stale values from a\n// previous mode never leak into the compacted payload.\nexport function withCheckoutMode(\n value: AISpecRuntimeValue,\n mode: SpecCheckoutMode,\n): AISpecRuntimeValue {\n if (mode === \"none\") {\n return withCheckout(value, {\n mode,\n url: \"\",\n path: \"\",\n connection: \"\",\n ref: \"\",\n depth: 0,\n });\n }\n if (mode === \"local\") return withCheckout(value, { mode, url: \"\", connection: \"\" });\n return withCheckout(value, { mode, path: \"\" });\n}\n\nexport function withWorktreeMode(\n value: AISpecRuntimeValue,\n mode: SpecWorktreeMode,\n): AISpecRuntimeValue {\n if (mode === \"none\") {\n return withWorktree(value, {\n mode,\n prefix: \"\",\n base: \"\",\n path: \"\",\n keep: false,\n });\n }\n if (mode === \"existing\") {\n return withWorktree(value, { mode, prefix: \"\", base: \"\", keep: false });\n }\n return withWorktree(value, { mode });\n}\n\nexport function withStashMode(\n value: AISpecRuntimeValue,\n stash: SpecStashMode,\n): AISpecRuntimeValue {\n return withDirty(value, stash === \"none\" ? { stash, since: \"\" } : { stash });\n}\n\nexport function checkoutMode(value: AISpecRuntimeValue): SpecCheckoutMode {\n const checkout = value.setup?.checkout;\n if (checkout?.mode === \"remote\") return \"remote\";\n if (checkout?.mode === \"local\" || checkout?.path) return \"local\";\n return \"none\";\n}\n\nexport function worktreeMode(value: AISpecRuntimeValue): SpecWorktreeMode {\n const mode = value.setup?.checkout?.worktree?.mode;\n if (mode === \"existing\") return \"existing\";\n if (mode === \"new\") return \"new\";\n return \"none\";\n}\n\nexport function stashMode(value: AISpecRuntimeValue): SpecStashMode {\n const stash = value.setup?.checkout?.dirty?.stash;\n if (\n stash === \"untracked\" ||\n stash === \"unstaged\" ||\n stash === \"staged\" ||\n stash === \"all\"\n ) {\n return stash;\n }\n return \"none\";\n}\n\nexport function parseOptionalNumber(\n value: string,\n integer = false,\n): number | undefined {\n if (value.trim() === \"\") return undefined;\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) return undefined;\n return integer ? Math.max(0, Math.trunc(parsed)) : parsed;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.cjs","sources":["../../../../src/data/ai/SpecRuntimeEditor/update.ts"],"sourcesContent":["import type {\n AISpecRuntimeMemory,\n AISpecRuntimePermissions,\n AISpecRuntimePrompt,\n AISpecRuntimeSetup,\n AISpecRuntimeValue,\n SpecCheckoutMode,\n SpecCommitPhase,\n SpecStashMode,\n SpecWorktreeMode,\n} from \"../SpecRuntimeEditor.model\";\n\ntype SpecCheckout = NonNullable<AISpecRuntimeSetup[\"checkout\"]>;\ntype SpecWorktree = NonNullable<SpecCheckout[\"worktree\"]>;\ntype SpecDirty = NonNullable<SpecCheckout[\"dirty\"]>;\ntype SpecWorkflow = NonNullable<AISpecRuntimeValue[\"workflow\"]>;\ntype SpecCommit = NonNullable<SpecWorkflow[\"commits\"]>[number];\ntype SpecBudget = NonNullable<AISpecRuntimeValue[\"budget\"]>;\n\nexport function withRoot(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimeValue>,\n): AISpecRuntimeValue {\n return { ...value, ...patch };\n}\n\n// Sets a top-level scalar, deleting the key entirely when cleared so the\n// compacted payload omits it instead of carrying an empty string/undefined.\nexport function withOptionalRoot(\n value: AISpecRuntimeValue,\n key: keyof AISpecRuntimeValue,\n next: unknown,\n): AISpecRuntimeValue {\n const updated = { ...value } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete updated[key];\n } else {\n updated[key] = next;\n }\n return updated as AISpecRuntimeValue;\n}\n\nexport function withPrompt(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimePrompt>,\n): AISpecRuntimeValue {\n return withRoot(value, { prompt: { ...value.prompt, ...patch } });\n}\n\nexport function withBudget(\n value: AISpecRuntimeValue,\n budget: SpecBudget,\n): AISpecRuntimeValue {\n return withRoot(value, { budget });\n}\n\nexport function withBudgetValue(\n value: AISpecRuntimeValue,\n key: keyof SpecBudget,\n next: number | string | undefined,\n): AISpecRuntimeValue {\n const budget = { ...value.budget } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete budget[key];\n } else {\n budget[key] = next;\n }\n return withRoot(value, { budget: budget as SpecBudget });\n}\n\nexport function withMemory(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimeMemory>,\n): AISpecRuntimeValue {\n return withRoot(value, { memory: { ...value.memory, ...patch } });\n}\n\nexport function withPermissions(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimePermissions>,\n): AISpecRuntimeValue {\n return withRoot(value, { permissions: { ...value.permissions, ...patch } });\n}\n\nexport function withSetup(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimeSetup>,\n): AISpecRuntimeValue {\n return withRoot(value, { setup: { ...value.setup, ...patch } });\n}\n\nexport function withCheckout(\n value: AISpecRuntimeValue,\n patch: SpecCheckout,\n): AISpecRuntimeValue {\n return withSetup(value, {\n checkout: { ...value.setup?.checkout, ...patch },\n });\n}\n\nexport function withWorktree(\n value: AISpecRuntimeValue,\n patch: SpecWorktree,\n): AISpecRuntimeValue {\n return withCheckout(value, {\n worktree: { ...value.setup?.checkout?.worktree, ...patch },\n });\n}\n\nexport function withDirty(\n value: AISpecRuntimeValue,\n patch: SpecDirty,\n): AISpecRuntimeValue {\n return withCheckout(value, {\n dirty: { ...value.setup?.checkout?.dirty, ...patch },\n });\n}\n\nexport function withVerify(\n value: AISpecRuntimeValue,\n patch: NonNullable<SpecWorkflow[\"verify\"]>,\n): AISpecRuntimeValue {\n return withRoot(value, {\n workflow: {\n ...value.workflow,\n verify: { ...value.workflow?.verify, ...patch },\n },\n });\n}\n\n// The editor drives a single commit policy. A spec authored by hand may declare\n// several stanzas; the ones past the first are carried through untouched rather\n// than collapsed away by an edit to a field the editor does surface.\nexport function withCommit(\n value: AISpecRuntimeValue,\n patch: Partial<SpecCommit>,\n): AISpecRuntimeValue {\n const [first, ...rest] = value.workflow?.commits ?? [];\n return withRoot(value, {\n workflow: { ...value.workflow, commits: [{ ...first, ...patch }, ...rest] },\n });\n}\n\n// \"Never\" drops every stanza rather than flagging one off: an absent list is how\n// the spec says \"commit nothing\", and a surviving {dryRun: true} would leave the\n// section reading as configured.\nexport function withCommitPhase(\n value: AISpecRuntimeValue,\n phase: SpecCommitPhase | \"none\",\n): AISpecRuntimeValue {\n if (phase === \"none\") {\n return withRoot(value, { workflow: { ...value.workflow, commits: [] } });\n }\n return withCommit(value, { on: phase });\n}\n\n// A stanza with no explicit phase commits at the end of the run, matching\n// api.Commit.Phase()'s default.\nexport function commitPhase(\n value: AISpecRuntimeValue,\n): SpecCommitPhase | \"none\" {\n const commits = value.workflow?.commits;\n if (!commits?.length) return \"none\";\n const on = commits[0]?.on;\n return on === \"turn\" || on === \"agent\" ? on : \"run\";\n}\n\n// Mode switches clear the fields that no longer apply, so stale values from a\n// previous mode never leak into the compacted payload.\nexport function withCheckoutMode(\n value: AISpecRuntimeValue,\n mode: SpecCheckoutMode,\n): AISpecRuntimeValue {\n if (mode === \"none\") {\n return withCheckout(value, {\n mode,\n url: \"\",\n path: \"\",\n connection: \"\",\n ref: \"\",\n depth: 0,\n });\n }\n if (mode === \"local\") return withCheckout(value, { mode, url: \"\", connection: \"\" });\n return withCheckout(value, { mode, path: \"\" });\n}\n\nexport function withWorktreeMode(\n value: AISpecRuntimeValue,\n mode: SpecWorktreeMode,\n): AISpecRuntimeValue {\n if (mode === \"none\") {\n return withWorktree(value, {\n mode,\n prefix: \"\",\n base: \"\",\n path: \"\",\n keep: false,\n });\n }\n if (mode === \"existing\") {\n return withWorktree(value, { mode, prefix: \"\", base: \"\", keep: false });\n }\n return withWorktree(value, { mode });\n}\n\nexport function withStashMode(\n value: AISpecRuntimeValue,\n stash: SpecStashMode,\n): AISpecRuntimeValue {\n return withDirty(value, stash === \"none\" ? { stash, since: \"\" } : { stash });\n}\n\nexport function checkoutMode(value: AISpecRuntimeValue): SpecCheckoutMode {\n const checkout = value.setup?.checkout;\n if (checkout?.mode === \"remote\") return \"remote\";\n if (checkout?.mode === \"local\" || checkout?.path) return \"local\";\n return \"none\";\n}\n\nexport function worktreeMode(value: AISpecRuntimeValue): SpecWorktreeMode {\n const mode = value.setup?.checkout?.worktree?.mode;\n if (mode === \"existing\") return \"existing\";\n if (mode === \"new\") return \"new\";\n return \"none\";\n}\n\nexport function stashMode(value: AISpecRuntimeValue): SpecStashMode {\n const stash = value.setup?.checkout?.dirty?.stash;\n if (\n stash === \"untracked\" ||\n stash === \"unstaged\" ||\n stash === \"staged\" ||\n stash === \"all\"\n ) {\n return stash;\n }\n return \"none\";\n}\n\nexport function parseOptionalNumber(\n value: string,\n integer = false,\n): number | undefined {\n if (value.trim() === \"\") return undefined;\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) return undefined;\n return integer ? Math.max(0, Math.trunc(parsed)) : parsed;\n}\n"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import { AISpecRuntimeMemory, AISpecRuntimePermissions, AISpecRuntimePrompt, AISpecRuntimeSetup, AISpecRuntimeValue, SpecCheckoutMode, SpecStashMode, SpecWorktreeMode } from '../SpecRuntimeEditor.model';
1
+ import { AISpecRuntimeMemory, AISpecRuntimePermissions, AISpecRuntimePrompt, AISpecRuntimeSetup, AISpecRuntimeValue, SpecCheckoutMode, SpecCommitPhase, SpecStashMode, SpecWorktreeMode } from '../SpecRuntimeEditor.model';
2
2
  type SpecCheckout = NonNullable<AISpecRuntimeSetup["checkout"]>;
3
3
  type SpecWorktree = NonNullable<SpecCheckout["worktree"]>;
4
4
  type SpecDirty = NonNullable<SpecCheckout["dirty"]>;
5
5
  type SpecWorkflow = NonNullable<AISpecRuntimeValue["workflow"]>;
6
+ type SpecCommit = NonNullable<SpecWorkflow["commits"]>[number];
6
7
  type SpecBudget = NonNullable<AISpecRuntimeValue["budget"]>;
7
8
  export declare function withRoot(value: AISpecRuntimeValue, patch: Partial<AISpecRuntimeValue>): AISpecRuntimeValue;
8
9
  export declare function withOptionalRoot(value: AISpecRuntimeValue, key: keyof AISpecRuntimeValue, next: unknown): AISpecRuntimeValue;
@@ -16,7 +17,9 @@ export declare function withCheckout(value: AISpecRuntimeValue, patch: SpecCheck
16
17
  export declare function withWorktree(value: AISpecRuntimeValue, patch: SpecWorktree): AISpecRuntimeValue;
17
18
  export declare function withDirty(value: AISpecRuntimeValue, patch: SpecDirty): AISpecRuntimeValue;
18
19
  export declare function withVerify(value: AISpecRuntimeValue, patch: NonNullable<SpecWorkflow["verify"]>): AISpecRuntimeValue;
19
- export declare function withPostRun(value: AISpecRuntimeValue, patch: NonNullable<SpecWorkflow["postRun"]>): AISpecRuntimeValue;
20
+ export declare function withCommit(value: AISpecRuntimeValue, patch: Partial<SpecCommit>): AISpecRuntimeValue;
21
+ export declare function withCommitPhase(value: AISpecRuntimeValue, phase: SpecCommitPhase | "none"): AISpecRuntimeValue;
22
+ export declare function commitPhase(value: AISpecRuntimeValue): SpecCommitPhase | "none";
20
23
  export declare function withCheckoutMode(value: AISpecRuntimeValue, mode: SpecCheckoutMode): AISpecRuntimeValue;
21
24
  export declare function withWorktreeMode(value: AISpecRuntimeValue, mode: SpecWorktreeMode): AISpecRuntimeValue;
22
25
  export declare function withStashMode(value: AISpecRuntimeValue, stash: SpecStashMode): AISpecRuntimeValue;
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/SpecRuntimeEditor/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/data/ai/SpecRuntimeEditor/update.ts"],"names":[],"mappings":"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"}
@@ -58,15 +58,26 @@ function withVerify(value, patch) {
58
58
  }
59
59
  });
60
60
  }
61
- function withPostRun(value, patch) {
61
+ function withCommit(value, patch) {
62
62
  var _a;
63
+ const [first, ...rest] = ((_a = value.workflow) == null ? void 0 : _a.commits) ?? [];
63
64
  return withRoot(value, {
64
- workflow: {
65
- ...value.workflow,
66
- postRun: { ...(_a = value.workflow) == null ? void 0 : _a.postRun, ...patch }
67
- }
65
+ workflow: { ...value.workflow, commits: [{ ...first, ...patch }, ...rest] }
68
66
  });
69
67
  }
68
+ function withCommitPhase(value, phase) {
69
+ if (phase === "none") {
70
+ return withRoot(value, { workflow: { ...value.workflow, commits: [] } });
71
+ }
72
+ return withCommit(value, { on: phase });
73
+ }
74
+ function commitPhase(value) {
75
+ var _a, _b;
76
+ const commits = (_a = value.workflow) == null ? void 0 : _a.commits;
77
+ if (!(commits == null ? void 0 : commits.length)) return "none";
78
+ const on = (_b = commits[0]) == null ? void 0 : _b.on;
79
+ return on === "turn" || on === "agent" ? on : "run";
80
+ }
70
81
  function withCheckoutMode(value, mode) {
71
82
  if (mode === "none") {
72
83
  return withCheckout(value, {
@@ -123,15 +134,17 @@ function stashMode(value) {
123
134
  }
124
135
  export {
125
136
  checkoutMode,
137
+ commitPhase,
126
138
  stashMode,
127
139
  withBudgetValue,
128
140
  withCheckout,
129
141
  withCheckoutMode,
142
+ withCommit,
143
+ withCommitPhase,
130
144
  withDirty,
131
145
  withMemory,
132
146
  withOptionalRoot,
133
147
  withPermissions,
134
- withPostRun,
135
148
  withPrompt,
136
149
  withRoot,
137
150
  withSetup,
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sources":["../../../../src/data/ai/SpecRuntimeEditor/update.ts"],"sourcesContent":["import type {\n AISpecRuntimeMemory,\n AISpecRuntimePermissions,\n AISpecRuntimePrompt,\n AISpecRuntimeSetup,\n AISpecRuntimeValue,\n SpecCheckoutMode,\n SpecStashMode,\n SpecWorktreeMode,\n} from \"../SpecRuntimeEditor.model\";\n\ntype SpecCheckout = NonNullable<AISpecRuntimeSetup[\"checkout\"]>;\ntype SpecWorktree = NonNullable<SpecCheckout[\"worktree\"]>;\ntype SpecDirty = NonNullable<SpecCheckout[\"dirty\"]>;\ntype SpecWorkflow = NonNullable<AISpecRuntimeValue[\"workflow\"]>;\ntype SpecBudget = NonNullable<AISpecRuntimeValue[\"budget\"]>;\n\nexport function withRoot(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimeValue>,\n): AISpecRuntimeValue {\n return { ...value, ...patch };\n}\n\n// Sets a top-level scalar, deleting the key entirely when cleared so the\n// compacted payload omits it instead of carrying an empty string/undefined.\nexport function withOptionalRoot(\n value: AISpecRuntimeValue,\n key: keyof AISpecRuntimeValue,\n next: unknown,\n): AISpecRuntimeValue {\n const updated = { ...value } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete updated[key];\n } else {\n updated[key] = next;\n }\n return updated as AISpecRuntimeValue;\n}\n\nexport function withPrompt(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimePrompt>,\n): AISpecRuntimeValue {\n return withRoot(value, { prompt: { ...value.prompt, ...patch } });\n}\n\nexport function withBudget(\n value: AISpecRuntimeValue,\n budget: SpecBudget,\n): AISpecRuntimeValue {\n return withRoot(value, { budget });\n}\n\nexport function withBudgetValue(\n value: AISpecRuntimeValue,\n key: keyof SpecBudget,\n next: number | string | undefined,\n): AISpecRuntimeValue {\n const budget = { ...value.budget } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete budget[key];\n } else {\n budget[key] = next;\n }\n return withRoot(value, { budget: budget as SpecBudget });\n}\n\nexport function withMemory(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimeMemory>,\n): AISpecRuntimeValue {\n return withRoot(value, { memory: { ...value.memory, ...patch } });\n}\n\nexport function withPermissions(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimePermissions>,\n): AISpecRuntimeValue {\n return withRoot(value, { permissions: { ...value.permissions, ...patch } });\n}\n\nexport function withSetup(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimeSetup>,\n): AISpecRuntimeValue {\n return withRoot(value, { setup: { ...value.setup, ...patch } });\n}\n\nexport function withCheckout(\n value: AISpecRuntimeValue,\n patch: SpecCheckout,\n): AISpecRuntimeValue {\n return withSetup(value, {\n checkout: { ...value.setup?.checkout, ...patch },\n });\n}\n\nexport function withWorktree(\n value: AISpecRuntimeValue,\n patch: SpecWorktree,\n): AISpecRuntimeValue {\n return withCheckout(value, {\n worktree: { ...value.setup?.checkout?.worktree, ...patch },\n });\n}\n\nexport function withDirty(\n value: AISpecRuntimeValue,\n patch: SpecDirty,\n): AISpecRuntimeValue {\n return withCheckout(value, {\n dirty: { ...value.setup?.checkout?.dirty, ...patch },\n });\n}\n\nexport function withVerify(\n value: AISpecRuntimeValue,\n patch: NonNullable<SpecWorkflow[\"verify\"]>,\n): AISpecRuntimeValue {\n return withRoot(value, {\n workflow: {\n ...value.workflow,\n verify: { ...value.workflow?.verify, ...patch },\n },\n });\n}\n\nexport function withPostRun(\n value: AISpecRuntimeValue,\n patch: NonNullable<SpecWorkflow[\"postRun\"]>,\n): AISpecRuntimeValue {\n return withRoot(value, {\n workflow: {\n ...value.workflow,\n postRun: { ...value.workflow?.postRun, ...patch },\n },\n });\n}\n\n// Mode switches clear the fields that no longer apply, so stale values from a\n// previous mode never leak into the compacted payload.\nexport function withCheckoutMode(\n value: AISpecRuntimeValue,\n mode: SpecCheckoutMode,\n): AISpecRuntimeValue {\n if (mode === \"none\") {\n return withCheckout(value, {\n mode,\n url: \"\",\n path: \"\",\n connection: \"\",\n ref: \"\",\n depth: 0,\n });\n }\n if (mode === \"local\") return withCheckout(value, { mode, url: \"\", connection: \"\" });\n return withCheckout(value, { mode, path: \"\" });\n}\n\nexport function withWorktreeMode(\n value: AISpecRuntimeValue,\n mode: SpecWorktreeMode,\n): AISpecRuntimeValue {\n if (mode === \"none\") {\n return withWorktree(value, {\n mode,\n prefix: \"\",\n base: \"\",\n path: \"\",\n keep: false,\n });\n }\n if (mode === \"existing\") {\n return withWorktree(value, { mode, prefix: \"\", base: \"\", keep: false });\n }\n return withWorktree(value, { mode });\n}\n\nexport function withStashMode(\n value: AISpecRuntimeValue,\n stash: SpecStashMode,\n): AISpecRuntimeValue {\n return withDirty(value, stash === \"none\" ? { stash, since: \"\" } : { stash });\n}\n\nexport function checkoutMode(value: AISpecRuntimeValue): SpecCheckoutMode {\n const checkout = value.setup?.checkout;\n if (checkout?.mode === \"remote\") return \"remote\";\n if (checkout?.mode === \"local\" || checkout?.path) return \"local\";\n return \"none\";\n}\n\nexport function worktreeMode(value: AISpecRuntimeValue): SpecWorktreeMode {\n const mode = value.setup?.checkout?.worktree?.mode;\n if (mode === \"existing\") return \"existing\";\n if (mode === \"new\") return \"new\";\n return \"none\";\n}\n\nexport function stashMode(value: AISpecRuntimeValue): SpecStashMode {\n const stash = value.setup?.checkout?.dirty?.stash;\n if (\n stash === \"untracked\" ||\n stash === \"unstaged\" ||\n stash === \"staged\" ||\n stash === \"all\"\n ) {\n return stash;\n }\n return \"none\";\n}\n\nexport function parseOptionalNumber(\n value: string,\n integer = false,\n): number | undefined {\n if (value.trim() === \"\") return undefined;\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) return undefined;\n return integer ? Math.max(0, Math.trunc(parsed)) : parsed;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sources":["../../../../src/data/ai/SpecRuntimeEditor/update.ts"],"sourcesContent":["import type {\n AISpecRuntimeMemory,\n AISpecRuntimePermissions,\n AISpecRuntimePrompt,\n AISpecRuntimeSetup,\n AISpecRuntimeValue,\n SpecCheckoutMode,\n SpecCommitPhase,\n SpecStashMode,\n SpecWorktreeMode,\n} from \"../SpecRuntimeEditor.model\";\n\ntype SpecCheckout = NonNullable<AISpecRuntimeSetup[\"checkout\"]>;\ntype SpecWorktree = NonNullable<SpecCheckout[\"worktree\"]>;\ntype SpecDirty = NonNullable<SpecCheckout[\"dirty\"]>;\ntype SpecWorkflow = NonNullable<AISpecRuntimeValue[\"workflow\"]>;\ntype SpecCommit = NonNullable<SpecWorkflow[\"commits\"]>[number];\ntype SpecBudget = NonNullable<AISpecRuntimeValue[\"budget\"]>;\n\nexport function withRoot(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimeValue>,\n): AISpecRuntimeValue {\n return { ...value, ...patch };\n}\n\n// Sets a top-level scalar, deleting the key entirely when cleared so the\n// compacted payload omits it instead of carrying an empty string/undefined.\nexport function withOptionalRoot(\n value: AISpecRuntimeValue,\n key: keyof AISpecRuntimeValue,\n next: unknown,\n): AISpecRuntimeValue {\n const updated = { ...value } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete updated[key];\n } else {\n updated[key] = next;\n }\n return updated as AISpecRuntimeValue;\n}\n\nexport function withPrompt(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimePrompt>,\n): AISpecRuntimeValue {\n return withRoot(value, { prompt: { ...value.prompt, ...patch } });\n}\n\nexport function withBudget(\n value: AISpecRuntimeValue,\n budget: SpecBudget,\n): AISpecRuntimeValue {\n return withRoot(value, { budget });\n}\n\nexport function withBudgetValue(\n value: AISpecRuntimeValue,\n key: keyof SpecBudget,\n next: number | string | undefined,\n): AISpecRuntimeValue {\n const budget = { ...value.budget } as Record<string, unknown>;\n if (next === undefined || next === \"\") {\n delete budget[key];\n } else {\n budget[key] = next;\n }\n return withRoot(value, { budget: budget as SpecBudget });\n}\n\nexport function withMemory(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimeMemory>,\n): AISpecRuntimeValue {\n return withRoot(value, { memory: { ...value.memory, ...patch } });\n}\n\nexport function withPermissions(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimePermissions>,\n): AISpecRuntimeValue {\n return withRoot(value, { permissions: { ...value.permissions, ...patch } });\n}\n\nexport function withSetup(\n value: AISpecRuntimeValue,\n patch: Partial<AISpecRuntimeSetup>,\n): AISpecRuntimeValue {\n return withRoot(value, { setup: { ...value.setup, ...patch } });\n}\n\nexport function withCheckout(\n value: AISpecRuntimeValue,\n patch: SpecCheckout,\n): AISpecRuntimeValue {\n return withSetup(value, {\n checkout: { ...value.setup?.checkout, ...patch },\n });\n}\n\nexport function withWorktree(\n value: AISpecRuntimeValue,\n patch: SpecWorktree,\n): AISpecRuntimeValue {\n return withCheckout(value, {\n worktree: { ...value.setup?.checkout?.worktree, ...patch },\n });\n}\n\nexport function withDirty(\n value: AISpecRuntimeValue,\n patch: SpecDirty,\n): AISpecRuntimeValue {\n return withCheckout(value, {\n dirty: { ...value.setup?.checkout?.dirty, ...patch },\n });\n}\n\nexport function withVerify(\n value: AISpecRuntimeValue,\n patch: NonNullable<SpecWorkflow[\"verify\"]>,\n): AISpecRuntimeValue {\n return withRoot(value, {\n workflow: {\n ...value.workflow,\n verify: { ...value.workflow?.verify, ...patch },\n },\n });\n}\n\n// The editor drives a single commit policy. A spec authored by hand may declare\n// several stanzas; the ones past the first are carried through untouched rather\n// than collapsed away by an edit to a field the editor does surface.\nexport function withCommit(\n value: AISpecRuntimeValue,\n patch: Partial<SpecCommit>,\n): AISpecRuntimeValue {\n const [first, ...rest] = value.workflow?.commits ?? [];\n return withRoot(value, {\n workflow: { ...value.workflow, commits: [{ ...first, ...patch }, ...rest] },\n });\n}\n\n// \"Never\" drops every stanza rather than flagging one off: an absent list is how\n// the spec says \"commit nothing\", and a surviving {dryRun: true} would leave the\n// section reading as configured.\nexport function withCommitPhase(\n value: AISpecRuntimeValue,\n phase: SpecCommitPhase | \"none\",\n): AISpecRuntimeValue {\n if (phase === \"none\") {\n return withRoot(value, { workflow: { ...value.workflow, commits: [] } });\n }\n return withCommit(value, { on: phase });\n}\n\n// A stanza with no explicit phase commits at the end of the run, matching\n// api.Commit.Phase()'s default.\nexport function commitPhase(\n value: AISpecRuntimeValue,\n): SpecCommitPhase | \"none\" {\n const commits = value.workflow?.commits;\n if (!commits?.length) return \"none\";\n const on = commits[0]?.on;\n return on === \"turn\" || on === \"agent\" ? on : \"run\";\n}\n\n// Mode switches clear the fields that no longer apply, so stale values from a\n// previous mode never leak into the compacted payload.\nexport function withCheckoutMode(\n value: AISpecRuntimeValue,\n mode: SpecCheckoutMode,\n): AISpecRuntimeValue {\n if (mode === \"none\") {\n return withCheckout(value, {\n mode,\n url: \"\",\n path: \"\",\n connection: \"\",\n ref: \"\",\n depth: 0,\n });\n }\n if (mode === \"local\") return withCheckout(value, { mode, url: \"\", connection: \"\" });\n return withCheckout(value, { mode, path: \"\" });\n}\n\nexport function withWorktreeMode(\n value: AISpecRuntimeValue,\n mode: SpecWorktreeMode,\n): AISpecRuntimeValue {\n if (mode === \"none\") {\n return withWorktree(value, {\n mode,\n prefix: \"\",\n base: \"\",\n path: \"\",\n keep: false,\n });\n }\n if (mode === \"existing\") {\n return withWorktree(value, { mode, prefix: \"\", base: \"\", keep: false });\n }\n return withWorktree(value, { mode });\n}\n\nexport function withStashMode(\n value: AISpecRuntimeValue,\n stash: SpecStashMode,\n): AISpecRuntimeValue {\n return withDirty(value, stash === \"none\" ? { stash, since: \"\" } : { stash });\n}\n\nexport function checkoutMode(value: AISpecRuntimeValue): SpecCheckoutMode {\n const checkout = value.setup?.checkout;\n if (checkout?.mode === \"remote\") return \"remote\";\n if (checkout?.mode === \"local\" || checkout?.path) return \"local\";\n return \"none\";\n}\n\nexport function worktreeMode(value: AISpecRuntimeValue): SpecWorktreeMode {\n const mode = value.setup?.checkout?.worktree?.mode;\n if (mode === \"existing\") return \"existing\";\n if (mode === \"new\") return \"new\";\n return \"none\";\n}\n\nexport function stashMode(value: AISpecRuntimeValue): SpecStashMode {\n const stash = value.setup?.checkout?.dirty?.stash;\n if (\n stash === \"untracked\" ||\n stash === \"unstaged\" ||\n stash === \"staged\" ||\n stash === \"all\"\n ) {\n return stash;\n }\n return \"none\";\n}\n\nexport function parseOptionalNumber(\n value: string,\n integer = false,\n): number | undefined {\n if (value.trim() === \"\") return undefined;\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) return undefined;\n return integer ? Math.max(0, Math.trunc(parsed)) : parsed;\n}\n"],"names":[],"mappings":"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"}