@aitne/dashboard 0.1.0 → 0.1.2

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 (495) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/cache/.tsbuildinfo +1 -1
  4. package/.next/diagnostics/route-bundle-stats.json +210 -247
  5. package/.next/fallback-build-manifest.json +3 -3
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  14. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/_not-found.html +1 -1
  16. package/.next/server/app/_not-found.rsc +14 -14
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
  18. package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  19. package/.next/server/app/_not-found.segments/_index.segment.rsc +9 -9
  20. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  21. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  22. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  23. package/.next/server/app/activity/page.js.nft.json +1 -1
  24. package/.next/server/app/activity/page_client-reference-manifest.js +1 -1
  25. package/.next/server/app/activity.html +1 -1
  26. package/.next/server/app/activity.rsc +27 -26
  27. package/.next/server/app/activity.segments/_full.segment.rsc +27 -26
  28. package/.next/server/app/activity.segments/_head.segment.rsc +4 -4
  29. package/.next/server/app/activity.segments/_index.segment.rsc +9 -9
  30. package/.next/server/app/activity.segments/_tree.segment.rsc +1 -1
  31. package/.next/server/app/activity.segments/activity/__PAGE__.segment.rsc +4 -4
  32. package/.next/server/app/activity.segments/activity.segment.rsc +4 -4
  33. package/.next/server/app/analytics/page.js.nft.json +1 -1
  34. package/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
  35. package/.next/server/app/analytics.html +1 -1
  36. package/.next/server/app/analytics.rsc +22 -23
  37. package/.next/server/app/analytics.segments/_full.segment.rsc +22 -23
  38. package/.next/server/app/analytics.segments/_head.segment.rsc +4 -4
  39. package/.next/server/app/analytics.segments/_index.segment.rsc +9 -9
  40. package/.next/server/app/analytics.segments/_tree.segment.rsc +1 -1
  41. package/.next/server/app/analytics.segments/analytics/__PAGE__.segment.rsc +4 -4
  42. package/.next/server/app/analytics.segments/analytics.segment.rsc +4 -4
  43. package/.next/server/app/api/[...path]/route.js +1 -1
  44. package/.next/server/app/api/[...path]/route.js.nft.json +1 -1
  45. package/.next/server/app/chat/page.js.nft.json +1 -1
  46. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/chat.html +1 -1
  48. package/.next/server/app/chat.rsc +16 -16
  49. package/.next/server/app/chat.segments/_full.segment.rsc +16 -16
  50. package/.next/server/app/chat.segments/_head.segment.rsc +4 -4
  51. package/.next/server/app/chat.segments/_index.segment.rsc +9 -9
  52. package/.next/server/app/chat.segments/_tree.segment.rsc +1 -1
  53. package/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +4 -4
  54. package/.next/server/app/chat.segments/chat.segment.rsc +3 -3
  55. package/.next/server/app/connections/calendar/page.js.nft.json +1 -1
  56. package/.next/server/app/connections/calendar/page_client-reference-manifest.js +1 -1
  57. package/.next/server/app/connections/calendar.html +1 -1
  58. package/.next/server/app/connections/calendar.rsc +17 -17
  59. package/.next/server/app/connections/calendar.segments/_full.segment.rsc +17 -17
  60. package/.next/server/app/connections/calendar.segments/_head.segment.rsc +4 -4
  61. package/.next/server/app/connections/calendar.segments/_index.segment.rsc +9 -9
  62. package/.next/server/app/connections/calendar.segments/_tree.segment.rsc +1 -1
  63. package/.next/server/app/connections/calendar.segments/connections/calendar/__PAGE__.segment.rsc +4 -4
  64. package/.next/server/app/connections/calendar.segments/connections/calendar.segment.rsc +3 -3
  65. package/.next/server/app/connections/calendar.segments/connections.segment.rsc +4 -4
  66. package/.next/server/app/connections/journal/page.js.nft.json +1 -1
  67. package/.next/server/app/connections/journal/page_client-reference-manifest.js +1 -1
  68. package/.next/server/app/connections/journal.html +1 -1
  69. package/.next/server/app/connections/journal.rsc +15 -15
  70. package/.next/server/app/connections/journal.segments/_full.segment.rsc +15 -15
  71. package/.next/server/app/connections/journal.segments/_head.segment.rsc +4 -4
  72. package/.next/server/app/connections/journal.segments/_index.segment.rsc +9 -9
  73. package/.next/server/app/connections/journal.segments/_tree.segment.rsc +1 -1
  74. package/.next/server/app/connections/journal.segments/connections/journal/__PAGE__.segment.rsc +2 -2
  75. package/.next/server/app/connections/journal.segments/connections/journal.segment.rsc +3 -3
  76. package/.next/server/app/connections/journal.segments/connections.segment.rsc +4 -4
  77. package/.next/server/app/connections/knowledge/page.js.nft.json +1 -1
  78. package/.next/server/app/connections/knowledge/page_client-reference-manifest.js +1 -1
  79. package/.next/server/app/connections/knowledge.html +1 -1
  80. package/.next/server/app/connections/knowledge.rsc +17 -17
  81. package/.next/server/app/connections/knowledge.segments/_full.segment.rsc +17 -17
  82. package/.next/server/app/connections/knowledge.segments/_head.segment.rsc +4 -4
  83. package/.next/server/app/connections/knowledge.segments/_index.segment.rsc +9 -9
  84. package/.next/server/app/connections/knowledge.segments/_tree.segment.rsc +1 -1
  85. package/.next/server/app/connections/knowledge.segments/connections/knowledge/__PAGE__.segment.rsc +4 -4
  86. package/.next/server/app/connections/knowledge.segments/connections/knowledge.segment.rsc +3 -3
  87. package/.next/server/app/connections/knowledge.segments/connections.segment.rsc +4 -4
  88. package/.next/server/app/connections/mail/page.js.nft.json +1 -1
  89. package/.next/server/app/connections/mail/page_client-reference-manifest.js +1 -1
  90. package/.next/server/app/connections/mail.html +1 -1
  91. package/.next/server/app/connections/mail.rsc +17 -17
  92. package/.next/server/app/connections/mail.segments/_full.segment.rsc +17 -17
  93. package/.next/server/app/connections/mail.segments/_head.segment.rsc +4 -4
  94. package/.next/server/app/connections/mail.segments/_index.segment.rsc +9 -9
  95. package/.next/server/app/connections/mail.segments/_tree.segment.rsc +1 -1
  96. package/.next/server/app/connections/mail.segments/connections/mail/__PAGE__.segment.rsc +4 -4
  97. package/.next/server/app/connections/mail.segments/connections/mail.segment.rsc +3 -3
  98. package/.next/server/app/connections/mail.segments/connections.segment.rsc +4 -4
  99. package/.next/server/app/connections/mcp/page.js.nft.json +1 -1
  100. package/.next/server/app/connections/mcp/page_client-reference-manifest.js +1 -1
  101. package/.next/server/app/connections/mcp.html +1 -1
  102. package/.next/server/app/connections/mcp.rsc +17 -17
  103. package/.next/server/app/connections/mcp.segments/_full.segment.rsc +17 -17
  104. package/.next/server/app/connections/mcp.segments/_head.segment.rsc +4 -4
  105. package/.next/server/app/connections/mcp.segments/_index.segment.rsc +9 -9
  106. package/.next/server/app/connections/mcp.segments/_tree.segment.rsc +1 -1
  107. package/.next/server/app/connections/mcp.segments/connections/mcp/__PAGE__.segment.rsc +4 -4
  108. package/.next/server/app/connections/mcp.segments/connections/mcp.segment.rsc +3 -3
  109. package/.next/server/app/connections/mcp.segments/connections.segment.rsc +4 -4
  110. package/.next/server/app/connections/messaging/page.js.nft.json +1 -1
  111. package/.next/server/app/connections/messaging/page_client-reference-manifest.js +1 -1
  112. package/.next/server/app/connections/messaging.html +1 -1
  113. package/.next/server/app/connections/messaging.rsc +17 -17
  114. package/.next/server/app/connections/messaging.segments/_full.segment.rsc +17 -17
  115. package/.next/server/app/connections/messaging.segments/_head.segment.rsc +4 -4
  116. package/.next/server/app/connections/messaging.segments/_index.segment.rsc +9 -9
  117. package/.next/server/app/connections/messaging.segments/_tree.segment.rsc +1 -1
  118. package/.next/server/app/connections/messaging.segments/connections/messaging/__PAGE__.segment.rsc +4 -4
  119. package/.next/server/app/connections/messaging.segments/connections/messaging.segment.rsc +3 -3
  120. package/.next/server/app/connections/messaging.segments/connections.segment.rsc +4 -4
  121. package/.next/server/app/connections/page.js.nft.json +1 -1
  122. package/.next/server/app/connections/page_client-reference-manifest.js +1 -1
  123. package/.next/server/app/connections/repositories/page.js.nft.json +1 -1
  124. package/.next/server/app/connections/repositories/page_client-reference-manifest.js +1 -1
  125. package/.next/server/app/connections/repositories.html +1 -1
  126. package/.next/server/app/connections/repositories.rsc +17 -17
  127. package/.next/server/app/connections/repositories.segments/_full.segment.rsc +17 -17
  128. package/.next/server/app/connections/repositories.segments/_head.segment.rsc +4 -4
  129. package/.next/server/app/connections/repositories.segments/_index.segment.rsc +9 -9
  130. package/.next/server/app/connections/repositories.segments/_tree.segment.rsc +1 -1
  131. package/.next/server/app/connections/repositories.segments/connections/repositories/__PAGE__.segment.rsc +4 -4
  132. package/.next/server/app/connections/repositories.segments/connections/repositories.segment.rsc +3 -3
  133. package/.next/server/app/connections/repositories.segments/connections.segment.rsc +4 -4
  134. package/.next/server/app/connections/routines/page.js.nft.json +1 -1
  135. package/.next/server/app/connections/routines/page_client-reference-manifest.js +1 -1
  136. package/.next/server/app/connections/routines.html +1 -1
  137. package/.next/server/app/connections/routines.rsc +15 -15
  138. package/.next/server/app/connections/routines.segments/_full.segment.rsc +15 -15
  139. package/.next/server/app/connections/routines.segments/_head.segment.rsc +4 -4
  140. package/.next/server/app/connections/routines.segments/_index.segment.rsc +9 -9
  141. package/.next/server/app/connections/routines.segments/_tree.segment.rsc +1 -1
  142. package/.next/server/app/connections/routines.segments/connections/routines/__PAGE__.segment.rsc +2 -2
  143. package/.next/server/app/connections/routines.segments/connections/routines.segment.rsc +3 -3
  144. package/.next/server/app/connections/routines.segments/connections.segment.rsc +4 -4
  145. package/.next/server/app/connections.html +1 -1
  146. package/.next/server/app/connections.rsc +15 -15
  147. package/.next/server/app/connections.segments/_full.segment.rsc +15 -15
  148. package/.next/server/app/connections.segments/_head.segment.rsc +4 -4
  149. package/.next/server/app/connections.segments/_index.segment.rsc +9 -9
  150. package/.next/server/app/connections.segments/_tree.segment.rsc +1 -1
  151. package/.next/server/app/connections.segments/connections/__PAGE__.segment.rsc +2 -2
  152. package/.next/server/app/connections.segments/connections.segment.rsc +4 -4
  153. package/.next/server/app/conversations/[id]/page.js.nft.json +1 -1
  154. package/.next/server/app/conversations/[id]/page_client-reference-manifest.js +1 -1
  155. package/.next/server/app/conversations/page.js.nft.json +1 -1
  156. package/.next/server/app/conversations/page_client-reference-manifest.js +1 -1
  157. package/.next/server/app/conversations.html +1 -1
  158. package/.next/server/app/conversations.rsc +14 -14
  159. package/.next/server/app/conversations.segments/_full.segment.rsc +14 -14
  160. package/.next/server/app/conversations.segments/_head.segment.rsc +4 -4
  161. package/.next/server/app/conversations.segments/_index.segment.rsc +9 -9
  162. package/.next/server/app/conversations.segments/_tree.segment.rsc +1 -1
  163. package/.next/server/app/conversations.segments/conversations/__PAGE__.segment.rsc +2 -2
  164. package/.next/server/app/conversations.segments/conversations.segment.rsc +3 -3
  165. package/.next/server/app/docs/[[...slug]]/page.js.nft.json +1 -1
  166. package/.next/server/app/docs/[[...slug]]/page_client-reference-manifest.js +1 -1
  167. package/.next/server/app/finance/page.js.nft.json +1 -1
  168. package/.next/server/app/finance/page_client-reference-manifest.js +1 -1
  169. package/.next/server/app/finance.html +1 -1
  170. package/.next/server/app/finance.rsc +16 -16
  171. package/.next/server/app/finance.segments/_full.segment.rsc +16 -16
  172. package/.next/server/app/finance.segments/_head.segment.rsc +4 -4
  173. package/.next/server/app/finance.segments/_index.segment.rsc +9 -9
  174. package/.next/server/app/finance.segments/_tree.segment.rsc +1 -1
  175. package/.next/server/app/finance.segments/finance/__PAGE__.segment.rsc +4 -4
  176. package/.next/server/app/finance.segments/finance.segment.rsc +3 -3
  177. package/.next/server/app/git/page.js.nft.json +1 -1
  178. package/.next/server/app/git/page_client-reference-manifest.js +1 -1
  179. package/.next/server/app/git.html +1 -1
  180. package/.next/server/app/git.rsc +16 -16
  181. package/.next/server/app/git.segments/_full.segment.rsc +16 -16
  182. package/.next/server/app/git.segments/_head.segment.rsc +4 -4
  183. package/.next/server/app/git.segments/_index.segment.rsc +9 -9
  184. package/.next/server/app/git.segments/_tree.segment.rsc +1 -1
  185. package/.next/server/app/git.segments/git/__PAGE__.segment.rsc +4 -4
  186. package/.next/server/app/git.segments/git.segment.rsc +3 -3
  187. package/.next/server/app/health/page.js.nft.json +1 -1
  188. package/.next/server/app/health/page_client-reference-manifest.js +1 -1
  189. package/.next/server/app/health.html +1 -1
  190. package/.next/server/app/health.rsc +16 -16
  191. package/.next/server/app/health.segments/_full.segment.rsc +16 -16
  192. package/.next/server/app/health.segments/_head.segment.rsc +4 -4
  193. package/.next/server/app/health.segments/_index.segment.rsc +9 -9
  194. package/.next/server/app/health.segments/_tree.segment.rsc +1 -1
  195. package/.next/server/app/health.segments/health/__PAGE__.segment.rsc +4 -4
  196. package/.next/server/app/health.segments/health.segment.rsc +3 -3
  197. package/.next/server/app/index.html +1 -1
  198. package/.next/server/app/index.rsc +16 -16
  199. package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  200. package/.next/server/app/index.segments/_full.segment.rsc +16 -16
  201. package/.next/server/app/index.segments/_head.segment.rsc +4 -4
  202. package/.next/server/app/index.segments/_index.segment.rsc +9 -9
  203. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  204. package/.next/server/app/knowledge/page.js.nft.json +1 -1
  205. package/.next/server/app/knowledge/page_client-reference-manifest.js +1 -1
  206. package/.next/server/app/knowledge.html +1 -1
  207. package/.next/server/app/knowledge.rsc +17 -17
  208. package/.next/server/app/knowledge.segments/_full.segment.rsc +17 -17
  209. package/.next/server/app/knowledge.segments/_head.segment.rsc +4 -4
  210. package/.next/server/app/knowledge.segments/_index.segment.rsc +9 -9
  211. package/.next/server/app/knowledge.segments/_tree.segment.rsc +1 -1
  212. package/.next/server/app/knowledge.segments/knowledge/__PAGE__.segment.rsc +4 -4
  213. package/.next/server/app/knowledge.segments/knowledge.segment.rsc +4 -4
  214. package/.next/server/app/page.js.nft.json +1 -1
  215. package/.next/server/app/page_client-reference-manifest.js +1 -1
  216. package/.next/server/app/reading/page.js.nft.json +1 -1
  217. package/.next/server/app/reading/page_client-reference-manifest.js +1 -1
  218. package/.next/server/app/reading.html +1 -1
  219. package/.next/server/app/reading.rsc +16 -16
  220. package/.next/server/app/reading.segments/_full.segment.rsc +16 -16
  221. package/.next/server/app/reading.segments/_head.segment.rsc +4 -4
  222. package/.next/server/app/reading.segments/_index.segment.rsc +9 -9
  223. package/.next/server/app/reading.segments/_tree.segment.rsc +1 -1
  224. package/.next/server/app/reading.segments/reading/__PAGE__.segment.rsc +4 -4
  225. package/.next/server/app/reading.segments/reading.segment.rsc +3 -3
  226. package/.next/server/app/schedule/page.js.nft.json +1 -1
  227. package/.next/server/app/schedule/page_client-reference-manifest.js +1 -1
  228. package/.next/server/app/schedule.html +1 -1
  229. package/.next/server/app/schedule.rsc +16 -16
  230. package/.next/server/app/schedule.segments/_full.segment.rsc +16 -16
  231. package/.next/server/app/schedule.segments/_head.segment.rsc +4 -4
  232. package/.next/server/app/schedule.segments/_index.segment.rsc +9 -9
  233. package/.next/server/app/schedule.segments/_tree.segment.rsc +1 -1
  234. package/.next/server/app/schedule.segments/schedule/__PAGE__.segment.rsc +4 -4
  235. package/.next/server/app/schedule.segments/schedule.segment.rsc +3 -3
  236. package/.next/server/app/settings/advanced/page.js.nft.json +1 -1
  237. package/.next/server/app/settings/advanced/page_client-reference-manifest.js +1 -1
  238. package/.next/server/app/settings/advanced.html +1 -1
  239. package/.next/server/app/settings/advanced.rsc +17 -17
  240. package/.next/server/app/settings/advanced.segments/_full.segment.rsc +17 -17
  241. package/.next/server/app/settings/advanced.segments/_head.segment.rsc +4 -4
  242. package/.next/server/app/settings/advanced.segments/_index.segment.rsc +9 -9
  243. package/.next/server/app/settings/advanced.segments/_tree.segment.rsc +1 -1
  244. package/.next/server/app/settings/advanced.segments/settings/advanced/__PAGE__.segment.rsc +4 -4
  245. package/.next/server/app/settings/advanced.segments/settings/advanced.segment.rsc +3 -3
  246. package/.next/server/app/settings/advanced.segments/settings.segment.rsc +4 -4
  247. package/.next/server/app/settings/backends/page.js.nft.json +1 -1
  248. package/.next/server/app/settings/backends/page_client-reference-manifest.js +1 -1
  249. package/.next/server/app/settings/backends.html +1 -1
  250. package/.next/server/app/settings/backends.rsc +15 -15
  251. package/.next/server/app/settings/backends.segments/_full.segment.rsc +15 -15
  252. package/.next/server/app/settings/backends.segments/_head.segment.rsc +4 -4
  253. package/.next/server/app/settings/backends.segments/_index.segment.rsc +9 -9
  254. package/.next/server/app/settings/backends.segments/_tree.segment.rsc +1 -1
  255. package/.next/server/app/settings/backends.segments/settings/backends/__PAGE__.segment.rsc +2 -2
  256. package/.next/server/app/settings/backends.segments/settings/backends.segment.rsc +3 -3
  257. package/.next/server/app/settings/backends.segments/settings.segment.rsc +4 -4
  258. package/.next/server/app/settings/commands/page.js.nft.json +1 -1
  259. package/.next/server/app/settings/commands/page_client-reference-manifest.js +1 -1
  260. package/.next/server/app/settings/commands.html +1 -1
  261. package/.next/server/app/settings/commands.rsc +17 -17
  262. package/.next/server/app/settings/commands.segments/_full.segment.rsc +17 -17
  263. package/.next/server/app/settings/commands.segments/_head.segment.rsc +4 -4
  264. package/.next/server/app/settings/commands.segments/_index.segment.rsc +9 -9
  265. package/.next/server/app/settings/commands.segments/_tree.segment.rsc +1 -1
  266. package/.next/server/app/settings/commands.segments/settings/commands/__PAGE__.segment.rsc +4 -4
  267. package/.next/server/app/settings/commands.segments/settings/commands.segment.rsc +3 -3
  268. package/.next/server/app/settings/commands.segments/settings.segment.rsc +4 -4
  269. package/.next/server/app/settings/connections/page.js.nft.json +1 -1
  270. package/.next/server/app/settings/connections/page_client-reference-manifest.js +1 -1
  271. package/.next/server/app/settings/connections.html +1 -1
  272. package/.next/server/app/settings/connections.rsc +15 -15
  273. package/.next/server/app/settings/connections.segments/_full.segment.rsc +15 -15
  274. package/.next/server/app/settings/connections.segments/_head.segment.rsc +4 -4
  275. package/.next/server/app/settings/connections.segments/_index.segment.rsc +9 -9
  276. package/.next/server/app/settings/connections.segments/_tree.segment.rsc +1 -1
  277. package/.next/server/app/settings/connections.segments/settings/connections/__PAGE__.segment.rsc +2 -2
  278. package/.next/server/app/settings/connections.segments/settings/connections.segment.rsc +3 -3
  279. package/.next/server/app/settings/connections.segments/settings.segment.rsc +4 -4
  280. package/.next/server/app/settings/journal/page.js.nft.json +1 -1
  281. package/.next/server/app/settings/journal/page_client-reference-manifest.js +1 -1
  282. package/.next/server/app/settings/journal.html +1 -1
  283. package/.next/server/app/settings/journal.rsc +17 -17
  284. package/.next/server/app/settings/journal.segments/_full.segment.rsc +17 -17
  285. package/.next/server/app/settings/journal.segments/_head.segment.rsc +4 -4
  286. package/.next/server/app/settings/journal.segments/_index.segment.rsc +9 -9
  287. package/.next/server/app/settings/journal.segments/_tree.segment.rsc +1 -1
  288. package/.next/server/app/settings/journal.segments/settings/journal/__PAGE__.segment.rsc +4 -4
  289. package/.next/server/app/settings/journal.segments/settings/journal.segment.rsc +3 -3
  290. package/.next/server/app/settings/journal.segments/settings.segment.rsc +4 -4
  291. package/.next/server/app/settings/management/page.js.nft.json +1 -1
  292. package/.next/server/app/settings/management/page_client-reference-manifest.js +1 -1
  293. package/.next/server/app/settings/management.html +1 -1
  294. package/.next/server/app/settings/management.rsc +17 -17
  295. package/.next/server/app/settings/management.segments/_full.segment.rsc +17 -17
  296. package/.next/server/app/settings/management.segments/_head.segment.rsc +4 -4
  297. package/.next/server/app/settings/management.segments/_index.segment.rsc +9 -9
  298. package/.next/server/app/settings/management.segments/_tree.segment.rsc +1 -1
  299. package/.next/server/app/settings/management.segments/settings/management/__PAGE__.segment.rsc +4 -4
  300. package/.next/server/app/settings/management.segments/settings/management.segment.rsc +3 -3
  301. package/.next/server/app/settings/management.segments/settings.segment.rsc +4 -4
  302. package/.next/server/app/settings/messaging/page.js.nft.json +1 -1
  303. package/.next/server/app/settings/messaging/page_client-reference-manifest.js +1 -1
  304. package/.next/server/app/settings/messaging.html +1 -1
  305. package/.next/server/app/settings/messaging.rsc +15 -15
  306. package/.next/server/app/settings/messaging.segments/_full.segment.rsc +15 -15
  307. package/.next/server/app/settings/messaging.segments/_head.segment.rsc +4 -4
  308. package/.next/server/app/settings/messaging.segments/_index.segment.rsc +9 -9
  309. package/.next/server/app/settings/messaging.segments/_tree.segment.rsc +1 -1
  310. package/.next/server/app/settings/messaging.segments/settings/messaging/__PAGE__.segment.rsc +2 -2
  311. package/.next/server/app/settings/messaging.segments/settings/messaging.segment.rsc +3 -3
  312. package/.next/server/app/settings/messaging.segments/settings.segment.rsc +4 -4
  313. package/.next/server/app/settings/models/page.js.nft.json +1 -1
  314. package/.next/server/app/settings/models/page_client-reference-manifest.js +1 -1
  315. package/.next/server/app/settings/models.html +1 -1
  316. package/.next/server/app/settings/models.rsc +17 -17
  317. package/.next/server/app/settings/models.segments/_full.segment.rsc +17 -17
  318. package/.next/server/app/settings/models.segments/_head.segment.rsc +4 -4
  319. package/.next/server/app/settings/models.segments/_index.segment.rsc +9 -9
  320. package/.next/server/app/settings/models.segments/_tree.segment.rsc +1 -1
  321. package/.next/server/app/settings/models.segments/settings/models/__PAGE__.segment.rsc +4 -4
  322. package/.next/server/app/settings/models.segments/settings/models.segment.rsc +3 -3
  323. package/.next/server/app/settings/models.segments/settings.segment.rsc +4 -4
  324. package/.next/server/app/settings/page.js.nft.json +1 -1
  325. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  326. package/.next/server/app/settings/processes/page.js.nft.json +1 -1
  327. package/.next/server/app/settings/processes/page_client-reference-manifest.js +1 -1
  328. package/.next/server/app/settings/processes.html +1 -1
  329. package/.next/server/app/settings/processes.rsc +15 -15
  330. package/.next/server/app/settings/processes.segments/_full.segment.rsc +15 -15
  331. package/.next/server/app/settings/processes.segments/_head.segment.rsc +4 -4
  332. package/.next/server/app/settings/processes.segments/_index.segment.rsc +9 -9
  333. package/.next/server/app/settings/processes.segments/_tree.segment.rsc +1 -1
  334. package/.next/server/app/settings/processes.segments/settings/processes/__PAGE__.segment.rsc +2 -2
  335. package/.next/server/app/settings/processes.segments/settings/processes.segment.rsc +3 -3
  336. package/.next/server/app/settings/processes.segments/settings.segment.rsc +4 -4
  337. package/.next/server/app/settings/routines/page.js.nft.json +1 -1
  338. package/.next/server/app/settings/routines/page_client-reference-manifest.js +1 -1
  339. package/.next/server/app/settings/routines.html +1 -1
  340. package/.next/server/app/settings/routines.rsc +17 -17
  341. package/.next/server/app/settings/routines.segments/_full.segment.rsc +17 -17
  342. package/.next/server/app/settings/routines.segments/_head.segment.rsc +4 -4
  343. package/.next/server/app/settings/routines.segments/_index.segment.rsc +9 -9
  344. package/.next/server/app/settings/routines.segments/_tree.segment.rsc +1 -1
  345. package/.next/server/app/settings/routines.segments/settings/routines/__PAGE__.segment.rsc +4 -4
  346. package/.next/server/app/settings/routines.segments/settings/routines.segment.rsc +3 -3
  347. package/.next/server/app/settings/routines.segments/settings.segment.rsc +4 -4
  348. package/.next/server/app/settings/schedule/page.js.nft.json +1 -1
  349. package/.next/server/app/settings/schedule/page_client-reference-manifest.js +1 -1
  350. package/.next/server/app/settings/schedule.html +1 -1
  351. package/.next/server/app/settings/schedule.rsc +17 -17
  352. package/.next/server/app/settings/schedule.segments/_full.segment.rsc +17 -17
  353. package/.next/server/app/settings/schedule.segments/_head.segment.rsc +4 -4
  354. package/.next/server/app/settings/schedule.segments/_index.segment.rsc +9 -9
  355. package/.next/server/app/settings/schedule.segments/_tree.segment.rsc +1 -1
  356. package/.next/server/app/settings/schedule.segments/settings/schedule/__PAGE__.segment.rsc +4 -4
  357. package/.next/server/app/settings/schedule.segments/settings/schedule.segment.rsc +3 -3
  358. package/.next/server/app/settings/schedule.segments/settings.segment.rsc +4 -4
  359. package/.next/server/app/settings/self-learning/page.js.nft.json +1 -1
  360. package/.next/server/app/settings/self-learning/page_client-reference-manifest.js +1 -1
  361. package/.next/server/app/settings/self-learning.html +1 -1
  362. package/.next/server/app/settings/self-learning.rsc +17 -17
  363. package/.next/server/app/settings/self-learning.segments/_full.segment.rsc +17 -17
  364. package/.next/server/app/settings/self-learning.segments/_head.segment.rsc +4 -4
  365. package/.next/server/app/settings/self-learning.segments/_index.segment.rsc +9 -9
  366. package/.next/server/app/settings/self-learning.segments/_tree.segment.rsc +1 -1
  367. package/.next/server/app/settings/self-learning.segments/settings/self-learning/__PAGE__.segment.rsc +4 -4
  368. package/.next/server/app/settings/self-learning.segments/settings/self-learning.segment.rsc +3 -3
  369. package/.next/server/app/settings/self-learning.segments/settings.segment.rsc +4 -4
  370. package/.next/server/app/settings.html +1 -1
  371. package/.next/server/app/settings.rsc +17 -17
  372. package/.next/server/app/settings.segments/_full.segment.rsc +17 -17
  373. package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  374. package/.next/server/app/settings.segments/_index.segment.rsc +9 -9
  375. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  376. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  377. package/.next/server/app/settings.segments/settings.segment.rsc +4 -4
  378. package/.next/server/app/setup/page.js.nft.json +1 -1
  379. package/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  380. package/.next/server/app/setup.html +1 -1
  381. package/.next/server/app/setup.rsc +16 -16
  382. package/.next/server/app/setup.segments/_full.segment.rsc +16 -16
  383. package/.next/server/app/setup.segments/_head.segment.rsc +4 -4
  384. package/.next/server/app/setup.segments/_index.segment.rsc +9 -9
  385. package/.next/server/app/setup.segments/_tree.segment.rsc +1 -1
  386. package/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +4 -4
  387. package/.next/server/app/setup.segments/setup.segment.rsc +3 -3
  388. package/.next/server/app/trip/page.js.nft.json +1 -1
  389. package/.next/server/app/trip/page_client-reference-manifest.js +1 -1
  390. package/.next/server/app/trip.html +1 -1
  391. package/.next/server/app/trip.rsc +16 -16
  392. package/.next/server/app/trip.segments/_full.segment.rsc +16 -16
  393. package/.next/server/app/trip.segments/_head.segment.rsc +4 -4
  394. package/.next/server/app/trip.segments/_index.segment.rsc +9 -9
  395. package/.next/server/app/trip.segments/_tree.segment.rsc +1 -1
  396. package/.next/server/app/trip.segments/trip/__PAGE__.segment.rsc +4 -4
  397. package/.next/server/app/trip.segments/trip.segment.rsc +3 -3
  398. package/.next/server/chunks/05w9_next_dist_esm_build_templates_app-route_0~eezk6.js +3 -3
  399. package/.next/server/chunks/05w9_next_dist_esm_build_templates_app-route_0~eezk6.js.map +1 -1
  400. package/.next/server/chunks/{[root-of-the-server]__0j~awob._.js → [root-of-the-server]__0dwxuh7._.js} +1 -1
  401. package/.next/server/chunks/{[root-of-the-server]__04-hp3j._.js → [root-of-the-server]__0k7lkv6._.js} +2 -2
  402. package/.next/server/chunks/ssr/{[root-of-the-server]__0t26ngg._.js → [root-of-the-server]__0ngitfo._.js} +2 -2
  403. package/.next/server/chunks/ssr/{[root-of-the-server]__0t26ngg._.js.map → [root-of-the-server]__0ngitfo._.js.map} +1 -1
  404. package/.next/server/chunks/ssr/{_0pvc7ao._.js → _0370l.6._.js} +2 -2
  405. package/.next/server/chunks/ssr/{_0pvc7ao._.js.map → _0370l.6._.js.map} +1 -1
  406. package/.next/server/chunks/ssr/_04kt9.8._.js +3 -0
  407. package/.next/server/chunks/ssr/_04kt9.8._.js.map +1 -0
  408. package/.next/server/chunks/ssr/_060itkv._.js +3 -0
  409. package/.next/server/chunks/ssr/_060itkv._.js.map +1 -0
  410. package/.next/server/chunks/ssr/{_0pydxc8._.js → _083cqy.._.js} +2 -2
  411. package/.next/server/chunks/ssr/_083cqy.._.js.map +1 -0
  412. package/.next/server/chunks/ssr/{_0lm8td~._.js → _08mbdt1._.js} +2 -2
  413. package/.next/server/chunks/ssr/_08mbdt1._.js.map +1 -0
  414. package/.next/server/chunks/ssr/_0938p.1._.js +3 -0
  415. package/.next/server/chunks/ssr/_0938p.1._.js.map +1 -0
  416. package/.next/server/chunks/ssr/_0ff5qav._.js +3 -0
  417. package/.next/server/chunks/ssr/_0ff5qav._.js.map +1 -0
  418. package/.next/server/chunks/ssr/_0g2e834._.js +3 -0
  419. package/.next/server/chunks/ssr/_0g2e834._.js.map +1 -0
  420. package/.next/server/chunks/ssr/_0gp8d.p._.js +3 -0
  421. package/.next/server/chunks/ssr/_0gp8d.p._.js.map +1 -0
  422. package/.next/server/chunks/ssr/_0k2j6-t._.js +3 -0
  423. package/.next/server/chunks/ssr/_0k2j6-t._.js.map +1 -0
  424. package/.next/server/chunks/ssr/_0kq5x2k._.js +3 -0
  425. package/.next/server/chunks/ssr/_0kq5x2k._.js.map +1 -0
  426. package/.next/server/chunks/ssr/_0mk7dqt._.js +3 -0
  427. package/.next/server/chunks/ssr/_0mk7dqt._.js.map +1 -0
  428. package/.next/server/chunks/ssr/_0qgn2wv._.js +3 -0
  429. package/.next/server/chunks/ssr/_0qgn2wv._.js.map +1 -0
  430. package/.next/server/chunks/ssr/_0t-2u_i._.js +3 -0
  431. package/.next/server/chunks/ssr/_0t-2u_i._.js.map +1 -0
  432. package/.next/server/chunks/ssr/_0vn5_62._.js +5 -0
  433. package/.next/server/chunks/ssr/_0vn5_62._.js.map +1 -0
  434. package/.next/server/chunks/ssr/{_01aim8_._.js → _0z1gdb3._.js} +2 -2
  435. package/.next/server/chunks/ssr/{_01aim8_._.js.map → _0z1gdb3._.js.map} +1 -1
  436. package/.next/server/chunks/ssr/_0~4ta0s._.js +3 -0
  437. package/.next/server/chunks/ssr/_0~4ta0s._.js.map +1 -0
  438. package/.next/server/chunks/ssr/_0~5r_8s._.js +3 -0
  439. package/.next/server/chunks/ssr/_0~5r_8s._.js.map +1 -0
  440. package/.next/server/chunks/ssr/_13mk_9n._.js.map +1 -1
  441. package/.next/server/chunks/ssr/packages_dashboard_src_0uxs9-.._.js +1 -1
  442. package/.next/server/chunks/ssr/packages_dashboard_src_0uxs9-.._.js.map +1 -1
  443. package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_advanced_page_tsx_0o~_885._.js +1 -1
  444. package/.next/server/chunks/ssr/packages_dashboard_src_app_settings_advanced_page_tsx_0o~_885._.js.map +1 -1
  445. package/.next/server/chunks/ssr/packages_shared_dist_index_0kuvow-.js +2 -2
  446. package/.next/server/chunks/ssr/packages_shared_dist_index_0kuvow-.js.map +1 -1
  447. package/.next/server/middleware/middleware-manifest.json +1 -1
  448. package/.next/server/middleware-build-manifest.js +3 -3
  449. package/.next/server/middleware-manifest.json +1 -1
  450. package/.next/server/pages/404.html +1 -1
  451. package/.next/server/pages/500.html +1 -1
  452. package/.next/static/chunks/00qqwuw5id.21.js +1 -0
  453. package/.next/static/chunks/0_yam4jvco3~t.js +1 -0
  454. package/.next/static/chunks/{107sryfaib58g.js → 0kjwfju1fsjkk.js} +1 -1
  455. package/.next/static/chunks/0yt4prt55bas4.js +11 -0
  456. package/.next/static/chunks/{0v2k5twh.h_g2.js → 10_4_2h602xzk.js} +3 -3
  457. package/.next/trace +2 -2
  458. package/.next/trace-build +1 -1
  459. package/package.json +11 -11
  460. package/.next/server/chunks/ssr/_0-v4eqm._.js +0 -3
  461. package/.next/server/chunks/ssr/_0-v4eqm._.js.map +0 -1
  462. package/.next/server/chunks/ssr/_03ay~a6._.js +0 -3
  463. package/.next/server/chunks/ssr/_03ay~a6._.js.map +0 -1
  464. package/.next/server/chunks/ssr/_05ul8c5._.js +0 -3
  465. package/.next/server/chunks/ssr/_05ul8c5._.js.map +0 -1
  466. package/.next/server/chunks/ssr/_0_1u-~q._.js +0 -3
  467. package/.next/server/chunks/ssr/_0_1u-~q._.js.map +0 -1
  468. package/.next/server/chunks/ssr/_0ax_-cr._.js +0 -3
  469. package/.next/server/chunks/ssr/_0ax_-cr._.js.map +0 -1
  470. package/.next/server/chunks/ssr/_0czapf~._.js +0 -3
  471. package/.next/server/chunks/ssr/_0czapf~._.js.map +0 -1
  472. package/.next/server/chunks/ssr/_0dlwb-j._.js +0 -3
  473. package/.next/server/chunks/ssr/_0dlwb-j._.js.map +0 -1
  474. package/.next/server/chunks/ssr/_0dvtdxd._.js +0 -3
  475. package/.next/server/chunks/ssr/_0dvtdxd._.js.map +0 -1
  476. package/.next/server/chunks/ssr/_0h-sc1p._.js +0 -3
  477. package/.next/server/chunks/ssr/_0h-sc1p._.js.map +0 -1
  478. package/.next/server/chunks/ssr/_0k_zx~4._.js +0 -3
  479. package/.next/server/chunks/ssr/_0k_zx~4._.js.map +0 -1
  480. package/.next/server/chunks/ssr/_0kqlqn5._.js +0 -5
  481. package/.next/server/chunks/ssr/_0kqlqn5._.js.map +0 -1
  482. package/.next/server/chunks/ssr/_0lm8td~._.js.map +0 -1
  483. package/.next/server/chunks/ssr/_0pydxc8._.js.map +0 -1
  484. package/.next/server/chunks/ssr/_115_o9h._.js +0 -3
  485. package/.next/server/chunks/ssr/_115_o9h._.js.map +0 -1
  486. package/.next/static/chunks/07k3fjq54671q.js +0 -1
  487. package/.next/static/chunks/0o6q9amhembht.js +0 -1
  488. package/.next/static/chunks/0pbah5-djvzuh.js +0 -11
  489. package/.next/static/chunks/0sz8178y9b-~6.js +0 -1
  490. package/LICENSE +0 -21
  491. /package/.next/server/chunks/{[root-of-the-server]__0j~awob._.js.map → [root-of-the-server]__0dwxuh7._.js.map} +0 -0
  492. /package/.next/server/chunks/{[root-of-the-server]__04-hp3j._.js.map → [root-of-the-server]__0k7lkv6._.js.map} +0 -0
  493. /package/.next/static/{BS7xnS8j09zEzTFQ8HuEd → BoJYg5-EvFL480WsH6xGD}/_buildManifest.js +0 -0
  494. /package/.next/static/{BS7xnS8j09zEzTFQ8HuEd → BoJYg5-EvFL480WsH6xGD}/_clientMiddlewareManifest.js +0 -0
  495. /package/.next/static/{BS7xnS8j09zEzTFQ8HuEd → BoJYg5-EvFL480WsH6xGD}/_ssgManifest.js +0 -0
@@ -0,0 +1,3 @@
1
+ module.exports=[92379,a=>{"use strict";var b=a.i(76015);let c=(0,b.createContext)(null);a.s(["DirtyFieldsProvider",0,function({children:a}){let[d,e]=(0,b.useState)(()=>new Map),[f,g]=(0,b.useState)(0),h=(0,b.useCallback)((a,b,c)=>{e(d=>{if(void 0!==c&&(b===c||Array.isArray(b)&&Array.isArray(c)&&b.length===c.length&&b.every((a,b)=>a===c[b]))){if(!d.has(a))return d;let b=new Map(d);return b.delete(a),b}let e=new Map(d);return e.set(a,b),e})},[]),i=(0,b.useCallback)(a=>{e(b=>{if(!b.has(a))return b;let c=new Map(b);return c.delete(a),c})},[]),j=(0,b.useCallback)(a=>{0!==a.length&&e(b=>{if(!a.some(a=>b.has(a)))return b;let c=new Map(b);for(let b of a)c.delete(b);return c})},[]),k=(0,b.useCallback)(()=>{e(new Map),g(a=>a+1)},[]),l=d.size>0,m=d.size,n=(0,b.useMemo)(()=>({dirtyFields:d,setDirty:h,clearDirty:i,clearDirtyKeys:j,discardAll:k,discardGeneration:f,isDirty:l,dirtyCount:m}),[d,h,i,j,k,f,l,m]);return(0,b.createElement)(c.Provider,{value:n},a)},"useDirtyFields",0,function(){let a=(0,b.useContext)(c);if(!a)throw Error("useDirtyFields must be used inside DirtyFieldsProvider");let{setDirty:d,dirtyFields:e}=a,f=(0,b.useCallback)(a=>async(b,c)=>{let e=a[b];d(b,c,e)},[d]),g=(0,b.useCallback)((a,b)=>e.has(a)?e.get(a):b,[e]);return{...a,deferSaveFor:f,dv:g}},"useDiscardGeneration",0,function(){let a=(0,b.useContext)(c);return a?.discardGeneration??0}])},82070,a=>{"use strict";a.s(["RESTART_REQUIRED_KEY_TUPLE",0,["apiPort","externalObsidianVaultName","externalObsidianVaultPath","externalObsidianWatch","primaryVaultPath","primaryVaultName","slackOwnerUserId","telegramOwnerChatId","discordOwnerUserId","whatsappEnabled","whatsappOwnerPhone","whatsappAuthDir","notionDatabaseIds","gmailPollIntervalSeconds","delegatedProbeIntervalMinutes","gitPollIntervalSeconds","githubPollIntervalSeconds","voiceTranscriptionEnabled","observationSummarizerEnabled","observationSummarizerConcurrency","observationSummarizerMaxCallsPerMinute","observationSummarizerQueueLimit","observationSummarizerTimeoutMs"]])},81020,a=>{"use strict";let b=(0,a.i(5423).default)("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);a.s(["Terminal",0,b],81020)},35571,a=>{"use strict";let b=(0,a.i(5423).default)("BookText",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20",key:"k3hazp"}],["path",{d:"M8 11h8",key:"vwpz6n"}],["path",{d:"M8 7h6",key:"1f0q6e"}]]);a.s(["BookText",0,b],35571)},43169,a=>{"use strict";let b=(0,a.i(5423).default)("Repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);a.s(["Repeat",0,b],43169)},74345,a=>{"use strict";var b=a.i(81673),c=a.i(76015),d=a.i(53905),e=a.i(8251),f=a.i(5423);let g=(0,f.default)("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);var h=a.i(3504);let i=(0,f.default)("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);var j=a.i(81020),k=a.i(35571);let l=(0,f.default)("SlidersHorizontal",[["line",{x1:"21",x2:"14",y1:"4",y2:"4",key:"obuewd"}],["line",{x1:"10",x2:"3",y1:"4",y2:"4",key:"1q6298"}],["line",{x1:"21",x2:"12",y1:"12",y2:"12",key:"1iu8h1"}],["line",{x1:"8",x2:"3",y1:"12",y2:"12",key:"ntss68"}],["line",{x1:"21",x2:"16",y1:"20",y2:"20",key:"14d8ph"}],["line",{x1:"12",x2:"3",y1:"20",y2:"20",key:"m0wm8r"}],["line",{x1:"14",x2:"14",y1:"2",y2:"6",key:"14e1ph"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14",key:"1i6ji0"}],["line",{x1:"16",x2:"16",y1:"18",y2:"22",key:"1lctlv"}]]);var m=a.i(43169);let n=(0,f.default)("ClipboardList",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);var o=a.i(83997),p=a.i(29629),q=a.i(48558),r=a.i(92379);let s=[{href:"/settings",label:"Profile",icon:g,description:"Identity and time axis"},{href:"/settings/schedule",label:"Schedule",icon:h.Clock,description:"Hourly check, quiet hours, notifications"},{href:"/settings/routines",label:"Routines",icon:m.Repeat,description:"Per-cadence check rulebooks and custom cron routines"},{href:"/settings/self-learning",label:"Self-learning",icon:o.Sparkles,description:"Knowledge-map skill curation (Preview)"},{href:"/settings/management",label:"Management",icon:n,description:"Source-of-truth bindings and managed tasks"},{href:"/settings/journal",label:"Journal",icon:k.BookText,description:"Daily journal format template and export redaction rules"},{href:"/settings/models",label:"Models",icon:i,description:"Backends, routing, execution limits"},{href:"/settings/commands",label:"Commands",icon:j.Terminal,description:"Messaging shortcuts and custom prompts"},{href:"/settings/advanced",label:"Advanced",icon:l,description:"Safety, infrastructure, danger zone"}],t={"/settings":["agentDisplayName","character","primaryLanguage"],"/settings/schedule":["timezone","dayBoundaryHour","hourlyCheckEnabled","hourlyCheckIntervalMinutes","hourlyCheckActiveStartHour","hourlyCheckActiveEndHour","hourlyCheckMinObservations","maxNotificationsPerHour","maxNotificationsPerDay","quietHoursStart","quietHoursEnd","batchIntervalMinutes","defaultNotificationPlatforms","primaryPlatform"],"/settings/models":["maxConcurrentSessions","maxReactiveSessions","delegatedProxyMaxConcurrent","executeTimeoutMinutes","sessionTimeoutDmMinutes","sessionTimeoutChannelMinutes","sessionTimeoutDashboardMinutes","autonomousDailyCostCapUsd","autonomousMonthlyCostCapUsd"],"/settings/advanced":["disallowedTools","allowedToolsOverride","obsidianDebounceSeconds","schedulePollIntervalSeconds","gitPollIntervalSeconds","notionPollIntervalSeconds","calendarPollIntervalSeconds","gmailPollIntervalSeconds","historyInjectionMaxMessages","historyInjectionMaxTokens","dmStalenessStrict","apiPort","authProbeDisabled","authPreflightFreshnessMs"]};a.s(["SettingsNavigation",0,function(){let a=(0,e.usePathname)(),{dirtyFields:f}=(0,r.useDirtyFields)(),g=(0,c.useCallback)(a=>{let b=t[a];return b?b.filter(a=>f.has(a)).length:0},[f]);return(0,b.jsxs)("nav",{"aria-label":"Settings sections",className:"w-full md:w-60 md:shrink-0",children:[(0,b.jsx)("ul",{className:"flex flex-row gap-1 overflow-x-auto md:flex-col md:gap-0.5",children:s.map(c=>{let e="/settings"===c.href?a===c.href:a.startsWith(c.href),f=c.icon,h=g(c.href);return(0,b.jsx)("li",{children:(0,b.jsxs)(d.default,{href:c.href,"aria-current":e?"page":void 0,className:(0,q.cn)("group flex items-center gap-3 whitespace-nowrap rounded-lg px-3 py-2 text-sm transition-colors md:whitespace-normal",e?"bg-primary/10 text-primary font-medium":"text-muted-foreground hover:bg-accent hover:text-foreground"),children:[(0,b.jsx)(f,{className:"h-4 w-4 shrink-0"}),(0,b.jsxs)("span",{className:"flex-1",children:[(0,b.jsxs)("span",{className:"block",children:[c.label,h>0&&(0,b.jsx)("span",{className:"ml-1.5 inline-block h-2 w-2 rounded-full bg-blue-500",title:`${h} unsaved change${1!==h?"s":""}`})]}),(0,b.jsx)("span",{className:(0,q.cn)("hidden text-[11px] font-normal md:block",e?"text-primary/70":"text-muted-foreground/70 group-hover:text-muted-foreground"),children:c.description})]})]})},c.href)})}),(0,b.jsxs)("div",{className:"hidden md:block mt-4 px-3",children:[(0,b.jsx)("kbd",{className:"text-[10px] text-muted-foreground/60 font-mono",children:"⌘K"}),(0,b.jsx)("span",{className:"text-[10px] text-muted-foreground/60 ml-1.5",children:"Search settings"})]})]})},"SettingsToast",0,function({toast:a}){return a?(0,b.jsx)(p.Alert,{variant:a.type,className:"rounded-lg px-4 py-2.5 text-sm",children:a.message}):null}],74345)}];
2
+
3
+ //# sourceMappingURL=_0t-2u_i._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../packages/dashboard/src/lib/hooks/use-dirty-fields.ts","../../../../../../packages/shared/src/editable-config-keys.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/terminal.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/book-text.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/repeat.ts","../../../../../../packages/dashboard/src/components/settings/settings-navigation.tsx","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/clipboard-list.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/cpu.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/sliders-horizontal.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/user.ts"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n createElement,\n useCallback,\n useContext,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport type { EditableConfigKey } from \"@aitne/shared\";\nimport type { ConfigValue } from \"@/lib/hooks/use-save-config\";\n\n/** Deep-equal for ConfigValue (handles string[] by value). */\nfunction valuesEqual(a: ConfigValue, b: ConfigValue): boolean {\n if (a === b) return true;\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((v, i) => v === b[i]);\n }\n return false;\n}\n\ninterface DirtyFieldsContextValue {\n /** Map of keys with uncommitted draft values. */\n dirtyFields: Map<EditableConfigKey, ConfigValue>;\n /** Register (or update) a dirty value.\n * If `serverValue` is provided and matches `value`, the key is removed\n * from the dirty set instead (edit-back / toggle-back detection). */\n setDirty: (key: EditableConfigKey, value: ConfigValue, serverValue?: ConfigValue) => void;\n /** Remove a single key from the dirty set. */\n clearDirty: (key: EditableConfigKey) => void;\n /** Remove multiple keys from the dirty set. */\n clearDirtyKeys: (keys: EditableConfigKey[]) => void;\n /** Discard all uncommitted changes. */\n discardAll: () => void;\n /** Monotonically increasing counter — bumped on every discard so field\n * components can reset their local drafts via a key or effect. */\n discardGeneration: number;\n /** True when at least one field has an uncommitted change. */\n isDirty: boolean;\n /** Number of uncommitted fields. */\n dirtyCount: number;\n}\n\nconst DirtyFieldsContext = createContext<DirtyFieldsContextValue | null>(null);\n\n/**\n * Provides dirty-field tracking for batched settings save.\n * Mount once in the settings layout — consumed by `useDirtyFields()`.\n */\nexport function DirtyFieldsProvider({ children }: { children: ReactNode }) {\n const [dirtyFields, setDirtyFields] = useState<\n Map<EditableConfigKey, ConfigValue>\n >(() => new Map());\n const [discardGeneration, setDiscardGeneration] = useState(0);\n\n const setDirty = useCallback(\n (key: EditableConfigKey, value: ConfigValue, serverValue?: ConfigValue) => {\n setDirtyFields((prev) => {\n // If the new value matches the server value, remove from dirty\n // (edit-back / toggle-back detection).\n if (serverValue !== undefined && valuesEqual(value, serverValue)) {\n if (!prev.has(key)) return prev;\n const next = new Map(prev);\n next.delete(key);\n return next;\n }\n const next = new Map(prev);\n next.set(key, value);\n return next;\n });\n },\n [],\n );\n\n const clearDirty = useCallback((key: EditableConfigKey) => {\n setDirtyFields((prev) => {\n if (!prev.has(key)) return prev;\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n }, []);\n\n const clearDirtyKeys = useCallback((keys: EditableConfigKey[]) => {\n if (keys.length === 0) return;\n setDirtyFields((prev) => {\n if (!keys.some((k) => prev.has(k))) return prev;\n const next = new Map(prev);\n for (const key of keys) next.delete(key);\n return next;\n });\n }, []);\n\n const discardAll = useCallback(() => {\n setDirtyFields(new Map());\n setDiscardGeneration((g) => g + 1);\n }, []);\n\n const isDirty = dirtyFields.size > 0;\n const dirtyCount = dirtyFields.size;\n\n const value = useMemo<DirtyFieldsContextValue>(\n () => ({\n dirtyFields,\n setDirty,\n clearDirty,\n clearDirtyKeys,\n discardAll,\n discardGeneration,\n isDirty,\n dirtyCount,\n }),\n [dirtyFields, setDirty, clearDirty, clearDirtyKeys, discardAll, discardGeneration, isDirty, dirtyCount],\n );\n\n return createElement(DirtyFieldsContext.Provider, { value }, children);\n}\n\n/**\n * Returns the current discard generation counter, or 0 if outside a\n * DirtyFieldsProvider. Field components use this to reset local editing\n * state when the user clicks Discard in the save bar.\n */\nexport function useDiscardGeneration(): number {\n const ctx = useContext(DirtyFieldsContext);\n return ctx?.discardGeneration ?? 0;\n}\n\n/**\n * Access the dirty-fields context. Must be called inside `DirtyFieldsProvider`.\n *\n * Returns:\n * - `deferSaveFor(config)` — returns a `SaveFieldFn` with toggle-back detection\n * - `dv(key, serverValue)` — returns dirty value if it exists, else serverValue\n * - all raw context fields for the save bar\n */\nexport function useDirtyFields() {\n const ctx = useContext(DirtyFieldsContext);\n if (!ctx) {\n throw new Error(\"useDirtyFields must be used inside DirtyFieldsProvider\");\n }\n\n const { setDirty, dirtyFields } = ctx;\n\n /**\n * Returns a `SaveFieldFn` that compares against `serverConfig` to detect\n * toggle-back (editing a value back to the server value removes the dirty\n * entry instead of keeping a spurious one).\n *\n * The returned function is a new closure per call. Pages call this after\n * the `if (!config)` guard, so it cannot be wrapped in `useMemo` without\n * violating hooks rules. The allocation is negligible — field components\n * do not include `onSave` in any dependency array.\n */\n const deferSaveFor = useCallback(\n (serverConfig: object) => {\n return async (key: EditableConfigKey, value: ConfigValue) => {\n const serverValue = (serverConfig as Record<string, ConfigValue>)[key];\n setDirty(key, value, serverValue);\n };\n },\n [setDirty],\n );\n\n /** Return dirty value if it exists, else the server value. */\n const dv = useCallback(\n <T extends ConfigValue>(key: EditableConfigKey, serverValue: T): T => {\n if (dirtyFields.has(key)) {\n return dirtyFields.get(key) as T;\n }\n return serverValue;\n },\n [dirtyFields],\n );\n\n return {\n ...ctx,\n deferSaveFor,\n dv,\n };\n}\n","/**\n * Canonical list of config keys editable via the dashboard PATCH /config endpoint.\n *\n * Both the daemon (env-writer.ts) and the dashboard (useSaveConfig) import from here\n * so the set of accepted keys is enforced at compile time in both packages.\n */\n\nexport const EDITABLE_RUNTIME_KEY_TUPLE = [\n \"advisorEnabled\", \"advisorModel\",\n \"maxConcurrentSessions\", \"maxReactiveSessions\", \"delegatedProxyMaxConcurrent\", \"executeTimeoutMinutes\",\n // DELEGATED-TASK-MODE-DESIGN.md §17 — task-mode kill switch / quotas /\n // defaults. The heavy enable flag is Approve-tier semantically, but is\n // editable here too so the user can flip it from the dashboard once\n // they confirm the cost class.\n \"delegatedTaskModeEnabled\", \"delegatedTaskMaxPerDay\",\n \"delegatedTaskDefaultMaxToolCalls\", \"delegatedTaskDefaultMaxBudgetUsd\",\n \"delegatedTaskDefaultTimeoutMs\", \"delegatedTaskHeavyEnabled\",\n // DELEGATED-TASK-MODE-DESIGN.md §13 Phase 3 — three independent\n // optimization kill switches. Each defaults off (cache, pool) or on\n // (structured output) per the design doc; flipping any one does not\n // affect the others. See runtime-settings.ts for the per-field rationale.\n \"delegatedTaskStructuredOutputEnabled\",\n \"delegatedTaskSubprocessPoolEnabled\", \"delegatedTaskSubprocessPoolTtlSeconds\",\n \"delegatedTaskCacheEnabled\", \"delegatedTaskCacheTtlSeconds\",\n \"delegatedTaskCacheMaxEntries\",\n \"agentDisplayName\",\n \"character\",\n \"sessionTimeoutDmMinutes\", \"sessionTimeoutChannelMinutes\", \"sessionTimeoutDashboardMinutes\",\n \"historyInjectionMaxMessages\", \"historyInjectionMaxTokens\",\n \"historyOtherSurfaceWindowMinutes\",\n \"dmStalenessStrict\",\n \"proactiveForwardChannelTimelineEnabled\",\n \"proactiveForwardForceFreshSession\",\n \"timezone\", \"dayBoundaryHour\", \"hourlyCheckEnabled\", \"hourlyCheckIntervalMinutes\",\n \"hourlyCheckActiveStartHour\", \"hourlyCheckActiveEndHour\", \"hourlyCheckMinObservations\",\n // cost-reduction-structural §B — three-stage gate knobs.\n \"hourlyCheckGateMode\", \"hourlyCheckStage2Enabled\", \"hourlyCheckHeartbeatHours\",\n \"hourlyCheckLowSignalPendingCeiling\",\n \"authProbeDisabled\", \"authPreflightFreshnessMs\",\n \"maxNotificationsPerHour\", \"maxNotificationsPerDay\",\n \"quietHoursStart\", \"quietHoursEnd\", \"batchIntervalMinutes\", \"primaryPlatform\",\n \"defaultNotificationPlatforms\",\n \"slackOwnerUserId\", \"telegramOwnerChatId\", \"discordOwnerUserId\",\n \"whatsappEnabled\", \"whatsappOwnerPhone\", \"whatsappAuthDir\",\n \"disallowedTools\", \"allowedToolsOverride\",\n \"claudeExecutionPermissionMode\",\n \"codexExecutionPermissionMode\",\n \"geminiExecutionPermissionMode\",\n \"externalObsidianVaultPath\", \"externalObsidianVaultName\",\n // SETUP-FLOW-REDESIGN-PLAN §6.3 — kill switch for the external-vault\n // branch of `ObsidianWatcher`. Editable so the Notes step's \"Watch for\n // changes\" checkbox round-trips through `PATCH /api/config`.\n \"externalObsidianWatch\",\n \"obsidianDebounceSeconds\",\n // Management Mode — primary-vault fields introduced by the management-mode\n // redesign. Editable via the settings dialog once Phase 2's migration API\n // lands; Phase 1 persists values if set but enters degraded mode if unset\n // while vaultMode === \"obsidian\".\n \"primaryVaultPath\", \"primaryVaultName\",\n // gitRepos / gitWatchedRepos / githubRepos removed at the unified-\n // repositories cutover (docs/design/appendices/unified-repositories.md);\n // their data lives in the `repositories` DB table now. `gitAccounts`\n // stays — it is 1:N over rows.\n \"gitAccounts\",\n \"googleCalendarId\", \"notionDatabaseIds\",\n \"schedulePollIntervalSeconds\",\n // SCHEDULED-DM-IMPLEMENTATION-PLAN §3.6.1 / §6.6.1 — max delay budget\n // for scheduled.dm gate-acquisition before the briefing is dropped.\n \"maxBriefingDelayMinutes\",\n \"gitPollIntervalSeconds\", \"gitPushOverdueMinutes\", \"gitProjectUpdateDebounceMinutes\",\n \"notionPollIntervalSeconds\", \"calendarPollIntervalSeconds\",\n \"gmailPollIntervalSeconds\",\n \"githubPollIntervalSeconds\",\n \"mcpAutoProbeIntervalMinutes\",\n \"delegatedProbeIntervalMinutes\",\n \"enabledMailProviders\",\n \"mailPollIntervalSeconds\",\n \"mailIdleEnabled\",\n \"mailIdleInstabilityThreshold\",\n \"mailIdleFallbackRecoveryMinutes\",\n \"mailMaxMessagesPerPoll\",\n \"mailAuthFailureRetryHours\",\n \"hourlyObservationCharBudget\",\n // cost-reduction-structural §A — observation summarizer knobs.\n \"observationSummarizerEnabled\",\n \"observationSummarizerConcurrency\",\n \"observationSummarizerMaxCallsPerMinute\",\n \"observationSummarizerQueueLimit\",\n \"observationSummarizerTimeoutMs\",\n \"vipMailSenders\",\n \"outlookDeltaPageSize\",\n \"outlookGraphConcurrency\",\n \"imapReconnectBaseMs\",\n \"imapReconnectMaxMs\",\n \"autonomousDailyCostCapUsd\",\n \"autonomousMonthlyCostCapUsd\",\n // B-007 — primary language + vault mode selected at setup, editable later\n \"primaryLanguage\",\n \"vaultMode\",\n // Voice transcription opt-in (docs/design/appendices/voice-transcription.md).\n // The dashboard's recommended path is POST /api/voice/install — that flow\n // downloads the Whisper weights with progress UI, persists the flag, and\n // triggers a daemon self-restart so the next inbound voice attachment\n // observes the model on disk. A direct PATCH here is technically accepted\n // (the env-writer plumbing needs to round-trip the key on read-back, and\n // the transcriber's getter picks up the new value live) but the model\n // weights would only download lazily on the FIRST audio attachment, with\n // no UI feedback. The RESTART_REQUIRED_KEY_TUPLE entry surfaces a badge\n // so an operator who PATCHes around the install flow is nudged to use it.\n \"voiceTranscriptionEnabled\",\n // Operator's primary spoken language for the post-auto-detect fallback.\n // The transcriber reads this through a getter (see VoiceTranscriber's\n // `primaryLanguage` option), so a runtime PATCH takes effect on the next\n // inbound audio attachment without a daemon restart — that's why this\n // key is editable at runtime AND deliberately absent from\n // RESTART_REQUIRED_KEY_TUPLE.\n \"voiceTranscriptionPrimaryLanguage\",\n] as const;\n\nexport const EDITABLE_BOOTSTRAP_KEY_TUPLE = [\n \"apiPort\",\n] as const;\n\nexport const RESTART_REQUIRED_KEY_TUPLE = [\n \"apiPort\",\n \"externalObsidianVaultName\", \"externalObsidianVaultPath\",\n // SETUP-FLOW-REDESIGN-PLAN §6.3 — the kill switch is read once at boot in\n // index.ts when ObsidianWatcher is registered; flipping it at runtime\n // updates the integrations.md Note Sources line (via applyConfigUpdates\n // chokepoint) but does NOT start/stop the live chokidar watcher. Surface\n // that honestly via the dashboard's restart-required badge — same posture\n // as `externalObsidianVaultPath` above, which has the same constraint.\n \"externalObsidianWatch\",\n \"primaryVaultPath\", \"primaryVaultName\",\n \"slackOwnerUserId\",\n \"telegramOwnerChatId\",\n \"discordOwnerUserId\",\n \"whatsappEnabled\", \"whatsappOwnerPhone\", \"whatsappAuthDir\",\n \"notionDatabaseIds\",\n \"gmailPollIntervalSeconds\",\n // DelegatedProbeObserver (DELEGATED-MODE-V2 §7.1) captures `intervalMs`\n // at construction time and registers a single setInterval — a hot PATCH\n // updates `config.delegatedProbeIntervalMinutes` but the timer keeps\n // firing on the old cadence until restart. Surface that honestly via\n // the dashboard's restart-required badge rather than silently ignoring\n // the change.\n \"delegatedProbeIntervalMinutes\",\n // GitWatcher / delegated Git cron / GitHubPoller capture their cadence in\n // constructors and bind it to timers. Runtime PATCH updates config storage,\n // but the live timers keep the old cadence until restart; flag honestly.\n \"gitPollIntervalSeconds\",\n \"githubPollIntervalSeconds\",\n // The transcriber itself reads `enabled` through a live getter when no\n // env override is set, so the flag flips immediately for inference\n // routing — no restart needed for that piece. The badge here exists\n // for a different reason: a bare PATCH from false → true does NOT\n // pre-download the Whisper weights, so the next inbound voice\n // attachment silently lazy-fetches them at inference time and the\n // first transcript is delayed by the full download (often tens of\n // seconds) with no UI feedback. The /api/voice/install path downloads\n // with progress + auto-restart; the badge nudges operators who bypass\n // it. (When `PA_VOICE_TRANSCRIPTION_ENABLED` IS set, the transcriber\n // binds at construction and the flag really does need a restart.)\n \"voiceTranscriptionEnabled\",\n // ObservationSummarizerWorker reads these constructor-time options once\n // at startup (cost-reduction-structural §A): the worker is registered\n // only when `observationSummarizerEnabled=true` at boot, and concurrency\n // / per-call timeout / rate limit / queue cap are captured by the\n // worker constructor and bound to the running drain loops. A runtime\n // PATCH updates `settings`/`AgentConfig` storage but does not re-create\n // the worker — flag honestly via the restart badge so an operator that\n // bumped the rate limit knows the change isn't live yet.\n \"observationSummarizerEnabled\",\n \"observationSummarizerConcurrency\",\n \"observationSummarizerMaxCallsPerMinute\",\n \"observationSummarizerQueueLimit\",\n \"observationSummarizerTimeoutMs\",\n] as const;\n\nexport type EditableRuntimeKey = (typeof EDITABLE_RUNTIME_KEY_TUPLE)[number];\nexport type EditableBootstrapKey = (typeof EDITABLE_BOOTSTRAP_KEY_TUPLE)[number];\nexport type EditableConfigKey = EditableRuntimeKey | EditableBootstrapKey;\nexport type RestartRequiredKey = (typeof RESTART_REQUIRED_KEY_TUPLE)[number];\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Terminal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cG9seWxpbmUgcG9pbnRzPSI0IDE3IDEwIDExIDQgNSIgLz4KICA8bGluZSB4MT0iMTIiIHgyPSIyMCIgeTE9IjE5IiB5Mj0iMTkiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/terminal\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Terminal = createLucideIcon('Terminal', [\n ['polyline', { points: '4 17 10 11 4 5', key: 'akl6gq' }],\n ['line', { x1: '12', x2: '20', y1: '19', y2: '19', key: 'q2wloq' }],\n]);\n\nexport default Terminal;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name BookText\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgLz4KICA8cGF0aCBkPSJNOCAxMWg4IiAvPgogIDxwYXRoIGQ9Ik04IDdoNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/book-text\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst BookText = createLucideIcon('BookText', [\n [\n 'path',\n {\n d: 'M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20',\n key: 'k3hazp',\n },\n ],\n ['path', { d: 'M8 11h8', key: 'vwpz6n' }],\n ['path', { d: 'M8 7h6', key: '1f0q6e' }],\n]);\n\nexport default BookText;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Repeat\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTcgMiA0IDQtNCA0IiAvPgogIDxwYXRoIGQ9Ik0zIDExdi0xYTQgNCAwIDAgMSA0LTRoMTQiIC8+CiAgPHBhdGggZD0ibTcgMjItNC00IDQtNCIgLz4KICA8cGF0aCBkPSJNMjEgMTN2MWE0IDQgMCAwIDEtNCA0SDMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/repeat\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Repeat = createLucideIcon('Repeat', [\n ['path', { d: 'm17 2 4 4-4 4', key: 'nntrym' }],\n ['path', { d: 'M3 11v-1a4 4 0 0 1 4-4h14', key: '84bu3i' }],\n ['path', { d: 'm7 22-4-4 4-4', key: '1wqhfi' }],\n ['path', { d: 'M21 13v1a4 4 0 0 1-4 4H3', key: '1rx37r' }],\n]);\n\nexport default Repeat;\n","\"use client\";\n\nimport { useCallback } from \"react\";\nimport Link from \"next/link\";\nimport { usePathname } from \"next/navigation\";\nimport {\n User,\n Clock,\n Cpu,\n Terminal,\n BookText,\n SlidersHorizontal,\n Repeat,\n ClipboardList,\n Sparkles,\n type LucideIcon,\n} from \"lucide-react\";\nimport type { EditableConfigKey } from \"@aitne/shared\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { cn } from \"@/lib/utils\";\nimport { useDirtyFields } from \"@/lib/hooks/use-dirty-fields\";\n\nexport type SettingsToastState = {\n type: \"success\" | \"error\" | \"warning\" | \"info\";\n message: string;\n};\n\ntype NavItem = {\n href: string;\n label: string;\n icon: LucideIcon;\n description: string;\n};\n\nconst NAV_ITEMS: NavItem[] = [\n {\n href: \"/settings\",\n label: \"Profile\",\n icon: User,\n description: \"Identity and time axis\",\n },\n {\n href: \"/settings/schedule\",\n label: \"Schedule\",\n icon: Clock,\n description: \"Hourly check, quiet hours, notifications\",\n },\n {\n href: \"/settings/routines\",\n label: \"Routines\",\n icon: Repeat,\n description: \"Per-cadence check rulebooks and custom cron routines\",\n },\n {\n href: \"/settings/self-learning\",\n label: \"Self-learning\",\n icon: Sparkles,\n description: \"Knowledge-map skill curation (Preview)\",\n },\n {\n href: \"/settings/management\",\n label: \"Management\",\n icon: ClipboardList,\n description: \"Source-of-truth bindings and managed tasks\",\n },\n {\n href: \"/settings/journal\",\n label: \"Journal\",\n icon: BookText,\n description: \"Daily journal format template and export redaction rules\",\n },\n {\n href: \"/settings/models\",\n label: \"Models\",\n icon: Cpu,\n description: \"Backends, routing, execution limits\",\n },\n {\n href: \"/settings/commands\",\n label: \"Commands\",\n icon: Terminal,\n description: \"Messaging shortcuts and custom prompts\",\n },\n {\n href: \"/settings/advanced\",\n label: \"Advanced\",\n icon: SlidersHorizontal,\n description: \"Safety, infrastructure, danger zone\",\n },\n];\n\n/**\n * Maps each settings page path to the deferred-save config keys displayed\n * on that page. Used to show per-page dirty indicators in the sidebar.\n *\n * KEEP IN SYNC: when adding or removing an EditableField / EditableBooleanField /\n * EditableArrayField with `onSave={deferSave}` on a settings page, update\n * this mapping. Missing keys won't cause errors but the dirty dot won't\n * appear for that field's page. Extraneous keys are harmless (the field\n * would need to be in the dirty map, which only happens via actual edits).\n */\nconst PAGE_KEYS: Record<string, readonly EditableConfigKey[]> = {\n \"/settings\": [\n \"agentDisplayName\", \"character\",\n \"primaryLanguage\",\n // `vaultMode` / `primaryVaultPath` are migration-only — handled by\n // ManagementModeSection's dialog, not defer-save, so they don't\n // participate in the page dirty-dot indicator.\n ],\n \"/settings/schedule\": [\n \"timezone\", \"dayBoundaryHour\",\n \"hourlyCheckEnabled\", \"hourlyCheckIntervalMinutes\",\n \"hourlyCheckActiveStartHour\", \"hourlyCheckActiveEndHour\", \"hourlyCheckMinObservations\",\n \"maxNotificationsPerHour\", \"maxNotificationsPerDay\",\n \"quietHoursStart\", \"quietHoursEnd\", \"batchIntervalMinutes\",\n \"defaultNotificationPlatforms\", \"primaryPlatform\",\n ],\n \"/settings/models\": [\n \"maxConcurrentSessions\", \"maxReactiveSessions\", \"delegatedProxyMaxConcurrent\", \"executeTimeoutMinutes\",\n \"sessionTimeoutDmMinutes\", \"sessionTimeoutChannelMinutes\", \"sessionTimeoutDashboardMinutes\",\n \"autonomousDailyCostCapUsd\",\n \"autonomousMonthlyCostCapUsd\",\n // advisorEnabled / advisorModel are managed by BackendsAndPlansSection (own save flow, not deferred)\n ],\n \"/settings/advanced\": [\n \"disallowedTools\", \"allowedToolsOverride\",\n \"obsidianDebounceSeconds\", \"schedulePollIntervalSeconds\", \"gitPollIntervalSeconds\",\n \"notionPollIntervalSeconds\", \"calendarPollIntervalSeconds\", \"gmailPollIntervalSeconds\",\n \"historyInjectionMaxMessages\", \"historyInjectionMaxTokens\", \"dmStalenessStrict\",\n \"apiPort\",\n \"authProbeDisabled\", \"authPreflightFreshnessMs\",\n ],\n};\n\nexport function SettingsNavigation() {\n const pathname = usePathname();\n const { dirtyFields } = useDirtyFields();\n\n /** Count how many dirty keys belong to a given page. */\n const dirtyCountForPage = useCallback(\n (href: string): number => {\n const keys = PAGE_KEYS[href];\n if (!keys) return 0;\n return keys.filter((k) => dirtyFields.has(k)).length;\n },\n [dirtyFields],\n );\n\n return (\n <nav\n aria-label=\"Settings sections\"\n className=\"w-full md:w-60 md:shrink-0\"\n >\n <ul className=\"flex flex-row gap-1 overflow-x-auto md:flex-col md:gap-0.5\">\n {NAV_ITEMS.map((item) => {\n const active =\n item.href === \"/settings\"\n ? pathname === item.href\n : pathname.startsWith(item.href);\n const Icon = item.icon;\n const pageDirtyCount = dirtyCountForPage(item.href);\n\n return (\n <li key={item.href}>\n <Link\n href={item.href}\n aria-current={active ? \"page\" : undefined}\n className={cn(\n \"group flex items-center gap-3 whitespace-nowrap rounded-lg px-3 py-2 text-sm transition-colors md:whitespace-normal\",\n active\n ? \"bg-primary/10 text-primary font-medium\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n )}\n >\n <Icon className=\"h-4 w-4 shrink-0\" />\n <span className=\"flex-1\">\n <span className=\"block\">\n {item.label}\n {pageDirtyCount > 0 && (\n <span\n className=\"ml-1.5 inline-block h-2 w-2 rounded-full bg-blue-500\"\n title={`${pageDirtyCount} unsaved change${pageDirtyCount !== 1 ? \"s\" : \"\"}`}\n />\n )}\n </span>\n <span\n className={cn(\n \"hidden text-[11px] font-normal md:block\",\n active\n ? \"text-primary/70\"\n : \"text-muted-foreground/70 group-hover:text-muted-foreground\",\n )}\n >\n {item.description}\n </span>\n </span>\n </Link>\n </li>\n );\n })}\n </ul>\n <div className=\"hidden md:block mt-4 px-3\">\n <kbd className=\"text-[10px] text-muted-foreground/60 font-mono\">\n {\"⌘K\"}\n </kbd>\n <span className=\"text-[10px] text-muted-foreground/60 ml-1.5\">\n Search settings\n </span>\n </div>\n </nav>\n );\n}\n\nexport function SettingsToast({\n toast,\n}: {\n toast: SettingsToastState | null;\n}) {\n if (!toast) {\n return null;\n }\n\n return (\n <Alert variant={toast.type} className=\"rounded-lg px-4 py-2.5 text-sm\">\n {toast.message}\n </Alert>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ClipboardList\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iOCIgaGVpZ2h0PSI0IiB4PSI4IiB5PSIyIiByeD0iMSIgcnk9IjEiIC8+CiAgPHBhdGggZD0iTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIiAvPgogIDxwYXRoIGQ9Ik0xMiAxMWg0IiAvPgogIDxwYXRoIGQ9Ik0xMiAxNmg0IiAvPgogIDxwYXRoIGQ9Ik04IDExaC4wMSIgLz4KICA8cGF0aCBkPSJNOCAxNmguMDEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/clipboard-list\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ClipboardList = createLucideIcon('ClipboardList', [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1', key: 'tgr4d6' }],\n [\n 'path',\n {\n d: 'M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2',\n key: '116196',\n },\n ],\n ['path', { d: 'M12 11h4', key: '1jrz19' }],\n ['path', { d: 'M12 16h4', key: 'n85exb' }],\n ['path', { d: 'M8 11h.01', key: '1dfujw' }],\n ['path', { d: 'M8 16h.01', key: '18s6g9' }],\n]);\n\nexport default ClipboardList;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Cpu\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHg9IjQiIHk9IjQiIHJ4PSIyIiAvPgogIDxyZWN0IHdpZHRoPSI2IiBoZWlnaHQ9IjYiIHg9IjkiIHk9IjkiIHJ4PSIxIiAvPgogIDxwYXRoIGQ9Ik0xNSAydjIiIC8+CiAgPHBhdGggZD0iTTE1IDIwdjIiIC8+CiAgPHBhdGggZD0iTTIgMTVoMiIgLz4KICA8cGF0aCBkPSJNMiA5aDIiIC8+CiAgPHBhdGggZD0iTTIwIDE1aDIiIC8+CiAgPHBhdGggZD0iTTIwIDloMiIgLz4KICA8cGF0aCBkPSJNOSAydjIiIC8+CiAgPHBhdGggZD0iTTkgMjB2MiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/cpu\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Cpu = createLucideIcon('Cpu', [\n ['rect', { width: '16', height: '16', x: '4', y: '4', rx: '2', key: '14l7u7' }],\n ['rect', { width: '6', height: '6', x: '9', y: '9', rx: '1', key: '5aljv4' }],\n ['path', { d: 'M15 2v2', key: '13l42r' }],\n ['path', { d: 'M15 20v2', key: '15mkzm' }],\n ['path', { d: 'M2 15h2', key: '1gxd5l' }],\n ['path', { d: 'M2 9h2', key: '1bbxkp' }],\n ['path', { d: 'M20 15h2', key: '19e6y8' }],\n ['path', { d: 'M20 9h2', key: '19tzq7' }],\n ['path', { d: 'M9 2v2', key: '165o2o' }],\n ['path', { d: 'M9 20v2', key: 'i2bqo8' }],\n]);\n\nexport default Cpu;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name SlidersHorizontal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8bGluZSB4MT0iMjEiIHgyPSIxNCIgeTE9IjQiIHkyPSI0IiAvPgogIDxsaW5lIHgxPSIxMCIgeDI9IjMiIHkxPSI0IiB5Mj0iNCIgLz4KICA8bGluZSB4MT0iMjEiIHgyPSIxMiIgeTE9IjEyIiB5Mj0iMTIiIC8+CiAgPGxpbmUgeDE9IjgiIHgyPSIzIiB5MT0iMTIiIHkyPSIxMiIgLz4KICA8bGluZSB4MT0iMjEiIHgyPSIxNiIgeTE9IjIwIiB5Mj0iMjAiIC8+CiAgPGxpbmUgeDE9IjEyIiB4Mj0iMyIgeTE9IjIwIiB5Mj0iMjAiIC8+CiAgPGxpbmUgeDE9IjE0IiB4Mj0iMTQiIHkxPSIyIiB5Mj0iNiIgLz4KICA8bGluZSB4MT0iOCIgeDI9IjgiIHkxPSIxMCIgeTI9IjE0IiAvPgogIDxsaW5lIHgxPSIxNiIgeDI9IjE2IiB5MT0iMTgiIHkyPSIyMiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/sliders-horizontal\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst SlidersHorizontal = createLucideIcon('SlidersHorizontal', [\n ['line', { x1: '21', x2: '14', y1: '4', y2: '4', key: 'obuewd' }],\n ['line', { x1: '10', x2: '3', y1: '4', y2: '4', key: '1q6298' }],\n ['line', { x1: '21', x2: '12', y1: '12', y2: '12', key: '1iu8h1' }],\n ['line', { x1: '8', x2: '3', y1: '12', y2: '12', key: 'ntss68' }],\n ['line', { x1: '21', x2: '16', y1: '20', y2: '20', key: '14d8ph' }],\n ['line', { x1: '12', x2: '3', y1: '20', y2: '20', key: 'm0wm8r' }],\n ['line', { x1: '14', x2: '14', y1: '2', y2: '6', key: '14e1ph' }],\n ['line', { x1: '8', x2: '8', y1: '10', y2: '14', key: '1i6ji0' }],\n ['line', { x1: '16', x2: '16', y1: '18', y2: '22', key: '1lctlv' }],\n]);\n\nexport default SlidersHorizontal;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name User\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTkgMjF2LTJhNCA0IDAgMCAwLTQtNEg5YTQgNCAwIDAgMC00IDR2MiIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjciIHI9IjQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/user\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst User = createLucideIcon('User', [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2', key: '975kel' }],\n ['circle', { cx: '12', cy: '7', r: '4', key: '17ys0d' }],\n]);\n\nexport default User;\n"],"names":["valuesEqual","a","b","Array","isArray","length","every","v","i","DirtyFieldsContext","DirtyFieldsProvider","children","dirtyFields","setDirtyFields","Map","discardGeneration","setDiscardGeneration","setDirty","key","value","serverValue","prev","undefined","has","next","delete","set","clearDirty","clearDirtyKeys","keys","some","k","discardAll","g","isDirty","size","dirtyCount","Provider","useDiscardGeneration","ctx","useDirtyFields","Error","deferSaveFor","serverConfig","dv","get"],"mappings":"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A,CAAA,OCQM,CCAA,ACAA,ACAA,AHAA,CGAA,AFAA,ACAA,AFAA,CCAA,AEAA,AHAA,AEAA,CDAA,ADAA,AEAA,ACAA,CAAA,AFAA,ADAA,AEAA,CAAA,CAAA,EFAgB,CEAhB,CAAA,CAAA,MAAA,EFAiC,gBAAiB,CAAA,KEAQ,CAAA,GFCnD,CEAA,ADAA,CAAA,ACAA,IFAO,CGAyC,ADAtC,AFAH,CGAyC,ADAtC,AFAH,EAAK,OAAQ,IAAK,CGAuB,ADAxB,AFAC,ACAJ,CDAO,IAAK,CGAe,ADAf,ADAH,ADAG,CAAG,CGAY,GHAP,CGAO,AFAL,ACAL,AFAO,EAAA,CCAF,AEAK,GHAE,CGAF,AFAI,ADAF,EAAA,IAAS,CAAA,CAAA,EAAK,CGAD,AHAC,OAAA,CAAU,CAAA,CAAA,CAEnF,CCAD,ACAA,AFAC,CAAA,AEAD,ADAA,CDAC,ACAD,ACAA,CDAA,ADAC,AEAD,CAAA,AFAC,ACAO,CCAR,AFAC,ACAO,CDCP,CCAD,ADAC,AACE,AEDH,CAAA,ADCA,ACAA,AFAM,ACDN,CAAA,ACAA,ADCA,ACAA,CADA,ADAA,CAAQ,ACAR,CAAA,ADAQ,4EDEA,CAAA,AEAE,ADAF,ODCP,CEAD,ADAA,ADAC,CCAD,ACAA,CAAA,ADAA,CCAA,ADAA,ADEA,CEFA,ADAQ,ACER,ADAA,ADAA,CAAA,ACFQ,AAER,ACAA,AAFA,CDEA,ADAA,AEAA,CAAA,AFAA,ACAA,CCAA,AFAA,ACAA,CCAA,ADAQ,ADAA,CEAR,ADAQ,ADAA,CEAE,ADAF,ADAA,AAAE,CEAA,CAAA,AFAG,WAAY,CAAA,AEAK,ADAP,CDAE,ACAF,ACAO,EFAA,EEAA,CAAI,OFAM,CAAA,AEAA,CAAI,AFC5C,CAAA,ACAA,CAAA,ADAA,CAAA,ACAA,CAAA,ADAA,CCAA,ADAA,CCAQ,ADAA,CCAA,ADAA,CCAA,ADAA,AAAE,EAAG,CCAW,ADAC,CCAD,ADAC,CCAD,ADAC,CCAD,ADAC,CCAD,ADAC,CCAD,ADAC,CAAA,ACAD,CAAA,ADAC,CCAD,ADAC,CCAD,ADAC,CAAA,CAAA,ACAD,CAAA,ADAC,CAAA,ACAD,CDAM,UAAU,CAAA,AACzC,CAAC,CAAA,CA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","ignoreList":[2,3,4,6,7,8,9]}
@@ -0,0 +1,5 @@
1
+ module.exports=[78933,a=>{"use strict";var b=a.i(76015),c=a.i(81130),d=a.i(59974);a.s(["useSaveConfig",0,function(){let a=(0,c.useQueryClient)(),[e,f]=(0,b.useState)(null),g=(0,b.useCallback)((a,b)=>{f({type:a,message:b}),setTimeout(()=>f(null),4e3)},[]),h=(0,b.useCallback)((a,b)=>{let c=Object.values(a.errors??{});c.length>0?g("warning",c.join(" ")):a.requiresRestart?.length>0?g("warning",`Updated. Restart daemon for: ${a.requiresRestart.join(", ")}`):g("success",b)},[g]),i=(0,b.useCallback)(async(b,c)=>{try{let e=await d.api.patch("/config",{[b]:c});a.invalidateQueries({queryKey:["config"]}),h(e,"Setting updated")}catch(a){throw g("error",`Failed to save: ${a instanceof Error?a.message:"Unknown error"}`),a}},[a,h,g]),j=(0,b.useCallback)(async b=>{try{let c=await d.api.patch("/config",b);a.invalidateQueries({queryKey:["config"]}),h(c,"Settings updated")}catch(a){throw g("error",`Failed to save: ${a instanceof Error?a.message:"Unknown error"}`),a}},[a,h,g]);return{toast:e,showToast:g,saveField:i,saveMultipleFields:j,patchConfig:(0,b.useCallback)(async b=>{let c=await d.api.patch("/config",b);return a.invalidateQueries({queryKey:["config"]}),c},[a])}}])},95024,a=>{"use strict";let b=(0,a.i(5423).default)("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);a.s(["Save",0,b],95024)},95097,a=>{"use strict";var b=a.i(62588),c=a.i(59974);a.s(["useProcessConfig",0,function(a){return(0,b.useQuery)({queryKey:["process-config"],queryFn:()=>c.api.get("/process-config"),enabled:a?.enabled??!0,staleTime:6e4})}])},59616,a=>{"use strict";let b=(0,a.i(5423).default)("Undo2",[["path",{d:"M9 14 4 9l5-5",key:"102s5s"}],["path",{d:"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11",key:"f3b9sd"}]]);a.s(["Undo2",0,b],59616)},51141,a=>{"use strict";let b=["claude-sonnet-4-6","claude-opus-4-6"];b[0],a.s(["ADVISOR_ALLOWED_MODELS",0,b,"isAdvisorModel",0,function(a){return"string"==typeof a&&b.includes(a)}])},94871,a=>{"use strict";var b=a.i(81673),c=a.i(92379),d=a.i(74345),e=a.i(32307),f=a.i(81623);a.i(70010);var g=a.i(51141),h=a.i(59974),i=a.i(62588),j=a.i(95097);let k=g.ADVISOR_ALLOWED_MODELS.map(a=>a.replace(/^claude-/,"").toLowerCase()),l=new Set(["message.dm","message.mention","dashboard.chat","agent.task","routine.morning_routine","routine.evening_review","routine.weekly_review","routine.monthly_review","routine.hourly_check"]);function m(){let a=(0,i.useQuery)({queryKey:["backends","advisor"],queryFn:()=>h.api.get("/backends/advisor"),enabled:(void 0)??!0,staleTime:6e4,retry:!1}),c=(0,j.useProcessConfig)();if(a.error instanceof h.ApiError&&503===a.error.status||c.error instanceof h.ApiError&&503===c.error.status||a.isLoading||c.isLoading)return null;if(a.error||c.error)return(0,b.jsxs)("div",{role:"status",className:"flex items-start gap-3 rounded-lg border border-border bg-muted/30 p-3 text-xs text-muted-foreground",children:[(0,b.jsx)(f.Info,{className:"mt-0.5 h-4 w-4 flex-shrink-0","aria-hidden":"true"}),(0,b.jsx)("span",{children:"Advisor compatibility check unavailable. Refresh the page or check the daemon logs if you rely on the advisor tool."})]});let d=a.data,g=c.data?.configs??[];if(!d?.enabled)return null;let m=g.filter(a=>{let b;return b=a.mainModel.toLowerCase(),!k.some(a=>b.includes(a))});if(0===m.length)return null;let n=m.filter(a=>l.has(a.processKey)),o=m.filter(a=>!l.has(a.processKey));return n.length>0?(0,b.jsxs)("div",{role:"alert",className:"flex items-start gap-3 rounded-lg border border-yellow-500/40 bg-yellow-500/10 p-4 text-sm",children:[(0,b.jsx)(e.AlertTriangle,{className:"mt-0.5 h-5 w-5 flex-shrink-0 text-yellow-600","aria-hidden":"true"}),(0,b.jsxs)("div",{className:"space-y-1 [&>p]:max-w-prose",children:[(0,b.jsx)("p",{className:"font-medium text-yellow-900 dark:text-yellow-100",children:"Advisor-incompatible models on high-stakes processes"}),(0,b.jsxs)("p",{className:"text-yellow-900/80 dark:text-yellow-100/80",children:["Advisor is enabled on"," ",(0,b.jsx)("code",{className:"rounded bg-yellow-500/20 px-1 py-0.5",children:d.model??"(unset)"}),", but the Claude Agent SDK only registers the"," ",(0,b.jsx)("code",{children:"advisor_20260301"})," tool on base models whose id contains"," ",k.map((a,c)=>(0,b.jsxs)("span",{children:[c>0&&(c===k.length-1?" or ":", "),(0,b.jsx)("code",{children:a})]},a)),". The following processes are pinned to incompatible models and will silently skip advisor calls:"]}),(0,b.jsx)("p",{className:"text-yellow-900/80 dark:text-yellow-100/80",children:n.map((a,c)=>(0,b.jsxs)("span",{children:[c>0&&", ",(0,b.jsx)("code",{className:"rounded bg-yellow-500/20 px-1 py-0.5",children:a.processKey})," → ",(0,b.jsx)("code",{className:"rounded bg-yellow-500/20 px-1 py-0.5",children:a.mainModel})]},a.processKey))}),(0,b.jsxs)("p",{className:"text-yellow-900/70 dark:text-yellow-100/70",children:["Either switch these processes to a Sonnet/Opus model above, or disable advisor on"," ",(0,b.jsx)("a",{className:"underline",href:"/settings/models",children:"/settings/models"}),"."]}),o.length>0&&(0,b.jsxs)("p",{className:"text-yellow-900/60 dark:text-yellow-100/60",children:["(",o.length," additional low-stakes process",1===o.length?"":"es"," also incompatible.)"]})]})]}):(0,b.jsxs)("div",{role:"status",className:"flex items-start gap-3 rounded-lg border border-border bg-muted/30 p-3 text-xs text-muted-foreground",children:[(0,b.jsx)(f.Info,{className:"mt-0.5 h-4 w-4 flex-shrink-0","aria-hidden":"true"}),(0,b.jsxs)("span",{children:[o.length," low-stakes process",1===o.length?"":"es"," pinned to an advisor-incompatible model. Advisor is skipped there — usually harmless. (",o.map(a=>a.processKey).join(", "),")"]})]})}var n=a.i(76015),o=a.i(95024),p=a.i(59616),q=a.i(82070),r=a.i(21218),s=a.i(29629),t=a.i(28314),u=a.i(78933);let v=new Set(q.RESTART_REQUIRED_KEY_TUPLE);function w(a){return v.has(a)}function x(){let{dirtyFields:a,dirtyCount:d,isDirty:e,discardAll:f,clearDirtyKeys:g}=(0,c.useDirtyFields)(),{patchConfig:h}=(0,u.useSaveConfig)(),i=(0,t.useConfirm)();(0,n.useEffect)(()=>{if(!e)return;let a=a=>{a.preventDefault()};return window.addEventListener("beforeunload",a),()=>window.removeEventListener("beforeunload",a)},[e]),(0,n.useEffect)(()=>{if(!e)return;let a=a=>{let b=a.target.closest?.("a");if(!b)return;let c=b.getAttribute("href");!c||c.startsWith("/settings")||c.startsWith("http")||window.confirm("You have unsaved settings changes. Leave without saving?")||(a.preventDefault(),a.stopPropagation())};return document.addEventListener("click",a,!0),()=>document.removeEventListener("click",a,!0)},[e]);let[j,k]=(0,n.useState)(!1),[l,m]=(0,n.useState)(null);if(!e&&!l)return null;let q=[...a.keys()].filter(w),v=async()=>{if(!(q.length>0)||await i({title:"Daemon restart required",description:`This change requires a daemon restart to take effect. The agent will be unavailable for ~5 seconds.
2
+
3
+ Affected: ${q.join(", ")}`,confirmLabel:"Save & restart",variant:"destructive"})){k(!0),m(null);try{let b=Object.fromEntries(a),c=await h(b),d=Object.values(c.errors??{});if(d.length>0){let a=c.updated??[];a.length>0&&g(a),m({type:"error",message:d.join(" ")})}else c.requiresRestart?.length>0?(m({type:"warning",message:`Saved. Restart daemon for: ${c.requiresRestart.join(", ")}`}),f()):(m({type:"success",message:"All settings saved"}),f(),setTimeout(()=>m(null),3e3))}catch(a){m({type:"error",message:`Save failed: ${a instanceof Error?a.message:"Unknown error"}`})}finally{k(!1)}}};return(0,b.jsxs)("div",{className:"sticky bottom-0 z-30 -mx-6 mt-6 border-t border-border bg-background/95 backdrop-blur-sm px-6 py-3",children:[l&&(0,b.jsx)(s.Alert,{variant:l.type,className:"mb-3",children:l.message}),e&&(0,b.jsxs)("div",{className:"flex items-center justify-between gap-4",children:[(0,b.jsxs)("p",{className:"text-sm text-muted-foreground",children:[d," unsaved change",1!==d?"s":"",q.length>0&&(0,b.jsx)("span",{className:"ml-1 text-amber-600 dark:text-amber-400",children:"(restart required)"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)(r.Button,{variant:"outline",size:"sm",onClick:()=>{f(),m(null)},disabled:j,children:[(0,b.jsx)(p.Undo2,{className:"h-3.5 w-3.5 mr-1"}),"Discard"]}),(0,b.jsxs)(r.Button,{size:"sm",onClick:v,disabled:j,children:[(0,b.jsx)(o.Save,{className:"h-3.5 w-3.5 mr-1"}),j?"Saving...":"Save"]})]})]})]})}function y({children:a}){return(0,b.jsxs)("div",{className:"min-w-0 flex-1 space-y-6",children:[(0,b.jsx)(m,{}),a,(0,b.jsx)(x,{})]})}a.s(["SettingsShell",0,function({children:a}){return(0,b.jsx)(c.DirtyFieldsProvider,{children:(0,b.jsxs)("div",{className:"mx-auto flex max-w-7xl flex-col gap-6 p-6 md:flex-row md:items-start md:gap-8",children:[(0,b.jsx)("aside",{className:"md:sticky md:top-6",children:(0,b.jsx)(d.SettingsNavigation,{})}),(0,b.jsx)(y,{children:a})]})})}],94871)}];
4
+
5
+ //# sourceMappingURL=_0vn5_62._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../packages/dashboard/src/lib/hooks/use-save-config.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/save.ts","../../../../../../packages/dashboard/src/lib/hooks/use-process-config.ts","../../../../../../node_modules/.pnpm/lucide-react%400.468.0_react%4019.2.4/node_modules/lucide-react/src/icons/undo-2.ts","../../../../../../packages/shared/src/advisor-models.ts","../../../../../../packages/dashboard/src/components/settings/settings-shell.tsx","../../../../../../packages/dashboard/src/components/settings/haiku-advisor-warning.tsx","../../../../../../packages/dashboard/src/lib/hooks/use-advisor.ts","../../../../../../packages/dashboard/src/components/settings/save-bar.tsx","../../../../../../packages/dashboard/src/components/settings/settings-content.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\nimport type { ConfigUpdateResponse } from \"@/lib/api-types\";\nimport type { SettingsToastState } from \"@/components/settings/settings-navigation\";\nimport type { EditableConfigKey } from \"@aitne/shared\";\n\nexport type ConfigValue =\n | string\n | number\n | boolean\n | string[]\n | Record<string, unknown>[]\n | null;\n\nexport type SaveFieldFn = (\n key: EditableConfigKey,\n value: ConfigValue,\n) => Promise<void>;\n\nexport function useSaveConfig() {\n const queryClient = useQueryClient();\n const [toast, setToast] = useState<SettingsToastState | null>(null);\n\n const showToast = useCallback(\n (type: SettingsToastState[\"type\"], message: string) => {\n setToast({ type, message });\n setTimeout(() => setToast(null), 4000);\n },\n [],\n );\n\n const interpret = useCallback(\n (res: ConfigUpdateResponse, successMessage: string) => {\n const warnings = Object.values(res.errors ?? {});\n if (warnings.length > 0) {\n showToast(\"warning\", warnings.join(\" \"));\n } else if (res.requiresRestart?.length > 0) {\n showToast(\n \"warning\",\n `Updated. Restart daemon for: ${res.requiresRestart.join(\", \")}`,\n );\n } else {\n showToast(\"success\", successMessage);\n }\n },\n [showToast],\n );\n\n const saveField = useCallback(\n async (key: EditableConfigKey, value: ConfigValue) => {\n try {\n const res = await api.patch<ConfigUpdateResponse>(\"/config\", {\n [key]: value,\n });\n queryClient.invalidateQueries({ queryKey: [\"config\"] });\n interpret(res, \"Setting updated\");\n } catch (e) {\n showToast(\n \"error\",\n `Failed to save: ${e instanceof Error ? e.message : \"Unknown error\"}`,\n );\n throw e;\n }\n },\n [queryClient, interpret, showToast],\n );\n\n const saveMultipleFields = useCallback(\n async (updates: Partial<Record<EditableConfigKey, ConfigValue>>) => {\n try {\n const res = await api.patch<ConfigUpdateResponse>(\"/config\", updates);\n queryClient.invalidateQueries({ queryKey: [\"config\"] });\n interpret(res, \"Settings updated\");\n } catch (e) {\n showToast(\n \"error\",\n `Failed to save: ${e instanceof Error ? e.message : \"Unknown error\"}`,\n );\n throw e;\n }\n },\n [queryClient, interpret, showToast],\n );\n\n /**\n * Lower-level PATCH /config — makes the API call and invalidates queries\n * but does NOT show a toast. Used by SettingsSaveBar which handles its\n * own feedback.\n */\n const patchConfig = useCallback(\n async (updates: Partial<Record<EditableConfigKey, ConfigValue>>) => {\n const res = await api.patch<ConfigUpdateResponse>(\"/config\", updates);\n queryClient.invalidateQueries({ queryKey: [\"config\"] });\n return res;\n },\n [queryClient],\n );\n\n return { toast, showToast, saveField, saveMultipleFields, patchConfig };\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Save\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUuMiAzYTIgMiAwIDAgMSAxLjQuNmwzLjggMy44YTIgMiAwIDAgMSAuNiAxLjRWMTlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yeiIgLz4KICA8cGF0aCBkPSJNMTcgMjF2LTdhMSAxIDAgMCAwLTEtMUg4YTEgMSAwIDAgMC0xIDF2NyIgLz4KICA8cGF0aCBkPSJNNyAzdjRhMSAxIDAgMCAwIDEgMWg3IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/save\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Save = createLucideIcon('Save', [\n [\n 'path',\n {\n d: 'M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z',\n key: '1c8476',\n },\n ],\n ['path', { d: 'M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7', key: '1ydtos' }],\n ['path', { d: 'M7 3v4a1 1 0 0 0 1 1h7', key: 't51u73' }],\n]);\n\nexport default Save;\n","\"use client\";\n\nimport { useQuery } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\nimport type { ProcessConfigResponse } from \"@/lib/api-types\";\n\nexport function useProcessConfig(options?: { enabled?: boolean }) {\n return useQuery({\n queryKey: [\"process-config\"],\n queryFn: () => api.get<ProcessConfigResponse>(\"/process-config\"),\n enabled: options?.enabled ?? true,\n staleTime: 60_000,\n });\n}\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Undo2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOSAxNCA0IDlsNS01IiAvPgogIDxwYXRoIGQ9Ik00IDloMTAuNWE1LjUgNS41IDAgMCAxIDUuNSA1LjVhNS41IDUuNSAwIDAgMS01LjUgNS41SDExIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/undo-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Undo2 = createLucideIcon('Undo2', [\n ['path', { d: 'M9 14 4 9l5-5', key: '102s5s' }],\n ['path', { d: 'M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11', key: 'f3b9sd' }],\n]);\n\nexport default Undo2;\n","/**\n * Advisor model allowlist — single source of truth for which Claude\n * model IDs the Claude Agent SDK accepts as the `advisor_20260301`\n * server-side tool.\n *\n * The SDK ships its own substring-based allowlist (`zR6` / `w88` in\n * SDK 0.2.98) that currently matches only `*opus-4-6` and\n * `*sonnet-4-6`. Opus 4.7 is the daemon's preferred heavy main model\n * but is silently rejected by the SDK's advisor path — see\n * `docs/advisor.md` §\"SDK compatibility\" and the auto-memory entry\n * `project_advisor_sdk_constraint`.\n *\n * Three places must agree on this allowlist:\n * 1. `packages/daemon/src/settings/runtime-settings.ts`\n * — runtime-config zod refine\n * 2. `packages/daemon/src/api/routes/backends.ts`\n * — `PUT /api/backends/advisor` body schema\n * 3. `packages/dashboard/src/components/settings/backends-and-plans-section.tsx`\n * — dropdown filter + form fallback default\n *\n * Update them by bumping this list. The first element is the canonical\n * default surfaced when no model has been picked yet (preserved from\n * the prior triple-hardcoded value).\n *\n * Tests intentionally hardcode these IDs as fixtures\n * (`docs/maintenance.md` §\"Adding a model\" \"Pitfalls\"). Don't alias\n * test fixtures to this constant — the fixture stability is the point.\n */\nexport const ADVISOR_ALLOWED_MODELS = [\n \"claude-sonnet-4-6\",\n \"claude-opus-4-6\",\n] as const;\n\nexport type AdvisorModel = (typeof ADVISOR_ALLOWED_MODELS)[number];\n\n/** Default advisor model surfaced in the dashboard when no value is set. */\nexport const DEFAULT_ADVISOR_MODEL: AdvisorModel = ADVISOR_ALLOWED_MODELS[0];\n\nexport function isAdvisorModel(value: unknown): value is AdvisorModel {\n return (\n typeof value === \"string\"\n && (ADVISOR_ALLOWED_MODELS as readonly string[]).includes(value)\n );\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { DirtyFieldsProvider } from \"@/lib/hooks/use-dirty-fields\";\nimport { SettingsNavigation } from \"@/components/settings/settings-navigation\";\nimport { SettingsContent } from \"@/components/settings/settings-content\";\n\n/**\n * Top-level client wrapper for the settings layout.\n * Provides DirtyFieldsProvider to both the sidebar (SettingsNavigation)\n * and the content area (SettingsContent + SaveBar).\n *\n * The Cmd+K palette is mounted globally by `<LayoutShell>` so the\n * \"Ask docs…\" action (DOCS_QA_DASHBOARD_DESIGN.md §9) is reachable\n * from every page, not just the settings tree.\n */\nexport function SettingsShell({ children }: { children: ReactNode }) {\n return (\n <DirtyFieldsProvider>\n <div className=\"mx-auto flex max-w-7xl flex-col gap-6 p-6 md:flex-row md:items-start md:gap-8\">\n <aside className=\"md:sticky md:top-6\">\n <SettingsNavigation />\n </aside>\n <SettingsContent>{children}</SettingsContent>\n </div>\n </DirtyFieldsProvider>\n );\n}\n","\"use client\";\n\nimport { AlertTriangle, Info } from \"lucide-react\";\nimport { ADVISOR_ALLOWED_MODELS } from \"@aitne/shared\";\nimport { ApiError } from \"@/lib/api-client\";\nimport { useAdvisor } from \"@/lib/hooks/use-advisor\";\nimport { useProcessConfig } from \"@/lib/hooks/use-process-config\";\n\n/**\n * SDK gate (`zR6` in `@anthropic-ai/claude-agent-sdk` cli.js): the advisor\n * tool is only registered when the base model id contains one of the\n * `ADVISOR_ALLOWED_MODELS` substrings (today: `sonnet-4-6`, `opus-4-6`).\n * Anything else — any Haiku variant, older Sonnet/Opus, future unnamed\n * variants — is rejected with a stderr log and the advisor call becomes a\n * silent no-op.\n *\n * Substrings are derived from the shared allowlist so a registry bump\n * cascades here without a dashboard edit.\n */\nconst ADVISOR_ALLOWED_SUBSTRINGS = ADVISOR_ALLOWED_MODELS.map((m) =>\n m.replace(/^claude-/, \"\").toLowerCase(),\n);\n\nfunction isAdvisorCompatibleBase(modelId: string): boolean {\n const lower = modelId.toLowerCase();\n return ADVISOR_ALLOWED_SUBSTRINGS.some((s) => lower.includes(s));\n}\n\n/**\n * Processes where skipping advisor materially hurts quality. Low-stakes\n * observer-style flows (`schedule.approaching`, `calendar.change`) don't\n * really benefit from advisor consultation, so incompatibility there is\n * not worth escalating into a loud warning.\n *\n * If advisor-incompatible bindings only exist on low-stakes processes we\n * surface an `info` (muted) note instead of a full yellow warning.\n */\nconst HIGH_STAKES_PROCESS_KEYS = new Set([\n \"message.dm\",\n \"message.mention\",\n \"dashboard.chat\",\n \"agent.task\",\n \"routine.morning_routine\",\n \"routine.evening_review\",\n \"routine.weekly_review\",\n \"routine.monthly_review\",\n \"routine.hourly_check\",\n]);\n\n/**\n * Surface the silent no-op trap where a process is pinned to a model the\n * Claude Agent SDK will reject as an advisor base (Haiku, older variants,\n * future unnamed models) AND advisor is enabled in `backend_global_defaults`.\n *\n * Uses TanStack Query (shared `queryKey`s with `useBackends` / `useProcessConfig`)\n * so an edit on the Models page invalidates and re-evaluates this warning\n * without a page refresh.\n */\nexport function HaikuAdvisorWarning() {\n const advisorQuery = useAdvisor();\n const processQuery = useProcessConfig();\n\n // Multi-backend tables not yet provisioned (503) → silently hide. This is\n // the only case we swallow; other errors are surfaced as a muted note so\n // the user isn't misled about advisor state.\n const isMultiBackendUnavailable =\n (advisorQuery.error instanceof ApiError\n && advisorQuery.error.status === 503)\n || (processQuery.error instanceof ApiError\n && processQuery.error.status === 503);\n\n if (isMultiBackendUnavailable) return null;\n if (advisorQuery.isLoading || processQuery.isLoading) return null;\n\n if (advisorQuery.error || processQuery.error) {\n // Non-503 failure — we can't evaluate the invariant, so tell the user\n // rather than silently hiding the warning surface.\n return (\n <div\n role=\"status\"\n className=\"flex items-start gap-3 rounded-lg border border-border bg-muted/30 p-3 text-xs text-muted-foreground\"\n >\n <Info className=\"mt-0.5 h-4 w-4 flex-shrink-0\" aria-hidden=\"true\" />\n <span>\n Advisor compatibility check unavailable. Refresh the page or check\n the daemon logs if you rely on the advisor tool.\n </span>\n </div>\n );\n }\n\n const advisor = advisorQuery.data;\n const processConfigs = processQuery.data?.configs ?? [];\n\n if (!advisor?.enabled) return null;\n\n const incompatibleRows = processConfigs.filter(\n (row) => !isAdvisorCompatibleBase(row.mainModel),\n );\n if (incompatibleRows.length === 0) return null;\n\n const highStakes = incompatibleRows.filter((row) =>\n HIGH_STAKES_PROCESS_KEYS.has(row.processKey),\n );\n const lowStakes = incompatibleRows.filter(\n (row) => !HIGH_STAKES_PROCESS_KEYS.has(row.processKey),\n );\n\n // High-stakes banner: yellow warning with action guidance.\n if (highStakes.length > 0) {\n return (\n <div\n role=\"alert\"\n className=\"flex items-start gap-3 rounded-lg border border-yellow-500/40 bg-yellow-500/10 p-4 text-sm\"\n >\n <AlertTriangle\n className=\"mt-0.5 h-5 w-5 flex-shrink-0 text-yellow-600\"\n aria-hidden=\"true\"\n />\n <div className=\"space-y-1 [&>p]:max-w-prose\">\n <p className=\"font-medium text-yellow-900 dark:text-yellow-100\">\n Advisor-incompatible models on high-stakes processes\n </p>\n <p className=\"text-yellow-900/80 dark:text-yellow-100/80\">\n Advisor is enabled on{\" \"}\n <code className=\"rounded bg-yellow-500/20 px-1 py-0.5\">\n {advisor.model ?? \"(unset)\"}\n </code>\n , but the Claude Agent SDK only registers the{\" \"}\n <code>advisor_20260301</code> tool on base models whose id\n contains{\" \"}\n {ADVISOR_ALLOWED_SUBSTRINGS.map((s, i) => (\n <span key={s}>\n {i > 0 && (i === ADVISOR_ALLOWED_SUBSTRINGS.length - 1\n ? \" or \"\n : \", \")}\n <code>{s}</code>\n </span>\n ))}\n . The following processes are pinned to incompatible models and\n will silently skip advisor calls:\n </p>\n <p className=\"text-yellow-900/80 dark:text-yellow-100/80\">\n {highStakes.map((row, idx) => (\n <span key={row.processKey}>\n {idx > 0 && \", \"}\n <code className=\"rounded bg-yellow-500/20 px-1 py-0.5\">\n {row.processKey}\n </code>\n {\" → \"}\n <code className=\"rounded bg-yellow-500/20 px-1 py-0.5\">\n {row.mainModel}\n </code>\n </span>\n ))}\n </p>\n <p className=\"text-yellow-900/70 dark:text-yellow-100/70\">\n Either switch these processes to a Sonnet/Opus model above,\n or disable advisor on{\" \"}\n <a className=\"underline\" href=\"/settings/models\">\n /settings/models\n </a>\n .\n </p>\n {lowStakes.length > 0 && (\n <p className=\"text-yellow-900/60 dark:text-yellow-100/60\">\n ({lowStakes.length} additional low-stakes process\n {lowStakes.length === 1 ? \"\" : \"es\"} also incompatible.)\n </p>\n )}\n </div>\n </div>\n );\n }\n\n // Only low-stakes processes are incompatible → muted info note (not alarm).\n return (\n <div\n role=\"status\"\n className=\"flex items-start gap-3 rounded-lg border border-border bg-muted/30 p-3 text-xs text-muted-foreground\"\n >\n <Info className=\"mt-0.5 h-4 w-4 flex-shrink-0\" aria-hidden=\"true\" />\n <span>\n {lowStakes.length} low-stakes process\n {lowStakes.length === 1 ? \"\" : \"es\"} pinned to an advisor-incompatible\n model. Advisor is skipped there — usually harmless. (\n {lowStakes.map((r) => r.processKey).join(\", \")})\n </span>\n </div>\n );\n}\n","\"use client\";\n\nimport { useQuery } from \"@tanstack/react-query\";\nimport { api } from \"@/lib/api-client\";\n\nexport interface AdvisorResponse {\n enabled: boolean;\n model: string | null;\n}\n\nexport function useAdvisor(options?: { enabled?: boolean }) {\n return useQuery({\n queryKey: [\"backends\", \"advisor\"],\n queryFn: () => api.get<AdvisorResponse>(\"/backends/advisor\"),\n enabled: options?.enabled ?? true,\n staleTime: 60_000,\n retry: false,\n });\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Save, Undo2 } from \"lucide-react\";\nimport { RESTART_REQUIRED_KEY_TUPLE } from \"@aitne/shared\";\nimport type { EditableConfigKey } from \"@aitne/shared\";\nimport { Button } from \"@/components/ui/button\";\nimport { Alert } from \"@/components/ui/alert\";\nimport { useConfirm } from \"@/components/shared/confirm-dialog\";\nimport { useDirtyFields } from \"@/lib/hooks/use-dirty-fields\";\nimport { useSaveConfig, type ConfigValue } from \"@/lib/hooks/use-save-config\";\n\nconst RESTART_SET = new Set<string>(RESTART_REQUIRED_KEY_TUPLE);\n\nfunction isRestartRequired(key: EditableConfigKey): boolean {\n return RESTART_SET.has(key);\n}\n\n/**\n * Warns the user when they try to close the tab or navigate away externally\n * with unsaved settings changes.\n */\nfunction useBeforeUnloadGuard(isDirty: boolean) {\n useEffect(() => {\n if (!isDirty) return;\n const handler = (e: BeforeUnloadEvent) => {\n e.preventDefault();\n };\n window.addEventListener(\"beforeunload\", handler);\n return () => window.removeEventListener(\"beforeunload\", handler);\n }, [isDirty]);\n}\n\n/**\n * Intercepts clicks on `<a>` elements that navigate away from /settings/*\n * (e.g. the main sidebar links to /chat, /activity). Shows a native confirm\n * dialog; if cancelled, prevents the navigation.\n *\n * Uses capture phase so it fires before Next.js's Link click handler.\n */\nfunction useClientNavigationGuard(isDirty: boolean) {\n useEffect(() => {\n if (!isDirty) return;\n const handler = (e: MouseEvent) => {\n // Walk up from click target to find the nearest <a>\n const anchor = (e.target as HTMLElement).closest?.(\"a\");\n if (!anchor) return;\n const href = anchor.getAttribute(\"href\");\n if (!href) return;\n // Only guard navigations AWAY from settings\n if (href.startsWith(\"/settings\")) return;\n // External links are handled by beforeunload\n if (href.startsWith(\"http\")) return;\n // This is an in-app navigation leaving settings — confirm\n const ok = window.confirm(\n \"You have unsaved settings changes. Leave without saving?\",\n );\n if (!ok) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n document.addEventListener(\"click\", handler, true); // capture phase\n return () => document.removeEventListener(\"click\", handler, true);\n }, [isDirty]);\n}\n\n/**\n * Sticky bar rendered at the bottom of the settings content area.\n * Visible only when at least one field has been modified but not yet saved.\n */\nexport function SettingsSaveBar() {\n const { dirtyFields, dirtyCount, isDirty, discardAll, clearDirtyKeys } = useDirtyFields();\n const { patchConfig } = useSaveConfig();\n const confirmDialog = useConfirm();\n useBeforeUnloadGuard(isDirty);\n useClientNavigationGuard(isDirty);\n const [saving, setSaving] = useState(false);\n const [feedback, setFeedback] = useState<{\n type: \"success\" | \"error\" | \"warning\";\n message: string;\n } | null>(null);\n\n if (!isDirty && !feedback) return null;\n\n const restartKeys = [...dirtyFields.keys()].filter(isRestartRequired);\n\n const handleSave = async () => {\n if (restartKeys.length > 0) {\n const ok = await confirmDialog({\n title: \"Daemon restart required\",\n description: `This change requires a daemon restart to take effect. The agent will be unavailable for ~5 seconds.\\n\\nAffected: ${restartKeys.join(\", \")}`,\n confirmLabel: \"Save & restart\",\n variant: \"destructive\",\n });\n if (!ok) return;\n }\n\n setSaving(true);\n setFeedback(null);\n try {\n const updates = Object.fromEntries(dirtyFields) as Partial<\n Record<EditableConfigKey, ConfigValue>\n >;\n const res = await patchConfig(updates);\n\n const errors = Object.values(res.errors ?? {});\n if (errors.length > 0) {\n // Partial success: clear the keys that did succeed, keep the failed ones dirty.\n const updatedKeys = (res.updated ?? []) as EditableConfigKey[];\n if (updatedKeys.length > 0) {\n clearDirtyKeys(updatedKeys);\n }\n setFeedback({ type: \"error\", message: errors.join(\" \") });\n } else if (res.requiresRestart?.length > 0) {\n setFeedback({\n type: \"warning\",\n message: `Saved. Restart daemon for: ${res.requiresRestart.join(\", \")}`,\n });\n discardAll();\n } else {\n setFeedback({ type: \"success\", message: \"All settings saved\" });\n discardAll();\n setTimeout(() => setFeedback(null), 3000);\n }\n } catch (e) {\n setFeedback({\n type: \"error\",\n message: `Save failed: ${e instanceof Error ? e.message : \"Unknown error\"}`,\n });\n } finally {\n setSaving(false);\n }\n };\n\n const handleDiscard = () => {\n discardAll();\n setFeedback(null);\n };\n\n return (\n <div className=\"sticky bottom-0 z-30 -mx-6 mt-6 border-t border-border bg-background/95 backdrop-blur-sm px-6 py-3\">\n {feedback && (\n <Alert variant={feedback.type} className=\"mb-3\">\n {feedback.message}\n </Alert>\n )}\n {isDirty && (\n <div className=\"flex items-center justify-between gap-4\">\n <p className=\"text-sm text-muted-foreground\">\n {dirtyCount} unsaved change{dirtyCount !== 1 ? \"s\" : \"\"}\n {restartKeys.length > 0 && (\n <span className=\"ml-1 text-amber-600 dark:text-amber-400\">\n (restart required)\n </span>\n )}\n </p>\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleDiscard}\n disabled={saving}\n >\n <Undo2 className=\"h-3.5 w-3.5 mr-1\" />\n Discard\n </Button>\n <Button size=\"sm\" onClick={handleSave} disabled={saving}>\n <Save className=\"h-3.5 w-3.5 mr-1\" />\n {saving ? \"Saving...\" : \"Save\"}\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { HaikuAdvisorWarning } from \"@/components/settings/haiku-advisor-warning\";\nimport { SettingsSaveBar } from \"@/components/settings/save-bar\";\n\n/**\n * Inner content area for the settings layout.\n * Renders HaikuAdvisorWarning, page content, and the sticky save bar.\n * Must be rendered inside DirtyFieldsProvider (mounted in SettingsShell).\n */\nexport function SettingsContent({ children }: { children: ReactNode }) {\n return (\n <div className=\"min-w-0 flex-1 space-y-6\">\n <HaikuAdvisorWarning />\n {children}\n <SettingsSaveBar />\n </div>\n );\n}\n"],"names":["useSaveConfig","queryClient","toast","setToast","showToast","type","message","setTimeout","interpret","res","successMessage","warnings","Object","values","errors","length","join","requiresRestart","saveField","key","value","patch","invalidateQueries","queryKey","e","Error","saveMultipleFields","updates","patchConfig","useProcessConfig","options","queryFn","get","enabled","staleTime","useAdvisor","retry"],"mappings":"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","ignoreList":[1,3]}
@@ -1,3 +1,3 @@
1
- module.exports=[27727,a=>{"use strict";var b=a.i(81673),c=a.i(48558);a.s(["EmptyState",0,function({icon:a,title:d,description:e,className:f,children:g}){return(0,b.jsxs)("div",{className:(0,c.cn)("flex flex-col items-center justify-center py-16 text-muted-foreground",f),children:[(0,b.jsx)(a,{className:"mb-3 h-10 w-10 opacity-40"}),(0,b.jsx)("p",{className:"text-sm font-medium",children:d}),e&&(0,b.jsx)("p",{className:"mt-1 max-w-prose text-xs text-muted-foreground/70",children:e}),g]})}])},91534,a=>{"use strict";var b=a.i(81673),c=a.i(76015),d=a.i(11307),e=a.i(92241),f=a.i(21218),g=a.i(8212),h=a.i(20090),i=a.i(48558);a.s(["DirectoryPickerField",0,function({id:a,value:j,onChange:k,title:l,placeholder:m="Choose a folder...",defaultPath:n,disabled:o=!1,className:p,inputClassName:q,buttonLabel:r="Choose"}){let[s,t]=(0,c.useState)(!1),[u,v]=(0,c.useState)(null),w=async()=>{t(!0),v(null);try{let a=await (0,h.pickDirectoryFromDesktop)({title:l,defaultPath:j.trim()||n});a&&k(a)}catch(a){v(a instanceof Error?a.message:"Folder picker is unavailable.")}finally{t(!1)}};return(0,b.jsxs)("div",{className:(0,i.cn)("space-y-1",p),children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row",children:[(0,b.jsx)(g.Input,{id:a,value:j,onChange:a=>{k(a.target.value),v(null)},placeholder:m,className:(0,i.cn)("font-mono text-sm",q),disabled:o||s}),(0,b.jsxs)(f.Button,{type:"button",variant:"outline",onClick:w,disabled:o||s,className:"shrink-0 gap-2",children:[s?(0,b.jsx)(e.Loader2,{className:"h-4 w-4 animate-spin"}):(0,b.jsx)(d.FolderOpen,{className:"h-4 w-4"}),s?"Opening...":r]})]}),u&&(0,b.jsx)("p",{className:"text-xs text-destructive",children:u})]})}])},86807,a=>{"use strict";var b=a.i(81673),c=a.i(48558);a.s(["ConnectionsSectionHeader",0,function({title:a,description:d,healthy:e,total:f,attention:g,actions:h}){let i=f>0&&e===f,j=f>0&&0===e;return(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsxs)("div",{className:"flex items-baseline justify-between gap-3",children:[(0,b.jsx)("h1",{className:"text-2xl font-semibold text-foreground",children:a}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[f>0&&(0,b.jsxs)("span",{className:(0,c.cn)("text-xs font-medium tabular-nums",i?"text-emerald-600 dark:text-emerald-400":j?"text-muted-foreground":"text-amber-600 dark:text-amber-400"),children:[e,"/",f," connected"]}),h]})]}),d&&(0,b.jsx)("p",{className:"max-w-3xl text-sm text-muted-foreground",children:d}),g&&(0,b.jsx)("p",{className:"text-xs text-amber-600 dark:text-amber-400",children:g})]})}])},95827,a=>{"use strict";var b=a.i(81673),c=a.i(7384),d=a.i(30400),e=a.i(48558);let f={connected:{variant:"green",label:"Connected"},configured:{variant:"amber",label:"Configured"},connecting:{variant:"amber",label:"Connecting…"},"needs-setup":{variant:"gray",label:"Not Configured"},error:{variant:"red",label:"Error"},disabled:{variant:"gray",label:"Disabled"}};a.s(["ConnectionCard",0,function({name:a,icon:g,status:h,error:i,metadata:j,children:k,className:l}){let m=f[h];return(0,b.jsxs)(d.Card,{tone:"connected"===h?"success":"error"===h?"error":"default",className:(0,e.cn)("relative",l),children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:g}),(0,b.jsx)("h3",{className:"text-sm font-medium text-foreground",children:a})]}),(0,b.jsx)(c.Badge,{variant:m.variant,children:m.label})]}),i&&"connecting"!==h&&(0,b.jsx)("p",{className:"mb-2 text-xs text-red-600 dark:text-red-400",children:i}),j&&j.length>0&&(0,b.jsx)("div",{className:"mb-3 space-y-0.5",children:j.map(a=>(0,b.jsxs)("div",{className:"flex items-center justify-between text-xs",children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:a.label}),(0,b.jsx)("span",{className:"text-foreground",children:a.value})]},a.label))}),k]})},"deriveConfiguredStatus",0,function(a){return a?"configured":"needs-setup"},"deriveIntegrationStatus",0,function(a){return a&&a.configured?a.error?"error":a.connected?"connected":"configured":"needs-setup"},"deriveMessagingStatus",0,function(a){return a&&"not_configured"!==a.runtimeState?"connecting"===a.runtimeState?"connecting":"error"===a.runtimeState?"error":"ok"===a.runtimeState?"connected":"configured":"needs-setup"},"messagingMetadata",0,function(a){if(a)return[{label:"Owner configured",value:a.ownerConfigured?"yes":"no"},{label:"Owner channel known",value:a.ownerChannelKnown?"yes":"no"},{label:"Reminder eligible",value:a.notificationEligible?"yes":"no"},{label:"Last inbound",value:a.lastInboundAt??"—"}]}])},7385,a=>{"use strict";let b=(0,a.i(5423).default)("CircleX",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);a.s(["XCircle",0,b],7385)},48033,a=>{"use strict";let b=(0,a.i(5423).default)("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);a.s(["Lock",0,b],48033)},95097,a=>{"use strict";var b=a.i(62588),c=a.i(59974);a.s(["useProcessConfig",0,function(a){return(0,b.useQuery)({queryKey:["process-config"],queryFn:()=>c.api.get("/process-config"),enabled:a?.enabled??!0,staleTime:6e4})}])},80196,a=>{"use strict";let b=(0,a.i(5423).default)("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);a.s(["Bot",0,b],80196)},33165,a=>{"use strict";var b=a.i(81673),c=a.i(76015),d=a.i(81130),e=a.i(80196),f=a.i(92241),g=a.i(7037),h=a.i(95024),i=a.i(7385),j=a.i(30400),k=a.i(21218),l=a.i(7384),m=a.i(29629),n=a.i(47696),o=a.i(59974),p=a.i(74794),q=a.i(95097),r=a.i(40091);a.s(["ProcessModelCard",0,function({processKey:a,title:s="AI Model",description:t}){let u=(0,d.useQueryClient)(),{data:v}=(0,p.useBackends)(),{data:w}=(0,q.useProcessConfig)(),[x,y]=(0,c.useState)(!1),[z,A]=(0,c.useState)(null),[B,C]=(0,c.useState)(null),[D,E]=(0,c.useState)(!1),[F,G]=(0,c.useState)(null),H=w?.configs.find(b=>b.processKey===a),I=new Map((v?.backends??[]).map(a=>[a.id,a])),J=(v?.backends??[]).filter(a=>a.enabled);if(!v||!w||!H)return null;let K=I.get(H.mainBackend),L=K?.models.find(a=>a.modelId===H.mainModel)?.label??(0,r.formatModelName)(H.mainModel),M=z?I.get(z):null,N=M?.models??[];async function O(){if(z&&B){E(!0),G(null);try{await o.api.put(`/process-config/${a}`,{mainBackend:z,mainModel:B,fallbackBackend:H.fallbackBackend,fallbackModel:H.fallbackModel,maxTurns:H.maxTurns,maxBudgetUsd:H.maxBudgetUsd}),await u.invalidateQueries({queryKey:["process-config"]}),G({type:"success",message:"Saved"}),y(!1)}catch(b){let a=b instanceof o.ApiError?b.body:null;G({type:"error",message:"string"==typeof a?.error?a.error:b instanceof Error?b.message:"Save failed"})}finally{E(!1)}}}return(0,b.jsxs)(j.Card,{children:[(0,b.jsxs)(j.CardHeader,{children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(e.Bot,{className:"h-4 w-4 text-muted-foreground"}),(0,b.jsx)(j.CardTitle,{className:"text-base",children:s}),"user"===H.updatedBy&&(0,b.jsx)(l.Badge,{variant:"blue",className:"text-xs",children:"Custom"})]}),!x&&(0,b.jsxs)(k.Button,{variant:"ghost",size:"sm",onClick:function(){A(H.mainBackend),C(H.mainModel),G(null),y(!0)},className:"h-8",children:[(0,b.jsx)(g.Pencil,{className:"h-3.5 w-3.5"}),"Edit"]})]}),!x&&(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-sm",children:[(0,b.jsx)(l.Badge,{variant:r.BACKEND_BADGE_VARIANTS[H.mainBackend],children:(0,r.getBackendLabel)(H.mainBackend)}),(0,b.jsx)("span",{className:"text-muted-foreground",children:L}),(0,b.jsx)(l.Badge,{variant:"high"===H.defaultTier?"purple":"medium"===H.defaultTier?"blue":"default",className:"text-xs",children:H.defaultTier})]}),t&&(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:t})]}),x&&(0,b.jsxs)("div",{className:"mt-1 space-y-3",children:[(0,b.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,b.jsxs)("div",{className:"space-y-1.5",children:[(0,b.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"Backend"}),(0,b.jsxs)(n.Select,{value:z??"",onValueChange:a=>(function(a){var b,c;let d,e=I.get(a);if(!e)return;A(a);let f=(b=e.models,c=H.defaultTier,(d=b.filter(a=>a.tier===c)).length>0?d:b);C(f[0]?.modelId??e.models[0]?.modelId??"")})(a),children:[(0,b.jsx)(n.SelectTrigger,{children:(0,b.jsx)(n.SelectValue,{})}),(0,b.jsx)(n.SelectContent,{children:J.map(a=>(0,b.jsx)(n.SelectItem,{value:a.id,children:(0,r.getBackendLabel)(a.id)},a.id))})]})]}),(0,b.jsxs)("div",{className:"space-y-1.5",children:[(0,b.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"Model"}),(0,b.jsxs)(n.Select,{value:B??"",onValueChange:a=>C(a),children:[(0,b.jsx)(n.SelectTrigger,{children:(0,b.jsx)(n.SelectValue,{})}),(0,b.jsx)(n.SelectContent,{children:N.map(a=>(0,b.jsx)(n.SelectItem,{value:a.modelId,children:a.label},a.modelId))})]})]})]}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsxs)(k.Button,{variant:"outline",size:"sm",onClick:function(){y(!1),A(null),C(null)},disabled:D,children:[(0,b.jsx)(i.XCircle,{className:"h-3.5 w-3.5"}),"Cancel"]}),(0,b.jsxs)(k.Button,{size:"sm",onClick:()=>{O()},disabled:D||!B,children:[D?(0,b.jsx)(f.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(h.Save,{className:"h-3.5 w-3.5"}),"Save"]})]})]}),F&&(0,b.jsx)(m.Alert,{variant:"success"===F.type?"success":"error",className:"mt-3",children:F.message})]})}])},57216,a=>{"use strict";var b=a.i(76015),c=a.i(59653),d=a.i(95819),e=a.i(47427),f=a.i(18867),g=a.i(80303),h=a.i(30419),i=a.i(73490),j=a.i(55277),k=a.i(81673),l="Collapsible",[m,n]=(0,d.createContextScope)(l),[o,p]=m(l),q=b.forwardRef((a,c)=>{let{__scopeCollapsible:d,open:f,defaultOpen:g,disabled:i,onOpenChange:m,...n}=a,[p,q]=(0,e.useControllableState)({prop:f,defaultProp:g??!1,onChange:m,caller:l});return(0,k.jsx)(o,{scope:d,disabled:i,contentId:(0,j.useId)(),open:p,onOpenToggle:b.useCallback(()=>q(a=>!a),[q]),children:(0,k.jsx)(h.Primitive.div,{"data-state":w(p),"data-disabled":i?"":void 0,...n,ref:c})})});q.displayName=l;var r="CollapsibleTrigger",s=b.forwardRef((a,b)=>{let{__scopeCollapsible:d,...e}=a,f=p(r,d);return(0,k.jsx)(h.Primitive.button,{type:"button","aria-controls":f.contentId,"aria-expanded":f.open||!1,"data-state":w(f.open),"data-disabled":f.disabled?"":void 0,disabled:f.disabled,...e,ref:b,onClick:(0,c.composeEventHandlers)(a.onClick,f.onOpenToggle)})});s.displayName=r;var t="CollapsibleContent",u=b.forwardRef((a,b)=>{let{forceMount:c,...d}=a,e=p(t,a.__scopeCollapsible);return(0,k.jsx)(i.Presence,{present:c||e.open,children:({present:a})=>(0,k.jsx)(v,{...d,ref:b,present:a})})});u.displayName=t;var v=b.forwardRef((a,c)=>{let{__scopeCollapsible:d,present:e,children:i,...j}=a,l=p(t,d),[m,n]=b.useState(e),o=b.useRef(null),q=(0,g.useComposedRefs)(c,o),r=b.useRef(0),s=r.current,u=b.useRef(0),v=u.current,x=l.open||m,y=b.useRef(x),z=b.useRef(void 0);return b.useEffect(()=>{let a=requestAnimationFrame(()=>y.current=!1);return()=>cancelAnimationFrame(a)},[]),(0,f.useLayoutEffect)(()=>{let a=o.current;if(a){z.current=z.current||{transitionDuration:a.style.transitionDuration,animationName:a.style.animationName},a.style.transitionDuration="0s",a.style.animationName="none";let b=a.getBoundingClientRect();r.current=b.height,u.current=b.width,y.current||(a.style.transitionDuration=z.current.transitionDuration,a.style.animationName=z.current.animationName),n(e)}},[l.open,e]),(0,k.jsx)(h.Primitive.div,{"data-state":w(l.open),"data-disabled":l.disabled?"":void 0,id:l.contentId,hidden:!x,...j,ref:q,style:{"--radix-collapsible-content-height":s?`${s}px`:void 0,"--radix-collapsible-content-width":v?`${v}px`:void 0,...a.style},children:x&&i})});function w(a){return a?"open":"closed"}a.s(["Collapsible",0,q,"CollapsibleContent",0,u,"CollapsibleTrigger",0,s],57216)},30400,a=>{"use strict";var b=a.i(81673),c=a.i(48558);let d=(0,a.i(42261).cva)("rounded-xl border p-5 shadow-[0_1px_3px_rgb(0_0_0/0.04)]",{variants:{tone:{default:"border-border bg-card",warning:"border-amber-200 bg-amber-50/50 dark:border-amber-900 dark:bg-amber-950/30",success:"border-emerald-200 bg-emerald-50/50 dark:border-emerald-900 dark:bg-emerald-950/30",error:"border-red-200 bg-red-50/50 dark:border-red-900 dark:bg-red-950/30"},interactive:{true:"transition-shadow duration-150 hover:shadow-[0_4px_6px_rgb(0_0_0/0.06)]",false:""}},defaultVariants:{tone:"default",interactive:!1}});a.s(["Card",0,function({className:a,tone:e,interactive:f,...g}){return(0,b.jsx)("div",{className:(0,c.cn)(d({tone:e,interactive:f}),a),...g})},"CardHeader",0,function({className:a,...d}){return(0,b.jsx)("div",{className:(0,c.cn)("mb-3 flex items-center justify-between",a),...d})},"CardStatLabel",0,function({className:a,...d}){return(0,b.jsx)("h3",{className:(0,c.cn)("text-sm font-medium text-muted-foreground",a),...d})},"CardTitle",0,function({className:a,...d}){return(0,b.jsx)("h3",{className:(0,c.cn)("text-lg font-semibold text-foreground",a),...d})},"CardValue",0,function({className:a,...d}){return(0,b.jsx)("div",{className:(0,c.cn)("text-3xl font-bold text-foreground",a),...d})}])},96336,a=>{"use strict";let b=(0,a.i(5423).default)("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);a.s(["Trash2",0,b],96336)},43179,a=>{"use strict";let b=(0,a.i(5423).default)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);a.s(["Plus",0,b],43179)},7037,a=>{"use strict";let b=(0,a.i(5423).default)("Pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);a.s(["Pencil",0,b],7037)},11307,a=>{"use strict";let b=(0,a.i(5423).default)("FolderOpen",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);a.s(["FolderOpen",0,b],11307)},20090,a=>{"use strict";var b=a.i(59974);async function c({title:a,defaultPath:d}){let e=await b.api.post("/system/pick-directory",{title:a,...d?{defaultPath:d}:{}});if("selected"===e.status&&e.path)return e.path;if("cancelled"===e.status)return null;throw Error(e.message??"Folder picker is unavailable.")}a.s(["pickDirectoryFromDesktop",0,c])},70297,a=>{"use strict";let b=(0,a.i(5423).default)("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);a.s(["RotateCcw",0,b],70297)},55140,a=>{"use strict";let b=(0,a.i(5423).default)("KeyRound",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);a.s(["KeyRound",0,b],55140)},50891,a=>{"use strict";let b=(0,a.i(5423).default)("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);a.s(["ShieldCheck",0,b],50891)},87759,a=>{"use strict";let b=(0,a.i(5423).default)("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);a.s(["Play",0,b],87759)},21283,a=>{"use strict";var b=a.i(62588),c=a.i(8753),d=a.i(81130),e=a.i(59974);let f=["repositories"],g=a=>[...f,a],h=a=>[...g(a),"triggers"],i=a=>[...g(a),"management"];function j(a){return!!(a.githubOwner&&a.githubRepo)}a.s(["observationSourcesForRepo",0,function(a){let b=[];if(a.localPath&&b.push(`git:${a.localPath}`),j(a)){let c=`${a.githubOwner}/${a.githubRepo}`;b.push(`github:notification:${c}`),b.push(`github:workflow:${c}`)}return b},"repositoryDisplayName",0,function(a){if(a.displayName)return a.displayName;if(j(a))return`${a.githubOwner}/${a.githubRepo}`;if(a.localPath){let b=a.localPath.replace(/[\\/]+$/g,"").split(/[\\/]+/).filter(Boolean);return b[b.length-1]??a.localPath}return a.slug},"repositoryHasGithub",0,j,"repositoryHasLocal",0,function(a){return!!a.localPath},"useCreateRepoTrigger",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({repositoryId:a,body:b})=>e.api.post(`/repositories/${encodeURIComponent(a)}/triggers`,b),onSuccess:(b,c)=>{a.invalidateQueries({queryKey:h(c.repositoryId)})}})},"useCreateRepository",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:a=>e.api.post("/repositories",a),onSuccess:()=>{a.invalidateQueries({queryKey:f})}})},"useDeleteRepoTrigger",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({repositoryId:a,triggerId:b})=>e.api.delete(`/repositories/${encodeURIComponent(a)}/triggers/${encodeURIComponent(b)}`),onSuccess:(b,c)=>{a.invalidateQueries({queryKey:h(c.repositoryId)})}})},"useDeleteRepository",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:a=>e.api.delete(`/repositories/${encodeURIComponent(a)}`),onSuccess:()=>{a.invalidateQueries({queryKey:f})}})},"useFireRepoTrigger",0,function(){return(0,c.useMutation)({mutationFn:({repositoryId:a,triggerId:b})=>e.api.post(`/repositories/${encodeURIComponent(a)}/triggers/${encodeURIComponent(b)}/run`,{})})},"useLinkGithub",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({id:a,owner:b,repo:c,account:d})=>e.api.post(`/repositories/${encodeURIComponent(a)}/link-github`,{owner:b,repo:c,account:d}),onSuccess:(b,c)=>{a.invalidateQueries({queryKey:f}),a.invalidateQueries({queryKey:g(c.id)})}})},"useLinkLocal",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({id:a,localPath:b})=>e.api.post(`/repositories/${encodeURIComponent(a)}/link-local`,{localPath:b}),onSuccess:(b,c)=>{a.invalidateQueries({queryKey:f}),a.invalidateQueries({queryKey:g(c.id)})}})},"useRefreshRepositoryArchitecture",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:a=>e.api.post(`/repositories/${encodeURIComponent(a)}/management/refresh-architecture`,{}),onSuccess:async(b,c)=>{try{await a.refetchQueries({queryKey:i(c)})}catch{}}})},"useRepositories",0,function(a){return(0,b.useQuery)({queryKey:a?[...f,a]:[...f],queryFn:()=>e.api.get("/repositories",function(a){if(!a)return;let b={};return void 0!==a.hasGithub&&(b.has_github=a.hasGithub?"1":"0"),void 0!==a.hasLocal&&(b.has_local=a.hasLocal?"1":"0"),void 0!==a.localOnly&&(b.local_only=a.localOnly?"1":"0"),a.account&&(b.account=a.account),Object.keys(b).length>0?b:void 0}(a)),staleTime:3e4})},"useRepositoryManagement",0,function(a){return(0,b.useQuery)({queryKey:a?i(a):[...f,"missing","management"],queryFn:()=>e.api.get(`/repositories/${encodeURIComponent(a)}/management`),enabled:!!a,staleTime:15e3,refetchInterval:a=>{let b=a.state.data;return!!b?.architectureRefresh&&3e3}})},"useRepositoryTriggers",0,function(a){return(0,b.useQuery)({queryKey:a?h(a):[...f,"missing","triggers"],queryFn:()=>e.api.get(`/repositories/${encodeURIComponent(a)}/triggers`),enabled:!!a,staleTime:15e3})},"useRunRepoManagementInit",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:a=>e.api.post(`/repositories/${encodeURIComponent(a)}/management/init`,{}),onSuccess:async(b,c)=>{try{await a.refetchQueries({queryKey:i(c)})}catch{}}})},"useRunRepoManagementScan",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:a=>e.api.post(`/repositories/${encodeURIComponent(a)}/management/scan`,{}),onSuccess:async(b,c)=>{try{await a.refetchQueries({queryKey:i(c)})}catch{}}})},"useSetRepositoryManagement",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({id:a,enabled:b})=>e.api.put(`/repositories/${encodeURIComponent(a)}/management`,{enabled:b}),onSuccess:(b,c)=>{a.invalidateQueries({queryKey:i(c.id)})}})},"useTestRepoTrigger",0,function(){return(0,c.useMutation)({mutationFn:({repositoryId:a,triggerId:b,eventType:c,payload:d})=>e.api.post(`/repositories/${encodeURIComponent(a)}/triggers/${encodeURIComponent(b)}/test`,{eventType:c,payload:d})})},"useUpdateRepoTrigger",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({repositoryId:a,triggerId:b,body:c})=>e.api.patch(`/repositories/${encodeURIComponent(a)}/triggers/${encodeURIComponent(b)}`,c),onSuccess:(b,c)=>{a.invalidateQueries({queryKey:h(c.repositoryId)})}})},"useUpdateRepository",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({id:a,body:b})=>e.api.patch(`/repositories/${encodeURIComponent(a)}`,b),onSuccess:(b,c)=>{a.invalidateQueries({queryKey:f}),a.invalidateQueries({queryKey:g(c.id)})}})}])}];
1
+ module.exports=[27727,a=>{"use strict";var b=a.i(81673),c=a.i(48558);a.s(["EmptyState",0,function({icon:a,title:d,description:e,className:f,children:g}){return(0,b.jsxs)("div",{className:(0,c.cn)("flex flex-col items-center justify-center py-16 text-muted-foreground",f),children:[(0,b.jsx)(a,{className:"mb-3 h-10 w-10 opacity-40"}),(0,b.jsx)("p",{className:"text-sm font-medium",children:d}),e&&(0,b.jsx)("p",{className:"mt-1 max-w-prose text-xs text-muted-foreground/70",children:e}),g]})}])},91534,a=>{"use strict";var b=a.i(81673),c=a.i(76015),d=a.i(11307),e=a.i(92241),f=a.i(21218),g=a.i(8212),h=a.i(20090),i=a.i(48558);a.s(["DirectoryPickerField",0,function({id:a,value:j,onChange:k,title:l,placeholder:m="Choose a folder...",defaultPath:n,disabled:o=!1,className:p,inputClassName:q,buttonLabel:r="Choose"}){let[s,t]=(0,c.useState)(!1),[u,v]=(0,c.useState)(null),w=async()=>{t(!0),v(null);try{let a=await (0,h.pickDirectoryFromDesktop)({title:l,defaultPath:j.trim()||n});a&&k(a)}catch(a){v(a instanceof Error?a.message:"Folder picker is unavailable.")}finally{t(!1)}};return(0,b.jsxs)("div",{className:(0,i.cn)("space-y-1",p),children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row",children:[(0,b.jsx)(g.Input,{id:a,value:j,onChange:a=>{k(a.target.value),v(null)},placeholder:m,className:(0,i.cn)("font-mono text-sm",q),disabled:o||s}),(0,b.jsxs)(f.Button,{type:"button",variant:"outline",onClick:w,disabled:o||s,className:"shrink-0 gap-2",children:[s?(0,b.jsx)(e.Loader2,{className:"h-4 w-4 animate-spin"}):(0,b.jsx)(d.FolderOpen,{className:"h-4 w-4"}),s?"Opening...":r]})]}),u&&(0,b.jsx)("p",{className:"text-xs text-destructive",children:u})]})}])},86807,a=>{"use strict";var b=a.i(81673),c=a.i(48558);a.s(["ConnectionsSectionHeader",0,function({title:a,description:d,healthy:e,total:f,attention:g,actions:h}){let i=f>0&&e===f,j=f>0&&0===e;return(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsxs)("div",{className:"flex items-baseline justify-between gap-3",children:[(0,b.jsx)("h1",{className:"text-2xl font-semibold text-foreground",children:a}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[f>0&&(0,b.jsxs)("span",{className:(0,c.cn)("text-xs font-medium tabular-nums",i?"text-emerald-600 dark:text-emerald-400":j?"text-muted-foreground":"text-amber-600 dark:text-amber-400"),children:[e,"/",f," connected"]}),h]})]}),d&&(0,b.jsx)("p",{className:"max-w-3xl text-sm text-muted-foreground",children:d}),g&&(0,b.jsx)("p",{className:"text-xs text-amber-600 dark:text-amber-400",children:g})]})}])},95827,a=>{"use strict";var b=a.i(81673),c=a.i(7384),d=a.i(30400),e=a.i(48558);let f={connected:{variant:"green",label:"Connected"},configured:{variant:"amber",label:"Configured"},connecting:{variant:"amber",label:"Connecting…"},"needs-setup":{variant:"gray",label:"Not Configured"},error:{variant:"red",label:"Error"},disabled:{variant:"gray",label:"Disabled"}};a.s(["ConnectionCard",0,function({name:a,icon:g,status:h,error:i,metadata:j,children:k,className:l}){let m=f[h];return(0,b.jsxs)(d.Card,{tone:"connected"===h?"success":"error"===h?"error":"default",className:(0,e.cn)("relative",l),children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:g}),(0,b.jsx)("h3",{className:"text-sm font-medium text-foreground",children:a})]}),(0,b.jsx)(c.Badge,{variant:m.variant,children:m.label})]}),i&&"connecting"!==h&&(0,b.jsx)("p",{className:"mb-2 text-xs text-red-600 dark:text-red-400",children:i}),j&&j.length>0&&(0,b.jsx)("div",{className:"mb-3 space-y-0.5",children:j.map(a=>(0,b.jsxs)("div",{className:"flex items-center justify-between text-xs",children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:a.label}),(0,b.jsx)("span",{className:"text-foreground",children:a.value})]},a.label))}),k]})},"deriveConfiguredStatus",0,function(a){return a?"configured":"needs-setup"},"deriveIntegrationStatus",0,function(a){return a&&a.configured?a.error?"error":a.connected?"connected":"configured":"needs-setup"},"deriveMessagingStatus",0,function(a){return a&&"not_configured"!==a.runtimeState?"connecting"===a.runtimeState?"connecting":"error"===a.runtimeState?"error":"ok"===a.runtimeState?"connected":"configured":"needs-setup"},"messagingMetadata",0,function(a){if(a)return[{label:"Owner configured",value:a.ownerConfigured?"yes":"no"},{label:"Owner channel known",value:a.ownerChannelKnown?"yes":"no"},{label:"Reminder eligible",value:a.notificationEligible?"yes":"no"},{label:"Last inbound",value:a.lastInboundAt??"—"}]}])},7385,a=>{"use strict";let b=(0,a.i(5423).default)("CircleX",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);a.s(["XCircle",0,b],7385)},48033,a=>{"use strict";let b=(0,a.i(5423).default)("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);a.s(["Lock",0,b],48033)},95097,a=>{"use strict";var b=a.i(62588),c=a.i(59974);a.s(["useProcessConfig",0,function(a){return(0,b.useQuery)({queryKey:["process-config"],queryFn:()=>c.api.get("/process-config"),enabled:a?.enabled??!0,staleTime:6e4})}])},80196,a=>{"use strict";let b=(0,a.i(5423).default)("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);a.s(["Bot",0,b],80196)},33165,a=>{"use strict";var b=a.i(81673),c=a.i(76015),d=a.i(81130),e=a.i(80196),f=a.i(92241),g=a.i(7037),h=a.i(95024),i=a.i(7385),j=a.i(30400),k=a.i(21218),l=a.i(7384),m=a.i(29629),n=a.i(47696),o=a.i(59974),p=a.i(74794),q=a.i(95097),r=a.i(40091);a.s(["ProcessModelCard",0,function({processKey:a,title:s="AI Model",description:t}){let u=(0,d.useQueryClient)(),{data:v}=(0,p.useBackends)(),{data:w}=(0,q.useProcessConfig)(),[x,y]=(0,c.useState)(!1),[z,A]=(0,c.useState)(null),[B,C]=(0,c.useState)(null),[D,E]=(0,c.useState)(!1),[F,G]=(0,c.useState)(null),H=w?.configs.find(b=>b.processKey===a),I=new Map((v?.backends??[]).map(a=>[a.id,a])),J=(v?.backends??[]).filter(a=>a.enabled);if(!v||!w||!H)return null;let K=I.get(H.mainBackend),L=K?.models.find(a=>a.modelId===H.mainModel)?.label??(0,r.formatModelName)(H.mainModel),M=z?I.get(z):null,N=M?.models??[];async function O(){if(z&&B){E(!0),G(null);try{await o.api.put(`/process-config/${a}`,{mainBackend:z,mainModel:B,fallbackBackend:H.fallbackBackend,fallbackModel:H.fallbackModel,maxTurns:H.maxTurns,maxBudgetUsd:H.maxBudgetUsd}),await u.invalidateQueries({queryKey:["process-config"]}),G({type:"success",message:"Saved"}),y(!1)}catch(b){let a=b instanceof o.ApiError?b.body:null;G({type:"error",message:"string"==typeof a?.error?a.error:b instanceof Error?b.message:"Save failed"})}finally{E(!1)}}}return(0,b.jsxs)(j.Card,{children:[(0,b.jsxs)(j.CardHeader,{children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(e.Bot,{className:"h-4 w-4 text-muted-foreground"}),(0,b.jsx)(j.CardTitle,{className:"text-base",children:s}),"user"===H.updatedBy&&(0,b.jsx)(l.Badge,{variant:"blue",className:"text-xs",children:"Custom"})]}),!x&&(0,b.jsxs)(k.Button,{variant:"ghost",size:"sm",onClick:function(){A(H.mainBackend),C(H.mainModel),G(null),y(!0)},className:"h-8",children:[(0,b.jsx)(g.Pencil,{className:"h-3.5 w-3.5"}),"Edit"]})]}),!x&&(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-sm",children:[(0,b.jsx)(l.Badge,{variant:r.BACKEND_BADGE_VARIANTS[H.mainBackend],children:(0,r.getBackendLabel)(H.mainBackend)}),(0,b.jsx)("span",{className:"text-muted-foreground",children:L}),(0,b.jsx)(l.Badge,{variant:"high"===H.defaultTier?"purple":"medium"===H.defaultTier?"blue":"default",className:"text-xs",children:H.defaultTier})]}),t&&(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:t})]}),x&&(0,b.jsxs)("div",{className:"mt-1 space-y-3",children:[(0,b.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,b.jsxs)("div",{className:"space-y-1.5",children:[(0,b.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"Backend"}),(0,b.jsxs)(n.Select,{value:z??"",onValueChange:a=>(function(a){var b,c;let d,e=I.get(a);if(!e)return;A(a);let f=(b=e.models,c=H.defaultTier,(d=b.filter(a=>a.tier===c)).length>0?d:b);C(f[0]?.modelId??e.models[0]?.modelId??"")})(a),children:[(0,b.jsx)(n.SelectTrigger,{children:(0,b.jsx)(n.SelectValue,{})}),(0,b.jsx)(n.SelectContent,{children:J.map(a=>(0,b.jsx)(n.SelectItem,{value:a.id,children:(0,r.getBackendLabel)(a.id)},a.id))})]})]}),(0,b.jsxs)("div",{className:"space-y-1.5",children:[(0,b.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"Model"}),(0,b.jsxs)(n.Select,{value:B??"",onValueChange:a=>C(a),children:[(0,b.jsx)(n.SelectTrigger,{children:(0,b.jsx)(n.SelectValue,{})}),(0,b.jsx)(n.SelectContent,{children:N.map(a=>(0,b.jsx)(n.SelectItem,{value:a.modelId,children:a.label},a.modelId))})]})]})]}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsxs)(k.Button,{variant:"outline",size:"sm",onClick:function(){y(!1),A(null),C(null)},disabled:D,children:[(0,b.jsx)(i.XCircle,{className:"h-3.5 w-3.5"}),"Cancel"]}),(0,b.jsxs)(k.Button,{size:"sm",onClick:()=>{O()},disabled:D||!B,children:[D?(0,b.jsx)(f.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(h.Save,{className:"h-3.5 w-3.5"}),"Save"]})]})]}),F&&(0,b.jsx)(m.Alert,{variant:"success"===F.type?"success":"error",className:"mt-3",children:F.message})]})}])},57216,a=>{"use strict";var b=a.i(76015),c=a.i(59653),d=a.i(95819),e=a.i(47427),f=a.i(18867),g=a.i(80303),h=a.i(30419),i=a.i(73490),j=a.i(55277),k=a.i(81673),l="Collapsible",[m,n]=(0,d.createContextScope)(l),[o,p]=m(l),q=b.forwardRef((a,c)=>{let{__scopeCollapsible:d,open:f,defaultOpen:g,disabled:i,onOpenChange:m,...n}=a,[p,q]=(0,e.useControllableState)({prop:f,defaultProp:g??!1,onChange:m,caller:l});return(0,k.jsx)(o,{scope:d,disabled:i,contentId:(0,j.useId)(),open:p,onOpenToggle:b.useCallback(()=>q(a=>!a),[q]),children:(0,k.jsx)(h.Primitive.div,{"data-state":w(p),"data-disabled":i?"":void 0,...n,ref:c})})});q.displayName=l;var r="CollapsibleTrigger",s=b.forwardRef((a,b)=>{let{__scopeCollapsible:d,...e}=a,f=p(r,d);return(0,k.jsx)(h.Primitive.button,{type:"button","aria-controls":f.contentId,"aria-expanded":f.open||!1,"data-state":w(f.open),"data-disabled":f.disabled?"":void 0,disabled:f.disabled,...e,ref:b,onClick:(0,c.composeEventHandlers)(a.onClick,f.onOpenToggle)})});s.displayName=r;var t="CollapsibleContent",u=b.forwardRef((a,b)=>{let{forceMount:c,...d}=a,e=p(t,a.__scopeCollapsible);return(0,k.jsx)(i.Presence,{present:c||e.open,children:({present:a})=>(0,k.jsx)(v,{...d,ref:b,present:a})})});u.displayName=t;var v=b.forwardRef((a,c)=>{let{__scopeCollapsible:d,present:e,children:i,...j}=a,l=p(t,d),[m,n]=b.useState(e),o=b.useRef(null),q=(0,g.useComposedRefs)(c,o),r=b.useRef(0),s=r.current,u=b.useRef(0),v=u.current,x=l.open||m,y=b.useRef(x),z=b.useRef(void 0);return b.useEffect(()=>{let a=requestAnimationFrame(()=>y.current=!1);return()=>cancelAnimationFrame(a)},[]),(0,f.useLayoutEffect)(()=>{let a=o.current;if(a){z.current=z.current||{transitionDuration:a.style.transitionDuration,animationName:a.style.animationName},a.style.transitionDuration="0s",a.style.animationName="none";let b=a.getBoundingClientRect();r.current=b.height,u.current=b.width,y.current||(a.style.transitionDuration=z.current.transitionDuration,a.style.animationName=z.current.animationName),n(e)}},[l.open,e]),(0,k.jsx)(h.Primitive.div,{"data-state":w(l.open),"data-disabled":l.disabled?"":void 0,id:l.contentId,hidden:!x,...j,ref:q,style:{"--radix-collapsible-content-height":s?`${s}px`:void 0,"--radix-collapsible-content-width":v?`${v}px`:void 0,...a.style},children:x&&i})});function w(a){return a?"open":"closed"}a.s(["Collapsible",0,q,"CollapsibleContent",0,u,"CollapsibleTrigger",0,s],57216)},30400,a=>{"use strict";var b=a.i(81673),c=a.i(48558);let d=(0,a.i(42261).cva)("rounded-xl border p-5 shadow-[0_1px_3px_rgb(0_0_0/0.04)]",{variants:{tone:{default:"border-border bg-card",warning:"border-amber-200 bg-amber-50/50 dark:border-amber-900 dark:bg-amber-950/30",success:"border-emerald-200 bg-emerald-50/50 dark:border-emerald-900 dark:bg-emerald-950/30",error:"border-red-200 bg-red-50/50 dark:border-red-900 dark:bg-red-950/30"},interactive:{true:"transition-shadow duration-150 hover:shadow-[0_4px_6px_rgb(0_0_0/0.06)]",false:""}},defaultVariants:{tone:"default",interactive:!1}});a.s(["Card",0,function({className:a,tone:e,interactive:f,...g}){return(0,b.jsx)("div",{className:(0,c.cn)(d({tone:e,interactive:f}),a),...g})},"CardHeader",0,function({className:a,...d}){return(0,b.jsx)("div",{className:(0,c.cn)("mb-3 flex items-center justify-between",a),...d})},"CardStatLabel",0,function({className:a,...d}){return(0,b.jsx)("h3",{className:(0,c.cn)("text-sm font-medium text-muted-foreground",a),...d})},"CardTitle",0,function({className:a,...d}){return(0,b.jsx)("h3",{className:(0,c.cn)("text-lg font-semibold text-foreground",a),...d})},"CardValue",0,function({className:a,...d}){return(0,b.jsx)("div",{className:(0,c.cn)("text-3xl font-bold text-foreground",a),...d})}])},96336,a=>{"use strict";let b=(0,a.i(5423).default)("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);a.s(["Trash2",0,b],96336)},43179,a=>{"use strict";let b=(0,a.i(5423).default)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);a.s(["Plus",0,b],43179)},7037,a=>{"use strict";let b=(0,a.i(5423).default)("Pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);a.s(["Pencil",0,b],7037)},11307,a=>{"use strict";let b=(0,a.i(5423).default)("FolderOpen",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);a.s(["FolderOpen",0,b],11307)},20090,a=>{"use strict";var b=a.i(59974);async function c({title:a,defaultPath:d}){let e=await b.api.post("/system/pick-directory",{title:a,...d?{defaultPath:d}:{}});if("selected"===e.status&&e.path)return e.path;if("cancelled"===e.status)return null;throw Error(e.message??"Folder picker is unavailable.")}a.s(["pickDirectoryFromDesktop",0,c])},70297,a=>{"use strict";let b=(0,a.i(5423).default)("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);a.s(["RotateCcw",0,b],70297)},50891,a=>{"use strict";let b=(0,a.i(5423).default)("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);a.s(["ShieldCheck",0,b],50891)},55140,a=>{"use strict";let b=(0,a.i(5423).default)("KeyRound",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);a.s(["KeyRound",0,b],55140)},87759,a=>{"use strict";let b=(0,a.i(5423).default)("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);a.s(["Play",0,b],87759)},21283,a=>{"use strict";var b=a.i(62588),c=a.i(8753),d=a.i(81130),e=a.i(59974);let f=["repositories"],g=a=>[...f,a],h=a=>[...g(a),"triggers"],i=a=>[...g(a),"management"];function j(a){return!!(a.githubOwner&&a.githubRepo)}a.s(["observationSourcesForRepo",0,function(a){let b=[];if(a.localPath&&b.push(`git:${a.localPath}`),j(a)){let c=`${a.githubOwner}/${a.githubRepo}`;b.push(`github:notification:${c}`),b.push(`github:workflow:${c}`)}return b},"repositoryDisplayName",0,function(a){if(a.displayName)return a.displayName;if(j(a))return`${a.githubOwner}/${a.githubRepo}`;if(a.localPath){let b=a.localPath.replace(/[\\/]+$/g,"").split(/[\\/]+/).filter(Boolean);return b[b.length-1]??a.localPath}return a.slug},"repositoryHasGithub",0,j,"repositoryHasLocal",0,function(a){return!!a.localPath},"useCreateRepoTrigger",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({repositoryId:a,body:b})=>e.api.post(`/repositories/${encodeURIComponent(a)}/triggers`,b),onSuccess:(b,c)=>{a.invalidateQueries({queryKey:h(c.repositoryId)})}})},"useCreateRepository",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:a=>e.api.post("/repositories",a),onSuccess:()=>{a.invalidateQueries({queryKey:f})}})},"useDeleteRepoTrigger",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({repositoryId:a,triggerId:b})=>e.api.delete(`/repositories/${encodeURIComponent(a)}/triggers/${encodeURIComponent(b)}`),onSuccess:(b,c)=>{a.invalidateQueries({queryKey:h(c.repositoryId)})}})},"useDeleteRepository",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:a=>e.api.delete(`/repositories/${encodeURIComponent(a)}`),onSuccess:()=>{a.invalidateQueries({queryKey:f})}})},"useFireRepoTrigger",0,function(){return(0,c.useMutation)({mutationFn:({repositoryId:a,triggerId:b})=>e.api.post(`/repositories/${encodeURIComponent(a)}/triggers/${encodeURIComponent(b)}/run`,{})})},"useLinkGithub",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({id:a,owner:b,repo:c,account:d})=>e.api.post(`/repositories/${encodeURIComponent(a)}/link-github`,{owner:b,repo:c,account:d}),onSuccess:(b,c)=>{a.invalidateQueries({queryKey:f}),a.invalidateQueries({queryKey:g(c.id)})}})},"useLinkLocal",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({id:a,localPath:b})=>e.api.post(`/repositories/${encodeURIComponent(a)}/link-local`,{localPath:b}),onSuccess:(b,c)=>{a.invalidateQueries({queryKey:f}),a.invalidateQueries({queryKey:g(c.id)})}})},"useRefreshRepositoryArchitecture",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:a=>e.api.post(`/repositories/${encodeURIComponent(a)}/management/refresh-architecture`,{}),onSuccess:async(b,c)=>{try{await a.refetchQueries({queryKey:i(c)})}catch{}}})},"useRepositories",0,function(a){return(0,b.useQuery)({queryKey:a?[...f,a]:[...f],queryFn:()=>e.api.get("/repositories",function(a){if(!a)return;let b={};return void 0!==a.hasGithub&&(b.has_github=a.hasGithub?"1":"0"),void 0!==a.hasLocal&&(b.has_local=a.hasLocal?"1":"0"),void 0!==a.localOnly&&(b.local_only=a.localOnly?"1":"0"),a.account&&(b.account=a.account),Object.keys(b).length>0?b:void 0}(a)),staleTime:3e4})},"useRepositoryManagement",0,function(a){return(0,b.useQuery)({queryKey:a?i(a):[...f,"missing","management"],queryFn:()=>e.api.get(`/repositories/${encodeURIComponent(a)}/management`),enabled:!!a,staleTime:15e3,refetchInterval:a=>{let b=a.state.data;return!!b?.architectureRefresh&&3e3}})},"useRepositoryTriggers",0,function(a){return(0,b.useQuery)({queryKey:a?h(a):[...f,"missing","triggers"],queryFn:()=>e.api.get(`/repositories/${encodeURIComponent(a)}/triggers`),enabled:!!a,staleTime:15e3})},"useRunRepoManagementInit",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:a=>e.api.post(`/repositories/${encodeURIComponent(a)}/management/init`,{}),onSuccess:async(b,c)=>{try{await a.refetchQueries({queryKey:i(c)})}catch{}}})},"useRunRepoManagementScan",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:a=>e.api.post(`/repositories/${encodeURIComponent(a)}/management/scan`,{}),onSuccess:async(b,c)=>{try{await a.refetchQueries({queryKey:i(c)})}catch{}}})},"useSetRepositoryManagement",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({id:a,enabled:b})=>e.api.put(`/repositories/${encodeURIComponent(a)}/management`,{enabled:b}),onSuccess:(b,c)=>{a.invalidateQueries({queryKey:i(c.id)})}})},"useTestRepoTrigger",0,function(){return(0,c.useMutation)({mutationFn:({repositoryId:a,triggerId:b,eventType:c,payload:d})=>e.api.post(`/repositories/${encodeURIComponent(a)}/triggers/${encodeURIComponent(b)}/test`,{eventType:c,payload:d})})},"useUpdateRepoTrigger",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({repositoryId:a,triggerId:b,body:c})=>e.api.patch(`/repositories/${encodeURIComponent(a)}/triggers/${encodeURIComponent(b)}`,c),onSuccess:(b,c)=>{a.invalidateQueries({queryKey:h(c.repositoryId)})}})},"useUpdateRepository",0,function(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({id:a,body:b})=>e.api.patch(`/repositories/${encodeURIComponent(a)}`,b),onSuccess:(b,c)=>{a.invalidateQueries({queryKey:f}),a.invalidateQueries({queryKey:g(c.id)})}})}])}];
2
2
 
3
- //# sourceMappingURL=_01aim8_._.js.map
3
+ //# sourceMappingURL=_0z1gdb3._.js.map