@truefoundry/trueforge 0.1.4 → 0.2.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/README.md +1 -1
  2. package/dist/_frontend/assets/AgentCodeSnippets-NZOFJE57-Bn94i1Ie.js +1 -0
  3. package/dist/_frontend/assets/AgentCodeSnippets-NZOFJE57-Bn94i1Ie.js.br +0 -0
  4. package/dist/_frontend/assets/AgentCodeSnippets-NZOFJE57-Bn94i1Ie.js.gz +0 -0
  5. package/dist/_frontend/assets/AgentMetricChart-JPU3MFQ2-pn-oatgo.js +1 -0
  6. package/dist/_frontend/assets/AgentMetricChart-JPU3MFQ2-pn-oatgo.js.br +0 -0
  7. package/dist/_frontend/assets/AgentMetricChart-JPU3MFQ2-pn-oatgo.js.gz +0 -0
  8. package/dist/_frontend/assets/AgentOverview-EEBHJC32-Bn4qidnv.js +1 -0
  9. package/dist/_frontend/assets/AgentOverview-EEBHJC32-Bn4qidnv.js.br +0 -0
  10. package/dist/_frontend/assets/AgentOverview-EEBHJC32-Bn4qidnv.js.gz +0 -0
  11. package/dist/_frontend/assets/AgentSessionEventTimeline-26Z6IB3B-D_yCZz1m.js +1 -0
  12. package/dist/_frontend/assets/AgentSessionEventTimeline-26Z6IB3B-D_yCZz1m.js.br +0 -0
  13. package/dist/_frontend/assets/AgentSessionEventTimeline-26Z6IB3B-D_yCZz1m.js.gz +0 -0
  14. package/dist/_frontend/assets/AgentSessionEventTimelineChart-CGCU7WBK-JGwv6e5T.js +1 -0
  15. package/dist/_frontend/assets/AgentSessionEventTimelineChart-CGCU7WBK-JGwv6e5T.js.br +0 -0
  16. package/dist/_frontend/assets/AgentSessionEventTimelineChart-CGCU7WBK-JGwv6e5T.js.gz +0 -0
  17. package/dist/_frontend/assets/AgentSessions-3MPDZASK-Dp6vYfGN.js +1 -0
  18. package/dist/_frontend/assets/AgentSessions-3MPDZASK-Dp6vYfGN.js.br +0 -0
  19. package/dist/_frontend/assets/AgentSessions-3MPDZASK-Dp6vYfGN.js.gz +0 -0
  20. package/dist/_frontend/assets/ConnectorSettings-MXFRWWR6-BEwXZbPM.js +1 -0
  21. package/dist/_frontend/assets/ConnectorSettings-MXFRWWR6-BEwXZbPM.js.br +0 -0
  22. package/dist/_frontend/assets/ConnectorSettings-MXFRWWR6-BEwXZbPM.js.gz +0 -0
  23. package/dist/_frontend/assets/{DockLayout-2RWDSUKE-eKoTN8R3.js → DockLayout-LM4AFMFY-DoBwJ3-e.js} +1 -1
  24. package/dist/_frontend/assets/DrawerLayout-JR3O6RRB-BZ9sffvm.js +2 -0
  25. package/dist/_frontend/assets/DrawerLayout-JR3O6RRB-BZ9sffvm.js.br +0 -0
  26. package/dist/_frontend/assets/DrawerLayout-JR3O6RRB-BZ9sffvm.js.gz +0 -0
  27. package/dist/_frontend/assets/ModelSettings-G7IFNC2Y-DxVYHG2m.js +1 -0
  28. package/dist/_frontend/assets/ModelSettings-G7IFNC2Y-DxVYHG2m.js.br +0 -0
  29. package/dist/_frontend/assets/ModelSettings-G7IFNC2Y-DxVYHG2m.js.gz +0 -0
  30. package/dist/_frontend/assets/SandboxSettings-NXAANMAX-DhC28qE6.js +1 -0
  31. package/dist/_frontend/assets/SandboxSettings-NXAANMAX-DhC28qE6.js.br +0 -0
  32. package/dist/_frontend/assets/SandboxSettings-NXAANMAX-DhC28qE6.js.gz +0 -0
  33. package/dist/_frontend/assets/SchedulesPage-KKLUDO6B-CWdrd7KY.js +1 -0
  34. package/dist/_frontend/assets/SchedulesPage-KKLUDO6B-CWdrd7KY.js.br +0 -0
  35. package/dist/_frontend/assets/SchedulesPage-KKLUDO6B-CWdrd7KY.js.gz +0 -0
  36. package/dist/_frontend/assets/SettingsBuilder-L34IQ56S-BQuxGH5w.js +2 -0
  37. package/dist/_frontend/assets/SettingsBuilder-L34IQ56S-BQuxGH5w.js.br +0 -0
  38. package/dist/_frontend/assets/SettingsBuilder-L34IQ56S-BQuxGH5w.js.gz +0 -0
  39. package/dist/_frontend/assets/ShellRouteSync-CEBETGEJ-C4NOyyck.js +1 -0
  40. package/dist/_frontend/assets/ShellRouteSync-CEBETGEJ-C4NOyyck.js.br +0 -0
  41. package/dist/_frontend/assets/ShellRouteSync-CEBETGEJ-C4NOyyck.js.gz +0 -0
  42. package/dist/_frontend/assets/SidebarLayout-A2HJPPHS-kusjDx4J.js +2 -0
  43. package/dist/_frontend/assets/SidebarLayout-A2HJPPHS-kusjDx4J.js.br +0 -0
  44. package/dist/_frontend/assets/SidebarLayout-A2HJPPHS-kusjDx4J.js.gz +0 -0
  45. package/dist/_frontend/assets/SkillSettings-FGGMSUNO-CjrGBX5J.js +1 -0
  46. package/dist/_frontend/assets/SkillSettings-FGGMSUNO-CjrGBX5J.js.br +0 -0
  47. package/dist/_frontend/assets/SkillSettings-FGGMSUNO-CjrGBX5J.js.gz +0 -0
  48. package/dist/_frontend/assets/TrueForgeUIWithRouter-MZVJWJMB-CZ8BOF1k.js +1 -0
  49. package/dist/_frontend/assets/WidgetLayout-6QM45OQQ-Bp0tde9v.js +1 -0
  50. package/dist/_frontend/assets/WidgetLayout-6QM45OQQ-Bp0tde9v.js.br +0 -0
  51. package/dist/_frontend/assets/WidgetLayout-6QM45OQQ-Bp0tde9v.js.gz +0 -0
  52. package/dist/_frontend/assets/chunk-62JRHF6Z-BLb_tkPU.js +12 -0
  53. package/dist/_frontend/assets/chunk-62JRHF6Z-BLb_tkPU.js.br +0 -0
  54. package/dist/_frontend/assets/chunk-62JRHF6Z-BLb_tkPU.js.gz +0 -0
  55. package/dist/_frontend/assets/chunk-DMMZSZTN-BBNhHida.js +1 -0
  56. package/dist/_frontend/assets/chunk-DMMZSZTN-BBNhHida.js.br +0 -0
  57. package/dist/_frontend/assets/chunk-DMMZSZTN-BBNhHida.js.gz +0 -0
  58. package/dist/_frontend/assets/chunk-FJW36PD7-R_XSoO50.js +2 -0
  59. package/dist/_frontend/assets/chunk-FJW36PD7-R_XSoO50.js.br +0 -0
  60. package/dist/_frontend/assets/chunk-FJW36PD7-R_XSoO50.js.gz +0 -0
  61. package/dist/_frontend/assets/chunk-WVE3F724-CL71bP7s.js +1 -0
  62. package/dist/_frontend/assets/chunk-WVE3F724-CL71bP7s.js.br +0 -0
  63. package/dist/_frontend/assets/chunk-WVE3F724-CL71bP7s.js.gz +0 -0
  64. package/dist/_frontend/assets/{cssMode-CvKwYh_L.js → cssMode-CVefs5W-.js} +1 -1
  65. package/dist/_frontend/assets/cssMode-CVefs5W-.js.br +0 -0
  66. package/dist/_frontend/assets/cssMode-CVefs5W-.js.gz +0 -0
  67. package/dist/_frontend/assets/{freemarker2-Bb2yOpT3.js → freemarker2-mt8l8QVE.js} +1 -1
  68. package/dist/_frontend/assets/freemarker2-mt8l8QVE.js.br +0 -0
  69. package/dist/_frontend/assets/freemarker2-mt8l8QVE.js.gz +0 -0
  70. package/dist/_frontend/assets/{handlebars-FL3wsxe0.js → handlebars-C97jT8Zn.js} +1 -1
  71. package/dist/_frontend/assets/handlebars-C97jT8Zn.js.br +0 -0
  72. package/dist/_frontend/assets/handlebars-C97jT8Zn.js.gz +0 -0
  73. package/dist/_frontend/assets/{html-Cb3v_ZRD.js → html-DKtvlaWU.js} +1 -1
  74. package/dist/_frontend/assets/html-DKtvlaWU.js.br +0 -0
  75. package/dist/_frontend/assets/html-DKtvlaWU.js.gz +0 -0
  76. package/dist/_frontend/assets/{htmlMode-JQDvK0Qf.js → htmlMode-BHsrcqlc.js} +1 -1
  77. package/dist/_frontend/assets/htmlMode-BHsrcqlc.js.br +0 -0
  78. package/dist/_frontend/assets/htmlMode-BHsrcqlc.js.gz +0 -0
  79. package/dist/_frontend/assets/{index-DRjgykCE.js → index-BW-oaxAt.js} +3 -3
  80. package/dist/_frontend/assets/index-BW-oaxAt.js.br +0 -0
  81. package/dist/_frontend/assets/index-BW-oaxAt.js.gz +0 -0
  82. package/dist/_frontend/assets/{index-DEKCw40W.css → index-D8eVAzN5.css} +1 -1
  83. package/dist/_frontend/assets/index-D8eVAzN5.css.br +0 -0
  84. package/dist/_frontend/assets/index-D8eVAzN5.css.gz +0 -0
  85. package/dist/_frontend/assets/index-DVCxCjDg.js +923 -0
  86. package/dist/_frontend/assets/index-DVCxCjDg.js.br +0 -0
  87. package/dist/_frontend/assets/index-DVCxCjDg.js.gz +0 -0
  88. package/dist/_frontend/assets/index-DuKoX4ct.js +18 -0
  89. package/dist/_frontend/assets/index-DuKoX4ct.js.br +0 -0
  90. package/dist/_frontend/assets/index-DuKoX4ct.js.gz +0 -0
  91. package/dist/_frontend/assets/{javascript-2WsgEpYV.js → javascript-Cs0N3w-s.js} +1 -1
  92. package/dist/_frontend/assets/{jsonMode-DnbseMlM.js → jsonMode-CqrfFSVA.js} +1 -1
  93. package/dist/_frontend/assets/jsonMode-CqrfFSVA.js.br +0 -0
  94. package/dist/_frontend/assets/jsonMode-CqrfFSVA.js.gz +0 -0
  95. package/dist/_frontend/assets/{liquid-DeE37I1e.js → liquid-C11lKF6J.js} +1 -1
  96. package/dist/_frontend/assets/liquid-C11lKF6J.js.br +0 -0
  97. package/dist/_frontend/assets/liquid-C11lKF6J.js.gz +0 -0
  98. package/dist/_frontend/assets/{lspLanguageFeatures-Bty8j9di.js → lspLanguageFeatures-DBZtnSMo.js} +1 -1
  99. package/dist/_frontend/assets/lspLanguageFeatures-DBZtnSMo.js.br +0 -0
  100. package/dist/_frontend/assets/lspLanguageFeatures-DBZtnSMo.js.gz +0 -0
  101. package/dist/_frontend/assets/{mdx-DfKPZX1Z.js → mdx-CCo4oKJJ.js} +1 -1
  102. package/dist/_frontend/assets/mdx-CCo4oKJJ.js.br +0 -0
  103. package/dist/_frontend/assets/mdx-CCo4oKJJ.js.gz +0 -0
  104. package/dist/_frontend/assets/{python-2i3Kiv75.js → python-627g_SSG.js} +1 -1
  105. package/dist/_frontend/assets/python-627g_SSG.js.br +0 -0
  106. package/dist/_frontend/assets/python-627g_SSG.js.gz +0 -0
  107. package/dist/_frontend/assets/{razor-B0N4vZnc.js → razor-BGDxoA7p.js} +1 -1
  108. package/dist/_frontend/assets/razor-BGDxoA7p.js.br +0 -0
  109. package/dist/_frontend/assets/razor-BGDxoA7p.js.gz +0 -0
  110. package/dist/_frontend/assets/{tsMode-D1Y8xh-o.js → tsMode-gPT7Bbjh.js} +1 -1
  111. package/dist/_frontend/assets/tsMode-gPT7Bbjh.js.br +0 -0
  112. package/dist/_frontend/assets/tsMode-gPT7Bbjh.js.gz +0 -0
  113. package/dist/_frontend/assets/{typescript-2nhip0PT.js → typescript-Cb0PzreF.js} +1 -1
  114. package/dist/_frontend/assets/typescript-Cb0PzreF.js.br +0 -0
  115. package/dist/_frontend/assets/typescript-Cb0PzreF.js.gz +0 -0
  116. package/dist/_frontend/assets/{workers-DSmTvA39.js → workers-BAgwFgJ0.js} +1 -1
  117. package/dist/_frontend/assets/workers-BAgwFgJ0.js.br +0 -0
  118. package/dist/_frontend/assets/workers-BAgwFgJ0.js.gz +0 -0
  119. package/dist/_frontend/assets/{xml-CA4M6Pks.js → xml-BpvCCHF9.js} +1 -1
  120. package/dist/_frontend/assets/xml-BpvCCHF9.js.br +0 -0
  121. package/dist/_frontend/assets/xml-BpvCCHF9.js.gz +0 -0
  122. package/dist/_frontend/assets/{yaml-D5KNk7Ji.js → yaml-f3XKmHoH.js} +1 -1
  123. package/dist/_frontend/assets/yaml-f3XKmHoH.js.br +0 -0
  124. package/dist/_frontend/assets/yaml-f3XKmHoH.js.gz +0 -0
  125. package/dist/_frontend/index.html +2 -31
  126. package/dist/controller-main.js +1259 -0
  127. package/dist/controller-main.js.map +1 -0
  128. package/dist/main.js +10419 -5343
  129. package/dist/main.js.map +1 -1
  130. package/dist/postgres/migrations/20260821_000001_agent_compaction.js +63 -0
  131. package/dist/postgres/migrations/20260821_000001_agent_compaction.js.map +1 -0
  132. package/dist/postgres/migrations/20260827_000001_schedule.js +40 -0
  133. package/dist/postgres/migrations/20260827_000001_schedule.js.map +1 -0
  134. package/dist/postgres/migrations/20260827_000001_session_metrics.js +25 -0
  135. package/dist/postgres/migrations/20260827_000001_session_metrics.js.map +1 -0
  136. package/dist/postgres/migrations/20260828_000001_schedule_name_uq.js +15 -0
  137. package/dist/postgres/migrations/20260828_000001_schedule_name_uq.js.map +1 -0
  138. package/dist/postgres/migrations/20260831_000001_session_external_id.js +26 -0
  139. package/dist/postgres/migrations/20260831_000001_session_external_id.js.map +1 -0
  140. package/dist/postgres/migrations/20260901_000001_agent_metadata.js +18 -0
  141. package/dist/postgres/migrations/20260901_000001_agent_metadata.js.map +1 -0
  142. package/dist/postgres/migrations/20260902_000001_session_metadata.js +15 -0
  143. package/dist/postgres/migrations/20260902_000001_session_metadata.js.map +1 -0
  144. package/dist/postgres/migrations/20260902_000002_agent_external_id.js +26 -0
  145. package/dist/postgres/migrations/20260902_000002_agent_external_id.js.map +1 -0
  146. package/dist/postgres/migrations/20260903_000001_drop_agent_metadata.js +18 -0
  147. package/dist/postgres/migrations/20260903_000001_drop_agent_metadata.js.map +1 -0
  148. package/dist/postgres/migrations/20260903_000002_created_by_subject.js +110 -0
  149. package/dist/postgres/migrations/20260903_000002_created_by_subject.js.map +1 -0
  150. package/dist/postgres/migrations/20260904_000001_schedule_agent_id.js +48 -0
  151. package/dist/postgres/migrations/20260904_000001_schedule_agent_id.js.map +1 -0
  152. package/dist/sqlite/migrations/20260821_000001_agent_compaction.js +69 -0
  153. package/dist/sqlite/migrations/20260821_000001_agent_compaction.js.map +1 -0
  154. package/dist/sqlite/migrations/20260827_000001_schedule.js +69 -0
  155. package/dist/sqlite/migrations/20260827_000001_schedule.js.map +1 -0
  156. package/dist/sqlite/migrations/20260827_000001_session_metrics.js +165 -0
  157. package/dist/sqlite/migrations/20260827_000001_session_metrics.js.map +1 -0
  158. package/dist/sqlite/migrations/20260828_000001_schedule_name_uq.js +20 -0
  159. package/dist/sqlite/migrations/20260828_000001_schedule_name_uq.js.map +1 -0
  160. package/dist/sqlite/migrations/20260831_000001_session_external_id.js +28 -0
  161. package/dist/sqlite/migrations/20260831_000001_session_external_id.js.map +1 -0
  162. package/dist/sqlite/migrations/20260901_000001_agent_metadata.js +92 -0
  163. package/dist/sqlite/migrations/20260901_000001_agent_metadata.js.map +1 -0
  164. package/dist/sqlite/migrations/20260902_000001_session_metadata.js +197 -0
  165. package/dist/sqlite/migrations/20260902_000001_session_metadata.js.map +1 -0
  166. package/dist/sqlite/migrations/20260902_000002_agent_external_id.js +28 -0
  167. package/dist/sqlite/migrations/20260902_000002_agent_external_id.js.map +1 -0
  168. package/dist/sqlite/migrations/20260903_000001_drop_agent_metadata.js +114 -0
  169. package/dist/sqlite/migrations/20260903_000001_drop_agent_metadata.js.map +1 -0
  170. package/dist/sqlite/migrations/20260903_000002_created_by_subject.js +496 -0
  171. package/dist/sqlite/migrations/20260903_000002_created_by_subject.js.map +1 -0
  172. package/dist/sqlite/migrations/20260904_000001_schedule_agent_id.js +131 -0
  173. package/dist/sqlite/migrations/20260904_000001_schedule_agent_id.js.map +1 -0
  174. package/package.json +31 -24
  175. package/dist/_frontend/assets/ConnectorSettings-ODC3LVHN-CAU9MgGN.js +0 -1
  176. package/dist/_frontend/assets/ConnectorSettings-ODC3LVHN-CAU9MgGN.js.br +0 -0
  177. package/dist/_frontend/assets/ConnectorSettings-ODC3LVHN-CAU9MgGN.js.gz +0 -0
  178. package/dist/_frontend/assets/DrawerLayout-CZLJYMIN-DWPAdLZz.js +0 -2
  179. package/dist/_frontend/assets/DrawerLayout-CZLJYMIN-DWPAdLZz.js.br +0 -0
  180. package/dist/_frontend/assets/DrawerLayout-CZLJYMIN-DWPAdLZz.js.gz +0 -0
  181. package/dist/_frontend/assets/ModelSettings-CKQ5CVAC-UBz_ch6T.js +0 -1
  182. package/dist/_frontend/assets/ModelSettings-CKQ5CVAC-UBz_ch6T.js.br +0 -0
  183. package/dist/_frontend/assets/ModelSettings-CKQ5CVAC-UBz_ch6T.js.gz +0 -0
  184. package/dist/_frontend/assets/SandboxSettings-HSCPYUOC-Csl-nC9h.js +0 -1
  185. package/dist/_frontend/assets/SandboxSettings-HSCPYUOC-Csl-nC9h.js.br +0 -0
  186. package/dist/_frontend/assets/SandboxSettings-HSCPYUOC-Csl-nC9h.js.gz +0 -0
  187. package/dist/_frontend/assets/SettingsBuilder-MYWRFXRI-Ce3OWfa1.js +0 -2
  188. package/dist/_frontend/assets/SettingsBuilder-MYWRFXRI-Ce3OWfa1.js.br +0 -0
  189. package/dist/_frontend/assets/SettingsBuilder-MYWRFXRI-Ce3OWfa1.js.gz +0 -0
  190. package/dist/_frontend/assets/ShellRouteSync-T4WLY57Q-B5lyCu4o.js +0 -1
  191. package/dist/_frontend/assets/ShellRouteSync-T4WLY57Q-B5lyCu4o.js.br +0 -0
  192. package/dist/_frontend/assets/ShellRouteSync-T4WLY57Q-B5lyCu4o.js.gz +0 -0
  193. package/dist/_frontend/assets/SidebarLayout-WVY54TGZ-CIx5jQIC.js +0 -2
  194. package/dist/_frontend/assets/SidebarLayout-WVY54TGZ-CIx5jQIC.js.br +0 -0
  195. package/dist/_frontend/assets/SidebarLayout-WVY54TGZ-CIx5jQIC.js.gz +0 -0
  196. package/dist/_frontend/assets/SkillSettings-ECH6SHZ7-CKWEzdO_.js +0 -1
  197. package/dist/_frontend/assets/SkillSettings-ECH6SHZ7-CKWEzdO_.js.br +0 -0
  198. package/dist/_frontend/assets/SkillSettings-ECH6SHZ7-CKWEzdO_.js.gz +0 -0
  199. package/dist/_frontend/assets/TrueForgeUIWithRouter-RKZ2E7PV-CoVbEgto.js +0 -1
  200. package/dist/_frontend/assets/WidgetLayout-NWWB2SXI-cUmY1p2v.js +0 -1
  201. package/dist/_frontend/assets/WidgetLayout-NWWB2SXI-cUmY1p2v.js.br +0 -0
  202. package/dist/_frontend/assets/WidgetLayout-NWWB2SXI-cUmY1p2v.js.gz +0 -0
  203. package/dist/_frontend/assets/chunk-62JRHF6Z-BftTGWZl.js +0 -12
  204. package/dist/_frontend/assets/chunk-62JRHF6Z-BftTGWZl.js.br +0 -0
  205. package/dist/_frontend/assets/chunk-62JRHF6Z-BftTGWZl.js.gz +0 -0
  206. package/dist/_frontend/assets/chunk-OZTNBS6V-CLmmFX7d.js +0 -4
  207. package/dist/_frontend/assets/chunk-OZTNBS6V-CLmmFX7d.js.br +0 -0
  208. package/dist/_frontend/assets/chunk-OZTNBS6V-CLmmFX7d.js.gz +0 -0
  209. package/dist/_frontend/assets/chunk-TCAVLWYL-DVhtkE3q.js +0 -2
  210. package/dist/_frontend/assets/chunk-TCAVLWYL-DVhtkE3q.js.br +0 -0
  211. package/dist/_frontend/assets/chunk-TCAVLWYL-DVhtkE3q.js.gz +0 -0
  212. package/dist/_frontend/assets/cssMode-CvKwYh_L.js.br +0 -0
  213. package/dist/_frontend/assets/cssMode-CvKwYh_L.js.gz +0 -0
  214. package/dist/_frontend/assets/freemarker2-Bb2yOpT3.js.br +0 -0
  215. package/dist/_frontend/assets/freemarker2-Bb2yOpT3.js.gz +0 -0
  216. package/dist/_frontend/assets/handlebars-FL3wsxe0.js.br +0 -0
  217. package/dist/_frontend/assets/handlebars-FL3wsxe0.js.gz +0 -0
  218. package/dist/_frontend/assets/html-Cb3v_ZRD.js.br +0 -0
  219. package/dist/_frontend/assets/html-Cb3v_ZRD.js.gz +0 -0
  220. package/dist/_frontend/assets/htmlMode-JQDvK0Qf.js.br +0 -0
  221. package/dist/_frontend/assets/htmlMode-JQDvK0Qf.js.gz +0 -0
  222. package/dist/_frontend/assets/index-DEKCw40W.css.br +0 -0
  223. package/dist/_frontend/assets/index-DEKCw40W.css.gz +0 -0
  224. package/dist/_frontend/assets/index-DJ1uWGdt.js +0 -859
  225. package/dist/_frontend/assets/index-DJ1uWGdt.js.br +0 -0
  226. package/dist/_frontend/assets/index-DJ1uWGdt.js.gz +0 -0
  227. package/dist/_frontend/assets/index-DRjgykCE.js.br +0 -0
  228. package/dist/_frontend/assets/index-DRjgykCE.js.gz +0 -0
  229. package/dist/_frontend/assets/jsonMode-DnbseMlM.js.br +0 -0
  230. package/dist/_frontend/assets/jsonMode-DnbseMlM.js.gz +0 -0
  231. package/dist/_frontend/assets/liquid-DeE37I1e.js.br +0 -0
  232. package/dist/_frontend/assets/liquid-DeE37I1e.js.gz +0 -0
  233. package/dist/_frontend/assets/lspLanguageFeatures-Bty8j9di.js.br +0 -0
  234. package/dist/_frontend/assets/lspLanguageFeatures-Bty8j9di.js.gz +0 -0
  235. package/dist/_frontend/assets/mdx-DfKPZX1Z.js.br +0 -0
  236. package/dist/_frontend/assets/mdx-DfKPZX1Z.js.gz +0 -0
  237. package/dist/_frontend/assets/python-2i3Kiv75.js.br +0 -0
  238. package/dist/_frontend/assets/python-2i3Kiv75.js.gz +0 -0
  239. package/dist/_frontend/assets/razor-B0N4vZnc.js.br +0 -0
  240. package/dist/_frontend/assets/razor-B0N4vZnc.js.gz +0 -0
  241. package/dist/_frontend/assets/tsMode-D1Y8xh-o.js.br +0 -0
  242. package/dist/_frontend/assets/tsMode-D1Y8xh-o.js.gz +0 -0
  243. package/dist/_frontend/assets/typescript-2nhip0PT.js.br +0 -0
  244. package/dist/_frontend/assets/typescript-2nhip0PT.js.gz +0 -0
  245. package/dist/_frontend/assets/workers-DSmTvA39.js.br +0 -0
  246. package/dist/_frontend/assets/workers-DSmTvA39.js.gz +0 -0
  247. package/dist/_frontend/assets/xml-CA4M6Pks.js.br +0 -0
  248. package/dist/_frontend/assets/xml-CA4M6Pks.js.gz +0 -0
  249. package/dist/_frontend/assets/yaml-D5KNk7Ji.js.br +0 -0
  250. package/dist/_frontend/assets/yaml-D5KNk7Ji.js.gz +0 -0
  251. package/dist/_frontend/index.html.br +0 -0
  252. package/dist/_frontend/index.html.gz +0 -0
@@ -0,0 +1,131 @@
1
+ // src/db/sqlite/migrations/20260904_000001_schedule_agent_id.ts
2
+ import { sql } from "kysely";
3
+
4
+ // src/db/indexes.ts
5
+ var SCHEDULE_CREATED_BY_SUBJECT_ID_IDX = "schedule_created_by_subject_id_idx";
6
+ var SCHEDULE_AGENT_ID_IDX = "schedule_agent_id_idx";
7
+
8
+ // src/db/sqlite/migrations/20260904_000001_schedule_agent_id.ts
9
+ async function up(db) {
10
+ await sql`PRAGMA foreign_keys = OFF`.execute(db);
11
+ try {
12
+ await db.transaction().execute(async (trx) => {
13
+ await sql`
14
+ CREATE TABLE schedule_new (
15
+ id TEXT NOT NULL,
16
+ tenant_id TEXT NOT NULL,
17
+ agent_id TEXT NOT NULL,
18
+ agent_name TEXT NOT NULL,
19
+ name TEXT NOT NULL,
20
+ manifest BLOB NOT NULL,
21
+ status TEXT NOT NULL CHECK (length(status) <= 16),
22
+ created_by_subject BLOB NOT NULL,
23
+ created_at TEXT NOT NULL,
24
+ updated_at TEXT NOT NULL,
25
+ PRIMARY KEY (id),
26
+ FOREIGN KEY (agent_id) REFERENCES agent (id) ON DELETE CASCADE
27
+ ) STRICT
28
+ `.execute(trx);
29
+ await sql`
30
+ INSERT INTO schedule_new (
31
+ id,
32
+ tenant_id,
33
+ agent_id,
34
+ agent_name,
35
+ name,
36
+ manifest,
37
+ status,
38
+ created_by_subject,
39
+ created_at,
40
+ updated_at
41
+ )
42
+ SELECT
43
+ s.id,
44
+ s.tenant_id,
45
+ a.id,
46
+ s.agent_name,
47
+ s.name,
48
+ s.manifest,
49
+ s.status,
50
+ s.created_by_subject,
51
+ s.created_at,
52
+ s.updated_at
53
+ FROM schedule AS s
54
+ INNER JOIN agent AS a
55
+ ON a.tenant_id = s.tenant_id
56
+ AND a.name = s.agent_name
57
+ `.execute(trx);
58
+ await sql`DROP TABLE schedule`.execute(trx);
59
+ await sql`ALTER TABLE schedule_new RENAME TO schedule`.execute(trx);
60
+ await sql`
61
+ CREATE INDEX schedule_agent_idx
62
+ ON schedule (tenant_id, agent_name)
63
+ `.execute(trx);
64
+ await sql`
65
+ CREATE UNIQUE INDEX schedule_name_uq
66
+ ON schedule (tenant_id, agent_name, name)
67
+ `.execute(trx);
68
+ await sql`
69
+ CREATE INDEX ${sql.raw(SCHEDULE_CREATED_BY_SUBJECT_ID_IDX)}
70
+ ON schedule (tenant_id, json_extract(created_by_subject, '$.subject_id'))
71
+ `.execute(trx);
72
+ await sql`
73
+ CREATE INDEX ${sql.raw(SCHEDULE_AGENT_ID_IDX)}
74
+ ON schedule (tenant_id, agent_id)
75
+ `.execute(trx);
76
+ });
77
+ } finally {
78
+ await sql`PRAGMA foreign_keys = ON`.execute(db);
79
+ }
80
+ }
81
+ async function down(db) {
82
+ await sql`PRAGMA foreign_keys = OFF`.execute(db);
83
+ try {
84
+ await db.transaction().execute(async (trx) => {
85
+ await sql`
86
+ CREATE TABLE schedule_old (
87
+ id TEXT NOT NULL,
88
+ tenant_id TEXT NOT NULL,
89
+ agent_name TEXT NOT NULL,
90
+ name TEXT NOT NULL,
91
+ manifest BLOB NOT NULL,
92
+ status TEXT NOT NULL CHECK (length(status) <= 16),
93
+ created_by_subject BLOB NOT NULL,
94
+ created_at TEXT NOT NULL,
95
+ updated_at TEXT NOT NULL,
96
+ PRIMARY KEY (id),
97
+ FOREIGN KEY (tenant_id, agent_name) REFERENCES agent (tenant_id, name) ON DELETE CASCADE
98
+ ) STRICT
99
+ `.execute(trx);
100
+ await sql`
101
+ INSERT INTO schedule_old (
102
+ id, tenant_id, agent_name, name, manifest, status, created_by_subject, created_at, updated_at
103
+ )
104
+ SELECT
105
+ id, tenant_id, agent_name, name, manifest, status, created_by_subject, created_at, updated_at
106
+ FROM schedule
107
+ `.execute(trx);
108
+ await sql`DROP TABLE schedule`.execute(trx);
109
+ await sql`ALTER TABLE schedule_old RENAME TO schedule`.execute(trx);
110
+ await sql`
111
+ CREATE INDEX schedule_agent_idx
112
+ ON schedule (tenant_id, agent_name)
113
+ `.execute(trx);
114
+ await sql`
115
+ CREATE UNIQUE INDEX schedule_name_uq
116
+ ON schedule (tenant_id, agent_name, name)
117
+ `.execute(trx);
118
+ await sql`
119
+ CREATE INDEX ${sql.raw(SCHEDULE_CREATED_BY_SUBJECT_ID_IDX)}
120
+ ON schedule (tenant_id, json_extract(created_by_subject, '$.subject_id'))
121
+ `.execute(trx);
122
+ });
123
+ } finally {
124
+ await sql`PRAGMA foreign_keys = ON`.execute(db);
125
+ }
126
+ }
127
+ export {
128
+ down,
129
+ up
130
+ };
131
+ //# sourceMappingURL=20260904_000001_schedule_agent_id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/sqlite/migrations/20260904_000001_schedule_agent_id.ts","../../../src/db/indexes.ts"],"sourcesContent":["import { sql, type Kysely } from 'kysely';\nimport { SCHEDULE_AGENT_ID_IDX, SCHEDULE_CREATED_BY_SUBJECT_ID_IDX } from '../../indexes';\n\n/**\n * Add NOT NULL `agent_id` on schedule — mirrors\n * db/postgres/migrations/20260904_000001_schedule_agent_id.ts.\n * Drops the `(tenant_id, agent_name)` FK; binding is `agent(id)` only.\n *\n * SQLite STRICT cannot ADD a NOT NULL column without a DEFAULT, so rebuild\n * `schedule` (FKs off so `schedule_run` rows survive the drop/rename).\n * better-sqlite3 prepares one statement per call — keep statements separate.\n */\nexport async function up(db: Kysely<unknown>): Promise<void> {\n await sql`PRAGMA foreign_keys = OFF`.execute(db);\n try {\n await db.transaction().execute(async trx => {\n await sql`\n CREATE TABLE schedule_new (\n id TEXT NOT NULL,\n tenant_id TEXT NOT NULL,\n agent_id TEXT NOT NULL,\n agent_name TEXT NOT NULL,\n name TEXT NOT NULL,\n manifest BLOB NOT NULL,\n status TEXT NOT NULL CHECK (length(status) <= 16),\n created_by_subject BLOB NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (id),\n FOREIGN KEY (agent_id) REFERENCES agent (id) ON DELETE CASCADE\n ) STRICT\n `.execute(trx);\n\n await sql`\n INSERT INTO schedule_new (\n id,\n tenant_id,\n agent_id,\n agent_name,\n name,\n manifest,\n status,\n created_by_subject,\n created_at,\n updated_at\n )\n SELECT\n s.id,\n s.tenant_id,\n a.id,\n s.agent_name,\n s.name,\n s.manifest,\n s.status,\n s.created_by_subject,\n s.created_at,\n s.updated_at\n FROM schedule AS s\n INNER JOIN agent AS a\n ON a.tenant_id = s.tenant_id\n AND a.name = s.agent_name\n `.execute(trx);\n\n await sql`DROP TABLE schedule`.execute(trx);\n await sql`ALTER TABLE schedule_new RENAME TO schedule`.execute(trx);\n\n await sql`\n CREATE INDEX schedule_agent_idx\n ON schedule (tenant_id, agent_name)\n `.execute(trx);\n await sql`\n CREATE UNIQUE INDEX schedule_name_uq\n ON schedule (tenant_id, agent_name, name)\n `.execute(trx);\n await sql`\n CREATE INDEX ${sql.raw(SCHEDULE_CREATED_BY_SUBJECT_ID_IDX)}\n ON schedule (tenant_id, json_extract(created_by_subject, '$.subject_id'))\n `.execute(trx);\n await sql`\n CREATE INDEX ${sql.raw(SCHEDULE_AGENT_ID_IDX)}\n ON schedule (tenant_id, agent_id)\n `.execute(trx);\n });\n } finally {\n await sql`PRAGMA foreign_keys = ON`.execute(db);\n }\n}\n\nexport async function down(db: Kysely<unknown>): Promise<void> {\n await sql`PRAGMA foreign_keys = OFF`.execute(db);\n try {\n await db.transaction().execute(async trx => {\n await sql`\n CREATE TABLE schedule_old (\n id TEXT NOT NULL,\n tenant_id TEXT NOT NULL,\n agent_name TEXT NOT NULL,\n name TEXT NOT NULL,\n manifest BLOB NOT NULL,\n status TEXT NOT NULL CHECK (length(status) <= 16),\n created_by_subject BLOB NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (id),\n FOREIGN KEY (tenant_id, agent_name) REFERENCES agent (tenant_id, name) ON DELETE CASCADE\n ) STRICT\n `.execute(trx);\n\n await sql`\n INSERT INTO schedule_old (\n id, tenant_id, agent_name, name, manifest, status, created_by_subject, created_at, updated_at\n )\n SELECT\n id, tenant_id, agent_name, name, manifest, status, created_by_subject, created_at, updated_at\n FROM schedule\n `.execute(trx);\n\n await sql`DROP TABLE schedule`.execute(trx);\n await sql`ALTER TABLE schedule_old RENAME TO schedule`.execute(trx);\n\n await sql`\n CREATE INDEX schedule_agent_idx\n ON schedule (tenant_id, agent_name)\n `.execute(trx);\n await sql`\n CREATE UNIQUE INDEX schedule_name_uq\n ON schedule (tenant_id, agent_name, name)\n `.execute(trx);\n await sql`\n CREATE INDEX ${sql.raw(SCHEDULE_CREATED_BY_SUBJECT_ID_IDX)}\n ON schedule (tenant_id, json_extract(created_by_subject, '$.subject_id'))\n `.execute(trx);\n });\n } finally {\n await sql`PRAGMA foreign_keys = ON`.execute(db);\n }\n}\n","/** Partial unique index on `session (tenant_id, external_id) WHERE external_id IS NOT NULL`. */\nexport const SESSION_EXTERNAL_ID_UQ = 'session_external_id_uq';\n\n/** Partial unique index on `agent (tenant_id, external_id) WHERE external_id IS NOT NULL`. */\nexport const AGENT_EXTERNAL_ID_UQ = 'agent_external_id_uq';\n\n/** `(tenant_id, created_by_subject.subject_id)` on agent. */\nexport const AGENT_CREATED_BY_SUBJECT_ID_IDX = 'agent_created_by_subject_id_idx';\n\n/** `(tenant_id, created_by_subject.subject_id)` on session. */\nexport const SESSION_CREATED_BY_SUBJECT_ID_IDX = 'session_created_by_subject_id_idx';\n\n/** `(tenant_id, created_by_subject.subject_id)` on schedule. */\nexport const SCHEDULE_CREATED_BY_SUBJECT_ID_IDX = 'schedule_created_by_subject_id_idx';\n\n/** `(tenant_id, agent_id)` on schedule — list schedules for one agent by id. */\nexport const SCHEDULE_AGENT_ID_IDX = 'schedule_agent_id_idx';\n\n/** `(tenant_id, created_by_subject.subject_id)` on schedule_run. */\nexport const SCHEDULE_RUN_CREATED_BY_SUBJECT_ID_IDX = 'schedule_run_created_by_subject_id_idx';\n"],"mappings":";AAAA,SAAS,WAAwB;;;ACa1B,IAAM,qCAAqC;AAG3C,IAAM,wBAAwB;;;ADJrC,eAAsB,GAAG,IAAoC;AAC3D,QAAM,+BAA+B,QAAQ,EAAE;AAC/C,MAAI;AACF,UAAM,GAAG,YAAY,EAAE,QAAQ,OAAM,QAAO;AAC1C,YAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAeJ,QAAQ,GAAG;AAEb,YAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QA4BJ,QAAQ,GAAG;AAEb,YAAM,yBAAyB,QAAQ,GAAG;AAC1C,YAAM,iDAAiD,QAAQ,GAAG;AAElE,YAAM;AAAA;AAAA;AAAA,QAGJ,QAAQ,GAAG;AACb,YAAM;AAAA;AAAA;AAAA,QAGJ,QAAQ,GAAG;AACb,YAAM;AAAA,uBACW,IAAI,IAAI,kCAAkC,CAAC;AAAA;AAAA,QAE1D,QAAQ,GAAG;AACb,YAAM;AAAA,uBACW,IAAI,IAAI,qBAAqB,CAAC;AAAA;AAAA,QAE7C,QAAQ,GAAG;AAAA,IACf,CAAC;AAAA,EACH,UAAE;AACA,UAAM,8BAA8B,QAAQ,EAAE;AAAA,EAChD;AACF;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM,+BAA+B,QAAQ,EAAE;AAC/C,MAAI;AACF,UAAM,GAAG,YAAY,EAAE,QAAQ,OAAM,QAAO;AAC1C,YAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAcJ,QAAQ,GAAG;AAEb,YAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOJ,QAAQ,GAAG;AAEb,YAAM,yBAAyB,QAAQ,GAAG;AAC1C,YAAM,iDAAiD,QAAQ,GAAG;AAElE,YAAM;AAAA;AAAA;AAAA,QAGJ,QAAQ,GAAG;AACb,YAAM;AAAA;AAAA;AAAA,QAGJ,QAAQ,GAAG;AACb,YAAM;AAAA,uBACW,IAAI,IAAI,kCAAkC,CAAC;AAAA;AAAA,QAE1D,QAAQ,GAAG;AAAA,IACf,CAAC;AAAA,EACH,UAAE;AACA,UAAM,8BAA8B,QAAQ,EAAE;AAAA,EAChD;AACF;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@truefoundry/trueforge",
3
- "version": "0.1.4",
3
+ "version": "0.2.0-rc.1",
4
4
  "description": "TrueForge Agent Harness: server, HTTP API, and chat UI (npx @truefoundry/trueforge)",
5
5
  "author": "TrueFoundry",
6
6
  "license": "MIT",
@@ -24,39 +24,42 @@
24
24
  "README.md"
25
25
  ],
26
26
  "engines": {
27
- "node": ">=22"
27
+ "node": ">=22.14.0"
28
28
  },
29
29
  "dependencies": {
30
30
  "@anthropic-ai/sandbox-runtime": "0.0.71",
31
31
  "@daytona/sdk": "^0.204.1",
32
- "@hono/node-server": "^2.0.11",
33
- "@hono/swagger-ui": "^0.2.1",
34
- "@hono/zod-openapi": "^1.5.1",
35
- "@modelcontextprotocol/sdk": "^1.29.0",
36
- "better-sqlite3": "^13.0.2",
32
+ "@hono/node-server": "^2.1.1",
33
+ "@hono/swagger-ui": "^0.2.2",
34
+ "@hono/zod-openapi": "^1.6.1",
35
+ "@modelcontextprotocol/sdk": "^1.30.0",
36
+ "better-sqlite3": "^13.0.3",
37
+ "cron-parser": "^5.4.0",
37
38
  "env-paths": "^4.0.0",
38
- "hono": "^4.12.34",
39
- "jose": "^6.2.8",
40
- "kysely": "^0.29.4",
41
- "openid-client": "^6.8.4",
42
- "pg": "^8.22.0",
43
- "redis": "^5.10.0",
39
+ "hono": "^4.13.5",
40
+ "jose": "^6.2.10",
41
+ "kysely": "^0.29.5",
42
+ "openid-client": "^6.8.7",
43
+ "pg": "^8.23.0",
44
+ "redis": "^5.12.1",
44
45
  "ulid": "^3.0.2",
45
- "winston": "^3.13.0",
46
+ "undici": "7.29.0",
47
+ "winston": "^3.19.0",
46
48
  "yaml": "^2.9.0",
47
49
  "zod": "^4.4.3",
48
- "@truefoundry/trueforge-core": "0.1.4"
50
+ "@truefoundry/trueforge-core": "0.2.0-rc.1",
51
+ "@truefoundry/trueforge-sdk": "0.1.4-rc.1"
49
52
  },
50
53
  "devDependencies": {
51
- "@swc/core": "^1.11.0",
52
- "@swc/jest": "^0.2.37",
54
+ "@swc/core": "^1.16.1",
55
+ "@swc/jest": "^0.2.39",
53
56
  "@types/better-sqlite3": "^7.6.13",
54
57
  "@types/jest": "^29.5.14",
55
- "@types/node": "^24.12.0",
56
- "@types/pg": "^8.20.0",
58
+ "@types/node": "^24.13.3",
59
+ "@types/pg": "^8.23.1",
57
60
  "jest": "^29.7.0",
58
- "tsup": "^8.5.0",
59
- "tsx": "^4.16.2",
61
+ "tsup": "^8.5.1",
62
+ "tsx": "^4.23.12",
60
63
  "typescript": "^7.0.2"
61
64
  },
62
65
  "scripts": {
@@ -67,16 +70,20 @@
67
70
  "build:clean": "rm -rf dist",
68
71
  "build": "pnpm run build:gen && tsc --noEmit && pnpm run build:clean && tsup && chmod +x dist/cli.js && pnpm run build:frontend-assets",
69
72
  "dev:serve": "NODE_OPTIONS='--conditions=trueforge-dev' NODE_ENV=development tsx watch --env-file=.env src/main.ts",
70
- "dev": "pnpm run \"/^(build:gen:watch|dev:serve)$/\"",
71
- "dev:no-watch": "NODE_OPTIONS='--conditions=trueforge-dev' NODE_ENV=development tsx --env-file=.env src/main.ts",
73
+ "dev": "pnpm run \"/^(build:gen:watch|dev:serve|dev:controller)$/\"",
74
+ "dev:no-watch": "pnpm run \"/^(dev:serve:no-watch|dev:controller:no-watch)$/\"",
75
+ "dev:serve:no-watch": "NODE_OPTIONS='--conditions=trueforge-dev' NODE_ENV=development tsx --env-file=.env src/main.ts",
76
+ "dev:controller": "NODE_OPTIONS='--conditions=trueforge-dev' NODE_ENV=development tsx watch --env-file=.env src/controller-main.ts",
77
+ "dev:controller:no-watch": "NODE_OPTIONS='--conditions=trueforge-dev' NODE_ENV=development tsx --env-file=.env src/controller-main.ts",
72
78
  "start": "NODE_ENV=production node --env-file=.env dist/main.js",
79
+ "start:controller": "NODE_ENV=production node --env-file=.env dist/controller-main.js",
73
80
  "push-sandbox-image-to-daytona": "node scripts/push-sandbox-image-to-daytona.mjs",
74
81
  "migrate": "NODE_OPTIONS='--conditions=trueforge-dev' STANDALONE=false tsx --env-file=.env src/db/postgres/migrate-cli.ts",
75
82
  "openapi:write": "pnpm run build:gen && NODE_OPTIONS='--conditions=trueforge-dev' tsx --env-file=.env.test scripts/write-openapi.ts",
76
83
  "pack:dry": "pnpm pack --dry-run",
77
- "migrate:legacy-sqlite-path": "node scripts/migrate-legacy-sqlite-path.mjs",
78
84
  "predev:no-watch": "pnpm --filter @truefoundry/trueforge-core build:gen && pnpm run build:gen",
79
85
  "predev": "pnpm --filter @truefoundry/trueforge-core build:gen && pnpm run build:gen",
86
+ "pretypecheck": "pnpm -w run sdk:types",
80
87
  "test:eventsub": "jest --config jest.eventsub.config.cjs",
81
88
  "test:store:postgres": "jest --config jest.store.postgres.config.cjs",
82
89
  "test:store:sqlite": "jest --config jest.store.sqlite.config.cjs",
@@ -1 +0,0 @@
1
- import{n as J,o as de,r,p as H,j as e,q as oe,B as z,I as w,t as X,x as Q,y as ce,e as P,s as G}from"./index-DJ1uWGdt.js";var me=[{value:"dcr",label:"OAuth"},{value:"none",label:"None"},{value:"header",label:"API Key"}],$=Q("h-11 shadow-sm"),L=()=>e.jsx("span",{className:"ml-0.5 text-failure-bg","aria-hidden":!0,children:"*"}),ue=({open:n,onOpenChange:u,onAdd:m,busy:j=!1,error:o})=>{const[f,y]=r.useState(""),[h,x]=r.useState(""),[p,S]=r.useState(""),[i,b]=r.useState("dcr"),[v,M]=r.useState(""),[k,F]=r.useState(""),A=()=>{y(""),x(""),S(""),b("dcr"),M(""),F("")},a=l=>{l||A(),u(l)},N=!!f.trim()&&!!p.trim()&&!!h.trim()&&(i!=="header"||!!v.trim()),E=async l=>{if(l.preventDefault(),!N||j)return;const I=i==="header"?{type:"header",apiKey:v.trim(),...k.trim()?{headerName:k.trim()}:{}}:{type:i};try{await m({name:f.trim(),url:h.trim(),description:p.trim(),auth:I}),A(),u(!1)}catch{}};return e.jsx(X,{open:n,onOpenChange:a,title:"Add MCP server",description:"Point at a remote MCP endpoint. It then behaves like any other connector.",contentSized:!0,headerIcon:e.jsx("span",{className:"flex size-11 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary","aria-hidden":!0,children:e.jsx(w,{name:"mcp-server",className:"size-6"})}),children:e.jsxs("form",{className:"flex flex-col overflow-y-auto p-5 md:p-6",onSubmit:l=>void E(l),children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"mcp-server-name",className:"mb-1.5 block text-sm font-medium text-text-primary",children:["Name",e.jsx(L,{})]}),e.jsx("input",{id:"mcp-server-name",type:"text",required:!0,value:f,onChange:l=>{y(l.target.value)},placeholder:"analytics-postgres-mcp",autoFocus:!0,className:$})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"mcp-server-description",className:"mb-1.5 block text-sm font-medium text-text-primary",children:["Description",e.jsx(L,{})]}),e.jsx("textarea",{id:"mcp-server-description",value:p,onChange:l=>{S(l.target.value)},placeholder:"Query analytics from Postgres",required:!0,rows:3,className:Q("resize-y py-2.5 shadow-sm")})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"mcp-server-url",className:"mb-1.5 block text-sm font-medium text-text-primary",children:["URL",e.jsx(L,{})]}),e.jsx("input",{id:"mcp-server-url",type:"url",required:!0,value:h,onChange:l=>{x(l.target.value)},placeholder:"https://mcp.example.com/mcp",className:$})]}),e.jsxs("fieldset",{children:[e.jsxs("legend",{className:"mb-1.5 text-sm font-medium text-text-primary",children:["Auth type",e.jsx(L,{})]}),e.jsx("div",{className:"flex w-full flex-row rounded-md border border-border bg-secondary-bg/40 p-1",children:me.map(l=>e.jsxs("label",{className:`flex h-8 flex-1 cursor-pointer items-center justify-center rounded-sm text-sm font-medium transition-colors ${i===l.value?"bg-dropdown-selected-item-bg text-dropdown-selected-item-text shadow-sm":"text-text-secondary hover:text-text-primary"}`,children:[e.jsx("input",{type:"radio",name:"mcp-auth-type",value:l.value,checked:i===l.value,onChange:()=>{b(l.value)},className:"sr-only"}),l.label]},l.value))})]}),i==="dcr"?e.jsxs("div",{className:"flex gap-1.5 bg-secondary-bg/40 p-2 rounded-md",children:[e.jsx(w,{name:"info",className:"size-3.5 mt-1 text-text-secondary"}),e.jsx("div",{className:"text-xs text-text-secondary leading-5.5",children:"Sign-in only — the server must support dynamic client registration. Manual OAuth (client ID / secret) isn't supported yet."})]}):null,i==="header"?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"mcp-server-api-key",className:"mb-1.5 block text-sm font-medium text-text-primary",children:["API key",e.jsx(L,{})]}),e.jsx("input",{id:"mcp-server-api-key",type:"password",required:!0,value:v,onChange:l=>{M(l.target.value)},placeholder:"Paste the server token",className:$})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"mcp-server-header-name",className:"mb-1.5 block text-sm font-medium text-text-primary",children:["Header name ",e.jsx("span",{className:"font-normal text-text-secondary",children:"(optional)"})]}),e.jsx("input",{id:"mcp-server-header-name",type:"text",value:k,onChange:l=>{F(l.target.value)},placeholder:"Authorization",className:$})]})]}):null]}),e.jsxs("div",{className:"mt-6 space-y-3",children:[o?e.jsx("p",{className:"text-failure-bg text-sm",children:o}):null,e.jsx(z,{type:"submit",size:"lg",disabled:!N||j,className:"w-full shrink-0",children:"Add"})]})]})})},xe=ue,_={dcr:"OAuth2",header:"API Key",none:"No Auth"};function he({text:n}){const u=r.useRef(null),[m,j]=r.useState(!1),[o,f]=r.useState(!1),[y,h]=r.useState(16);return r.useLayoutEffect(()=>{j(!1),h(16)},[n]),r.useLayoutEffect(()=>{const x=u.current;if(!x)return;if(!m){h(16),f(x.scrollWidth>x.clientWidth+1);return}h(16);const p=requestAnimationFrame(()=>{h(x.scrollHeight)});return()=>cancelAnimationFrame(p)},[n,m]),n?e.jsxs("div",{className:"relative min-w-0",children:[e.jsxs("p",{ref:u,style:{maxHeight:y},className:P("mt-0.5 overflow-hidden font-mono text-xs leading-4 text-text-secondary transition-[max-height] duration-300 ease-in-out",!m&&"whitespace-nowrap",!m&&o&&"pr-[5.75rem]"),children:[n,m&&o?e.jsxs(e.Fragment,{children:[" ",e.jsx("button",{type:"button",className:"cursor-pointer font-mono text-xs font-medium text-text-primary/80 hover:text-text-primary focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-focus-ring","aria-expanded":!0,onClick:()=>j(!1),children:"Show less"})]}):null]}),!m&&o?e.jsxs("button",{type:"button",className:"absolute top-0.5 right-0 cursor-pointer bg-card-bg pl-1.5 font-mono text-xs font-medium leading-4 text-text-primary/80 hover:text-text-primary focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-focus-ring","aria-expanded":!1,onClick:()=>j(!0),children:[e.jsx("span",{"aria-hidden":!0,className:"text-text-secondary",children:"…"}),e.jsx("span",{className:"ml-1",children:"Read more"})]}):null]}):null}var pe=({connector:n,onBack:u,onConnectorRefreshed:m,onDisconnect:j,busy:o=!1})=>{const{connectorCatalog:f}=J(),{handleAuthorize:y,isOAuthLoading:h}=ce(),[x,p]=r.useState([]),[S,i]=r.useState(!0),[b,v]=r.useState(null),[M,k]=r.useState(!1);r.useEffect(()=>{let a=!1;return p([]),v(null),i(!0),f.getToolsByConnectorId({id:n.id}).then(N=>{a||p(N)}).catch(N=>{a||v(H(N,"Failed to load connector tools"))}).finally(()=>{a||i(!1)}),()=>{a=!0}},[n.authenticated,n.id,f]);const F=async()=>{k(!0),v(null);try{const a=await f.getConnector({id:n.id});m(a)}catch(a){v(H(a,"Failed to refresh connector details"))}finally{k(!1)}},A=h||M;return e.jsxs("div",{className:"flex h-full flex-col overflow-hidden",children:[e.jsxs("button",{type:"button",onClick:u,className:"mb-3 inline-flex w-fit items-center gap-1 rounded-md py-1 pr-2 text-sm text-text-secondary hover:text-text-primary focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-focus-ring",children:[e.jsx(w,{name:"chevron-left",className:"size-3.5"}),"Connectors"]}),e.jsxs("div",{className:"flex flex-1 flex-col overflow-y-auto pb-1",children:[e.jsxs("header",{className:"flex items-start gap-3",children:[e.jsx("span",{className:"flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-border bg-secondary-bg","aria-hidden":!0,children:e.jsx(w,{name:"mcp-server",className:"size-5 text-text-primary"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h4",{className:"text-lg font-semibold text-text-primary",children:n.name}),e.jsxs("div",{className:"mt-0.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-sm",children:[e.jsxs("span",{className:P("flex items-center gap-1.5 text-xs font-medium",n.authenticated?"text-success-bg":"text-text-primary"),children:[e.jsx("span",{className:P("h-1.5 w-1.5 rounded-full",n.authenticated?"bg-success-bg":"bg-primary-button-bg")}),n.authenticated?"Connected":"Not authenticated"]}),e.jsxs("span",{className:"text-text-secondary",children:["· ",n.description]})]}),e.jsx("span",{className:"mt-2 inline-flex items-center rounded-full border border-border bg-secondary-bg/40 px-2 py-0.5 text-xs font-medium text-text-secondary",children:_[n.auth.type]??_.none})]}),n.auth.type==="dcr"&&!n.authenticated?e.jsx(z,{variant:"outline",size:"sm",type:"button",disabled:o||A,onClick:()=>{y(n.id,a=>{a&&F()})},children:A?"Connecting…":"Connect"}):n.auth.type==="dcr"&&!n.requiresAuth?e.jsx(z,{variant:"outline",size:"sm",type:"button",disabled:o,onClick:j,children:"Disconnect"}):null]}),e.jsx("section",{className:"mt-6","aria-labelledby":"connector-tools-heading",children:S?e.jsx("div",{className:"rounded-xl border border-dashed border-border p-6 text-center text-sm text-text-secondary",children:"Loading tools…"}):b?e.jsxs("div",{className:"rounded-xl border border-failure-bg/30 bg-failure-bg/10 p-6 text-center text-sm text-failure-bg",children:[b,n.auth.type==="dcr"&&!n.authenticated&&e.jsx("div",{className:"font-bold mt-1",children:"Click Connect and authenticate successfully to view tools."})]}):x.length>0?e.jsxs(e.Fragment,{children:[e.jsxs("h5",{id:"connector-tools-heading",className:"mb-2 text-[0.8125rem] font-semibold text-text-primary",children:["Tools ",e.jsxs("span",{className:"font-normal text-text-secondary",children:["· ",x.length]})]}),e.jsx("div",{className:"overflow-hidden rounded-xl border border-border bg-card-bg",children:x.map(a=>e.jsx("article",{className:"flex min-h-12 items-start gap-3 border-b border-border px-3 py-2 last:border-b-0",children:e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h6",{className:"text-sm font-medium text-text-primary",children:a.name}),e.jsx(he,{text:a.description})]})},a.id))})]}):e.jsx("div",{className:"rounded-xl border border-dashed border-border p-6 text-center text-sm text-text-secondary",children:"No tools reported for this connector."})})]})]})},fe=pe,be=()=>{const{connectorCatalog:n}=J(),u=de(),[m,j]=r.useState(""),[o,f]=r.useState({ordered:[],authStatusById:new Map}),[y,h]=r.useState(!0),[x,p]=r.useState(null),[S,i]=r.useState(null),[b,v]=r.useState(!1),[M,k]=r.useState([]),[F,A]=r.useState(!1),[a,N]=r.useState(null),[E,l]=r.useState(null),[I,R]=r.useState(""),W=r.useMemo(()=>(M??[]).reduce((t,s)=>(t[s.name]=s.logo??"",t),{}),[M]),K=r.useCallback(async()=>{h(!0),p(null);try{const[t,s]=await Promise.all([n.listConnectors(),n.getConnectorCatalog()]);k(s);const d=t??[],g=new Set(d.map(c=>c.id)),C=[...d.map(c=>({connector:c,isConfigured:!0})),...s.filter(c=>!g.has(c.id)).map(c=>({connector:c,isConfigured:!1}))];f({ordered:C,authStatusById:new Map(C.map(c=>[c.connector.id,c.isConfigured?c.connector.authenticated:!1]))}),l(c=>c?t.find(ie=>ie.id===c.id)??null:null)}catch(t){p(H(t,"Failed to load connectors"))}finally{h(!1)}},[n]);r.useEffect(()=>{K()},[K]);const B=m.trim().toLowerCase(),T=r.useMemo(()=>B?o.ordered.filter(({connector:t})=>{var s;return t.name.toLowerCase().includes(B)||(((s=t.description)==null?void 0:s.toLowerCase().includes(B))??!1)||t.url.toLowerCase().includes(B)}):o.ordered,[o.ordered,B]),D=r.useMemo(()=>{const t=[];for(const s of T)if(s.isConfigured){const d=o.authStatusById.get(s.connector.id)??s.connector.authenticated;t.push(d===s.connector.authenticated?s.connector:{...s.connector,authenticated:d})}return t},[o.authStatusById,T]),q=r.useMemo(()=>{const t=[];for(const s of T)s.isConfigured||t.push(s.connector);return t},[T]),O=async(t,s=p)=>{v(!0),p(null);try{await t(),await K()}catch(d){throw s(H(d,"Request failed")),d}finally{v(!1)}},U=()=>{N(null),R(""),i(null)},V=async(t,s)=>{const d=s??(t.auth.type==="header"?{type:"header",...t.auth.headerName?{headerName:t.auth.headerName}:{}}:t.auth.type==="dcr"?{type:"dcr"}:{type:"none"});await n.createConnector({name:t.name,description:t.description??t.url,url:t.url,auth:d})},Z=t=>{if(t.auth.type==="header"){R(""),i(null),N(t);return}O(async()=>{await V(t)}).catch(()=>{})},ee=t=>{if(t.preventDefault(),!a||!I.trim())return;const s=a;i(null),O(async()=>{const d={type:"header",apiKey:I.trim(),...s.auth.type==="header"&&s.auth.headerName?{headerName:s.auth.headerName}:{}},g=o.ordered.find(({connector:c})=>c.id===s.id),C=g!=null&&g.isConfigured?g.connector:void 0;C?await n.updateConnector({id:C.id,name:C.name,description:C.description,url:C.url,auth:d}):await V(s,d),U(),setTimeout(()=>{u==null||u.showSuccess({title:`${s.name} ${C?"updated":"connected"}`})},100)},i).catch(()=>{})},te=async t=>{i(null),await O(async()=>{await n.createConnector({...t})},i),setTimeout(()=>{u==null||u.showSuccess({title:`${t.name} added`})},0)},se=t=>{O(async()=>{await n.disconnectConnector({id:t.id}),l(null)}).catch(()=>{})},ae=t=>{l(s=>(s==null?void 0:s.id)===t.id?t:s),f(s=>{const d=new Map(s.authStatusById);return d.set(t.id,t.authenticated),{ordered:s.ordered.map(g=>g.isConfigured&&g.connector.id===t.id?{connector:t,isConfigured:!0}:g),authStatusById:d}})},re=(t,s)=>{const d=W[t.name],g=e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-border bg-secondary-bg","aria-hidden":!0,children:d?e.jsx(G,{src:d,alt:t.name,className:"size-4.5"}):e.jsx(w,{name:"mcp-server",className:"size-4.5 text-text-primary"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h5",{className:"truncate text-sm font-medium text-text-primary",children:t.name}),e.jsx("p",{className:"mt-0.5 line-clamp-2 text-sm text-text-secondary sm:truncate",children:t.description})]})]});return e.jsxs("article",{className:"flex min-h-16 w-full items-center gap-3 border-b border-border p-3 text-left last:border-b-0 cursor-pointer transition-colors hover:bg-ghost-button-hover/60",onClick:()=>{l(t)},children:[e.jsx("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:g}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex items-center gap-2",children:e.jsxs("span",{className:P("flex items-center gap-1.5 rounded-full border border-border bg-secondary-bg/40 px-2 py-0.5 text-xs font-medium",t.authenticated?"text-success-bg":"text-text-primary"),children:[e.jsx("span",{className:P("h-1.5 w-1.5 rounded-full",t.authenticated?"bg-success-bg":"bg-primary-button-bg")}),t.authenticated?"Connected":"Added"]})}),t.auth.type==="header"?e.jsxs(z,{variant:"secondary",size:"sm",type:"button",disabled:b,onClick:c=>{c.stopPropagation(),R(""),N(t)},children:[e.jsx(w,{name:"wrench",className:"size-3"}),"Replace Key"]}):null,e.jsx(w,{name:"chevron-right",className:"size-4"})]})]},t.id)},ne=t=>{const s=W[t.name];return e.jsxs("article",{className:"flex min-h-16 w-full items-center gap-3 border-b border-border p-3 text-left last:border-b-0",children:[e.jsx("span",{className:"flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-border bg-secondary-bg","aria-hidden":!0,children:s?e.jsx(G,{src:s,alt:t.name,className:"size-4.5"}):e.jsx(w,{name:"mcp-server",className:"size-4.5 text-text-primary"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h5",{className:"truncate text-sm font-medium text-text-primary",children:t.name}),e.jsx("p",{className:"mt-0.5 line-clamp-2 text-sm text-text-secondary sm:truncate",children:t.description??t.url})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[e.jsx("span",{className:"hidden text-xs text-text-secondary sm:inline",children:_[t.auth.type]??_.none}),e.jsx(z,{variant:"secondary",size:"sm",type:"button",disabled:b,onClick:()=>{Z(t)},children:t.auth.type==="dcr"?"Add":"Connect"})]})]},t.id)},Y=r.useMemo(()=>a!==null&&o.ordered.some(t=>t.isConfigured&&t.connector.id===a.id),[a,o.ordered]);if(E)return e.jsx(fe,{connector:E,busy:b,onBack:()=>{l(null)},onConnectorRefreshed:ae,onDisconnect:()=>{se(E)}});const le=D.length>0||q.length>0;return e.jsxs(e.Fragment,{children:[e.jsx("h3",{className:"text-xl font-semibold tracking-tight text-text-primary",children:"Connectors"}),e.jsx("p",{className:"mt-1 text-sm text-text-secondary",children:"Connect tools your agents can use."}),x?e.jsx("p",{className:"mt-3 rounded-md border border-failure-bg/30 bg-failure-bg/10 px-3 py-2 text-sm text-failure-bg",children:x}):null,e.jsx("div",{className:"mt-4 flex-1 overflow-y-hidden",children:e.jsxs("div",{className:"flex h-full flex-col gap-3",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("div",{className:"flex-1",children:e.jsx(oe,{query:m,setQuery:j,placeholder:"Search connectors"})}),e.jsxs(z,{variant:"secondary",type:"button",onClick:()=>{i(null),A(!0)},children:[e.jsx(w,{name:"plus",size:"1rem",className:"mr-1"}),"Add MCP Server"]})]}),e.jsxs("div",{className:"flex flex-1 flex-col gap-5 overflow-y-auto pb-1",children:[y?e.jsx("p",{className:"py-8 text-center text-sm text-text-secondary",children:"Loading…"}):null,!y&&D.length>0?e.jsxs("section",{"aria-labelledby":"connected-connectors-heading",children:[e.jsxs("h4",{id:"connected-connectors-heading",className:"mb-2 text-[0.8125rem] font-semibold uppercase text-text-secondary",children:["Configured · ",D.length]}),e.jsx("div",{className:"overflow-hidden rounded-xl border border-border bg-card-bg",children:D.map(t=>re(t))})]}):null,!y&&q.length>0?e.jsxs("section",{"aria-labelledby":"available-connectors-heading",children:[e.jsxs("h4",{id:"available-connectors-heading",className:"mb-2 text-[0.8125rem] font-semibold uppercase text-text-secondary",children:["Available · ",q.length]}),e.jsx("div",{className:"overflow-hidden rounded-xl border border-border bg-card-bg",children:q.map(t=>ne(t))})]}):null,!y&&!le?e.jsx("div",{className:"flex flex-1 items-center justify-center rounded-xl border border-dashed border-border p-8 text-center text-sm text-text-secondary",children:m.trim()?`No connectors match “${m.trim()}”.`:"No connectors yet."}):null]}),e.jsx(X,{open:a!==null,onOpenChange:t=>{t||U()},title:`${Y?"Replace key for":"Connect"} ${(a==null?void 0:a.name)??"connector"}`,description:a==null?void 0:a.url,contentSized:!0,className:"md:max-w-xl",children:e.jsxs("form",{onSubmit:ee,children:[e.jsxs("div",{className:"space-y-5 px-5 py-5",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"flex size-12 shrink-0 items-center justify-center overflow-hidden rounded-xl border border-border bg-secondary-bg","aria-hidden":!0,children:e.jsx(w,{name:"mcp-server",className:"size-6 text-text-primary"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"font-medium text-text-primary",children:a==null?void 0:a.name}),e.jsx("p",{className:"truncate text-sm text-text-secondary",children:a==null?void 0:a.description})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"connector-api-key",className:"mb-2 block text-xs font-semibold uppercase tracking-wide text-text-secondary",children:"API key / token"}),e.jsx("input",{id:"connector-api-key",type:"password",value:I,onChange:t=>{R(t.target.value)},placeholder:`Paste the token from ${(a==null?void 0:a.name)??"the provider"}`,autoFocus:!0,required:!0,className:Q("h-11")})]}),S?e.jsx("p",{className:"text-failure-bg text-sm",children:S}):null]}),e.jsxs("footer",{className:"flex justify-end gap-2 border-t border-border px-5 py-4",children:[e.jsx(z,{variant:"ghost",type:"button",onClick:U,disabled:b,children:"Cancel"}),e.jsx(z,{type:"submit",disabled:!I.trim()||b,children:Y?"Replace Key":"Connect"})]})]})}),e.jsx(xe,{open:F,onOpenChange:t=>{A(t),t||i(null)},onAdd:te,busy:b,error:S})]})})]})},ye=be;export{ye as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SettingsBuilder-MYWRFXRI-Ce3OWfa1.js","assets/index-DJ1uWGdt.js","assets/index-DEKCw40W.css"])))=>i.map(i=>d[i]);
2
- import{u as N,a as v,c,r as a,j as e,I as m,f as S,S as C,e as E,_ as k}from"./index-DJ1uWGdt.js";import{N as O,S as R,a as T,T as A}from"./chunk-OZTNBS6V-CLmmFX7d.js";var _=a.lazy(()=>k(()=>import("./SettingsBuilder-MYWRFXRI-Ce3OWfa1.js"),__vite__mapDeps([0,1,2])));function z({className:p}){const b=N(),s=v(),h=c("ClearChatButton"),j=c("SaveAgentButton"),g=c("SelectAgentEmptyState"),[n,r]=a.useState(!1),u=a.useRef(null),d=a.useRef(null),f=a.useRef(null),l=a.useRef(!1),y=(s==null?void 0:s.mode.status)==="idle",o=(s==null?void 0:s.settingsOpen)===!0;a.useEffect(()=>{if(!n)return;const t=i=>{i.key==="Escape"&&r(!1)};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[n]),a.useEffect(()=>{var i,x;const t=f.current;if(n){l.current=!0,t&&(t.inert=!0),(i=d.current)==null||i.focus();return}l.current&&(t&&(t.inert=!1),(x=u.current)==null||x.focus(),l.current=!1)},[n]);const w=()=>{s!=null&&s.isComposerEnabled?s.openDraft():(s==null||s.setSettingsOpen(!1),b.threads().switchToNewThread()),r(!1)};return e.jsxs("div",{className:E("relative flex h-full min-h-0 w-full flex-col bg-primary-bg",p),children:[e.jsxs("header",{className:"flex shrink-0 items-center gap-1 border-b border-border bg-topbar-bg px-2 py-1.5",children:[o?e.jsx("span",{className:"min-w-0 flex-1"}):e.jsxs(e.Fragment,{children:[e.jsx(O,{}),e.jsx("span",{className:"min-w-0 flex-1"}),e.jsx(h,{}),e.jsx(j,{})]}),e.jsx(R,{},"shell-actions"),o?null:e.jsxs(e.Fragment,{children:[(s==null?void 0:s.isNewChatEnabled)!==!1?e.jsx("button",{type:"button","aria-label":"New chat",title:"New chat",className:S({variant:"ghost",size:"icon"}),onClick:w,children:e.jsx(m,{name:"plus"})}):null,e.jsx("button",{ref:u,type:"button","aria-label":"Sessions","aria-expanded":n,className:"text-text-secondary hover:text-text-primary inline-flex size-8 cursor-pointer items-center justify-center rounded-md",onClick:()=>r(t=>!t),children:e.jsx(m,{name:"clock-rotate-left"})})]})]}),e.jsx("div",{ref:f,className:"min-h-0 min-w-0 flex-1",children:o?e.jsx(a.Suspense,{fallback:e.jsxs("div",{className:"flex h-full items-center justify-center",role:"status","aria-live":"polite","aria-busy":"true",children:[e.jsx(C,{size:28,className:"text-text-primary"}),e.jsx("span",{className:"sr-only",children:"Loading"})]}),children:e.jsx(_,{})}):y?e.jsx(g,{}):e.jsx(T,{})}),n?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button","aria-label":"Close sessions",className:"absolute inset-0 z-[9] cursor-pointer bg-[var(--overlay)]",onClick:()=>r(!1)}),e.jsx("div",{ref:d,className:"absolute inset-y-0 right-0 z-10 flex w-full max-w-80 flex-col border-l border-border bg-sidebar-bg shadow-lg outline-none",role:"dialog","aria-label":"Sessions",tabIndex:-1,children:e.jsx(A,{onThreadOpen:()=>r(!1)})})]}):null]})}export{z as DrawerLayout};
@@ -1 +0,0 @@
1
- import{n as be,o as fe,r as o,p as Y,j as e,q as ge,B,I as P,s as ie,t as xe,A as ye,v as ve,e as L,w as je,x as Ne}from"./index-DJ1uWGdt.js";var me=Ne("h-11 shadow-sm"),we=({open:n,onOpenChange:l,onSave:b,title:k,description:p,initialBaseUrl:E="",baseUrlPlaceholder:d="https://api.openai.com/v1",requireApiKey:c=!0,submitLabel:S="Save",busy:O=!1,error:F})=>{const[M,$]=o.useState(""),[y,x]=o.useState(""),[w,A]=o.useState(!1),U=()=>{$(""),x(""),A(!1)};o.useEffect(()=>{n&&($(""),x(E),A(!1))},[n,E]);const X=i=>{i||U(),l(i)},T=M.trim(),G=!c||!!T,v=async i=>{if(i.preventDefault(),!(!G||O))try{await b({apiKey:T,baseUrl:y.trim()}),U(),l(!1)}catch{}};return e.jsx(xe,{open:n,onOpenChange:X,title:k,description:p,contentSized:!0,children:e.jsxs("form",{className:"flex flex-col overflow-y-auto p-5 md:p-6",onSubmit:v,children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"model-provider-api-key",className:"mb-1.5 block text-sm font-medium text-text-primary",children:["API key",c?null:e.jsx("span",{className:"font-normal text-text-secondary",children:" (optional)"})]}),e.jsx("input",{id:"model-provider-api-key",type:"password",required:c,value:M,onChange:i=>{$(i.target.value)},placeholder:c?"Enter API key":"Enter a new key",autoFocus:!0,className:me}),c?null:e.jsx("p",{className:"mt-1.5 text-xs text-text-secondary",children:"Leave blank to keep the current key; enter a new one to replace it."})]}),e.jsxs(ye,{expanded:w,onChange:(i,K)=>A(K),className:"rounded-md border border-border",children:[e.jsx(ve,{className:"px-3 py-2.5",children:e.jsxs("span",{className:"flex w-full items-center justify-between text-sm font-medium text-text-primary",children:["Advanced · custom endpoint",e.jsx(P,{name:"chevron-down",className:L("size-4 shrink-0 text-text-secondary transition-transform duration-200",w?"rotate-0":"-rotate-90")})]})}),e.jsxs(je,{className:"space-y-1.5 border-t border-border px-3 pb-3 pt-4",children:[e.jsx("label",{htmlFor:"model-provider-base-url",className:"block text-sm font-medium text-text-primary",children:"Base URL"}),e.jsx("input",{id:"model-provider-base-url",type:"url",value:y,onChange:i=>{x(i.target.value)},placeholder:d,className:me}),e.jsx("p",{className:"text-xs text-text-secondary",children:"Leave blank unless you use a regional or proxy endpoint."})]})]})]}),e.jsxs("div",{className:"mt-6 space-y-3",children:[F?e.jsx("p",{className:"text-failure-bg text-sm",children:F}):null,e.jsx(B,{type:"submit",size:"lg",disabled:!G||O,className:"w-full shrink-0",children:S})]})]})})},Ce=we,ke="128000",Ee="4096",pe=()=>({id:"",name:"",advancedExpanded:!0,contextLength:"",maxOutputTokens:""}),ue=n=>(n==null?void 0:n.models.map(l=>{var b,k,p,E,d;return{id:l.id,name:l.name,advancedExpanded:!0,reasoningEfforts:(b=l.properties)==null?void 0:b.reasoningEfforts,contextLength:((p=(k=l.properties)==null?void 0:k.contextLength)==null?void 0:p.toString())??"",maxOutputTokens:((d=(E=l.properties)==null?void 0:E.maxOutputTokens)==null?void 0:d.toString())??"",nameDirty:!0}}))??[pe()],Q="h-11 w-full rounded-md border border-border/70 bg-secondary-bg px-3 text-sm text-text-primary outline-none transition-colors placeholder:text-text-secondary/70 focus-visible:border-focus-ring focus-visible:ring-2 focus-visible:ring-focus-ring/50",V="border-failure-bg focus-visible:border-failure-bg focus-visible:ring-failure-bg";function ce(n){const l=n.trim();if(l==="")return null;const b=Number(l);return Number.isInteger(b)&&b>0?b:null}function Se(n){return n.replace(/([a-zA-Z])(\d)/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^[^a-z]+/,"").slice(0,64).replace(/-+$/g,"")}var re=()=>e.jsx("span",{className:"ml-0.5 text-failure-bg","aria-hidden":!0,children:"*"}),ee=({children:n})=>e.jsx("p",{className:"mt-1 text-xs text-failure-bg",children:n}),ne=({children:n})=>e.jsx("p",{className:"mt-1 text-xs text-text-secondary",children:n}),Me=({open:n,onOpenChange:l,onSubmit:b,reasoningEffortOptions:k,busy:p=!1,error:E,isEditMode:d=!1,initialValues:c})=>{const[S,O]=o.useState((c==null?void 0:c.name)??""),[F,M]=o.useState((c==null?void 0:c.baseUrl)??""),[$,y]=o.useState(""),[x,w]=o.useState(()=>ue(c)),[A,U]=o.useState(!1),[X,T]=o.useState(!1),G=()=>{O((c==null?void 0:c.name)??""),M((c==null?void 0:c.baseUrl)??""),y(""),w(ue(c)),U(!1),T(!1)},v=s=>{s||G(),l(s)},i=(s,r)=>{w(g=>g.map((u,j)=>j===s?{...u,...r}:u))},K=()=>{U(!0),T(!0),w(s=>s.map(r=>({...r,idTouched:!0,contextTouched:!0,maxTouched:!0})))},f=S.trim(),D=f?null:"Name is required.",_=F.trim();let h=null;if(!_)h="Base URL is required.";else try{new URL(_)}catch{h="Enter a valid URL."}const W=s=>s.id.trim()?null:"Model ID is required.",te=s=>s.name.trim()?null:"Model name is required.",q=s=>ce(s.contextLength)==null?"Set the model's context window.":null,Z=s=>ce(s.maxOutputTokens)==null?"Set the max output tokens.":null,oe=!D&&!h&&x.every(s=>!W(s)&&!te(s)),se=A&&D,H=X&&h,I=async()=>{if(K(),!oe||p)return;const s=x.findIndex(r=>q(r)||Z(r));if(s!==-1){i(s,{advancedExpanded:!0});const r=x[s],g=r&&q(r)?"context-length":"max-output-tokens";setTimeout(()=>{var j;const u=document.getElementById(`custom-provider-model-${s}-${g}`);(j=u==null?void 0:u.scrollIntoView)==null||j.call(u,{block:"center",behavior:"smooth"}),u==null||u.focus()},0);return}try{await b({name:f,baseUrl:_,apiKey:$.trim(),models:x.map(r=>{var R;const g={};(R=r.reasoningEfforts)!=null&&R.length&&(g.reasoningEfforts=r.reasoningEfforts);const u=ce(r.contextLength);u!=null&&(g.contextLength=u);const j=ce(r.maxOutputTokens);return j!=null&&(g.maxOutputTokens=j),{id:r.id.trim(),name:r.name.trim(),...Object.keys(g).length>0?{properties:g}:{}}})}),v(!1)}catch{}};return e.jsx(xe,{open:n,onOpenChange:v,title:d?`Edit ${(c==null?void 0:c.name)??S}`:"Add custom provider",description:d?"Update the endpoint, credentials, and models for this provider.":"Connect any OpenAI-compatible endpoint, whether it's a local model, a proxy, or your own hosted service.",contentSized:!0,children:e.jsxs("form",{className:"flex min-h-0 flex-1 flex-col",onSubmit:s=>{s.preventDefault(),I()},children:[e.jsxs("div",{className:"min-h-0 flex-1 space-y-4 overflow-y-auto px-5 pt-4 pb-8",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"custom-provider-name",className:"mb-1.5 block text-sm font-medium text-text-primary",children:["Name",e.jsx(re,{})]}),e.jsx("input",{id:"custom-provider-name",type:"text",value:S,onChange:s=>O(s.target.value),onBlur:()=>U(!0),placeholder:"local-llama",autoFocus:!d,readOnly:d,"aria-readonly":d,"aria-invalid":se?!0:void 0,className:L(Q,d&&"cursor-not-allowed bg-secondary-bg/60 text-text-secondary",se&&V)}),d?e.jsx(ne,{children:"Provider names cannot be changed after creation."}):null,se?e.jsx(ee,{children:D}):null]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"custom-provider-base-url",className:"mb-1.5 block text-sm font-medium text-text-primary",children:["Base URL",e.jsx(re,{})]}),e.jsx("input",{id:"custom-provider-base-url",type:"text",value:F,onChange:s=>M(s.target.value),onBlur:()=>T(!0),placeholder:"http://localhost:11434/v1",autoFocus:d,"aria-invalid":H?!0:void 0,className:L(Q,H&&V)}),H?e.jsx(ee,{children:h}):_?null:e.jsx(ne,{children:"OpenAI-compatible endpoint, usually ending in /v1."})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"custom-provider-api-key",className:"mb-1.5 block text-sm font-medium text-text-primary",children:["API key",e.jsx("span",{className:"font-normal text-text-secondary",children:" (optional)"})]}),e.jsx("input",{id:"custom-provider-api-key",type:"password",value:$,onChange:s=>y(s.target.value),placeholder:"sk-…",className:Q}),e.jsx(ne,{children:d?"Leave blank to keep the saved key, or enter a new key to replace it.":"Leave blank if your endpoint needs no key (e.g. a local model)."})]}),e.jsxs("fieldset",{className:"m-0 min-w-0 border-0 p-0",children:[e.jsxs("legend",{className:"float-left mb-2 w-full p-0 text-sm font-medium text-text-primary",children:["Models",e.jsx(re,{})]}),e.jsx("div",{className:"clear-both",children:x.map((s,r)=>{const g=W(s),u=s.idTouched&&g,j=te(s),R=!!j&&s.nameDirty,le=q(s),C=Z(s),z=s.contextTouched&&le,ae=s.maxTouched&&C;return e.jsxs("div",{className:L("pb-6",r>0?"border-t border-border pt-6":"pt-1"),style:r>0?{borderTopWidth:"0.5px"}:void 0,children:[e.jsxs("div",{className:"grid grid-cols-[1fr_1fr_2rem] items-end gap-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("label",{htmlFor:`custom-provider-model-${r}-id`,className:"mb-1 block text-xs font-normal text-text-secondary",children:"Model ID"}),e.jsx("input",{id:`custom-provider-model-${r}-id`,type:"text",value:s.id,onChange:t=>{const a=t.target.value;i(r,{id:a,...s.nameDirty?{}:{name:Se(a)}})},onBlur:()=>i(r,{idTouched:!0}),placeholder:"llama3.1:70b","aria-invalid":u?!0:void 0,className:L(Q,"font-mono",u&&V)})]}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("label",{htmlFor:`custom-provider-model-${r}-name`,className:"mb-1 block text-xs font-normal text-text-secondary",children:"Model name"}),e.jsx("input",{id:`custom-provider-model-${r}-name`,type:"text",value:s.name,onChange:t=>i(r,{name:t.target.value,nameDirty:!0}),placeholder:"llama-3-1-70b","aria-invalid":R?!0:void 0,className:L(Q,R&&V)})]}),e.jsx("button",{type:"button","aria-label":`Remove model ${r+1}`,disabled:x.length===1||p,className:"mb-0.5 flex size-9 items-center justify-center rounded-md text-text-secondary transition-colors hover:text-text-primary disabled:opacity-40",onClick:()=>w(t=>t.filter((a,m)=>m!==r)),children:e.jsx(P,{name:"trash",className:"size-4"})})]}),u?e.jsx(ee,{children:g}):null,R?e.jsx(ee,{children:j}):null,e.jsxs("div",{className:"mt-2",children:[e.jsxs("button",{type:"button","aria-expanded":s.advancedExpanded,"aria-controls":`custom-provider-model-${r}-advanced`,className:"flex cursor-pointer items-center gap-1.5 text-sm font-medium text-text-primary",onClick:()=>i(r,{advancedExpanded:!s.advancedExpanded}),children:[e.jsx(P,{name:"chevron-down",className:L("size-4 text-text-secondary transition-transform",s.advancedExpanded?"":"-rotate-90")}),"Advanced"]}),s.advancedExpanded?e.jsxs("div",{id:`custom-provider-model-${r}-advanced`,className:"mt-3 space-y-4 pl-6",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:`custom-provider-model-${r}-context-length`,className:"mb-1.5 block text-xs font-medium text-text-secondary",children:["Context length",e.jsx(re,{})]}),e.jsx("input",{id:`custom-provider-model-${r}-context-length`,type:"number",min:1,inputMode:"numeric",value:s.contextLength,onChange:t=>i(r,{contextLength:t.target.value}),onBlur:()=>i(r,{contextTouched:!0}),placeholder:ke,"aria-invalid":z?!0:void 0,className:L(Q,z&&V)}),z?e.jsx(ee,{children:le}):s.contextLength.trim()===""?e.jsx(ne,{children:"Model's total token window."}):null]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:`custom-provider-model-${r}-max-output-tokens`,className:"mb-1.5 block text-xs font-medium text-text-secondary",children:["Max output tokens",e.jsx(re,{})]}),e.jsx("input",{id:`custom-provider-model-${r}-max-output-tokens`,type:"number",min:1,inputMode:"numeric",value:s.maxOutputTokens,onChange:t=>i(r,{maxOutputTokens:t.target.value}),onBlur:()=>i(r,{maxTouched:!0}),placeholder:Ee,"aria-invalid":ae?!0:void 0,className:L(Q,ae&&V)}),ae?e.jsx(ee,{children:C}):s.maxOutputTokens.trim()===""?e.jsx(ne,{children:"Longest reply the model allows — use its real limit."}):null]}),k&&k.length>0?e.jsxs("div",{children:[e.jsxs("label",{className:"flex w-fit cursor-pointer items-center gap-2 select-none",children:[e.jsx("input",{type:"checkbox",className:"size-4 shrink-0 cursor-pointer accent-primary-button-bg disabled:cursor-not-allowed disabled:opacity-50",checked:s.reasoningEfforts!==void 0,"aria-label":`Enable reasoning effort for model ${r+1}`,disabled:p,onChange:t=>i(r,{reasoningEfforts:t.target.checked?[]:void 0})}),e.jsx("span",{className:"text-text-secondary text-xs font-medium",children:"Reasoning effort"})]}),s.reasoningEfforts!==void 0?e.jsx("div",{role:"group","aria-label":`Supported reasoning efforts for model ${r+1}`,className:"mt-2 flex flex-wrap gap-2",children:k.map(t=>{var m;const a=((m=s.reasoningEfforts)==null?void 0:m.includes(t))??!1;return e.jsx("button",{type:"button","aria-pressed":a,disabled:p,className:L("rounded-full border px-3 py-1 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-ring/40 disabled:opacity-50",a?"border-primary-button-bg bg-primary-button-bg text-primary-button-text":"border-border text-text-secondary hover:bg-ghost-button-hover"),onClick:()=>{var J;return i(r,{reasoningEfforts:a?(J=s.reasoningEfforts)==null?void 0:J.filter(de=>de!==t):[...s.reasoningEfforts??[],t]})},children:t},t)})}):null]}):null]}):null]})]},r)})}),e.jsxs(B,{variant:"secondary",size:"sm",type:"button",className:"mt-4 w-fit",onClick:()=>w(s=>[...s,pe()]),children:[e.jsx(P,{name:"plus",className:"size-3.5"}),"Add model"]})]})]}),e.jsxs("div",{className:"shrink-0 space-y-3 border-t border-border px-5 py-4",children:[E?e.jsx("p",{className:"text-failure-bg text-sm",children:E}):null,e.jsx(B,{type:"submit",size:"lg",disabled:!oe||p,className:"w-full",children:d?"Save changes":"Add provider"})]})]})})},Ue=Me;function Te(n){return"baseUrl"in n&&typeof n.baseUrl=="string"?n.baseUrl:""}var Le=()=>{const{modelCatalog:n}=be(),l=fe(),[b,k]=o.useState(""),[p,E]=o.useState([]),[d,c]=o.useState([]),[S,O]=o.useState(!0),[F,M]=o.useState(null),[$,y]=o.useState(null),[x,w]=o.useState(!1),[A,U]=o.useState(null),[X,T]=o.useState(null),[G,v]=o.useState(null),[i,K]=o.useState(!1),[f,D]=o.useState(null),_=o.useMemo(()=>(d??[]).reduce((t,a)=>(t[a.name]=a.logo??"",t),{}),[d]),h=b.trim().toLowerCase(),W=o.useCallback(async()=>{O(!0),M(null);try{const[t,a]=await Promise.all([n.listModelProviders(),n.getModelProviderCatalog()]);E(t),c(a)}catch(t){M(Y(t,"Failed to load model providers"))}finally{O(!1)}},[n]);o.useEffect(()=>{W()},[W]);const te=o.useMemo(()=>new Set(p.map(t=>t.type)),[p]),q=o.useMemo(()=>p.filter(t=>{var a;return((a=t.name)==null?void 0:a.toLowerCase().includes(h))||t.models.some(m=>m.name.toLowerCase().includes(h)||m.id.toLowerCase().includes(h))}),[p,h]),Z=o.useMemo(()=>d.filter(t=>t.type!=="custom"&&!te.has(t.type)&&(t.name.toLowerCase().includes(h)||t.models.some(a=>a.name.toLowerCase().includes(h)||a.id.toLowerCase().includes(h)))),[d,te,h]),oe=o.useMemo(()=>{var t;return(t=d.find(a=>a.type==="custom"))==null?void 0:t.supportedReasoningEfforts},[d]),se=o.useMemo(()=>{const t=new Map;for(const a of d)t.set(a.type,a.models);return t},[d]),H=()=>{U(null),T(null),v(null)},I=async(t,a)=>{w(!0),M(null);try{await t(),await W(),H()}catch(m){throw a?a(m):l==null?M(Y(m,"Request failed")):l.showError(m),m}finally{w(!1)}},s=async(t,a)=>{v(null),await I(async()=>{await n.createModelProvider({type:t.type,name:t.name,...a.baseUrl?{baseUrl:a.baseUrl}:{},apiKey:a.apiKey,models:t.models})},m=>v(Y(m,"Request failed")))},r=async(t,a)=>{v(null),await I(async()=>{await n.updateModelProvider({id:t.id,type:t.type,name:t.name,...a.baseUrl?{baseUrl:a.baseUrl}:{},apiKey:a.apiKey,models:t.models})},m=>v(Y(m,"Request failed"))),l==null||l.showSuccess({title:`${t.name} updated`})},g=t=>{n.deleteModelProvider&&I(async()=>{await n.deleteModelProvider({id:t.id})}).catch(()=>{})},u=(t,a)=>{I(async()=>{await n.updateModelProvider({id:t.id,type:t.type,name:t.name,...t.baseUrl?{baseUrl:t.baseUrl}:{},apiKey:"",models:a})}).catch(()=>{})},j=async t=>{y(null),await I(async()=>{await n.createModelProvider({type:"custom",name:t.name,baseUrl:t.baseUrl,apiKey:t.apiKey,models:t.models})},a=>y(Y(a,"Request failed"))),setTimeout(()=>{l==null||l.showSuccess({title:`${t.name} added`})},0)},R=async t=>{if(!f)return;const a=f;y(null),await I(async()=>{await n.updateModelProvider({id:a.id,type:a.type,name:a.name,baseUrl:t.baseUrl,apiKey:t.apiKey,models:t.models})},m=>y(Y(m,"Request failed"))),setTimeout(()=>{l==null||l.showSuccess({title:"Model provider updated",description:`${a.name} was updated successfully.`})},0)},le=f?{name:f.name,baseUrl:f.baseUrl??"",models:f.models}:void 0,C=A!=null?p.find(t=>t.id===A)??null:null,z=X!=null?d.find(t=>t.type===X)??null:null,ae=C!=null||z!=null;return e.jsxs(e.Fragment,{children:[e.jsx("h3",{className:"text-xl font-semibold tracking-tight text-text-primary",children:"Models"}),e.jsx("p",{className:"mt-1 text-sm text-text-secondary",children:"Connect providers and choose which models are available."}),F?e.jsx("p",{className:"mt-3 rounded-md border border-failure-bg/30 bg-failure-bg/10 px-3 py-2 text-sm text-failure-bg",children:F}):null,e.jsx("div",{className:"mt-4 flex-1 overflow-y-hidden",children:e.jsxs("div",{className:"flex h-full flex-col gap-3",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("div",{className:"flex-1",children:e.jsx(ge,{query:b,setQuery:k,placeholder:"Search providers and models"})}),e.jsxs(B,{variant:"secondary",type:"button",onClick:()=>{y(null),D(null),K(!0)},children:[e.jsx(P,{name:"plus",size:"1rem",className:"mr-1"}),"Add Custom Provider"]})]}),e.jsxs("div",{className:"flex flex-1 flex-col gap-2 overflow-y-auto",children:[S?e.jsx("p",{className:"py-8 text-center text-sm text-text-secondary",children:"Loading…"}):null,!S&&q.length>0?e.jsxs("section",{"aria-labelledby":"configured-providers-heading",children:[e.jsx("div",{id:"configured-providers-heading",className:"mb-2 text-[0.8125rem] font-semibold uppercase text-text-secondary",children:"Configured"}),e.jsx("div",{className:"overflow-hidden rounded-xl border border-border bg-card-bg",children:q.map(t=>{const a=se.get(t.type)??[],m=new Set(t.models.map(N=>N.id)),J=a.filter(N=>!m.has(N.id)),de=_[t.name];return e.jsxs("article",{className:"border-b border-border p-3 last:border-b-0",children:[e.jsxs("header",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[e.jsx("div",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary","aria-hidden":!0,children:de?e.jsx(ie,{src:de,alt:t.name,className:"size-4.5"}):e.jsx(P,{name:"cpu",className:"size-4.5"})}),e.jsx("h5",{className:"truncate text-base font-medium text-text-primary",children:t.name})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2.5 sm:justify-end",children:[e.jsxs("span",{className:"flex items-center gap-1.5 rounded-full border border-border bg-secondary-bg/40 px-2 py-0.5 text-xs font-medium text-success-bg",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-success-bg"}),"Connected"]}),e.jsxs(B,{variant:"secondary",size:"sm",className:"text-[0.8125rem]",type:"button","aria-label":`Edit ${t.name}`,title:`Edit ${t.name}`,disabled:x,onClick:()=>{t.type==="custom"?(H(),y(null),D(t),K(!0)):(v(null),T(null),U(t.id))},children:[e.jsx(P,{name:"wrench",className:"size-3.5"}),"Edit"]}),n.deleteModelProvider?e.jsx(B,{variant:"outline",size:"sm",className:"transition-colors hover:bg-failure-bg/10 hover:text-failure-bg",type:"button",disabled:x,onClick:()=>{g(t)},children:"Remove"}):null]})]}),e.jsxs("div",{className:"mt-3 overflow-hidden rounded-lg border border-border bg-secondary-bg/30",children:[t.models.map(N=>e.jsxs("div",{className:"flex min-h-10 items-center gap-3 border-b border-border px-3 py-2 text-sm text-text-primary last:border-b-0",children:[e.jsx("span",{className:"min-w-0 flex-1 truncate",children:N.name}),e.jsx("button",{type:"button","aria-label":`Remove ${N.name}`,disabled:x,className:"inline-flex size-7 shrink-0 items-center justify-center rounded-md text-text-secondary hover:bg-ghost-button-hover hover:text-ghost-button-text focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-focus-ring disabled:opacity-50",onClick:()=>{u(t,t.models.filter(he=>he.id!==N.id))},children:e.jsx(P,{name:"trash",className:"size-3.5"})})]},N.id)),J.length>0?e.jsxs("section",{children:[e.jsxs("div",{className:"border-b border-border bg-secondary-bg/40 px-3 py-2 text-xs font-semibold uppercase tracking-wide text-text-secondary",children:["Available to add · ",J.length]}),J.map(N=>e.jsxs("div",{className:"flex min-h-12 items-center gap-3 border-b border-border px-3 py-2 text-sm text-text-primary last:border-b-0",children:[e.jsx("span",{className:"min-w-0 flex-1 truncate",children:N.name}),e.jsx(B,{variant:"outline",size:"sm",type:"button",disabled:x,onClick:()=>{u(t,[...t.models,N])},children:"Add"})]},N.id))]}):null]})]},t.id)})})]}):null,!S&&Z.length>0?e.jsxs("section",{"aria-labelledby":"available-providers-heading",className:"mt-2",children:[e.jsx("div",{id:"available-providers-heading",className:"mb-2 text-[0.8125rem] font-semibold uppercase text-text-secondary",children:"Available"}),e.jsx("div",{className:"overflow-hidden rounded-xl border border-border bg-card-bg",children:Z.map(t=>{const a=_[t.name];return e.jsx("article",{className:"border-b border-border p-3 last:border-b-0",children:e.jsxs("header",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[e.jsx("span",{className:"flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary","aria-hidden":!0,children:a?e.jsx(ie,{src:a,alt:t.name,className:"size-4.5"}):e.jsx(P,{name:"cpu",className:"size-4.5"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("h5",{className:"truncate text-base font-medium text-text-primary",children:t.name}),e.jsx("p",{className:"truncate text-sm text-text-secondary",children:t.models.map(m=>m.name).join(" · ")})]})]}),e.jsxs(B,{variant:"secondary",type:"button",disabled:x,onClick:()=>{v(null),U(null),T(t.type)},children:[e.jsx(P,{name:"wrench",className:"size-4"}),"Configure"]})]})},t.type)})})]}):null,!S&&q.length===0&&Z.length===0?e.jsx("div",{className:"flex flex-1 items-center justify-center rounded-xl border border-dashed border-border p-8 text-center text-sm text-text-secondary",children:h?`No providers match “${b.trim()}”.`:"No model providers yet."}):null]}),e.jsx(Ce,{open:ae,onOpenChange:t=>{t||H()},onSave:t=>{if(C)return r(C,t);if(z)return s(z,t)},title:C?"Edit Provider Details":"Configure Provider Details",initialBaseUrl:C?C.baseUrl??"":z?Te(z):"",requireApiKey:C==null,submitLabel:C?"Save":"Create",busy:x,error:G}),e.jsx(Ue,{open:i,onOpenChange:t=>{K(t),t||(y(null),D(null))},isEditMode:f!==null,initialValues:le,onSubmit:f?R:j,reasoningEffortOptions:oe,busy:x,error:$},(f==null?void 0:f.id)??"add-custom-provider")]})})]})},ze=Le;export{ze as default};
@@ -1 +0,0 @@
1
- import{n as G,o as H,r,p as q,j as e,S as Y,I as N,z as J,B as R,t as Q,A as W,v as X,e as Z,w as ee,x as te}from"./index-DJ1uWGdt.js";var se={execTimeoutMs:3e5,autoStopIntervalInMinutes:15,autoArchiveIntervalInMinutes:10080,autoDeleteIntervalInMinutes:43200},F=te("h-11 shadow-sm");function U(s){if(s.trim()==="")return null;const l=Number(s);return!Number.isFinite(l)||l<0?null:l}var ae=({open:s,onOpenChange:l,onSave:d,title:g,description:I,initialConfig:_=null,requireApiKey:y=!0,busy:w=!1,error:C})=>{const[m,k]=r.useState(""),[u,x]=r.useState(""),[M,i]=r.useState(""),[h,o]=r.useState(""),[b,f]=r.useState(""),[A,v]=r.useState(!1),S=()=>{k(""),x(""),i(""),o(""),f(""),v(!1)};r.useEffect(()=>{if(!s)return;const a=_??se;k(String(a.execTimeoutMs)),x(String(a.autoStopIntervalInMinutes)),i(String(a.autoArchiveIntervalInMinutes)),o(String(a.autoDeleteIntervalInMinutes)),f(""),v(!1)},[s,_]);const B=a=>{a||S(),l(a)},p=U(m),P=U(u),T=U(M),z=U(h),D=b.trim(),K=(!y||!!D)&&p!=null&&P!=null&&T!=null&&z!=null,E=async a=>{if(a.preventDefault(),!(!K||w||p==null||P==null||T==null||z==null))try{await d({execTimeoutMs:p,autoStopIntervalInMinutes:P,autoArchiveIntervalInMinutes:T,autoDeleteIntervalInMinutes:z,apiKey:D}),S(),l(!1)}catch{}};return e.jsx(Q,{open:s,onOpenChange:B,title:g,description:I,contentSized:!0,headerIcon:e.jsx("span",{className:"flex size-11 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary","aria-hidden":!0,children:e.jsx(N,{name:"cube",className:"size-6"})}),children:e.jsxs("form",{className:"flex flex-col overflow-y-auto p-5 md:p-6",onSubmit:E,children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"sandbox-api-key",className:"mb-1.5 block text-sm font-medium text-text-primary",children:["API key",y?null:e.jsx("span",{className:"font-normal text-text-secondary",children:" (optional)"})]}),e.jsx("input",{id:"sandbox-api-key",type:"password",required:y,value:b,onChange:a=>{f(a.target.value)},placeholder:y?"dtn_...":"Leave blank to keep existing",autoFocus:!0,className:F})]}),e.jsxs(W,{expanded:A,onChange:(a,t)=>v(t),className:"rounded-md border border-border",children:[e.jsx(X,{className:"px-3 py-2.5",children:e.jsxs("span",{className:"flex w-full items-center justify-between text-sm font-medium text-text-primary",children:["Advanced settings",e.jsx(N,{name:"chevron-down",className:Z("size-4 shrink-0 text-text-secondary transition-transform duration-200",A?"rotate-0":"-rotate-90")})]})}),e.jsxs(ee,{className:"space-y-4 border-t border-border px-3 pb-3 pt-4",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"sandbox-exec-timeout",className:"mb-1.5 block text-sm font-medium text-text-primary",children:"Exec timeout (ms)"}),e.jsx("input",{id:"sandbox-exec-timeout",type:"number",min:0,required:!0,value:m,onChange:a=>{k(a.target.value)},placeholder:"300000",className:F})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"sandbox-auto-stop",className:"mb-1.5 block text-sm font-medium text-text-primary",children:"Auto-stop interval (minutes)"}),e.jsx("input",{id:"sandbox-auto-stop",type:"number",min:0,required:!0,value:u,onChange:a=>{x(a.target.value)},placeholder:"15",className:F})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"sandbox-auto-archive",className:"mb-1.5 block text-sm font-medium text-text-primary",children:"Auto-archive interval (minutes)"}),e.jsx("input",{id:"sandbox-auto-archive",type:"number",min:0,required:!0,value:M,onChange:a=>{i(a.target.value)},placeholder:"10080",className:F})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"sandbox-auto-delete",className:"mb-1.5 block text-sm font-medium text-text-primary",children:"Auto-delete interval (minutes)"}),e.jsx("input",{id:"sandbox-auto-delete",type:"number",min:0,required:!0,value:h,onChange:a=>{o(a.target.value)},placeholder:"43200",className:F})]})]})]})]}),e.jsxs("div",{className:"mt-6 space-y-3",children:[C?e.jsx("p",{className:"text-failure-bg text-sm",children:C}):null,e.jsx(R,{type:"submit",size:"lg",disabled:!K||w,className:"w-full shrink-0",children:"Save"})]})]})})},ne=ae,re=1e4,O=({execTimeoutMs:s,autoStopIntervalInMinutes:l,autoArchiveIntervalInMinutes:d,autoDeleteIntervalInMinutes:g})=>({execTimeoutMs:s,autoStopIntervalInMinutes:l,autoArchiveIntervalInMinutes:d,autoDeleteIntervalInMinutes:g}),le=s=>{switch(s){case"pending":return{label:"Syncing image...",className:"text-warning-bg"};case"ready":return{label:"Connected",className:"text-success-bg"};case"failed":return{label:"Sync failed",className:"text-failure-bg"};default:return{label:s,className:"text-text-secondary"}}},ie=()=>{const{sandboxCatalog:s}=G(),l=H(),[d,g]=r.useState([]),[I,_]=r.useState([]),[y,w]=r.useState(!0),[C,m]=r.useState(null),[k,u]=r.useState(null),[x,M]=r.useState(!1),[i,h]=r.useState(null),[o,b]=r.useState(null),f=r.useCallback(async({quiet:t=!1}={})=>{if(s){t||w(!0),m(null);try{const[n,c]=await Promise.all([s.listSandboxProviders(),s.getSandboxProviderCatalog()]);g(n),_(c)}catch(n){m(q(n,"Failed to load sandbox providers"))}finally{t||w(!1)}}},[s]);r.useEffect(()=>{f()},[f]);const A=d.some(t=>t.snapshotSyncStatus.status==="pending");r.useEffect(()=>{if(!s||!A)return;const t=s;let n=!1,c;function j(){c=window.setTimeout(()=>{$()},re)}async function $(){try{const L=await t.listSandboxProviders();if(n)return;g(L),m(null),L.some(V=>V.snapshotSyncStatus.status==="pending")&&j()}catch(L){if(n)return;m(q(L,"Failed to refresh sandbox providers")),j()}}return j(),()=>{n=!0,c!==void 0&&window.clearTimeout(c)}},[s,A]);const v=d.length>0,S=r.useMemo(()=>{if(v)return[];const t=new Set(d.map(n=>n.data.catalogId));return I.filter(n=>!t.has(n.id))},[I,d,v]),B=r.useMemo(()=>o?O(o):i?O(i):null,[o,i]);if(!s)return e.jsx("p",{className:"text-sm text-text-secondary",children:"Sandbox provider catalog is not available."});const p=async(t,n=m)=>{M(!0),m(null);try{await t(),await f({quiet:!0})}catch(c){throw n(q(c,"Request failed")),c}finally{M(!1)}},P=async t=>{i&&(u(null),await p(async()=>{await s.createSandboxProvider({catalogId:i.id,name:i.name,type:i.type,...O(t),apiKey:t.apiKey})},u),h(null),setTimeout(()=>{l==null||l.showSuccess({title:`${i.name} configured`})},0))},T=async t=>{o&&(u(null),await p(async()=>{await s.updateSandboxProvider({id:o.id,...O(t),...t.apiKey?{apiKey:t.apiKey}:{}})},u),b(null),setTimeout(()=>{l==null||l.showSuccess({title:`${o.name} updated`})},0))},z=t=>{p(async()=>{await s.updateSandboxProvider({id:t.id,...O(t)})}).catch(()=>{})},D=t=>{const n=s.deleteSandboxProvider;n&&p(async()=>{await n({id:t.id})}).catch(()=>{})},K=i!=null||o!=null,E=o!=null,a=o?`Update ${o.name}`:i?`Configure ${i.name}`:"Configure sandbox provider";return e.jsxs(e.Fragment,{children:[e.jsx("h3",{className:"text-xl font-semibold tracking-tight text-text-primary",children:"Sandbox providers"}),e.jsx("p",{className:"mt-1 text-sm text-text-secondary",children:"Choose a provider that runs sandboxes for code, files and shell commands. Only one can be active at a time."}),C?e.jsx("p",{className:"mt-3 rounded-md border border-failure-bg/30 bg-failure-bg/10 px-3 py-2 text-sm text-failure-bg",children:C}):null,e.jsx("div",{className:"mt-4 flex-1 overflow-y-auto",children:y?e.jsx("p",{className:"text-sm text-text-secondary",children:"Loading sandbox providers…"}):e.jsxs("div",{className:"space-y-6",children:[d.length>0?e.jsxs("section",{children:[e.jsxs("h4",{className:"mb-2 text-xs font-semibold uppercase tracking-wide text-text-secondary",children:["Configured · ",d.length]}),e.jsx("div",{className:"overflow-hidden rounded-xl border border-border bg-card-bg",children:d.map(t=>{const n=t.data,c=le(t.snapshotSyncStatus.status),j=t.snapshotSyncStatus.statusReason,$=e.jsxs("span",{className:`inline-flex items-center gap-1.5 text-sm font-medium ${c.className}`,children:[t.snapshotSyncStatus.status==="pending"?e.jsx(Y,{size:16,"aria-label":"Syncing snapshot image"}):t.snapshotSyncStatus.status==="ready"?e.jsx("span",{className:"size-2 rounded-full bg-success-bg","aria-hidden":!0}):t.snapshotSyncStatus.status==="failed"?e.jsx(N,{name:"triangle-exclamation",className:"size-4"}):null,c.label]});return e.jsxs("article",{className:"flex flex-col gap-3 border-b border-border p-3 last:border-b-0 sm:flex-row sm:items-center",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[e.jsx("span",{className:"flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary","aria-hidden":!0,children:e.jsx(N,{name:"cube",className:"size-4.5"})}),e.jsx("div",{className:"min-w-0",children:e.jsx("h5",{className:"truncate text-sm font-medium text-text-primary",children:n.name})})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2.5 sm:justify-end",children:[$,j?e.jsx(J,{content:j,children:e.jsx("button",{type:"button","aria-label":"Snapshot sync status details",className:"inline-flex text-text-secondary transition-colors hover:text-text-primary",children:e.jsx(N,{name:"info",className:"size-4"})})}):null,t.snapshotSyncStatus.status==="failed"?e.jsx(R,{variant:"ghost",size:"sm",type:"button",disabled:x,onClick:()=>{z(n)},children:"Retry"}):null,e.jsx(R,{variant:"secondary",size:"sm",type:"button",disabled:x,onClick:()=>{u(null),h(null),b(n)},children:"Update"}),s.deleteSandboxProvider?e.jsx(R,{variant:"ghost",size:"sm",className:"text-text-secondary",type:"button",disabled:x,onClick:()=>{D(n)},children:"Remove"}):null]})]},n.id)})})]}):null,v?null:e.jsxs("section",{children:[e.jsxs("h4",{className:"mb-2 text-xs font-semibold uppercase tracking-wide text-text-secondary",children:["Available · ",S.length]}),S.length===0?e.jsx("p",{className:"text-sm text-text-secondary",children:I.length>0?"All catalog providers are configured.":"No sandbox providers in the catalog."}):e.jsx("div",{className:"overflow-hidden rounded-xl border border-border bg-card-bg",children:S.map(t=>e.jsxs("article",{className:"flex flex-col gap-3 border-b border-border p-3 last:border-b-0 sm:flex-row sm:items-center",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[e.jsx("span",{className:"flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary","aria-hidden":!0,children:e.jsx(N,{name:"cube",className:"size-4.5"})}),e.jsx("div",{className:"min-w-0",children:e.jsx("h5",{className:"truncate text-sm font-medium text-text-primary",children:t.name})})]}),e.jsx(R,{variant:"secondary",type:"button",disabled:x,onClick:()=>{u(null),b(null),h(t)},children:"Configure"})]},t.id))})]})]})}),e.jsx(ne,{open:K,onOpenChange:t=>{t||(u(null),h(null),b(null))},onSave:E?T:P,title:a,description:E?"Update this sandbox provider. Leave API key blank to keep the existing key.":"Configure this sandbox provider. API key is never stored in the catalog.",initialConfig:B,requireApiKey:!E,busy:x,error:k})]})},de=ie;export{de as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ModelSettings-CKQ5CVAC-UBz_ch6T.js","assets/index-DJ1uWGdt.js","assets/index-DEKCw40W.css","assets/ConnectorSettings-ODC3LVHN-CAU9MgGN.js","assets/SkillSettings-ECH6SHZ7-CKWEzdO_.js","assets/SandboxSettings-HSCPYUOC-Csl-nC9h.js"])))=>i.map(i=>d[i]);
2
- import{g,i as v,k as y,l as j,m as S,r as t,j as e,I as p,f as _,e as f,_ as u,S as k}from"./index-DJ1uWGdt.js";var w=t.lazy(()=>u(()=>import("./ModelSettings-CKQ5CVAC-UBz_ch6T.js"),__vite__mapDeps([0,1,2]))),E=t.lazy(()=>u(()=>import("./ConnectorSettings-ODC3LVHN-CAU9MgGN.js"),__vite__mapDeps([3,1,2]))),N=t.lazy(()=>u(()=>import("./SkillSettings-ECH6SHZ7-CKWEzdO_.js"),__vite__mapDeps([4,1,2]))),C=t.lazy(()=>u(()=>import("./SandboxSettings-HSCPYUOC-Csl-nC9h.js"),__vite__mapDeps([5,1,2])));function L(){return e.jsxs("div",{className:"flex flex-1 items-center justify-center py-8",role:"status","aria-live":"polite","aria-busy":"true",children:[e.jsx(k,{size:20,className:"text-text-secondary"}),e.jsx("span",{className:"sr-only",children:"Loading"})]})}var O=()=>{const{settingsOpen:n,settingsSection:l,setSettingsOpen:a}=g(),r=v(),d=y(),{refresh:m}=j(),i=S(),o=(r==null?void 0:r.skillCatalog)!=null,c=(r==null?void 0:r.sandboxCatalog)!=null,x=t.useCallback(()=>{a(!1)},[a]);t.useEffect(()=>{if(n)return()=>{m(),d==null||d()}},[n,m,d]),t.useEffect(()=>{!o&&l==="skills"&&a(n,"models"),!c&&l==="sandbox"&&a(n,"models")},[o,c,l,n,a]),t.useEffect(()=>{if(!n)return;const s=b=>{b.key==="Escape"&&(b.stopImmediatePropagation(),x())};return window.addEventListener("keydown",s,!0),()=>window.removeEventListener("keydown",s,!0)},[x,n]);const h=t.useMemo(()=>{const s=[{id:"models",label:"Models",icon:"cpu"},{id:"connectors",label:"Connectors",icon:"plug"}];return o&&s.push({id:"skills",label:"Skills",icon:"lightbulb"}),c&&s.push({id:"sandbox",label:"Sandbox providers",icon:"cube"}),s},[o,c]);return!n||!r?null:e.jsxs("div",{className:"flex h-full min-h-0 w-full flex-col bg-primary-bg",children:[e.jsxs("header",{className:"flex shrink-0 items-center gap-2 border-b border-border px-2 py-1.5",children:[e.jsx("button",{type:"button","aria-label":"Back",title:"Back",className:_({variant:"ghost",size:"icon"}),onClick:x,children:e.jsx(p,{name:"arrow-left"})}),e.jsx("h1",{className:"text-lg font-semibold tracking-tight text-text-primary",children:"Settings"})]}),e.jsxs("div",{className:f("flex min-h-0 flex-1 flex-col",!i&&"md:flex-row"),children:[e.jsx("nav",{"aria-label":"Settings sections",className:f("flex w-full gap-1 border-b border-border bg-secondary-bg/40 p-2",i?"min-w-0":"justify-center md:w-48 md:flex-col md:justify-start md:border-b-0 md:border-r"),children:h.map(s=>e.jsxs("button",{type:"button","aria-current":l===s.id?"page":void 0,...i?{title:s.label}:{},className:f("flex min-h-9 items-center gap-2 rounded-md px-3 text-sm font-medium transition-colors","focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-focus-ring",i?"min-w-0 flex-1 justify-center gap-1.5 px-1.5":"shrink-0",l===s.id?"bg-primary-button-bg text-primary-button-text":"text-text-secondary hover:bg-ghost-button-hover/60 hover:text-text-primary"),onClick:()=>{a(!0,s.id)},children:[e.jsx(p,{name:s.icon,className:"h-4 w-4 shrink-0"}),i?e.jsx("span",{className:"truncate",children:s.label}):s.label]},s.id))}),e.jsx("section",{className:"flex flex-col h-full flex-1 overflow-y-hidden px-6 py-4",children:e.jsx("div",{className:"w-full max-w-210 h-full min-h-0 flex flex-col mx-auto",children:e.jsxs(t.Suspense,{fallback:e.jsx(L,{}),children:[l==="models"?e.jsx(w,{}):null,l==="connectors"?e.jsx(E,{}):null,l==="skills"&&o?e.jsx(N,{}):null,l==="sandbox"&&c?e.jsx(C,{}):null]})})})]})]})},I=O;export{I as default};
@@ -1 +0,0 @@
1
- import{u as A,a as E,m as O,p as L,b as v}from"./chunk-62JRHF6Z-BftTGWZl.js";import{g as H,h as I,r as a}from"./index-DJ1uWGdt.js";function C(n){const u=n.activeRemoteId??n.pendingSessionId;if(u!=null)return{type:"session",sessionId:u};const{mode:c,agentConfigMode:t}=n;if(c.status==="active"&&!c.isMutable&&t!=="SingleAgent"){const o=c.agentName??c.agentId;if(o!=null)return{type:"agent",agentName:o}}return{type:"root"}}function k(n){return n.settingsOpen?{type:"settings"}:C(n)}function x({routes:n,activeRemoteId:u,initialSettingsOpen:c}){const t=H(),o=I(),h=A(),s=E(),S={settingsOpen:t.settingsOpen,pendingSessionId:t.pendingSessionId,activeRemoteId:u,mode:t.mode,agentConfigMode:t.agentConfigMode},l=k(S),N=JSON.stringify(l),i=a.useRef(null),d=a.useRef(null),f=a.useRef(!1),m=a.useRef(null),b=a.useRef(!1),P=a.useRef(!1),R=a.useCallback(e=>{if(m.current=e,o==null){t.openHistorySession({sessionId:e});return}o.getSession({sessionId:e}).then(r=>{m.current===e&&t.openHistorySession({sessionId:e,isMutable:r.isMutable,...r.agentName!=null?{agentName:r.agentName}:{}})}).catch(()=>{m.current===e&&t.openHistorySession({sessionId:e})})},[o,t]),y=a.useCallback(e=>{switch(e.type){case"settings":t.setSettingsOpen(!0);return;case"session":if(t.pendingSessionId===e.sessionId||u===e.sessionId)return;R(e.sessionId);return;case"agent":t.selectLibraryAgent({isMutable:!1,agentName:e.agentName});return;case"root":switch(t.setSettingsOpen(!1),t.agentConfigMode){case"AgentLibrary":t.openLibraryHome();return;case"AgentComposer":case"AgentLibraryWithComposer":t.openDraft();return;case"SingleAgent":t.clearChat();return}}},[t,u,R]);return a.useEffect(()=>{if(f.current)return;f.current=!0;const e=O(s.pathname,n)??{type:"root"},r=c||e.type==="settings";if(e.type==="settings")t.setSettingsOpen(!0);else{const M=C(S);L(M,e)||y(e),c&&t.setSettingsOpen(!0)}const p=r?{type:"settings"}:e,g=v(p,n);d.current=p,g!=null&&g!==s.pathname&&(i.current=g,h({pathname:g,search:s.search,hash:s.hash},{replace:!0}))},[]),a.useEffect(()=>{if(!f.current)return;if(!b.current){b.current=!0;return}const e=v(l,n);if(e==null)return;const r=d.current;if(d.current=l,e===s.pathname)return;const p=l.type==="session"&&t.pendingSessionId==null&&r!=null&&r.type!=="session";i.current=e,h({pathname:e,search:s.search,hash:s.hash},{replace:p})},[N]),a.useEffect(()=>{if(!f.current)return;if(!P.current){P.current=!0;return}if(i.current===s.pathname){i.current=null;return}const e=O(s.pathname,n);if(e==null){const r=n.root;i.current=r,h({pathname:r,search:s.search,hash:s.hash},{replace:!0}),y({type:"root"});return}e.type!=="settings"&&t.settingsOpen&&t.setSettingsOpen(!1),y(e)},[s.pathname]),null}export{x as ShellRouteSync};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SettingsBuilder-MYWRFXRI-Ce3OWfa1.js","assets/index-DJ1uWGdt.js","assets/index-DEKCw40W.css"])))=>i.map(i=>d[i]);
2
- import{u as T,a as _,b as I,c,r as n,d as D,j as e,e as r,I as u,f,S as H,_ as P}from"./index-DJ1uWGdt.js";import{T as v,S as y,N as F,a as M}from"./chunk-OZTNBS6V-CLmmFX7d.js";var V=n.lazy(()=>P(()=>import("./SettingsBuilder-MYWRFXRI-Ce3OWfa1.js"),__vite__mapDeps([0,1,2]))),w=!1;function G({className:C}){const S=T(),s=_(),p=I(),b=c("BrandLogo"),k=c("AgentsLibraryButton"),E=c("ClearChatButton"),B=c("SaveAgentButton"),L=c("SelectAgentEmptyState"),[a,A]=n.useState(w),z=t=>{A(l=>{const o=typeof t=="function"?t(l):t;return w=o,o})},[i,d]=n.useState(!1),h=n.useRef(null),j=n.useRef(null),g=n.useRef(null),x=n.useRef(!1),N=(s==null?void 0:s.mode.status)==="idle",m=(s==null?void 0:s.settingsOpen)===!0,O=D();n.useEffect(()=>{if(!i)return;const t=l=>{l.key==="Escape"&&d(!1)};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[i]),n.useEffect(()=>{var l,o;const t=g.current;if(i){x.current=!0,t&&(t.inert=!0),(l=j.current)==null||l.focus();return}x.current&&(t&&(t.inert=!1),(o=h.current)==null||o.focus(),x.current=!1)},[i]);const R=()=>{if(s!=null&&s.isComposerEnabled){s.openDraft();return}s==null||s.setSettingsOpen(!1),Promise.resolve(S.threads().switchToNewThread()).catch(()=>{})};return e.jsxs("div",{className:r("relative flex h-full min-h-0 w-full min-w-0",C),children:[e.jsxs("aside",{className:r("hidden min-h-0 shrink-0 flex-col border-r border-border bg-sidebar-bg transition-[width] duration-300 ease-in-out md:flex",a?"w-16":"w-64"),children:[e.jsxs("div",{className:r("flex shrink-0 items-center px-3 py-3",a?"flex-col gap-3":"justify-between gap-2"),children:[e.jsxs("div",{className:r("flex min-w-0 items-center text-text-primary",a?"justify-center":"gap-2"),children:[e.jsx(b,{className:"size-5 shrink-0 object-contain"}),a?null:e.jsx("span",{className:"truncate text-lg font-semibold tracking-tight",children:p})]}),e.jsx("button",{type:"button","aria-label":a?"Expand sidebar":"Collapse sidebar",title:a?"Expand sidebar":"Collapse sidebar","aria-expanded":!a,className:f({variant:"ghost",size:"icon"}),onClick:()=>z(t=>!t),children:e.jsx(u,{name:a?"panel-left-open":"panel-left-close"})})]}),e.jsxs("nav",{className:"flex min-h-0 flex-1 flex-col items-center gap-2 px-3",hidden:!a,"aria-label":"Sidebar",children:[(s==null?void 0:s.isNewChatEnabled)!==!1?e.jsx("button",{type:"button","aria-label":"Start new chat",title:"New chat",className:f({variant:"ghost",size:"icon"}),onClick:R,children:e.jsx(u,{name:"square-pen"})}):null,e.jsx(k,{compact:!0})]}),e.jsx("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden",hidden:a,children:e.jsx(v,{})}),e.jsx("footer",{className:r("flex shrink-0 border-t border-border px-3 py-2",a?"flex-col items-center gap-2":"items-center gap-1"),children:e.jsx(y,{className:a?"flex-col":void 0})})]}),e.jsxs("div",{className:"flex min-h-0 min-w-0 flex-1 flex-col bg-primary-bg",children:[e.jsxs("header",{className:r("flex shrink-0 items-center gap-1 border-b border-border bg-topbar-bg px-2 py-1.5",(m||N||!O)&&"md:hidden"),children:[m?e.jsx("span",{className:"min-w-0 flex-1"}):e.jsxs(e.Fragment,{children:[e.jsx("button",{ref:h,type:"button","aria-label":"Sessions","aria-expanded":i,className:r(f({variant:"ghost",size:"icon"}),"md:hidden"),onClick:()=>d(!0),children:e.jsx(u,{name:"bars"})}),e.jsx(F,{}),e.jsx("span",{className:"min-w-0 flex-1"}),e.jsx(E,{}),e.jsx(B,{})]}),e.jsx("div",{className:"md:hidden",children:e.jsx(y,{})},"mobile-shell-actions")]}),e.jsx("div",{ref:g,className:"min-h-0 min-w-0 flex-1",children:m?e.jsx(n.Suspense,{fallback:e.jsxs("div",{className:"flex h-full items-center justify-center",role:"status","aria-live":"polite","aria-busy":"true",children:[e.jsx(H,{size:28,className:"text-text-primary"}),e.jsx("span",{className:"sr-only",children:"Loading"})]}),children:e.jsx(V,{})}):N?e.jsx(L,{}):e.jsx(M,{})})]}),i?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button","aria-label":"Close sessions",className:"absolute inset-0 z-[9] cursor-pointer bg-[var(--overlay)] md:hidden",onClick:()=>d(!1)}),e.jsxs("div",{ref:j,className:"absolute inset-y-0 left-0 z-10 flex w-full max-w-80 flex-col border-r border-border bg-sidebar-bg shadow-lg outline-none md:hidden",role:"dialog","aria-label":"Sessions",tabIndex:-1,children:[e.jsxs("div",{className:"flex shrink-0 items-center gap-2 border-b border-border px-3 py-3 text-text-primary",children:[e.jsx(b,{className:"size-5 shrink-0 object-contain"}),e.jsx("span",{className:"truncate text-lg font-semibold tracking-tight",children:p})]}),e.jsx(v,{onThreadOpen:()=>d(!1)})]})]}):null]})}export{G as SidebarLayout};
@@ -1 +0,0 @@
1
- import{n as D,o as H,r as a,p as E,j as e,q as $,B as R,I as F,t as Q,x as v}from"./index-DJ1uWGdt.js";var _=({open:l,onOpenChange:o,onImport:c,busy:k=!1,error:d})=>{const[h,b]=a.useState(""),[p,m]=a.useState(""),[u,f]=a.useState(""),[i,y]=a.useState(""),[n,x]=a.useState(""),N=()=>{b(""),m(""),f(""),y(""),x("")},S=()=>{N(),o(!1)},w=async s=>{if(s.preventDefault(),!(!h.trim()||!p.trim()||!u.trim()||!i.trim()||!n.trim()||k))try{await c({name:h.trim(),description:p.trim(),repoURL:u.trim(),path:i.trim(),ref:n.trim()}),S()}catch{}},g=!!(h.trim()&&p.trim()&&u.trim()&&i.trim()&&n.trim())&&!k;return e.jsx(Q,{open:l,onOpenChange:s=>{s||S()},title:"Import from GitHub",description:"Import a skill from a SKILL.md file in a GitHub repository.",headerIcon:e.jsx("span",{className:"flex size-11 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary",children:e.jsx(F,{name:"github",className:"size-5"})}),contentSized:!0,className:"md:max-w-2xl",children:e.jsx("form",{onSubmit:s=>void w(s),children:e.jsxs("div",{className:"space-y-5 px-5 py-5 md:px-6",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"skill-name",className:"mb-2 block text-sm font-semibold text-text-primary",children:"Name"}),e.jsx("input",{id:"skill-name",value:h,onChange:s=>{b(s.target.value)},placeholder:"release-notes",autoFocus:!0,required:!0,className:v("h-11")})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"skill-description",className:"mb-2 block text-sm font-semibold text-text-primary",children:"Description"}),e.jsx("textarea",{id:"skill-description",value:p,onChange:s=>{m(s.target.value)},placeholder:"Generate release notes from merged pull requests",required:!0,rows:3,className:v("resize-y py-2.5")})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"skill-repo-url",className:"mb-2 block text-sm font-semibold text-text-primary",children:"Repository URL"}),e.jsx("input",{id:"skill-repo-url",type:"url",value:u,onChange:s=>{f(s.target.value)},placeholder:"https://github.com/org/repo",required:!0,className:v("h-11")})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"skill-path",className:"mb-2 block text-sm font-semibold text-text-primary",children:"Folder containing the SKILL.md"}),e.jsx("input",{id:"skill-path",value:i,onChange:s=>{y(s.target.value)},placeholder:"skills/release-notes",required:!0,className:v("h-11")})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"skill-ref",className:"mb-2 block text-sm font-semibold text-text-primary",children:"Branch"}),e.jsx("input",{id:"skill-ref",value:n,onChange:s=>{x(s.target.value)},placeholder:"main",required:!0,className:v("h-11")})]}),e.jsxs("div",{className:"space-y-3",children:[d?e.jsx("p",{className:"text-failure-bg text-sm",children:d}):null,e.jsx(R,{type:"submit",disabled:!g,className:"w-full",children:"Import"})]})]})})})},K=_,q=(l,o,c)=>!l||o.toLowerCase().includes(l)||c.toLowerCase().includes(l),P=l=>"catalogId"in l,T=()=>{const{skillCatalog:l}=D(),o=H(),[c,k]=a.useState(""),[d,h]=a.useState([]),[b,p]=a.useState([]),[m,u]=a.useState(!0),[f,i]=a.useState(null),[y,n]=a.useState(null),[x,N]=a.useState(!1),[S,w]=a.useState(!1),g=a.useCallback(async()=>{if(l){u(!0),i(null);try{const[t,r]=await Promise.all([l.listSkills(),l.getSkillCatalog()]);h(t),p(r)}catch(t){i(E(t,"Failed to load skills"))}finally{u(!1)}}},[l]);a.useEffect(()=>{g()},[g]);const s=c.trim().toLowerCase(),C=a.useMemo(()=>d.filter(t=>q(s,t.name,t.description)),[d,s]),I=a.useMemo(()=>{const t=new Set(d.flatMap(r=>P(r)?[r.catalogId]:[]));return b.filter(r=>!t.has(r.id)&&q(s,r.name,r.description))},[b,d,s]),L=async(t,r=i)=>{N(!0),i(null);try{await t(),await g()}catch(j){throw r(E(j,"Request failed")),j}finally{N(!1)}};if(!l)return e.jsx("p",{className:"text-sm text-text-secondary",children:"Skills catalog is not available."});const B=t=>{L(async()=>{await l.createSkill({catalogId:t.id,name:t.name,description:t.description,repoURL:t.repoURL,path:t.path,ref:t.ref})}).catch(()=>{})},G=t=>{const r=l.deleteSkill;r&&L(async()=>{await r({id:t.id})}).catch(()=>{})},M=async t=>{n(null),await L(async()=>{await l.createSkill(t)},n),setTimeout(()=>{o==null||o.showSuccess({title:`${t.name} imported`})},0)},z=({key:t,name:r,description:j,action:O})=>e.jsxs("article",{className:"flex min-h-16 items-center gap-3 border-b border-border p-3 last:border-b-0",children:[e.jsx("span",{className:"flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg","aria-hidden":!0,children:e.jsx(F,{name:"lightbulb",className:"size-4.5 text-text-primary"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h5",{className:"truncate text-sm font-medium text-text-primary",children:r}),j?e.jsx("p",{className:"mt-0.5 truncate text-sm text-text-secondary",children:j}):null]}),O]},t),U=C.length>0||I.length>0;return e.jsxs(e.Fragment,{children:[e.jsx("h3",{className:"text-xl font-semibold tracking-tight text-text-primary",children:"Skills"}),e.jsx("p",{className:"mt-1 text-sm text-text-secondary",children:"Use built-in skills or import custom skills from GitHub."}),f?e.jsx("p",{className:"mt-3 rounded-md border border-failure-bg/30 bg-failure-bg/10 px-3 py-2 text-sm text-failure-bg",children:f}):null,e.jsxs("div",{className:"mt-4 flex min-h-0 flex-1 flex-col gap-3",children:[e.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row",children:[e.jsx("div",{className:"min-w-0 flex-1",children:e.jsx($,{query:c,setQuery:k,placeholder:"Search skills"})}),e.jsxs(R,{variant:"secondary",type:"button",className:"shrink-0",disabled:x,onClick:()=>{n(null),w(!0)},children:[e.jsx(F,{name:"github",className:"size-4"}),"Import from GitHub"]})]}),e.jsxs("div",{className:"flex flex-1 flex-col gap-5 overflow-y-auto pb-1",children:[m?e.jsx("p",{className:"py-8 text-center text-sm text-text-secondary",children:"Loading…"}):null,!m&&C.length>0?e.jsxs("section",{"aria-labelledby":"enabled-skills-heading",children:[e.jsxs("h4",{id:"enabled-skills-heading",className:"mb-2 text-[0.8125rem] font-semibold uppercase text-text-secondary",children:["Enabled · ",C.length]}),e.jsx("div",{className:"overflow-hidden rounded-xl border border-border bg-card-bg",children:C.map(t=>z({key:t.id,name:t.name,description:t.description,action:l.deleteSkill?e.jsx(R,{variant:"outline",size:"sm",type:"button",disabled:x,"aria-label":`Remove ${t.name}`,onClick:()=>{G(t)},children:"Remove"}):null}))})]}):null,!m&&I.length>0?e.jsxs("section",{"aria-labelledby":"available-skills-heading",children:[e.jsxs("h4",{id:"available-skills-heading",className:"mb-2 text-[0.8125rem] font-semibold uppercase text-text-secondary",children:["Available · ",I.length]}),e.jsx("div",{className:"overflow-hidden rounded-xl border border-border bg-card-bg",children:I.map(t=>z({key:t.id,name:t.name,description:t.description,action:e.jsx(R,{variant:"outline",size:"sm",type:"button",disabled:x,"aria-label":`Enable ${t.name}`,onClick:()=>{B(t)},children:"Enable"})}))})]}):null,!m&&!U?e.jsx("div",{className:"flex flex-1 items-center justify-center rounded-xl border border-dashed border-border p-8 text-center text-sm text-text-secondary",children:s?`No skills match “${c.trim()}”.`:"No skills yet."}):null]})]}),e.jsx(K,{open:S,onOpenChange:t=>{w(t),t||n(null)},onImport:M,busy:x,error:y})]})},J=T;export{J as default};
@@ -1 +0,0 @@
1
- import{r as t,B as a}from"./chunk-62JRHF6Z-BftTGWZl.js";import{r as n,j as o,T as u}from"./index-DJ1uWGdt.js";function l({routes:e,...s}){const r=n.useMemo(()=>t(e),[e]);return o.jsx(a,{basename:r.basename||void 0,children:o.jsx(u,{...s,resolvedRoutes:r})})}export{l as TrueForgeUIWithRouter};
@@ -1 +0,0 @@
1
- import{S as d}from"./chunk-TCAVLWYL-DVhtkE3q.js";import{c as x,r,j as e,C as f,I as p,f as b,e as h}from"./index-DJ1uWGdt.js";import"./chunk-OZTNBS6V-CLmmFX7d.js";function w({className:u}){const m=x("BrandLogo"),[a,o]=r.useState(!1),i=r.useRef(null),s=r.useRef(null),l=r.useRef(!1);return r.useEffect(()=>{if(!a)return;const t=n=>{var c;n.key==="Escape"&&!((c=s.current)!=null&&c.querySelector("dialog[open]"))&&o(!1)};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[a]),r.useEffect(()=>{var t,n;if(a){l.current=!0,(t=s.current)==null||t.focus();return}l.current&&((n=i.current)==null||n.focus(),l.current=!1)},[a]),e.jsxs("div",{className:h("pointer-events-none relative h-full min-h-0 w-full",u),children:[a?e.jsx("div",{ref:s,"data-aui-compact-layout":!0,className:"pointer-events-auto absolute right-[max(1.25rem,env(safe-area-inset-right,0px))] bottom-[calc(5.25rem+env(safe-area-inset-bottom,0px))] z-[19] flex h-[min(560px,calc(100%-6.5rem-env(safe-area-inset-bottom,0px)))] max-h-[calc(100%-6.5rem)] w-[min(380px,calc(100%-2.5rem))] flex-col overflow-hidden rounded-xl border border-border bg-primary-bg shadow-[0_16px_48px_color-mix(in_oklab,var(--shadow-color)_14%,transparent)] outline-none",role:"dialog","aria-modal":!0,"aria-label":"Chat",tabIndex:-1,children:e.jsx(f,{children:e.jsx(d,{threadHeaderEnd:e.jsx("button",{type:"button","aria-label":"Close",title:"Close",className:b({variant:"ghost",size:"icon"}),onClick:()=>o(!1),children:e.jsx(p,{name:"xmark"})})})})}):null,e.jsx("button",{ref:i,type:"button",className:"pointer-events-auto absolute right-[max(1.25rem,env(safe-area-inset-right,0px))] bottom-[max(1.25rem,env(safe-area-inset-bottom,0px))] z-20 flex size-14 cursor-pointer items-center justify-center rounded-full text-sm font-medium shadow-[0_8px_24px_color-mix(in_oklab,var(--primary-button-bg)_45%,transparent)]",style:{backgroundColor:"var(--primary-button-bg)",color:"var(--primary-button-text)"},"aria-expanded":a,"aria-label":a?"Close chat":"Open chat",onClick:()=>o(t=>!t),children:a?e.jsx("span",{"aria-hidden":!0,className:"text-xl leading-none",children:"×"}):e.jsx(m,{className:"size-6"})})]})}export{w as WidgetLayout};